Jmeter接口测试工具详解项目实战(二)

本文详细介绍了如何使用JMeter进行接口测试,包括如何生成随机数以避免标签名字重复,批量删除标签的正则取值方法,以及文件上传的两种方式。在断言部分,重点讲解了响应断言、JSON断言和BeanShell断言的使用方法和配置。此外,还提供了BeanShell断言的示例代码,用于检查状态码和响应体内容。最后,文章提到了JMeter的调试方法和数据驱动测试的配置步骤。
摘要由CSDN通过智能技术生成
一、接口测试实战
1、jmeter生成随机数(具体场景:创建标签名字不能重复,需要生成一个随机数)
Jmeter->工具->函数助手对话框->Random->输入一个范围内最大值和最小值->生成->粘贴到需要用的脚本中
2、批量删除标签
正则取值的格式:id_1,id_2,id_3...
3、文件上传
第一种方式:在mime写入:multipart/form-data
第二种方式:勾选上 对post使用multipart/form-data,然后在高级客户端实现里面选择java
二、jmeter断言
比较常用的三种断言方式:响应断言、JSON断言、BeanShell断言
1、响应断言
添加方式:测试计划-->线程组-->HTTP 请求-->(右键添加)断言-->响应断言
我们对界面上的组件做一下解释:
Apply to (响应断言的应用范围)
Main sample and sub-samples:作用于父节点取样器及对应子节点取样器
Main sample only:只作用于父节点取样器(一般的断言都选这个)
Sub-samples only:只作用于子节点取样器
JMeter Variable:只作用于jmeter变量(可写入正则提取的响应值)
测试字段:
测试字段常用的有响应文本(对响应结果进行断言)、响应头(对响应头文件进行断言)
 响应文本:请求的响应文本信息,不包含响应头信息。最常用的断言字段
 响应代码:对应http返回的响应码
 响应信息:匹配响应信息
 响应头:响应头信息
 URL样本: 请求url,如果有重定向包含重定向url
 文档(文本):通过Apache Tika从各种的文档中提取的文本进行验证,包括响应文本,pdf、word等等各种格式
 忽略状态(Ignore Status): 一个请求多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言
 
模式匹配规则:
模式匹配规则:需要使用什么规则来进行检查:正则、与、或、非、等于
 包括:响应的结果中包含指定的文本或者字段值,支持正则表达式
 匹配:完全匹配,期望值与实际结果必须完全一致,一般结合正则表达式使用
 相等:响应结果与指定的内容完全一致,不支持正则表达式
 字符串:返回结果,包含指定的字符串,不支持正则表达式
 否:不进行匹配
 
2、JSON断言
JSON断言也是测试工作中经常用到的一种断言方法,它只能针对响应结果是applicaton/json格式的请求进行断言
1)操作步骤: 在需要进行断言的Sample,点击右键->添加->断言->JSON断言
2)我们使用json断言,一般是断言某个字段值是否返回的是我们需要的,所以需要写JSON PATH(不会写的看本人另外一篇文章有介绍如何写),下图使用正则模式匹配返回的结果包含40就认为响应结果满足要求,断言配置和响应结果如下所示:
3)下面展示断言结果为常量时,如何进行断言设置,如下图所示
3、 BeanShell断言
BeanShell断言中可以通过ResponseCode、ResponseHeaders及pre.getResponseDataAsString()来分别获得String格式的响应状态码、响应头、响应体数据。结合if判断,通过变量Failure=false或Failure=true来设置断言是否通过。当设置Failure=true时,还可以设置FailureMessage来设置失败原因。
1)状态码断言代码:
//状态码断言
log.info("状态码:" + ResponseCode);
if(ResponseCode.equals("200")){
    Failure=false;    // 表示断言成功
}
else{
    Failure=true;    // 表示断言失败
    FailureMessage="响应状态码非200";  // 自定义的失败信息
}
注:字符串只能使用双引号,字符串相等要使用" “.equals(” ")表达式。
2)响应体包含特定内容断言代码:
//获取响应数据
String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//响应数据包含
if(response.contains("登录成功")){
    Failure=false;    // 表示断言成功
}
else{
    Failure=true;    // 表示断言失败
    FailureMessage="响应数据不包含登录成功";
}
3)查看运行结果
我们在察看结果树组件中,观察脚本运行之后的结果。
如果断言正确,和正常发送请求一样,如下图:
如果断言失败,则会出现断言失败的提示,如下图所示:
4)断言结果组件说明
也添加断言结果监听器,通过断言结果组件来判断断言是否通过。
如下图所示:
说明:
已通过的断言仅显示取样器名称。
未通过的,除了显示取样器的名称,还显示错误原因。
4、Beanshell的内置变量和方法
Beanshell有一些默认的内置变量和方法,用户可以通过这些变量与JMeter进行交互,
例如:
prInt:非GUI模式下打印信息(输出信息到stdout,标准输出控制台)。
log:输出信息到日志(文件)
log.debu(“调试信息”)
log.info(“响应状态码” + ResponseCode)
log.warn(“警告信息”)
log.error(“出错信息”)
ResponseCode:响应状态码(String类型)。
ResponseHeaders:响应头(String类型)。
prev:获取当前请求结果
prew.getResponseDataAsString():获取响应体数据(String类型)。
prew.getResponseCode():获取状态码(同ResponseCode,String类型)。
vars:操作JMeter变量
String var1 = vars.get(“变量名”):获取变量的值(假设为String类型)。
vars.put(“变量名”, 变量值):设置变量值。
props:操作JMeter属性
props.get(String,String) 可以获取JMeter中已经生成的属性。
props.put(String,String)可以创建和更新JMeter属性。
ctx:获取当前线程上下文数据(可获取所有信息)
ctx.getVariables(“变量名”):获取变量值(同vars.get())。
ctx.setVariables(“变量名”, “变量值”):设置变量(同vars.put())。
ctx.getProperties(“属性名”):获取属性值(同props.get())。
ctx.setProperties(“属性名”,“属性值”):设置属性(同props.put())。
ctx.getPreviousResult():获取当前请求结果同(prev)。
ctx.getCurrentSampler():获取当前采样器。
ctx.getPreviousSampler():获取前一采样器。
ctx.getThreadNum():获取线程数。
ctx.getThreadGroup():获取线程组。
ctx. getThread():获取当前线程。
ctx.getEngine():获取引擎。
ctx.isSamplingStarted():判断采样器是否启动。
ctx.isRecording():判断是否开启录制。
ctx.getSamplerContext():获取采样器山下文数据。
5、补充知识点
(1)JSON响应体字段提取及断言
将String类型的响应体转为JSON对象并操作需要额外的JAR包,可以使用org.json.jar或gson.jar。
以json.jar为例,下载后将其放入JMeter/lib目录下,重启JMeter,添加BeanShell断言代码,如下:
//JSON响应断言
import org.json.*;   //导入org.json包
String response = prev.getResponseDataAsString();  //获取响应数据
JSONObject responseJson = new JSONObject(response);  //转为JSON对象
String message = responseJson.getString("message");
log.info("响应message字段:" + message);
if(message.equals("成功")){
    Failure=false;
}
else{
    Failure=true;
    FailureMessage="响应message字段非成功";
}
JSONObject对象除了getString()方法外,还支持:
getBoolean(“字段名”):获取布尔类型字段值。
getInt(“字段名”):获取整型字段值。
getLong(“字段名”):获取长整型字段值。
getDouble(“字段名”):获取双精型字段值。
getJSONObject(“字段名”):获取嵌套Object类型字段值,JSONObject类型。
getJSONArray(“字段名”):获取嵌套Array类型,JSONArray类型。
(2)响应头解析
响应头原本为String类型,可以通过分割遍历组装成Map类型来提取响应头中的项
Copyimport java.util.HashMap;
import java.util.Map;
//将字符串用换行符 截取为adc数组
String [] headersList = ResponseHeaders.split("\n");
Map headersMap = new HashMap();   //创建HashMap来从新组装headers
for(int i=1;i<headersList.length;i++){
    String [] itemList=headersList[i].split(": ");   // 将每一条Headerr项按冒号分割
    headersMap.put((itemList[0]), itemList[1]);   // 分键值放入HashMap
}
String contentType = headersMap.get("Content-Type");   // 提取相应项
log.info("响应Content-Type:" + contentType)
三、jmeter调试
1、调试取样器
2、jmeter+fiddler调试
四、jmeter数据驱动
1、添加一个线程组
2、线程组下新增循环控制器,循环次数设置为3(根据实际场景而定)
3、在jmeter请求下新增CSV Data Set ConFig控件
4、创建一个weixintest.csv,文件第一行为变量名
 
5、HTTP请求中把填好参数
6、配置响应断言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值