接口测试 Jmeter 源码改造入门

onesbyones · 2020年06月09日 · 最后由 菜鸡真可怜1 回复于 2020年06月15日 · 2408 次阅读

缘由

场景:在测试公司智能家居的 TCP 接口过程中发现有些 TCP 响应 body 返回的是多个不连续的 json 串,JSON 提取器使用 jsonpath 提取参数的时候默认选择了第一个 json 串,导致不能正确的提取到变量。所以尝试通过改造 JSON 提取器组件,根据关键字的方式过滤出目标 json 串再做变量提取。

响应 body 使用换行符分割,下方是多个不连续的 json 串:

{"":"","A":""}
{"":"","B":""}
{"":"","C":""}

工具准备

  1. Eclipse
  2. Apache Ant
  3. Jmeter 源码包
  4. JDK1.8

环境搭建

先配置好 Ant、jdk 环境变量

  1. 打开 Eclipse 创建一个 Java 工程

  2. 右键 Java 工程,选择import-general-file system,选中下载的 jmeter 源码文件夹导入到 Java 工程中

  3. 然后根据报错一个个解决,参考:https://jmeter.apache.org/building.html

  4. 在 Java 工程下使用命令 ant 重新构建 jmeter。如果成功则提示 build successful,失败则提示 build failed

改造方法

1.先找到 JSON 提取器的 Java 源文件

2.找到对应的处理方法

3.使用 ant 构建

变量提取写法

第一种:使用 Beanshell 断言组件

import com.alibaba.fastjson.*;


String responseStr = prev.getResponseDataAsString();
log.info("获取到的responseStr: " + responseStr);

String[] strArray = responseStr.split("\\n");

for (String str : strArray) {
    JSONObject responseJsonObject = JSONObject.parseObject(str);
    JSONObject contentJsonObject = responseJsonObject.getJSONObject("content");
    String contentStr = contentJsonObject.getString("method");
    if(contentStr.equalsIgnoreCase("这里输入关键字")){
        String msg = contentJsonObject.getString("msg");
        int code = contentJsonObject.getIntValue("code");
        JSONObject resultJsonObject = contentJsonObject.getJSONObject("result");
        vars.put("router_id", resultJsonObject.getString("router_id"));
        if( !msg.equalsIgnoreCase("OK") || !(code == 0) ){
            Failure = true; 
            FailureMessage = "msg的值不是O K或者 code的值不是0";
        }else{
            FailureMessage = "msg、code都是期望值";
            return ;
        }
    }
}

Failure = true; 
FailureMessage = "没有找到包含 关键字的json串";

第二种:使用改造的方式提取变量

多个变量提取

  1. 在 JSON 提取器组件的引用变量中输入: var1,key;var2;var3

var1var2var3表示引用变量名称,变量之间使用英文分号分割

key表示关键字,使用该关键字来提取目标 json 串,使用英文逗号追加在变量后边

  1. 在 JSON 提取器组件的默认值输入框中输入:a;b;c

多个变量提取时默认值个数与变量个数必须一致(Jmeter 原有逻辑)

单个变量提取

  1. 在 JSON 提取器组件的引用变量中输入:var1,key

  2. 默认值输入框可填可不填

备注:原则上说一个 key 就足够过滤出目标 json 串来提取引用变量,所以没必要使用多个 key 的方式

结果验证

注意事项

  1. ant 构建之前,先设置好工程的编码格式(UTF-8),否则重新构建的 jmeter 面板、组件都会乱码

  2. 切勿使用 ant clean install 会把依赖的插件清除掉

共收到 2 条回复 时间 点赞

《jmeter 性能测试入门手册》公开分享,感兴趣的只需要加 QQ 群 956186148(不需要审核),即可在群文件里面自由下载。文档不收费,不需要加好友获取,无附加条件,下载完成自由退群!!

onesbyones 关闭了讨论 02月05日 08:41
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册