1. Jemter的下载和启动
下载网址:https://jmeter.apache.org/download_jmeter.cgi
解压使用:
- 打开bin下面的jmeter.properties中配置。修改sampleresult.default.encoding的值为UTF-8
sampleresult.default.encoding=UTF-8
- 双击 jmeter.bat 启动
- 如果界面是英文,可以调整成中文
2. 开始使用
- 测试计划--右键--线程--添加线程组
- 线程组--右键--取样器--http请求
这里以请求百度为例,内容根据需要填上对应的值
- 点中测试计划--右键--添加监听器--查看结果树
- 点中查看结果树,运行。
- 将测试计划保存下来,方便下次使用
3. 相关概念理解
- 测试计划 测试计划可以看做一个项目
- 线程组:项目下面有多个模块(线程组)
- http请求:模块下面有好多接口(http请求)
- 查看结果树:查看结果树就是接口返回的结果
4. 查看结果树的额外说明
- 点中Http请求,ctrl+c。 再点中线程组 ctrl+v,复制一个Http请求(改个名字改成Http请求2)
- 点中线程组,ctrl+c 。再点中执行计划 ctrl+v,复制出一个线程组2
- 现在 查看结果树,线程组,线程组2平级。都是在测试计划下面。
选中查看结果树点击运行按钮。我们可以看到四个请求全部发送
- 把查看结果数拖到线程组内,再次点击运行,只会查看当前线程组内的请求结果
5. 并发和顺序执行
并发执行:多个线程组同时执行(默认情况)
可以看出不同线程组下面是没有顺序的。
顺序执行: 多个线程组顺序执行
在测试计划下勾上独立运行每个线程组
再次运行就能看到请求是有顺序的
5. 优先和最后执行的线程组
点击测试计划新增两个线程组
然后执行
可以看出setUp 线程组的优先级比较高会先执行。
tearDown 线程组的优先级比较低会最后执行。
疑问:如果有两个setUp或者两个tearDown哪个优先级高?
HTTP请求1-2 最后执行的请求 最后执行的请求2 PE" CONTENT-"TEXT/HTML'CHARSET-UTF-8"> 百度一下,你就知道 -->
结论:哪个线程组在上面,哪个就是爸爸。优先级高
6. 线程组常用的属性
7. HTTP请求默认值
对于多个接口url而言,可能就是请求路径部分不同。而请求协议,请求的服务器名或ip,端口都一样。这样我就可以吧共同的部分抽取出来。在jmeter中http请求默认值可能做到这一点。
- 新增一个Http请求默认值
- 把共同的部分抽取出来
- http请求中只要写路径
8. HTTP信息头管理器
对于一些新增或者修改接口。我们需要提交一些json数据,如果没添加请求头可能会报一些错误。
如下:新增一个用户,接口报错
这时我们需要用http信息头管理器添加请求头解决
9. 参数化
1. 用户定义的变量
新增一个addUser的变量。值为接口路径(/user)
在请求中引用变量即可
2. csv批量操作
假设我想新增多个user,我们可以用csv进行批量添加。
- 我们先用Excel写好三个用户并另存为csv文件。
- 新增csv数据文件设置
- 我们的csv中有两列。我们在变量名称那一行定义好变量名用英文逗号分割
变量名name,age对应csv中的姓名和年龄
- 在请求中引用name和age变量
- 选中查看结果树,点击运行
我们发现只是新增了一个。还有的数据没有新增。是因为我们还需要做一项设置,把线程组的永远勾上。就会循环添加所有用户了。
- 再次运行
3. 用户参数
- 在请求上添加用户参数
- 添加两个用户
- 点击线程组,把线程数调整为2,因为我们这里模拟的是两个用户操作
- 点击查看结果树,运行
4. 计数器函数
- 我们定义一个请求百度的http请求,并给线程组设置如下
- 执行后我们可以看到发送了6次请求 (2 * 3 )
- 这时我们想统计总共发了几次请求。就需要加一个计数器函数
- 使用复制的变量
- 可以看到有2个用户。每个用户单独统计
- 如果把变量中的true改成false 则每个请求都会计数一次,可以看到一共发送了6个请求
5. 随机数函数
- 复制出一个请求。然后将禁用上一个计数器函数的请求
- 选择随机数函数
- 在参数位置使用随机函数可以生成随机数
- 运行结果
6. 时间函数
- 再复制一个请求,禁用调其他两个
- 选择time函数
- 运行可以看到每个请求后面都带了时间,
- 当然我们也可以用这个放在请求参数的位置,来作为请求参数,这里就不演示了
10.JDBC请求
我们可以创建一个jdbc请求来查询数据库
- 在测试计划里面设置我们的mysql驱动包
- 添加jdbc配置元件
- 配置如下:起个名字和配置一下连接信息
- 在线程组下面添加一个Jdbc请求
- 执行可以看到结果
- 再新建一个调式取样器
- 再次执行,我们就能看到之前的userName变量的用处了
- 我们可以拿到上一步的userName_xxx变量,请求百度搜索
11. 断言
1. 响应断言
用来判断响应内容和响应状态码
- 对请求添加一个响应断言
- 对断言进行设置
- 由于响应体里面包含张三所有没有报错
- 我们改一下条件让响应体里面包含李四,再次执行,可以看到断言失败
对于其他的响应类型可以自行尝试
2. 大小断言
判断响应内容的字节长度
- 新增一个大小断言
3. 断言持续时间
判断响应时间
- 新增断言持续时间
- 执行报错,因为接口超过了1ms