目的:
将测试项目的接口通过csv文件整理后,通过jmeter配置调用该文件已实现接口自动化并生成对应HTML报告。该方法能够快速的做接口回归,便捷的脚本维护(只需修改csv文件对应信息即可),能高效的实现非代码的接口自动化。
思路梳理:
1.创建全局ip及端口,所有接口URL拼接时前半段自动添加。
2.添加全局信息头(head),接口请求时带入该head。
3.创建登录请求并获取token以便后面接口全局调用。
4.新增线程除添加csv配置后,在csv中做好字段分类,然后供调用。
5.添加if控制器针对接口类型做分类
6.执行对应非GUI命令后生成报告
实现步骤:
1、首先创建公共的请求地址。
2、创建HTTP信息头管理器,填写公共的且必须的head信息。可以在登录时查看到,逐步填写完整。
3、创建setUp(登录)线程组,保持默认值即可,因为再执行接口自动化或者性能测试时,登录只需要一次即可。所以这里线程数及循环次数都为1。
4、在setUp下新建HTTP登录请求,并添加正则提取器提取登录后的token。这里的传参用了【消息体数据】,在填写时注意搞清楚接口报文的传输格式时data还是json串。
在请求下添加响应断言判断登录是否成功。添加正则提取器,获取token值,并添加后置处理器Debug PostProcessor以便观察提取内容是否正确。
正则提取器:
正则表达式为"token":"(.+?)",表示获取字段为token的全部内容
后置处理器Debug PostProcessor:
默认即可,用于察看提取内容
察看结果树:
可以看到提取的token内容
5、在请求的中添加BeanShell取样器来配置token作为全局变量使用。
${__setProperty(newtoken,${token})}
6、重新创建一个线程组,并添加信息头管理器填写请求中所需的键值对,token:${__property(newtoken)}。(上个线程组添加的全局变量)
7、接着并行添加循环控制器来控制csv调用的次数,这里选择循环次数为“永远”,配合设置CSV文件设置,可根据文件行数来添加请求数。
8、在该控制器下添加配置原件“CSV数据文件设置”,先创建csv文件按整理的接口创建对应字段并添加必填参数及断言内容。
在配置原件中填写与文件字段对应的信息。其中变量名用西文逗号隔开,其他的选项按需要填写即可。
9、在循环控制器下添加一个if控制器,按条件来执行csv文件中的数据。这里条件的语法格式注意"${priority}" == "H"
10、在if控制器下按接口类型再次分别添加if控制器,这里按GET、POST做了两类,添加两个控制器即可,同样的条件语句写法。
配置GET请求参数,名称按自己的习惯参数化拼接名字,请求路径同样按参数化拼接即可。
因为GET请求是在URL后面拼接的param,所以这里是直接在路径中吧url和parameter引用拼接了。
配置POST请求参数同理,只是在url和参数上有所不同。
断言可添加一个或多个,可根据接口的报文来制定断言内容,这里断言字段有两个。
**POST的接口只能读取parameter中的一个字段内容,还无法读取json串,还需优化。(有解决方案的欢迎指点!)
至此jemter的数据准备工作已经完成,接口也按接口文档调试成功。报告当前用的是jmeter自带的报告生成模板Dashboard。
在非GUI模式下,首先进入数据存放的目录。
执行jmeter -n -t **(脚本).jmx -l . eports esult.jtl生成jtl文件,删除reports目录下文件后再执行jmeter -g . eports esult.jtl -o . eports esult.html,生成的测试报告就很直观的看到了,只是对于报错的接口,还没做错误日志的打印和记录,待后期优化脚本。