统计分析平台测试数据准备实践

达芬奇密码2018-07-25 11:03


这次的任务是测试监控平台的统计分析功能。

平台特点: 数据量大,数据存储采用了大数据技术(druid和Hbase),统计分析的纬度多
之前的方法:从线上随机拉取一些数据到测试环境,直接验证功能
优点:省时省力,数据相对真实
缺点:没法判断统计结果是否正确。
如发现有疑问的点,很难定位问题。

数据准备的思路

  1. 根据功能需求,列出测试点
  2. 根据测试点的要求,准备测试数据和预期结果
  3. 批量导入数据。
  4. 验证结果

    其实上面的思路与传统功能测试无异,同样是构建系统的输入和输出,判断他是否符合预期。第一步列测试点,这里就不详述了,下面主要介绍下数据相关的部分。

下图是以http错误统计为例,由于需求中图表会显示Top5的错误率,所以准备了6个域名及域名下不同的url。每个url对应不同的ip地址。最后的数据表示显示几条数据。


之后,把设计好的数据按固定格式写入csv文件,再用java代码实现读取文件内容,并按接口要求插入数据

        String dirPath = ApmMockTestData.class.getResource("/").getPath();
        String file = dirPath + "/mock_request.csv";
        CSVFile csvFile = new CSVFile(file);
        String line = null;
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json");
        headers.put("X-MAM-ProductKey", appId);

        long time = System.currentTimeMillis();

        //第一行为标题,可忽略
        line = csvFile.readLine();
        JSONArray jsonArray = new JSONArray();
        while ((line = csvFile.readLine()) != null) {
            String[] cells = line.split(",");
            if (cells == null || cells.length == 0 || cells[0] == null || cells[0].equals("")) {
                continue;
            }
            long requestStartTime = time - Integer.valueOf(cells[2]) * MINUTE;
            long requestEndTime = requestStartTime + Integer.valueOf(cells[3]);

            JSONObject jsonObject = new JSONObject();
            List<String> ips = new ArrayList<String>();
            ips.add(cells[1]);
            jsonObject.put("a", cells[0]); //url
            jsonObject.put("b", ips); //ip         
        }
        if (jsonArray.size() != 0) {
            HttpEngine.doPost(collectorServer, jsonArray.toJSONString(), headers);
        }

数据插入后,可以直接在平台上通过查看,判断统计结果是否与预期一致。

自己设计数据
优点:有针对性的数据能快速验证功能。 发现问题能准确定位
缺点:设计和准备数据耗时较多,且存在边界条件覆盖不全面问题。

后续待改进的点是数据插入后的验证部分,可直接采用代码实现自动验证。


本文来自网易实践者社区,经作者施红授权发布。