一.主流性能测试工具
性能测试工具:loadrunner,jmeter
1.1 loadrunner介绍
1.2 jmeter介绍
相同点:
都能模拟大量用户
都能支持多协议(常见的协议都支持,如Http)
都有监控及分析报表功能
不同点:
结论:项目日常性能测试jmeter足够用,出商业报告优先LR.
二.jmeter的下载安装配置启动
2.1 jmeter的下载
方式一;官网下载:Apache JMeter - Download Apache JMeter
方式二:直接接收,使用:(我的jmeter文件在D:\install\jmeter\apache-jmeter-4.0)
2.2 配置环境变量
新建JAVA_HOME
CLASSPATH填写
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
path填写
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
验证
java -version
2.3:配置jmeter环境变量
2.3.1:新建JMETER_HOME
2.3.2:CLASSPAT填写
;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar
2.3.3:path填写
%JMETER_HOME%\bin
2.3.4 :验证
方式一:cmd中输入jmeter
方式二:bin目录下执行jmeter.bat或者jmeter.sh(linux)
三.jmeter的目录结构
bin 目录(常用文件介绍)
jmeter.bat:windows下启动文件
jmeter.sh:Linux下启动文件
jmeter.log:Jmeter运行日志文件
jmeter.properties:Jmeter配置文件
/docs目录——Jmeter帮助文档
/lib/ext目录——存放Jmeter依赖的jar包
四.jmeter功能概要
4.1汉化
4.2 修改主题
五.jmeter元件和组件
5.1 元件的基本介绍
元件:多个类似功能的容器(类似于类)
5.2 组件的基本介绍
组件:实现独立的某个功能:(类似于方法)
小结:
5.3元件的作用域
元件的作用域:是靠测试计划的树形结构中元件的父子关系来确定的
提示:所有的组件都是以取样器为核心来运行的。组件添加的位置不同,生效的取样器页不同
元件的执行顺序
同一作用域下的不同元件:
配置元件,前置处理器,定时器,取样器,后置处理器,断言,监听器同一作用域下相同的元件:
从上到下的顺序依次执行
jmeter的案例
定时器1--http请求1--定时器1--定时器2--http请求2--定时器1---定时器3--http请求
六.jmeter使用示例
6.1 第一个案例
需求:使用jmeter访问百度首页接口,并查看请求和响应信息
步骤:
1:启动jmeter
2:在‘测试计划’下添加'线程组'
3:在''线程组''下添加'http请求'取样器
4:填写‘http请求’的相关请求数据
5:在‘线程组’下添加‘察看结果树’监听器
6:点击‘启动’按钮进行执行,并查看结果
6.2 线程组
1. 作用:线程组就是控制jmeter用于执行测试的一组用户
位置:右键点击‘测试计划’-->添加-->线程(用户)-->线程组
2. 特点:
模拟多人操作
线程组可以添加多个,多个线程组可以并行或者串行
取样器和逻辑控制器必须依赖线程组才能使用
线程组下可以添加其他元组下组件
3.线程组的分类
普通线程组,常用的线程组,可以看做是一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
setup线程组:一种特殊类型的线程组,可用于执行预测试操作
teardown线程组:一种特殊类型的线程组,可用于执行测试后工作
4.参数讲解
6.3 HTTP请求
1.作用:向服务器发送HTTP和HTTPS请求
位置:进入线程组-->右键-->添加-->取样器-->HTTP请求
2.参数
6.4 监听器
1.作用:监听器可以动态的监控jmeter测试执行的过程,实时查看测试结果
位置:在线程组>>添加>>监听器>>聚合报告/察看结果树
察看结果树
通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过
Thread Name:线程组名称
Sample Start: 启动开始时间
Load time:加载时长
Latency:等待时长
Size in bytes:发送的数据总大小
Headers size in bytes:发送数据的其余部分大小
Sample Count:发送统计
Error Count:交互错误统计
Response code:返回码
Response message:返回信息
Response headers:返回的头部信息
聚合报告
七.jmeter参数化
1.jmeter介绍
本质:使用参数的方式替代脚本中的固定的测试数据
实现方式:文件定义的方式/数据库的方式/定义变量
2.jmeter参数化
参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法.
jmeter中常见的参数化方式
用户定义的变量
用户参数
CSV Data Set Config
函数
2.1 用户定义的变量
作用:定义全局变量
位置:测试计划-->线程组-->配置元件-->用户定义的变量
需要通过${变量名}进行引用
2.2 用户参数
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置:测试计划-->线程组-->前置处理器-->用户参数
2.3 csv数据文件设置
作用:让不同的用户在多次循环时,可以取到不同的值
位置:线程组>>配置原件>>CSV数据文件设置
如果使用TXT可能不能很好的管理数据,如果使用CSV类型,就方便很多,其他的用法和TXT
2.4 函数参数化
作用:计数函数,一般做执行次数统计使用
方式一:couter函数
位置:选项>>函数 注释对话框>>_counter
方式二:CsvRead函数
操作: 选项>>函数注释对话框>>_CsvRead
方式三:randomstring函数
操作:选项>>函数注释对话框>>_randomstring
八.jmeter断言
作用:让程序判断预期结果和实际结果是否一致
提示:
jmeter在请求的返回层里面有个自动判断机制(响应状态码)
但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性
常见的断言
响应断言/json断言/xpath断言/持续断言
1.响应断言
作用:对http请求的任意格式的响应结果进行判断
位置:测试计划-->线程组-->http请求-->(右键添加)断言-->响应断言
2.json断言
作用:对http请求的json的响应结果进行判断
位置:测试计划-->线程组-->http请求-->(右键添加)断言-->json断言
断言不一致时
3.xpath断言
定义:xpath基于xml的树状结构,提供在数据结构树中寻找节点的能力
位置:测试计划-->线程组-->http请求-->(右键添加)断言-->xpath断言
区别:响应断言(适用任何的返回类型),json断言(只适用于json的返回类型),Xpath Assertion断言针对返回信息为Xpath的数据类型进行断言
4.断言持续时间
作用:检查http请求的响应时间是否超出要求范围
位置:测试计划-->线程组-->http请求-->(右键添加)断言-->持续时间断言
九.jmeter关联
1.为什么使用关联
2.关联 :当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,就需要用关联处理
常见的关联
正则表达式提取器 --提取任意格式的数据
json提取器 --提取json格式的数据
xpath提取器 --提取html格式的数据
2.1正则表达式
正则表达式:就是一个公式,或者是一套规则,使用这套规则可以从任意字符串中提取想要的数据内容
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*:代表前面的字符出现0或者多次
.*匹配规则:找到左边界值后,往右查找右边界,找到最后面的右边界,中间的所有的数据都被记录下来
?:代表非贪婪匹配,找到左边界后,往右查找匹配走边界,只要右匹配的右边界就停止继续查找;再次查找左边界的右边界
公式格式:左边界(.*?)右边界
(.*?)百度一下,你就知道
正则表达式匹配:
(.*?)-(.*?)-(.*?)\n
通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可每一组数据都可以由一个或者多个值
作用:针对任意格式的响应数据进行提取
位置:线程组>>添加>>后置处理器>>正则表达式提取器
引用名称:存放提取出的值的参数名称
正则表达式:左边界(.*?)有边界
模板:用$$引用起来,表示解析出第几组()的值匹配数字:1表示第一个值,-1表示所有的取值
实现接口查询登录用户--查询余额在登录的接口中提取数据
在余额查询的接口中引用
2.2json提取器
json提取器 :就是json表达式提取数据,从返回格式是json中提取想要的数据内容
位置:线程组>>添加>>后置处理器>>json提取器
实现登录--查询余额
提取登录的token数据,通过json表达式
余额的接口