jmeter2-读取csv测试用例并执行,将结果输出成简单的测试报告

一:自定义csv测试用例

首先新建一个csv文件,在第一行输入以下参数(参数名称可自定义):
CaseNum:编号
apiType:协议类型
CaseName:用例名称
(前三个用来组合请求名称,可自行定义)
url:路径
methods:请求类型
parameter:请求参数
Expected results:预期结果
expectValue:断言

可参考下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/6802f176c9374c839736acf3889f5fd3.pn

二:读取csv测试用例并执行

打开jmeter,新建一个线程组。
在这里插入图片描述
添加请求默认值:
在这里插入图片描述
根据自己的地址,输入对应的请求默认值。
在这里插入图片描述
在线程组下新建一个循环控制器,为了控制用例执行的个数。
在这里插入图片描述
在循环控制器下新建CSV Data Set Config,用来读取用例数据
在这里插入图片描述
在CSV Data Set Config中进行相关设置:

  1. 选择文件
  2. 文件编码根据平台看是否要设置,我这边就不设置了。
  3. 输入变量名称
  4. 忽略首行改为ture,因为我们的csv文件第一行是参数名
  5. 其他默认即可,可根据自身平台而设置
    在这里插入图片描述
    在循环控制器下新增,if控制器,用来控制post和get请求的区分。
    在这里插入图片描述
    在新增的两个if控制器中分别输入:
"${methods}"=="POST"
"${methods}"=="GET"

GET和POST同样的设置即可
在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请求进行设置:

  1. 将消息体数据中的参数删除。
    在这里插入图片描述
  2. 勾选对POST使用multipart/form-data,与浏览器兼容的头。
    在这里插入图片描述
  3. 在文件上传下,添加参数:
    在这里插入图片描述
  4. 在高级菜单下,客户端实现选择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。
在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_53972351/article/details/122228935