了解jmeter一篇就够
1、参数化
先说明一下什么是Jmeter的参数化:这里打个比方,假如要验证用户的账号密码可不可以注册成功,有5种情况,如果不用参数化就要写5个HTTP的请求,要是用了参数化只要一个HTTP请求就可以了,虽然也是运行了5次,但是测试人员只运行一次,减轻了测试人员的工作
Jmeter的参数方法有4种
1.CSV Data Set Config获取参数值,
2.助手函数获取参数值,
3.用户参数,
4.用户自定义变量方法
参数化流程:
1、找出需要做参数化的数据
2、准备提供给参数化需要的数据源
3、把脚本里的常量替换成变量(使用前面的数据源数据)
第一种:CSV Data Set Config获取参数值
1.在线程组中添加CSV Data Set Config
2.创造数据源文件,创造3个数据,以英文逗号隔开
3.选择数据源文件
4.在HTTP请求中替换变量名,形式:${userName}
假如在user.txt中有5个账号密码数据,需要对这5个账号密码进行测试,就要将线程组数据设置成5个
结果:
第二种:助手函数获取参数值
随机生成一个电话号码:点击界面上面的函数助手》选择随机数》按要求填写好最小值最大值(我们测试的是固定前面的135三个数,后面的8位数随机)》点击生成》复制生成的字符串》粘贴
将复制的字符串粘贴好
查看请求参数,tel参数也加是11位电话号码了
第三种:用户参数
假如测试高并发的时候,有3台服务器,我们选择用户参数
添加服务器的各个ip
这样运行后就是随机运行的服务器ip
第四种:用户自定义变量方法
2、后置处理器
1.简介
后置处理器是在发出“取样器请求”之后执行一些操作。取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的。例如系统登录成功以后我们需要获取SessionId,在后面的业务操作中服务器会验证这个SessionId,获取SessionId这个功能过程就可以用后置处理器中的正则表达式提取器来完成。
2.预览后置处理器
首先我们来看一下JMeter的后置处理器,路径:线程组(用户)->添加->后置处理器();我们可以清楚地看到JMeter5中共有11个后置处理器(不包括jp@gc开头的后置处理器,这个是宏哥安装的插件),如下图所示:
如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的前置处理器类型,如下图所示:
通过以上的了解,我们对后置处理器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的后置处理器。
3.常用后置处理器详解
这一小节,宏哥就由上而下地详细地讲解一下常用的后置处理器。
3.1JSR223 后置处理程序
JSR223后置处理程序,用法和JSR223 PreProcessor类似,可以参考宏哥的这一篇文章:Jmeter(十六) - 从入门到精通 - JMeter前置处理器(详解教程)
1、我们先来看看这个JSR223 后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > JSR223 后置处理程序,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
parameter:要传递到脚本文件或脚本的参数列表;
file name:用于执行的脚本文件,若没有脚本文件,将执行脚本;
Script:传递给JSR223执行的脚本;如果提供了脚本文件,则执行脚本文件,否则执行脚本。
3.2调试后置处理程序
调试后置处理程序,使用正则表达式为从另一个HTTP请求中提取的HTTP参数指定动态值,配合regular expression extractor使用。暂时没找到好的例子,后面想到补充。。
1、我们先来看看这个调试后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > 调试后置处理程序,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Regular Expression Reference Name:调用的正则表达式提取器中的引用名称;
Parameter names regexp group number:用于提取参数名称的正则表达式的组编号;
Parameter values regex group number:用于提取参数值的正则表达式的组编号。
3.3JDBC 后置处理程序
JDBC 后置处理程序,实际上JIBC PostProcessor就是一个JDBC Request,它与JDBC Request功能相同,都可以执行SQL语句。在测试的过程中可能会遇到这样的测试场景:我们用JDBC Request修改了一些数据,当测试完成后,我们希望还原到原先状态,此时我们可以用JDBC PostProcessor来完成,当然用JDBC Request也可以完成。具体的JDBC PostProcessor的使用参考宏哥关于JDBC Request的这篇文章:Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战(详解教程)。
1、我们先来看看这个JDBC 后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > JDBC 后置处理程序,如下图所示:
3.4结果状态处理器
结果状态处理器,实际上在测试的时候我们也经常会遇到这样的测试场景:在一些测试用例失败之后我们需要进行一些操作,例如停止测试,这里可以使用结果状态处理器。
1、我们先来看看这个结果状态处理器长得是啥样子,路径:线程组 > 添加 > 后置处理器 > 结果状态处理器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Language:语言,开发脚本选择的语言,使用的JSR223语言,可根据需要选择;
Parameters:参数,传递给脚本的参数;
File Name:文件名,本地开发的脚本文件(会覆盖在JMeter里编写的脚本);
Script compilation caching:存储编译的脚本,默认勾选;
Script:要运行脚本。编写脚本的区域。
3.5XPath提取器
Xpath提取器,如果请求返回的消息为xml或html格式的,可以用XPath提取器来提取需要的数据。
1、我们先来看看这个 Xpath提取器长得是啥样子,路径:线程组 > 添加 > 后置处理器 > Xpath提取器,如下图所示:
2、关键参数说明如下:
APPly to:作用范围(返回内容的断言范围) Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器 Main sample only:仅作用于父节点的取样器 Sub-samples only:仅作用于子节点的取样器 JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
XML Parsing Options:要解析的XML参数 UseTidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中; Quiet表示只显示需要的HTML页面, Report errors表示显示响应报错, Show warnings表示显示警告; Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨; Validate XML:根据页面元素模式进行检查解析; Ignore Whitespace:忽略空白内容; Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;
Return entire XPath fragment of text content:返回文本内容的整个XPath片段;
Reference Name:存放提取出的值的参数。
XPath Query:用于提取值的XPath表达式。语法参考:XPath
匹配数字:取第几个匹配结果,0随机,-1全部,1代表第一个,2代表第二个,....以此类推
Default Value:参数的默认值。
3.5.1实例
1、新建测试计划,线程组下添加1个取样器 天气预报,如下图所示:
2、天气预报返回HTML,然后再添加xpath提取器,如下图所示:
举例://div[@class='w_city city_guonei']//a/@href
选取div下带有class属性为w_city city_guonei的href属性节点。 注释://div选取了div节点的所有子节点 @选取属性 /@href 从根节点选取所有的href属性
Xpath提取器设置
3、继续添加GetWeatherInfo取样器,获取xpath提取到的参数,如下图所示:
4、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔3s),如下图所示:
3.6XPath2 Extractor
Xpath2提取器,虽然JMeter官方文档说可以使用XPath2查询语言从结构化响应(XML或(X)HTML)中提取值,但目前测试只支持从XML响应中提取值;从HTML中提取会报错,这个可以通过查看结果树中选择XPath2 Tester来验证。
1、我们先来看看这个 Xpath2提取器长得是啥样子,路径:线程组 > 添加 > 前置处理器 > Xpath2提取器,如下图所示:
2、关键参数说明如下:
APPly to:作用范围(返回内容的断言范围) Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器 Main sample only:仅作用于父节点的取样器 Sub-samples only:仅作用于子节点的取样器 JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)
Return entire XPath fragment of text content:返回文本内容的整个XPath片段;
Name of created variable:存放提取出的值的参数。
XPath Query:用于提取值的XPath表达式。
Match No 匹配数字:取第几个匹配结果,0随机,-1全部,1代表第一个,2代表第二个,....以此类推
Default Value:参数的默认值。
Namespaces aliases list:命名空间别名列表。就是这个功能,能让使用命名空间比使用旧的XPath提取器更方便。关于命名空间含义,可以看官方文档:XML 命名空间,但是写的不够详细,详细的参考这里:XML 命名空间(XML Namespaces)介绍以及节点读取方法。由于XPath2对于表达式的要求比较严格,对于带命名空间的XML(包括默认的命名空间),使用不带命名空间前缀的表达式是查询不到结果的。
3.7BeanShell 后置处理程序
BeanShell 后置处理程序,如果请求返回的消息为xml或html格式的,可以用XPath2提取器来提取需要的数据。这个估计是JMeter5.0新加的吧,具体用法和Xpath提取器的应该差不多的,可以参考上边Xpath提取器的用法。
1、我们先来看看这个 BeanShell 后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > BeanShell 后置处理程序,如下图所示:
2、关键参数说明如下:
Reset bsh.Interpreter before each call: 每次迭代是否重置解释器
Reset Interpreter :false
Parameters to be passed to BeanShell(=>String Parameters and String []bsh.args) 参数传递,字符串或者数组
Parameters:
Script file(overrides script): 脚本文件
File Name:
Script(variables:ctx vars props prev data log): 脚本编辑()
3.7.1实例
在这里宏哥就列举一个简单的例子,响应结果中有中文乱码,使用BeanShell 后置处理程序来处理中文乱码。
1、新建测试计划,线程组下添加1个取样器 访问度娘,如下图所示:
2、然后再添加BeanShell 后置处理程序,设置脚本:prev.setDataEncoding("UTF-8"); ,如下图所示:
3、配置好以后,点击“保存”,运行JMeter,禁用BeanShell 后置处理程序,查看表格结果(中文乱码),如下图所示:
(1)禁用BeanShell 后置处理程序,查看表格结果(有中文乱码)
(2)启用BeanShell 后置处理程序,查看表格结果(无中文乱码)
###
3、命令行介绍
一、使用命令行方式运行Jmeter
1.1为什么
使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死。
所以正确的打开方式是在GUI模式下调整测试脚本,再用命令行模式执行。
命令行方式支持在多个环境下使用,windosw的dos环境下,也可以在linux环境上执行。
1.2怎么用
1.3示例
例1:bin目录下执行D:\性能测试\工具\jmeter脚本和结果\jira_jmeter.jmx路径下的脚本文件,生成测试结果到D:\性能 测试\工具\jmeter脚本和结果\jmeter_test_1.jit
jmeter.bat -n -t D:\性能测试\工具\jmeter脚本和结果\jira_jmeter.jmx -l D:\性能 测试\工具\jmeter脚本和结果\jmeter_test_1.jit例2:bin目录下执行D:\性能测试\工具\jmeter脚本和结果\jmeterreport.jtl路径下的脚本文件,生产结果到bin目录
jmeter.bat -g D:\性能测试\工具\jmeter脚本和结果\jmeterreport.jtl -o test
4、常见问题解答
- 点击运行无反应可以看下对应的运行日志
- 子类的默认值和父类不同可以用子类新加key的方式去覆盖