jmeter相关知识学习记录
基于Jmeter5.2.1
断言之响应断言
响应断言:对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确。
测试字段就是指要断言的内容的匹配处。
响应文本:就是响应的body部分;
响应代码:http响应代码,如101,200,302,404,501等。当我们要验证404,501等http响应代码时,需要勾选“ 忽略状态”。因为当http 响应代码为400,500时,jmeter默认这个请求时失败的;
响应信息:响应代码对应得响应信息,例如“OK",区分大小写;
模式匹配规则:
包括:返回结果包括你指定的内容,支持正则匹配
字符串:与 “包括”差不多,都是指返回结果包括你指定的内容,但是subString不支持正则字符串
测试模式:结果的期望值
结合fiddler查看结果
配置元件之添加自定义变量
Jmeter快捷键
ctrl+数字快捷键:
其他快捷键:
ctrl+ E 清空结果树
ctrl+ T 启用/禁用
ctrl+ R 运行
配置元件之csv参数化
登录接口的测试,要用到多条测试用例,例如正确的用户名和密码,正确的用户名和错误密码,密码为空,错误的用户名和密码,可以把这四组数据放到本地txt文本文件里面,再通过jmeter去读取,然后循环执行线程请求,请求一次就取一行数据。
也可以不用txt存储数据,用csv格式的文本来存储数据,结果是一样的:
函数助手之__CSVRead
函数助手之__RandomString
当我们想要用10个不同的手机号去注册,可以使用随机组合的字符串去实现,随机在某些集合内取值后随机组成多位字符串。
这种随机有个弊端,就是取值集合若成员过少,就有可能出现重复数据。
后置处理器之正则表达式提取器提取相应结果
后置处理器之正则表达式提取器提取数组数据
假如我要提取百度首页的五个导航:
提取完成。
逻辑控制器之ForEach控制器
在上面提到用正则取出数组数据,但是怎么使用这些数据呢?可以用foreach循环来利用每个数据。
新建一个百度请求,放在循环控制器里面,随便给百度首页发点什么,变量取id:
结果:成功发了五次请求,每次参数hehe的值取自id。
后置处理器之JSON JMESPath Extractor提取响应结果
利用JSON JMESPath Extractor从响应的json格式数据中提取所需的结果:
从{"status":0,"code":"20110","data":null,"msg":"手机号码已被注册"}中提取msg:
通过百度发出去:
Jmeter之添加cookie
充值前先要登录,因http是无状态的,先发login请求后发recharge请求还是会提示未登录,这时就要cookie了。
第一种方法:添加http cookie管理器。
充值成功
第二种方法:通过正则表达式获取login响应头中的cookie,再通过HTTP信息头管理器将其添加到recharge请求头里。
Jmeter之token编码处理
对于前程贷官网的投资接口来说,是需要cookie和token的:
很显然,登录成功,没带token只带cookie则因用户认证失败导致投资失败。考虑加上token,但是去哪找token呢?
打开fiddler,过滤前程贷官网,在浏览器上成功登录并投资一次,可以发现服务器在这个请求:http://120.78.128.25:8765/loan/loan_detail/Id/17951.html 的响应体中添加了token:
在随后的投资请求中,token值与标id,投资金额一起加在了表单中:
因此,我们也在jmeter中增加一个标详情页的请求,成功找到了token,并用正则表达式提取token给投资请求。
但还是投资失败。查看invest请求中携带的token:
会发现post中的token值已经将‘/’转换为 %2F,但未将‘+’转换为%2B,这是因为jmeter发送请求时没有对url进行编码, 勾选编码后就可以了。
也可以利用函数助手里的__urlencode函数对token值进行编码。
一粒云项目之批量上传文件
根据文档,上传参数需要文件名,大小,先准备需要批量上传的文件:
新建一个csv文件,写上要上传的文件大小,文件名,路径:
在jmeter里添加登录请求,输入账号密码,下载请求,登录只需要一次,为的是取token,故加一个仅一次登录器,注意有请求头,线程组循环5次,csv数据文件设置,注意,因为csv文件的首行为标题行,要忽略首行。
在upload请求的参数里进行参数化引用:
上面参数名称file一定,txt文件的mime类型为text/plain。
上传成功!
一粒云项目之下载文件
查看接口文档:
传参,fi即file的id,取我刚才上传的文件,40139
返回的是一个uri,可见要再加一个请求。
先通过正则表达式获取uri:
出错了:403
没权限,那就在请求里加一个token: 成功下载了。
把响应保存到本地:
成功新增一个文件。
批量下载的话只需要新建一个csv,里面放入fileid即可。不做赘述。
jmeter获取文件列表
还是一粒云项目,请求方法get,地址:http://120.79.174.8/apps/files?fc=personal&pt=1&offset=0&limit=200
请求头还是ct=token
添加JSON JMESPath Extractor,取前十个fileId:
成功拿到fileId
取所有的fileId,则改json表达式为data.files[:].fileId
ForEach控制器实现文件列表获取与下载接口串联测试
在前面已经实现了文件列表的获取以及单个文件的下载并保存,现在用ForEach控制器把他们串联起来。
添加ForEach控制器:
ForEach控制器就相当于python里面的for循环,遍历取值,前面文件列表获取到21个文件,这里填0,21,0不包含在内的:
对于每次ForEach循环取到一个fileId,再通过获取uri请求获取到下载的uri,经过正则提取uri,在下面的请求里将uri作为请求路径去下载对应的文件,然后将响应保存到本地:
最终结果为:
本地新增:
Jmeter脚本录制
首先在TestPlan里添加一个HTTP代理服务武器:
设置端口,在目标控制器里选择线程组。
在Chrome浏览器里设置代理:
点击启动按钮后,在浏览器登录前程贷官网,可以看见有录制的结果:
本来有很多请求的,可以在代理服务器的排除模式里通过正则表达式把它过滤掉,bmp,css,js,gif,png等统统过滤,只要接口的。
jmeter之连接数据库
先添加一个JDBC request:
再添加一个JDBC Connection Configuration,填上变量名:
至于下面的数据库连接配置里面要填的东西,我们要在服务器的配置文件里去寻找。
xshell连接我的云服务器,按名称查找数据库配置文件:find -name jdbc.properties
进入第二个:
填入URL,账号密码,这里的JDBC Driver class选择com.mysql.jdbc.Driver后运行提示无法加载驱动,所以我下载了个驱动放在apache安装目录下的lib/ext。
成功连接数据库。