备忘-Jmeter的使用笔记
---恢复内容开始---
一直觉得一个漂亮的自动化测试应该是完全可以按照人为意识设定操作逻辑的,对于这点,我觉得Jmeter的是做的非常漂亮的。所以我比较关注的是只有3点。
1、如何获得回参并把它作为其它请求的入参!
2、加入业务逻辑,包括如何在获得回参后加入业务逻辑帅选参数,如何在请求之前对入参进行逻辑处理,如何加入逻辑控制每个请求或通过逻辑控制不同的请求。
3、断言结果!
下面我就来自问自答了:
1、如何获得回参并把它作为其它请求的入参!
Jmeter中有个叫后置处理器的列表的,应该都可以用的吧,对于只测试接口的我来说,我只研究了“正则表达式提取器”、“BeanShell PostProcessor”、“BSF PostProcessorBSF PostProcessor".
【正则表达式提取器】
其实就是对返回结果进行正则匹配,然后配合"ForEach控制器"就可以拿到每个值并用在相应的请求中!
小技巧:
如果正则匹配的结果是N行M列的表现形式的话,如何进行循环匹配呢。使用ForEach控制器+[配置元件-计数器],例如正则表达式获取的是orders,定义的计数器是index,使用的时候就是${__V(orders_${index}_g1)}...${__V(orders_${index}_gN)}。
应该会有更好的方式吧,不过我没有找到,毕竟我只是一个开发,不是专业的测试,Orz...
【BeanShell PostProcessor】
我的定义就是一种脚本语言,beanShell,可以完全用java语法的好东西!
要用beanShell写java语法,肯定要先引入jar啊,例如我要用json解释,我就把fastjson-1.2.7.jar放到lib下,然后写beanshell脚本的时候import一下就好了。
例如:
import com.alibaba.fastjson.*;
import java.util.*;
import java.io.*;
String fileName = "D:/apache-jmeter-2.13/bin/eshop/dat/orderNos.csv";
FileWriter fwt = new FileWriter(fileName);
String str = prev.getResponseDataAsString();
Map map = JSON.parseObject(str, Map.class);
List list = map.get("data").get("infos");
for(Map order : list){
if(order.get("statusInt")==2 || order.get("statusInt")==3 || order.get("statusInt")==4){
fwt.write(order.get("orderNo")+"\n");
}
}
fwt.close();
上面的代码就是把结果获取了,然后写到一个csv文件中,然后下个请求的时候就可以读取csv的结果作为入参啦!
【BSF PostProcessorBSF PostProcessor】
其实我觉得BSF PostProcessorBSF PostProcessor跟beanShell 的最大区别是,一个用java语言,一个可以选择语言,而BSF我一般选择js语言,因为其他我不会啊,大哭!!
用的时候只要设置一下“HTTP信息头管理器”的“Content-Type”为“application/json",然后就可以在脚本中用eval来转变成json格式的数据了。
例如:
eval('var searchResponse='+prev.getResponseDataAsString());
var infos= searchResponse.data.infos;
for(var index=0; index < infos.length; index++){
if(infos[index].addressId == vars.get("currAddressId")){
if(infos[index].idcardNo == vars.get("idcardNo")){
log.info("身份证验证成功");
prev.setSuccessful(true);
prev.setResponseMessage("身份证验证成功。校验地址ID:"+infos[index].addressId+"传入身份证:"+vars.get("idcardNo")+",返回的身份证:"+infos[index].idcardNo);
}else{
log.info("身份证验证失败");
prev.setSuccessful(false);
prev.setResponseMessage("身份证验证失败。校验地址ID:"+infos[index].addressId+"传入身份证:"+vars.get("idcardNo")+",返回的身份证:"+infos[index].idcardNo);
}
break;
}
}
好了,回参处理说完了。
2、加入业务逻辑,包括如何在获得回参后加入业务逻辑帅选参数,如何在请求之前对入参进行逻辑处理,如何加入逻辑控制每个请求或通过逻辑控制不同的请求。
对回参加入业务逻辑主要是在beanshell和BSF后置处理器中用代码实现逻辑处理;
请求的逻辑处理主要是用各种的逻辑处理器While逻辑处理器,forEach逻辑处理器等
浙公网安备 33010602011771号