关联
一、什么是关联
关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据。
简单地说就是在测试过程中有些数据的值会经常发生变化,要获取并使用这些数据,把这个动态的信息保存下来,我们就要进行关联。
例如:用户登录后,session信息都不同,有些操作要使用session,就需要将这个动态的信息保存下来。
还有经常遇到的场景,第二个请求提交的参数要从第一个请求的返回数据中获取。
二、关联的用法
常用的两种关联用法
1.json Path Extractor提取参数值
2.正则表达式的方法
我们已学生金币充值的接口为例来实验,由于接口需要权限,需要获取登录时的sign值我们就用关联来实现。
登录接口
-
请求URL
http://api.nnzhp.cn/api/user/login
- 请求方式 post
- 请求参数 参数为key-value形式
参数名 必选 类型 说明
username 是 string 用户名
passwd 是 string 密码
登陆用户名:niuhanyang
密码:aA123456
返回参数说明
参数名 类型 说明
error_code int 错误编码,0为操作成功
login_info object 登录对象信息
userId int 用户id
sign string 签名
login_time string 登录时间
打开jmeter,添加登录接口请求,调用查看结果
获取学生信息接口
请求URL http://api.nnzhp.cn/api/user/stu_info
- 请求方式 get
- 请求参数
参数名 必选 类型 说明
stu_name 是 string 学生姓名
调用接口结果
学生金币充值
-
请求URL:
http://api.nnzhp.cn/api/user/gold_add
- 请求方式 post
- 参数 ,
该接口有权限验证,需要admin用户才可以做操作,需要添加cookie
cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回sign
参数名 必选 类型 说明
stu_id 是 int 学生id
gold 是 int 金币数量
返回参数说明
参数名 类型 说明
error_code int 错误编码,0为操作成功
msg string 提示信息
第一种方法比较简单,使用插件json path postprocessorh 或 jp@gc - json Path Extractor
如下:在登录接口添加json path postprocessorh,获取需要参数化的值的信息
上面的例子中,返回值只有一个结果,如果存在多个结果的场合,我们怎么取值呢?
现在我们以学生ID为例来实验,可以看到上图中的查看学生信息中反回了多个ID号,我们用上边的方式来试一下
添加json Path Extractor
从学生信息返回的结果看,获取内容的json串取为$.stu_info.id,将stu_id进行参数化为${id},执行
可以看到执行结果是失败的,传入的学生id是我们输入的默认值nono。
我们来看一下学生接口的返回信息
{
"error_code": 0,
"stu_info": [
{
"id": 872,
"name": "A",
"sex": "nn",
"age": 33,
"addr": "士大夫是非得失的士大夫士大夫",
"grade": "33",
"phone": "15221223211",
"gold": 9500
},
{
"id": 1053,
"name": "A",
"sex": "nn",
"age": 33,
"addr": "士大夫是非得失的士大夫士大夫",
"grade": "33",
"phone": "16221223211",
"gold": 100
}
]
}
上述的返回结果中,有两组信息,包含了两个学生的信息,如果用$.stu_info.id,计算机不知道要去获取,所以我们需要指定一下要获取哪一个ID号
执行结果是成功的。
2.正则表达式
需要进行参数化还有一种方法是用正则表达式,如下
下载文件
1.文件上传
文件上传类型
-
请求URL:
http://api.nnzhp.cn/api/file/file_upload
- 请求方式 post
- 参数
参数名 必选 类型 说明
file 是 file 文件
返回参数说明
参数名 类型 说明
error_code int 错误编码,0为操作成功
msg string 提示信息
在jmeter中添加http请求,选择文件,添加参数信息,执行
可以看到上传文件执行成功了。
2.下载文件
现在我们来试一下下载文件是如何操作的
在网络上找到一个图片资源,获取到图片的地址:http://img4.duitang.com/uploads/item/201209/08/20120908180716_3rrvi.jpeg
我们在jmeter中新建一个HTTP请求,填写相应的参数,执行
可以看到下载成功了,那怎么把图片下载到本地呢?这就需要用到Bean Shell Sampler
BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
代码如下:
执行并查看结果:
可以看到在填写的下载路径文件夹下,可以看到下载好的文件
一、什么是压力测试
压力测试通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大的服务级别的测试。通俗地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。
登录接口
-
请求URL
http://api.nnzhp.cn/api/user/login
- 请求方式 post
请求参数 参数为key-value形式
参数名 必选 类型 说明
username 是 string 用户名
passwd 是 string 密码
登陆用户名:niuhanyang
密码:aA123456
添加线程组,添加http请求,添加聚合报告
设置压测的并发数,这里我们设置100个并发,循环10次,持续30s
下面看一下各个参数的含义:
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100,我们设置的为100个用户循环10次,所以一共的请求为100*10=1000
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间(单位是毫秒),当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
根据具体的压测结果与目标需求进行比较来分析是否满足需求以及需要进行的优化操作
我们在本地jmeter看一下添加的压力机
或者直接点击全部运行按钮,进行运行,就可以进行压测啦,大家一起来试一下吧