FunTester 接口批量上传文件的实例

FunTester · 2020年03月31日 · 777 次阅读

本人在做接口测试中,遇到一个活儿,将一批图片上传到服务器,12000+,在一个文件夹中不同的文件夹里面,由于上传文件过多,只能写脚本批量上传。也算是自动化的一部分吧,经过测试和改良,终于完成,期间由于种种原因失败 60+ 次,做了第二次上传,分享代码,供大家参考。

思路是先把文件的绝对地址拿出来,第一想核对一下文件数量,第二为了确定文件上传顺序,方便断点续传。

下面是获取文件路径的方法:

List<String> list = new ArrayList<>();
        int aaa = 0;
        File file = new File("/Users/Vicky/Desktop/aaa");
        output(file.getAbsolutePath());
        File[] files = file.listFiles();
        int length = files.length;
        for (int i = 0; i < length; i++) {
            if (files[i].isDirectory()) {
                File[] file1 = files[i].listFiles();
                output(file1.length);
                output(file1[0].getAbsolutePath());
                for (int j = 0; j < file1.length; j++) {
                    String name = file1[j].getAbsolutePath();
//                  output(name);
                    if (!name.contains("DS_Store")) {
                        list.add(name);
                        aaa++;
                    }
                }
//          aaa++;
            }
//      output(files.length);
        }
        output(aaa, list.size());
        Concurrent.saveRequestTimes(list);

下面是保存路径文件的方法:

/**
     * 获取文件夹下所有文件的绝对路径的方法
     *
     * @param path
     * @return
     */
    public static List<String> getAllFile(String path) {
        List<String> list = new ArrayList<>();
        File file = new File(path);
        File[] files = file.listFiles();
        int length = files.length;
        for (int i = 0; i < length; i++) {
            File file1 = files[i];
            if (file1.isDirectory()) {
                List<String> allFile = getAllFile(file1.getAbsolutePath());
                list.addAll(allFile);
                continue;
            }
            String path1 = file1.getAbsolutePath();
            if (path1.contains("/.")) continue;
            list.add(path1);
        }
        return list;
    }

下面是执行请求的方法:

Admin admin = new Admin();
        List<String> list = readTxtFileByLine("/Users/Vicky/Documents/workspace/fission/log/test.log");
        List<Integer> list1 = new ArrayList<>();
        int size = list.size();
        output(size);
        try {
            for (int i = 0; i < size; i++) {
                String pic = list.get(i);
                admin.update(pic);
                list1.add(i);
                output(i + pic);
            }
        } catch (Exception e) {
            output("", e);
//      } finally {
//          logLog(list1.toString());
        }
//      admin.update();
        testOver();

其中 updata 方法就不写了,只是一个普通的上传文件的 post 请求而已。

其中读取文件并返回 list 集合的方法如下:

/**
     * 分行读取txt文档,默认使用utf-8编码格式
     *
     * @param filePath 文件路径
     * @return 返回list数组
     */
    public static List<String> readTxtFileByLine(String filePath) {
        List<String> lines = new ArrayList<>();
        try {
            String encoding = "utf-8";
            File file = new File(filePath);
            if (file.isFile() && file.exists()) { // 判断文件是否存在
                FileInputStream fileInputStream = new FileInputStream(file);
                InputStreamReader read = new InputStreamReader(fileInputStream, encoding);// 考虑到编码格式
                BufferedReader bufferedReader = new BufferedReader(read);
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    lines.add(line);
                }
                bufferedReader.close();
                read.close();
                fileInputStream.close();
            } else {
                output("找不到指定的文件");
            }
        } catch (Exception e) {
            output("读取文件内容出错");
            e.printStackTrace();
        }
        return lines;
    }

记录上传失败时的方法在 output 方法中已经写好了,是记录日志的方法,这里就不写了,在统计失败数据的时候可以用请求响应大小来区分失败和成功,以及失败类型,这都是框架的基本功能,这里先不写了,毕竟内容比较多。有兴趣的可以加群交流。

技术类文章精选

非技术文章精选

大咖风采

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册