看完不要白嫖,记得三连
一:自定义csv测试用例
首先新建一个csv文件,在第一行输入以下参数(参数名称可自定义):
CaseNum:编号
apiType:协议类型
CaseName:用例名称
(前三个用来组合请求名称,可自行定义)
url:路径
methods:请求类型
parameter:请求参数
Expected results:预期结果
expectValue:断言
可参考下图
二:读取csv测试用例并执行
打开jmeter,新建一个线程组。
添加请求默认值:
根据自己的地址,输入对应的请求默认值。
在线程组下新建一个循环控制器,为了控制用例执行的个数。
在循环控制器下新建CSV Data Set Config,用来读取用例数据
在CSV Data Set Config中进行相关设置:
- 选择文件
- 文件编码根据平台看是否要设置,我这边就不设置了。
- 输入变量名称
- 忽略首行改为ture,因为我们的csv文件第一行是参数名
- 其他默认即可,可根据自身平台而设置
在循环控制器下新增,if控制器,用来控制post和get请求的区分。
在新增的两个if控制器中分别输入:
"${methods}"=="POST"
"${methods}"=="GET"
在if控制器下新建http请求:
名称中输入,取csv用例中的参数,来组合请求名称
${
CaseNum}-${
apiType}-${
CaseName}
如果是post请求,需手动将http请求改为POST;
路径中填写url,用来取csv用例中的参数。
${
url}
post请求需要将参数写在消息体数据中
GET请求,参数放在路径中,中间加个“?”用来连接前面的路径。
在http请求下面添加响应断言:输入${expectValue},取csv用例中的参数。
添加察看结果树,查看响应结果。
三:将结果输出成简单的测试报告
首先得知道我们想要的实际结果是什么,这边我想要的实际结果是,响应结果中的“保存成功”四个字,那我们就要想办法去获取它。
在http请求下添加json提取器,用来提取数据。
在http请求下添加Bean Shell 后置处理器
在Bean Shell 后置处理器输入以下代码:
String path = "C:\\Users\\freyr\\Desktop\\zpeng\\测试部\\接口测试\\jmeter练习\\测试结果";
File file = new File(path) ;
if(!file.exists()) {
file.mkdirs();
}
//创建文件夹
FileWriter fstream = new FileWriter("C:\\Users\\freyr\\Desktop\\测试结果1.csv",true); //路径已存在,创建文件并追加写入数据
BufferedWriter out = new BufferedWriter(fstream);
// 获取参数
out.write(vars.get("CaseNum") +"," + vars.get("CaseName") +"," +vars.get("parameter") +"," +vars.get("Expected results")+","+ vars.get("msg") +"\n");
out.close();
fstream.close();;
再次运行线程组,即可看到指定的路径下,生成了相关文件,格式如下(参数名称是我手动建的,因为导出的数据没有参数名称,代码里面数据时追加写入的,所以说手动建参数名称不影响的)
四:进阶优化
以上的操作适用于基本的增删改查,如果想实现导入和导出的接口,该怎么做。
导入
首先在csv测试用例中,在parameter(请求参数)中放入文件的路径,如果后续导入失败,可能是文件路径没有转义,将 \ 改为两个\ 即可。
另外新增一个参数:用来辨别是否是导入的请求。
我这边设置的是:iftype,如果是1则执行导入的请求,0则执行正常的请求。
回到jmeter,在第一个if控制器下,新建一个if控制器,用来嵌套。
然后将原始的http请求放到新增的if控制器下,并在if控制器中输入(csv文件中的参数不要忘记添加!!)
"${iftype}"=="0"
将第一个if控制器及其下面的指令,全部复制,粘贴为一个新的if控制器结构,并将新的if控制器中的“0”改为“1”。
接下来对该控制器下的http请求进行设置:
- 将消息体数据中的参数删除。
- 勾选对POST使用multipart/form-data,与浏览器兼容的头。
- 在文件上传下,添加参数:
- 在高级菜单下,客户端实现选择HttpClient14
运行请求,可以看到导入成功。
导出
复制if控制器结构,生成一个if控制器,并将iftype的值改为2,当iftype为2的时候,执行导出的请求
由于导出没有请求参数,所以说放一个路径就行了。
修改BeanShell后置处理程序,将代码改为:
import java.io.*;
// 获取请求返回的数据,通过prev方法获取上个请求的返回
byte[] result = prev.getResponseData();
// 设置文件导出存放路径及保存的文件名
String file_name = "C:/Users/freyr/Desktop/数据分离导出.xls";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();;
该代码能将导出的文件存放到指定的文件夹下,并可自己命名。
执行请求:
找到存放的文件夹,可以看到该文件:
五:注意点
由于平台不一样,cookie的获取机制也不一样。我这边采取的是在请求下面添加信息头管理器,将cookie以及需要的参数都放进去。
正常平台的话:可在一开始添加一个仅一次控制器,进行登录。再添加cookie管理器,就可以自动抓取cookie。
05的小伙伴们注意:我们的平台,需要先登录,在访问首页,才能获取到cookie。