jmeter接口请求写的方式,可以直接一个请求一个请求的按界面写,也可以录制,这对于针对性的测试接口正确性和检验,还需要花很多功夫,比如设置期望结果的断言。每个地方都得重复写很多东西,很是繁琐。
为了便捷的测试多个接口,使用CSV参数设置是个很好的方法,但是有的人用它只是设置几个简单参数,我的思路是它来协助我完成m个请求,每个请求n个参数,使用起来很方便。
用csv文件的一行代表一个请求的诸多参数,多行则表示多个请求。我的csv文件的模板如下(大家可以根据自己的项目实际情况的增删字段):
| myid | interfaceName | branch | caseName | myMethod | myData | myResult1 |
| -------- | ------------- | ------------- | -------- | --------- | --------- | --------- | --------- | :-------: |
| 每个用例一个id | 接口名称 | 1未登录请求 2已登录请求 | 测试描述 | 接口请求路径 | 接口请求实体内容 | 期望结果1 |
| 1 | app_logs | 1 | 查看友盟日志 | /app_logs | n1=1&n2=2 | success |
那jmeter中怎么用好这个我设计的模板,达到每个参数的意义呢?接下来手把手教你。
1.新建&配置CSV Data Set Config
测试计划-右键-添加-配置元件-CSV Data Set Config
然后配置如下截图,对应的文件路径直接写到Filename即可
2、新建&配置线程组
测试计划-右键-添加-threads(Users)-线程组
线程组配置如下图,线程数是指多少个线程同时并发,循环次数是指每个线程循环多少次
重要!!!线程组的循环次数和csv文件的请求数据行数一致(注意csv文件中的第一行为参数名,第三行为第一个请求的数据,第二行大家可以写下备注注释什么的,所以请求行是从第三行往后算)
3.新建if控制器和http请求
先讲下为什么要新建if控制器,因为我做的是app的接口测试,app接口请求可以分为两种登录前的请求(不带token请求字段的)、登录后的请求(带token请求字段的),所以在请求的时候无法共用的请求模板。
前面的csv文件中,有一列为branch,就是用在此处判断的。
3.1线程组-右键-添加-逻辑控制器-如果(If)控制器
配置如下内容即可,含义就是csv文件中,满足条件的行,会执行下面的请求模板
"${branch}"=="1"
3.2如果(If)控制器-右键-添加-sampler-http请求
这里要填的内容如下,其中用到了4个参数
${caseName}
${interfaceName}
${myMethod}
${myData}
名称:为了查看结果树的时候能够明确知道是哪个场景的测试点,哪个接口
路径:请求的域名后面接的路径,比如抓包中的请求为“POST http://alog.umeng.com/app_logs HTTP/1.1”,那么${myMethod}就应该填“/app_logs”(写在csv文件即可)
Body Data:请求的参数实体内容,一般是 name1=value&name2=value2……(写在csv文件即可)
有人看到这里有疑问了,为什么没有填服务器ip的,那是因为很多公共的参数,没什么变化的,比如host,就可以放在http请求默认值里面。
3.3测试计划-右键-添加-配置元件-http请求默认值
这里就可以把公共不变的参数和host写在这里
实际请求的参数,就会把http请求的参数和这里的参数合在一起请求
4.新建&配置响应断言
断言我这里用的是最简单的响应断言,字符串判断
http请求-右键-添加-断言-响应断言
在要测试的模式,写上对应的${myResult1},然后再如果还要多判断几个断言,可以新建断言2、断言3
用BeanShell对接口请求和响应数据处理(处理原因:比如我需要下次请求用上个请求的token字段,然后要用所有请求参数生成sign字段、字符串特殊处理等),可以点击此链接查看:http://www.jianshu.com/p/b1fac6898828
O(∩_∩)O