jmeter-jenkins自动化测试操作指南
Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置、本地配置和运行、服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以解决自动化测试上手难的痛点。同时利用上测试组的性能脚本,提高编写效率。
一、准备自动化测试物料
1、开发运行工具Jmeter,(下载地址:https://jmeter.apache.org/)
2、开发环境为已发布ready;
3、测试脚本已准备ready;
4、脚本运行环境已准备;
二、自动化测试通过标准
1、成功Status 返回200 ;
2、失败返回404、500等;
3、每个脚本专用断言;
三、自动化脚本存储
1、脚本全部存储在svn中,项目根目录新建文件夹,前面文件夹名和项目名保持一致,后缀加“jmeter-api-project”。 2、文件目录 data、result、script分别存放数据、测试结果、测试脚本。
四、自动化测试Script Rules
1、脚本命名为接口名
2、存储类型为后缀jmx的文件
3、线程数设置为1(冒烟测试无需多线程并发)
4、必须包含断言判断,状态检测设定为200
五、自动化测试Script Steps
1、添加线程组,脚本命名为接口名,点击存储 为后缀jmx的文件
2、将线程数设置为1,其他设置为默认
3、循环次数为不循环,调度器不设置,其他参数不设置
4、配置http协议选项:
-
a、添加http请求,线程组右键“添加”,选择 “Sampler”,再选择“HTTP请求”:
-
b、请求为post or get(如下图,此处根据实际情况设置为POST)
-
c、Request报文:填入Body Data(如下图,此处根据实际情况设置Request报文内容)
5、配置断言选项,线程组右键“添加”,选择“断言”,此处选择“响应断言”。注意可以根据实际情况选择其他断言类型:
-
a、添加响应断言,如下图所示;
-
b、选择响应字段为响应代码;
-
c、匹配规则选择;
-
d、测试模式填入200,如下图(此处为开发自定义返回码,请根据实际情况设置);
6、添加“HTTP信息头管理器” ,在测试计划点击右键“添加”菜单,选择“配置元件”,再选择“HTTP信息头管理器” (即为HTTP Header Manager),如下图:
可根据实际情况添加Content-Type等内容,例如此处value设置为:application/json,如下图范例:
7、添加“查看结果树”,在测试计划点击右键“添加”菜单,选择“监听器”,再选择“查看结果树”:
运行成功或失败,分别可以查看结果树详情,如下图所示,查看响应数据,可以看到response报文:
下图是一个运行失败结果的断言,断言失败的信息也会有详细说明:
8、添加"用表格查看结果",在测试计划点击右键“添加”菜单,选择“监听器”,选择“用表格查看结果”:
添加后每次测试计划运行结束,可以查看全部线程组的运行结果,如下图所示:
9、添加“聚合报告”,在测试计划点击右键“添加”菜单,选择“监听器”,选择“聚合报告”:
聚合报告主要用来收集本次测试计划运行的一些重要的性能指标数值,例如Average、90%Line等等,添加后每次测试计划运行结束可以查看到指标的有效数据,如下图范例:
六、本地执行
1、在当前测试计划中,根据上述范例逐一添加本次需要运行的自动化脚本
非UI执行
jmeter -n -t 2024.jmx -l report\01-result.jtl -e -o report
断言
状态码断言 必备
responseCode = prev.getResponseCode(); // 获取响应状态码
log.info("状态码:" + responseCode);
// 检查状态码是否为200
if (responseCode.equals("200")) {
AssertionResult.setFailure(false)
log.info("断言成功:");
} else {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("响应状态码非200")
return
}
}
响应内容断言
/**
* 解析数据 并校验返回结果
*/
import org.json.*; //导入org.json包
//获取响应数据
String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//解析json数据,精准获取json字段。校验单个接送字段。
JSONObject responseJson = new JSONObject(response); //转为JSON对象
int totalElements = responseJson.getInt("code");
log.info("响应code字段:" + totalElements);
if(totalElements != null ){
AssertionResult.setFailure(false)
log.info("断言成功:");
}
else{
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("响应code字段为空")
return
}
// 获取响应中的 success 字段的值
boolean success = responseJson.getBoolean("success");
// 打印响应中的 success 字段值
log.info("响应 success 字段:" + success);
// 根据 success 字段的值进行断言
if (success) {
// 断言成功
AssertionResult.setFailure(false);
log.info("断言成功:");
} else {
// 断言失败
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("响应 success 字段断言失败:");
return;
}