本人在做接口测试中,遇到一个活儿,将一批图片上传到服务器,12000+,在一个文件夹中不同的文件夹里面,由于上传文件过多,只能写脚本批量上传。也算是自动化的一部分吧,经过测试和改良,终于完成,期间由于种种原因失败60+次,做了第二次上传,分享代码,供大家参考。
思路是先把文件的绝对地址拿出来,第一想核对一下文件数量,第二为了确定文件上传顺序,方便断点续传。
下面是获取文件路径的方法:
1List<String> list = new ArrayList<>();
2 int aaa = 0;
3 File file = new File("/Users/Vicky/Desktop/aaa");
4 output(file.getAbsolutePath());
5 File[] files = file.listFiles();
6 int length = files.length;
7 for (int i = 0; i < length; i++) {
8 if (files[i].isDirectory()) {
9 File[] file1 = files[i].listFiles();
10 output(file1.length);
11 output(file1[0].getAbsolutePath());
12 for (int j = 0; j < file1.length; j++) {
13 String name = file1[j].getAbsolutePath();
14// output(name);
15 if (!name.contains("DS_Store")) {
16 list.add(name);
17 aaa++;
18 }
19 }
20// aaa++;
21 }
22// output(files.length);
23 }
24 output(aaa, list.size());
25 Concurrent.saveRequestTimes(list);
下面是保存路径文件的方法:
1/**
2 * 获取文件夹下所有文件的绝对路径的方法
3 *
4 * @param path
5 * @return
6 */
7 public static List<String> getAllFile(String path) {
8 List<String> list = new ArrayList<>();
9 File file = new File(path);
10 File[] files = file.listFiles();
11 int length = files.length;
12 for (int i = 0; i < length; i++) {
13 File file1 = files[i];
14 if (file1.isDirectory()) {
15 List<String> allFile = getAllFile(file1.getAbsolutePath());
16 list.addAll(allFile);
17 continue;
18 }
19 String path1 = file1.getAbsolutePath();
20 if (path1.contains("/.")) continue;
21 list.add(path1);
22 }
23 return list;
24 }
下面是执行请求的方法:
1Admin admin = new Admin();
2 List<String> list = readTxtFileByLine("/Users/Vicky/Documents/workspace/fission/log/test.log");
3 List<Integer> list1 = new ArrayList<>();
4 int size = list.size();
5 output(size);
6 try {
7 for (int i = 0; i < size; i++) {
8 String pic = list.get(i);
9 admin.update(pic);
10 list1.add(i);
11 output(i + pic);
12 }
13 } catch (Exception e) {
14 output("", e);
15// } finally {
16// logLog(list1.toString());
17 }
18// admin.update();
19 testOver();
其中updata方法就不写了,只是一个普通的上传文件的post请求而已。
其中读取文件并返回list集合的方法如下:
1/**
2 * 分行读取txt文档,默认使用utf-8编码格式
3 *
4 * @param filePath 文件路径
5 * @return 返回list数组
6 */
7 public static List<String> readTxtFileByLine(String filePath) {
8 List<String> lines = new ArrayList<>();
9 try {
10 String encoding = "utf-8";
11 File file = new File(filePath);
12 if (file.isFile() && file.exists()) { // 判断文件是否存在
13 FileInputStream fileInputStream = new FileInputStream(file);
14 InputStreamReader read = new InputStreamReader(fileInputStream, encoding);// 考虑到编码格式
15 BufferedReader bufferedReader = new BufferedReader(read);
16 String line = null;
17 while ((line = bufferedReader.readLine()) != null) {
18 lines.add(line);
19 }
20 bufferedReader.close();
21 read.close();
22 fileInputStream.close();
23 } else {
24 output("找不到指定的文件");
25 }
26 } catch (Exception e) {
27 output("读取文件内容出错");
28 e.printStackTrace();
29 }
30 return lines;
31 }
记录上传失败时的方法在output方法中已经写好了,是记录日志的方法,这里就不写了,在统计失败数据的时候可以用请求响应大小来区分失败和成功,以及失败类型,这都是框架的基本功能,这里先不写了,毕竟内容比较多。