接口测试的流程:
由java语言编写的,所以需要依赖到java的jdk环境
。
到官网下载即可,地址是这里
下载完解压即可。
目录介绍
apache-jmeter-5.5
|——bin 二进制程序目录
|=ApacheJmeter.jar java版可执行文件
|=jmeter.bat windows系统可执行文件
|=jmeter.sh linux可执行
|=jmeter.properties 配置文件
|=system.properties 配置文件
|=jmeter-server.bat 分布式测试中的服务启动脚本
|=jmeter-server.sh 分布式测试中的服务启动脚本
|--docs 文档目录
|--extras 辅助库
|--lib 核心依赖库
|=ext 扩展插件目录
......
双击ApacheJmeter.jar
启动jmeter即可,如果不能打开,那么可以使用命令java -jar ApacheJmeter.jar
也可以。
添加一个线程组
线程组中的参数默认即可
再去线程组中创建一个 http请求
的取样器。
参数如下图即可。
点击测试,可能需要保存一下.jmx文件。
然后再去线程组中创建一个查看结果树
然后就可以看到我们的测试结果了。
但是发现jmeter编码格式好像不支持中文,可以去jmeter的bin
目录下的jmeter.properties
中,修改配置即可。
默认是ISO-8859-1的编码格式,直接改成UTF-8即可。
重启Jmeter,然后将我们保存的jmx文件直接拖至jmeter的左侧窗口栏即可自动导入到jmeter中。
一个测试计划中可以拥有多个线程组,当查看结果树
位于线程组同级目录时,可以看到所有线程组的测试结果。
在线程组中我们可以设置线程的数量,表示此测试运行n次。
注意:当有多个线程组时,默认情况下多个线程组的测试会并发执行,那么可以在测试计划中设置
线程组会排队执行。
程组的类型:
在线程组中,可以设置一些参数
定时器可以用在测试计划里,也可以用在线程组里面。放在不同的位面,起作用的范围则不同。
定时器种类:
元件执行顺序:
1.配置元件 2.前置处理器 3.定时器 4.取样器 5.后置处理器 6.断言 7.监听器
注意:
取样器
有作用,如果他们作用域内没有任何取样器,那么不会被执行元件作用域
取样器
不与其他元件相互作用,不存在作用域问题逻辑控制器
只对其 子节点
中的 取样器
和逻辑控制器
起作用如果父节点是 取样器
:则只对其父节点作用如果父节点不是取样器
:则对父节点的所有后代节点都起作用取样器–HTTP Request
配置元件–HTTP信息头管理
配置元件–HTTP Cookie管理器,可填充cookie信息
配置元件–HTTP请求默认值
设置此元件后,其他的取样器,可以不用再去输入重复的内容了,如协议,服务域名,端口等。
以上是提取所有
标签中的text文本数据。
调试方法一:然后我们还需要一个后置处理器
调试后置处理程序
然后运行测试即可。查看结果。
调试方法二:xpath中的引用
我们在xpath后置处理器中定义了一个 title
的变量指向了 //title/text()
,测试执行完毕后,这个引用是存在的,我们可以在添加一个取样器去使用它。采用${引用}
的方式使用。
要记得取样器的执行,同级下有多个时,按照顺序一个一个执行。
可以看到,title获取到了,并且第二个线程执行时引用到了。
通常如果我们不太熟悉jsonPath的语法,那么可以使用谷歌浏览器的插件json-handle
来帮助我们快速获取表达式。
JMeter中的函数和Python函数一致,有0个或多个参数,有一个返回值。Jmeter内置了很多的函数。
使用方式${__函数名(var1, var2, var3)}
说明:
${__threadNum}
time
可将当前时间转为指定格式的字符串。
然后我们把复制的函数引用表达式,用在取样器里面即可
请求变成了GET https://www.baidu.com/?time=1678359877433
同样地,我们可以将时间戳进行格式化,如2023-03-09 19:06:00
获取到引用${__time(yyyy-MM-dd HH:mm:ss,)}
counter
计数器
使用时,每个线程有自己独立的一个计数器,计数器会对它们进行计数。
如图,一个线程,执行10次取样HTTP
同样按照刚刚的,把counter函数的引用拷贝到HTTP请求中。
同理,将计数器设置为FALSE,那么将有一个全局计数器,计数所有的HTTP取样
Random
随机数
RandomString
${变量名}
使用变量不同线程组之间的变量是不共享的。
需要通过properties进行共享
setProperties
函数的调用然后使用即可。
当使用这个时,一定要注意:A组一定要是先执行的,否则B是获取不到变量的。可以勾上测试计划中的
参数化整体为k-v结构。k相当于是变量的名称,v是对应的值。
在测试的时候使用名称为name的变量,用如下语法:${name}
在测试计划中设置参数,给值。
在取样器中使用。
在同一测试计划中的所有取样器都可以使用这个变量!!
但是通常这样value值只有一个,测试的不够全面。
我们可以在线程组中添加一个前置处理器------用户参数
一个用户代表一个线程,那么我们把线程组
中的线程数设置为3即可。
导入csv格式的文件作为参数使用。
有一个csv格式的数据表。
在线程组中创建一个CSV数据文件设置,这是一个配置元件,所以比前后置处理器
先运行的。
此配置元件是所有线程共享的,所以只要执行一个取样请求,不管是一个线程执行多次,还是多个线程执行一次,那么它都会去依次读取csv文件的一组数据。(可设置)
使用
顾名思义,就是对取样的响应做一些断言操作。
包括
包括–模糊匹配
和上面的结果一致
否
就是取反
或者
如果勾选上,那么多个断言的关系变成 或
的关系,只要有一个断言成功,那么就算成功。
该断言会成功
大小断言
可对响应的整体、响应头、响应体、响应代码、响应消息的大小进行断言。
断言持续时间
可用来测试多线程执行测试接口运行的时间。
假如3个线程,每个线程执行两次http
此接口执行了107ms,断言失败。
json断言
假如还是这样的数据,我要判断msg为查询成功
时,才是断言成功
断言
循环控制器
将取样器放置在循环控制器内部,并且设置循环次数为5,那么此取样器
执行时会执行5次
ForEach控制器
先设置几个自定义变量
然后创建一个ForEach控制器,将取样器也添加进去。
取样器使用参数