一、线程组
作用:线程组就是控制Imeter用于执行测试的一组用户
位置:右键点击'测试计划’-->添加 -->线程(用户)--> 线程组
特点: 模拟多人操作线程组可以添加多个,多个线程组可以并行或串行取样器(请求)和逻辑控制器必须依赖线程组才能使用线程组下可以添加其他元件下组件
1,线程组分类
(1)线程组
普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
(2)setup线程组
一种特殊类型的线程组,可用于执行预测试操作
(3)teardown线程组
一种特殊类型的线程组,可用于执行测试后工作
注:在并行情况下setup最先执行,teardown最后执行
2,线程组参数详解
(1)http请求参数详解
作用:向服务器发送http及https请求 位置:选中线程组->右键->添加->取样器->HTTP请求
案例一:GET请求,URL为test_百度搜索要求:使用HTTP请求-路径来传递get请求参数
案例二:GET请求,URL为百度安全验证要求:使用HTTP请求-参数列表来传递get请求的参数
案例三:POST请求,URI为百度安全验证,请求体为:wd=test(form表单要求:使用HTTP请求-参数列表来传递POST请求的form格式参数
不在演示和get一样将http请求方式更改为post即可
案例四:POST请求,URI为百度安全验证,请求体为:wd=test(form表单要求:使用HTTP请求-消息体数据来传递POST请求的form格式参数
(2)查询结果树
作用:查看HTTP请求的请求和响应结果
位置:选中测试计划/线程组->右键->添加->监听器->查看结果树
组成: 取样结果:查看响应信息头信息、响应状态码
请求:查看请求相关信息(ur1、方法、参数)
响应:查看响应信息
查询结果乱码解决方案
打开bin目录下的jmeter.properties文件
ctrol+f 查找sampleresult.default.encoding
更改为UTF-8,将#取消掉
重启jmeter
二、JMeter进行http接口测试的技术要点
1,参数化
(1)定义
参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法。
(2)JMeter中常见的参数化方式
1,用户定义的变量 ----------------全局变量
作用:定义全局变量 位置:测试计划 -->线程组-->配置元件 -->用户定义的变量
案例
请求:百度一下,你就知道
要求:使用用户定义的变量配置被测系统的协议、域名和端口
引用
2,用户参数--------------------------为每个用户分配不同的参数值
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置:测试计划 --> 线程组--> 前置处理器--> 用户参数
案例
请求:百度一下,你就知道 要求:第一个用户请求附带参数:name=“张三"&age=28;第二个用户请求附带参数:name="李四"&age=30
3,CSV Data Set Config----------文件方式参数化
作用:让不同用户在多次循环时,可以取到不同的值
位置:测试计划 -->线程组-->配置元件 -->CSV数据文件设置
csv参数含义
案例
请求:百度一下,你就知道 要求:循环请求3次,每次请求时附带参数username,password,code的值不相同
步骤
1:定义Csv数据文件
2:添加线程组,设置循环次数为3
3.添加Csv数据文件设置
4.添加HTTP请求
不在演示
5.添加查看结果树
不在演示
4,函数---------------------------------随机数据
作用:计数函数,一般做执行次数统计使用
位置:在菜单中选择-->工具-->函数助手对话框
2,JMeter断言
断言:让程序自动判断预期结果和实际结果是否一致 提示: JMeter在请求的返回层面有个自动判断机制(响应状态码)但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。 JMeter中常用断言: 响应断言 JSON断言 持续时间断言(Duration Assertion)
(1)响应断言
作用:对HTTP请求的任意格式的响应结果进行断言 位置:测试计划-->线程组-->HTTP请求 -->(右键添加)断言 --> 响应断言
参数配置详细介绍: 测试字段:要检查的项(实际结果) 响应文本:来自服务器的响应文本,即主体响应代码:响应的状态码,例如:200 响应信息:响应的信息,例如:OK Response Headers:顺应头部 Request Headers:请求头部 Request Data:请求数据 URL样本:请求URL Document(text):响应的整个文档忽略状态:忽略返回的响应状态码
模式匹配规则:比较方式 包括:文本包含指定的正则表达式 匹配:整个文本匹配指定的正则表达式 Equa1s:整个返回结果的文本等于指定的字符串(区分大小写Substring:返回结果的文本包含指定字符串(区分大小写 否:取反 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK) 注意:Equa1s和substring模式是普通字符串,而包括和匹配式是正则表达式
(2)Json断言
作用:对HTTP请求的JSON格式的响应结果进行断言 位置:测试计划-->线程组--> HTTP请求 -->(右键添加)断言 --> JSON断言
参数介绍: Assert JsoN Path exists:用于断言的JSON元素的路径(实际结果)
Additionally assert value:如果您想要用某个值生成断言请选择复选框
Match as regular expression:使用正则表达式断
Expected value:期望值((期望结果)
Expect nu11:如果希望为空,请选择复选框
Invert assertion(will fail if above conditionsmet):反转断言(如果满足以上条件则失败)
(3)断言持续时间
作用:检查HTTP请求的响应时间是否超出要求范围 位置:测试计划-->线程组-->HTTP请求-->(右键添加)断言 -->断言持续时间
参数介绍 持续时间(亳秒):HTTP请求允许的最大响应时间(单位:毫秒)超过则认为失败
3,JMeter关联
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。 Jeter中常用的关联方法: 正则表达式提取器 XPath提取器 JSON提取器
(1)正则表达式提取器
作用:针对任意格式的响应数据进行提取 位置:测试计划 -->线程组--> HTTP请求 -->(右键添加)后置处理器-->正则表达式提取器
参数介绍: 引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写title,则可用${title}引用它正则表达式 ():括起来的部分就是要提取的。 匹配任何字符串。 -:一次或多次。 ?:不要太贪婪,在找到第一个匹配项后停止。 ,如果在正则表达式中有多个提取值,则可以模板:用$$引用起来是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值缺省值:如果参数没有取得到值,那默认给一个值让它取。
(2)XPath提取器
作用:针对HTML格式的响应结果数据进行提取 位置:添加方式:测试计划-->线程组--> HTTP请求(右键添加)--后置处理器--> xPath提取器
参数介绍: Use Tidy (tolerant parser): 当需要处理的页面是HTML格式时,必须选中该选项
当需要处理的页面是XML或XHTML格式时,取消选中该选项。
引用名称:存放提取出的值的参数名称 xPath &uery:用于提取值的xPath表达式
匹配数字:如果xPath路径查询出许多结果,则可以选择提取哪个0:表示随机,-1:表示提取所有结果,1表示第一个值
缺省值:参数的默认值
(3)Json提取器
作用:针对JSON格式的响应结果数据进行提取 位置:添加方式:测试计划-->线程组--> HTTP请求 -->(右键添加)后置处理器--> JSON提取器
参数介绍: Names of created variables:存放提取出的值的参数名称
JSON Path Expressions:JSON路径表达式
Match wo:如果JSON路径匹配出许多结果,则可以选择提取哪个。0:表示随机,-1:表示提取所有结果,1表示第一个值
Default values:参数的默认值
(4)JMeter属性
作用:是一个线程定义的变量在另外的线程中也能使用
使用"meter属性"的操作步骤? 1.添加线程组 2.添加HTTP请求 3.添加JSON提取器,添加Beanshe11取样器(将JSON提取器提取的值保存为JMeter属性)
4.保存meter属性:${setProperty(pro city,${city},)}添加HTTP请求-百度(读取JMeter属性)
5.读取JMeter属性:${ property(pro_city,,)}
6.添加查看结果树
略微复杂不在演示
4,脚本录制
JMeter录制脚本的操作步骤: 1.添加HTTP代理服务器,并进行配置加HTTP代理服务器:测试计划(右键>非测试元件->HTTP代理服务器配置代理服务器的参数
2.开启windows操作系统的浏览器代理
3.启动服务器开始录制
4,在浏览器页面中进行操作,成功后,,就能在JMeter当中看到抓取到的接口请求了
三、JMeter直连数据库
1,直连数据库的使用场景
用作请求的参数化 例如:登录时需要的用户名,可以从数据库中查询获取
清理垃圾数据 例如:添加商品(商品名/编号等不能重复),再执行该脚本不能成功,需要在下次执行前删除该商品数据
用作结果的断言 例如:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致
准备测试数据 例如:通过数据库来准备大量(几十万条)的性能测试数据。
2,直连数据库配置
添加MySQL驱动jar包 方式一:在测试计划面板点击“浏览.“按钮,将你的JDBC驱动添加进来
方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter
配置数据库连接信息 添加方式:测试计划 -->线程组-->(右键添加)配置元件-->JDBC Connection Configuration
参数介绍
variable Name:mysql数据库连接池名称(JDBC请求时要引用)
Database URL: jdbc:mysql://localhost:3306/tpshop2.0组成:协议 +数据库IP +数据库端口 +连接的数据库名称
IDBC DRIVER class:com.mysql.jdbc.Driver(MySQL驱动包位置固定格式 - 下拉框选择) Username:root(连接数据库用户名,如实填写)
3,jmeter逻辑控制器
(1)if控制器
作用:II控制器用来控制它下面的测试元素是否运行 位置:测试计划-->线程组-->(右键添加)逻辑控制器--> 如果(I£)控制器
(2)循环控制器
作用:通过设置循环次数,来实现循环发送请求 位置:测试计划-->线程组-->(右键添加)逻辑控制器循环控制器
(3)foeach控制器
作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值
位置:测试计划-->线程组-->(右键添加)逻辑控制器-->ForEach控制器
参数介绍: 输入变量前缀:要读取的输入变量的固定前缀
开始循环字段:要读取的输入变量后缀数字的最小值-1
结束循环字段:要读取的输入变量后缀数字的最大值
输出变量名称:读取输入变量的值后保存的新变量名,用于后续HTTP请求来引用
4,jmeter定时器
(1)同步定时器
同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会 在同一个时间点一起释放,瞬间产生很大的压力。
位置:测试计划 -->线程组--> HTTP请求-->定时器(右键添加)-->Synchronizing Timer
参数介绍: 模拟用户的数量,即指定同时释放的线程数数量。Number of simulated Users to Group by:若设置为0,等于设置为线程组中的线程数量 Timeout in mi1liseconds:超时时间,即超时多少毫秒后同时释放指定的线程数: 如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等如果大于0,那么如果超过mimeout in milliseconds中设置的最大等待时间后还没达到设置的线程数Timer将不再等待,释放已到达的线程。默认为0
(2)常数吞吐量定时器
作用:让JMeter按指定的吞吐量执行,以每分钟为单位 位置:测试计划 -->线程组--> HTTP请求 -->(右键添加)定时器 -->Constant rhroughput Timer
参数介绍: Target throughput(in samples per minute):目标吞吐量。注意这里是每个用户每分钟发送的请求数
(3)固定定时器
定时器总结