目录
一、JMeter直连数据库
1.1 准备工作
1.2 配置JDBC连接池参数
1.3 编写JDBC脚本
二、逻辑控制器
2.1 如果(if)控制器
2.2 循环控制器
2.3 ForEach控制器
2.3.1 ForEach控制器与用户定义的变量配合使用
2.3.1 ForEach控制器与正则表达式配合使用
三、定时器
3.1 同步定时器 (Synchronizing Timer)【集合点】
3.2 常数吞吐量定时器(Constant Throughput Timer)
四、JMeter分布式
4.1 分布式测试原理
4.2 分布式配置与运行
4.2.1 代理机(Agent)配置( Jmeter.property)
4.2.2 控制机(controller)配置( Jmeter.property)
4.2.3 分布式运行
五、JMeter性能测试常用图表及并发数
5.1 插件下载与安装
5.1.1 插件安装
5.1.2 性能测试常用图表
5.1.3 基于jmeter客户端监控服务器硬件资源
5.2 并发数计算
六、JMeter测试报告
6.1 聚合报告
6.2 HTML报告
在软件测试工作中,连接数据库通常是为了校验数据。
1)启动tpshop数据库
库名:tpshop2.0
表名:tp_goods
商品id字段:goods_id
商品名字段:goods_name
2)加载mysql的DBC驱动
方法1:在测试计划下方,点击浏览添加JDBC的jar包;
方法2:将JDBC的jar拷贝到lib目录,重启jmeter;
添加方式:测试计划—>线程组—>(右键添加)配置元件—>JDBC Connection Configuration
脚本编写步骤:以搜索指定商品,在返回结果中检查是否包含指定商品的ID的详情URL为例:
1)添加JDBC Request请求
JDBC连接池名称:必须与“JDBC连接池”中的连接名一致
要执行sql语句
variable name中:写明要保存的数据的参数名
2)添加HTTP请求--搜索请求
参数为中文时,将参数写到下方参数位置,并勾选上"编码"
3)添加断言
在响应断言中配置要检查的数据内容
注意:应用JDBC Requests查询出的结果时,需要加上索引(因为JDBC查询的结果保存为一个列表)
控制脚本执行顺序
常用的逻辑控制器:
if 控制器用来控制他下面的测试元素是否运行
添加方式:测试计划-->线程组-->(右键添加)逻辑控制器-->如果(if控制器)
案例:1)使用“用户定义的变量”,定义一个变量neme,name的值可以是“baidu”或者“itcast”;
2)根据name的变量值实现对应的访问网站
分析操作步骤:
第二种配置方法:
勾选上Interpret Condition as Variable Expression,判断条件需要使用jex13函数。(使用这个函数来进行判断时,Jmeter自身的执行效果要更高一些。
通过设置循环次数,来实现循环发送请求
添加方式:测试计划-->线程组-->(右键添加)逻辑控制器-->循环控制器
案例:1)循环访问百度10次
操作步骤
1)添加线程组
2)添加循环控制器
3)添加http请求
4)添加查看结果树
循环控制器只控制其子节点下的http请求,线程组对所有的请求都有效;
加入线程组循环次数为2次,循环控制器次数为3,则循环控制器下的请求执行次数为2*3=6次;
与用户定义的变量或者正则表达式提取器配合使用,循环读取用户定义的变量和正则表达式结果中的所有数据。
添加方式:测试计划-->线程组-->(右键添加)逻辑控制器-->foreach控制器
配置参数:
案例:1)有一组关键字[hello,python,测试],使用用户定义的变量存储;
2)依次取出关键字,并在百度搜索,例如:https:www.baidu.com/s?wd=hello
操作步骤:
- 新建线程组
- 用户定义的变量
- 添加foreach控制器
- 添加http请求
- 添加结果树查看结果
ForEach控制器结合用户自定义变量使用
添加用户自定义变量
添加 ForEach控制并配置
案例:访问传智播客首页http://itcast.cn,获取首页中的地址信息,并全部保存下来,依次取出关键字,并在百度搜索:https://www.baidu.com/s?wd=地址1
1)添加HTTP请求,获取 http://itcast.cn首页中的地址信息;
2) 通过正则表达式提取所有地址
3)使用ForEach循环读取地址
4)读取到的地址输入百度请求
在JMeter中叫做同步定时器,在其他软件中又叫做集合点(比如lr)。收到请求后保证大量的请求在同一时间进行发送,形成绝对的并发量;
实现原因:设置同步定时器,有请求要发出时,同步定时器会暂缓请求发送,一直到积攒的请求书达到要求的数量时再将所有的请求同时发送出去,形成绝对的并发(更大的压力负载)。
案例:模拟100个用户同时访问百度首页,统计高并发情况下运行情况。
- 配置一次运行20个用户,运行观察结果
- 配置一次运行30个用户,运行观察结果
操作步骤:
- 1)添加线程组
- 2)添加HTTP请求
- 3)添加同步定时器
- 4)添加查看结果数
- 5)添加监听器-聚合报告
吞吐量:单位时间内服务器处理的请求数量;
介绍:
常数吞吐量计时器可以让JMeter以以固定的吞吐量向服务器发送HTTP请求(以每分钟的样本数为单位,而不是每秒)执行,判断服务器的处理能力。
添加方式:测试计划-->线程组-->HTTP请求-->(右键添加)定时器-->Constant Throughput Timer
案例:一个用户以20QPS(20次/s)的频率访问百度首页,持续一段时间,统计运行情况;
操作步骤:1)添加线程组,循环次数设置为永远
2)添加HTTP请求
3)添加常数吞吐量定时器
4)添加查看结果树
5)添加监听器--聚合报告
注意:常数吞吐量只是帮助达到性能测试负载压力要求,不代表性能有bug或者无bug。对于bug的分析需要通过响应时间来判断。
分布式主要针对测试机而言;
分布式测试:当性能测试时需要模拟的负载(用户/请求)太高,一台测试机无法模拟,需要多台测试机一起来模拟达到要求的负载量,这就叫分布式。
在使用jmeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时可以使用JMeter提供分布式测试的功能。
原理:JMeter分布式测试时,选择其中一台作为控制机(controller),其他机器作为代理(Agent),即一个控制机加上多个代理机组成。
分布式相关注意事项:
1)Agent机上需要安装JMeter
2)修改服务端口--sever_port 代理机启动的端口,不冲突即可;
3)将RMI SSI 设置为禁用
4)运行Agent上的jmeter-server.bat文件,启动JMeter。
1)修改JMeter的bin目录下jmeter.properties配置文件,修改remote_hosts;
2)将RMI SSI 设置为禁用
代理机:
控制机:
添加方式:测试计划-->线程(用户)-->Concurrency Thread Group
注意:如果此路径下没有Concurrency Thread Group,则先在Plugins Manager中plugins manager->available plugins->搜索Custom Thread Groups插件->勾选->点击Apply Changes and Restart Jmeter 安装插件;
注:配置添加一下插件:3 Basic Graphs 、5 Additional Graphs 、Custom Thread Groups、PerfMon (Servers Performance Monitoring) 将这几个插件都安装上,用的比较多。
1)普通的计算方式:
2)二八原则:
3)按照每天的具体业务数据进行计算(稳定性测试TPS)
4)模拟用户峰值业务操作的并发量:(压力测试TPS)
题目:某购物商城,经过运营统计,正常一天成交额为100亿,客单价平均为300,交易时间主要为10:00-14:00,17:00- 24:00,其中19:00-20:00的成交量最大,大约成交20亿。
需求分析:
测试计划-->右键-->监听器-->聚合报告
响应时间:
观察当前最大最小的波动范围
错误率
吞吐量