PART1:JMeter安装包内部文件解析说明
1、bin目录,该目录是jmeter的主目录,存主JAR包;
ApacheJMeter.jar是主要JAR包;
jmeter.bat/jmeter.sh分别是win和Linux的运行文件;
jmeter.properties是主要配置文件;
2、docs目录:存放官方的API文件,用于二次开发;
3、extras目录:扩展目录,存放ant和jmeter集成所需的文件;
4、lib目录:该目录是Jmeter启动时默认的classpath,意味着使用jmeter过程中,所需import类,都需要存放在lib目录下(仅限JAR包);
5、lib\ext目录:存放jmeter的第三方组件和插件,主要继承和使用jmeter的GUI框架,形成图形化界面看到的部分;
6、printable_docs:jmeter官方帮助文档;
PART2:JMeter安装步骤
参考文章:http://www.cnblogs.com/Lam7/p/5431431.html
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。用jmeter做简单的接口测试(接口测试主要还是用soapUI),Web测试和数据库的测试。
JMeter安装包地址:http://jmeter.apache.org/download_jmeter.cgi
需要JDK1.8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
badboy安装包:http://www.badboy.com.au/download/index
1、下载好这些安装包,配置Java环境和Jmeter环境。
java环境变量配置参考:https://jingyan.baidu.com/article/ff41162596a77912e4823716.html
jmeter环境变量配置:新建系统变量 JMETER_HOME,变量值为解压的jmeter路径,例如路径 F:\Jmeter\apache-jmeter-2.11;在CLASSPATH 后面添加变量值
;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
2、安装完成后,在F:\Jmeter\apache-jmeter-2.11 目录下点击bin目录,找到Jmeter.bat文件,双击即可打开。
PART3:Jmeter脚本开发初步方法
1、通过第三方软件录制:
第三方软件:badboy、blazeMeter
badboy: I:需要将badboy中录制的脚本file export to jmeter来导出为jmeter文件;II:使用jmeter打开文件,对脚本中的说有step组件至少执行一次;III:右键 change controller逻辑控制器-选择一种逻辑控制器;
优点:操作简单、生成脚本容易;缺点:仅限于B/S架构,因为内置浏览器的内核问题,会产生兼容性的问题,导致无法录制;
通过badboy录制脚本方法,参考地址:http://www.cnblogs.com/Lam7/p/5462536.html
出现的问题1:badboy录制出现脚本错误解决办法:浏览器工具 - “互联网选项 - ”高级属性页 - “选中“禁止脚本调试”复选框之后就不会再收到这些警告了。
出现的问题2:jmeter导入badboy录制脚本错误原因,jmeter与badboy版本都需要为最新;
blazeMeter:是一个测试平台,也提供基于Chrome浏览器的录制插件; 需要翻墙下载;需要注册账号,不能用QQ邮箱;优点:操作简单、生成脚本简洁易懂;缺点:需要访问国外网站,存在风险;
2、通过自带的http代理服务器来录制;
参考地址:http://www.cnblogs.com/Lam7/p/5461604.html
理解:录制的本质是什么?和抓包手写有什么区别?录制的本质是抓包和解包,之所以能够自动完成,是因为通信的协议是标准的。
1、添加线程组、再添加HTTPcookie管理器、HTTP代理服务器
2、HTTP 代理服务器修改目标控制器,改成测试计划-->线程组,为所创立的线程组;建议修改TYPE为Java;
3、HTTP 代理服务器的requests filtering过滤器中的排除模式使用默认推荐的内容,再加上.*
4、录制对象为百度,设置HTTPs Domains填写www.baidu.com,可不加;
5、netstat -an确定自己电脑的可用端口,在端口处写上相应的端口,如8888;
6、点击启动,点击OK(关于根证书);
7、修改客户端设置,使之通过jmeter的代理服务器去访问被测服务器;Windows下通过IE选项(Internet选项-连接-局域网设置-选中代理服务器-localhost-端口)来设置即可,移动端通过wlan高级现象来设置(保证客户端和Jmeter的代理服务器在同一个局域网);
8、录制脚本完之后停止;然后将internet选项设置回来;
9、添加察看结果树,可关闭HTTP代理服务器,用JMeter运行脚本,察看结果;
测试HTTPS的网站,如百度;需要重新生成证书,没有证书的情况下打开网站会出现提醒“您的连接不是私密连接”;
优点:操作非常灵活;适用于所有实用的http/https协议的产品,不限于B/S,也可以用于C/S或者APP。
缺点:操作过程比较繁琐,需要一定的网络、架构知识;
3、抓包手写
抓包手写适用于任何的接口、性能测试工具的脚本生成;
抓包手写对测试人员的要求比较高:要对测试系统的通信协议了解;要对抓包工具了解;要对接口&性能测试工具了解;黑夜小怪弄得插件支持fiddler导出到jmeter。
PART4:jmeter教程
https://www.yiibai.com/jmeter/
Jmeter 相关元祖参数:https://blog.youkuaiyun.com/fanxiyanhong/article/details/51423487
https://www.cnblogs.com/zhangwy1024/p/9083108.html
https://blog.youkuaiyun.com/wangnan537/article/details/77627896
PART5:JMeter主要元素与组件(转载至易百教程)
JMeter的一些主要组件:
- 测试计划(Test Plan)
- 线程组(Thread Group)
- 控制器(Controllers)
- 监听器(Listeners)
- 计时器(Timers)
- 配置元素(Configuration Elements)
- 预处理器元素(Pre-Processor Elements)
- 后处理器元素(Post-Processor Elements)
请参阅以下图,以了解每个组件及其与JMeter特定模块的关系。
测试计划:包含执行脚本的所有步骤。 测试计划中包含的所有内容都按照从上到下的顺序执行,或者按照测试计划中定义的顺序执行。
线程组:表示JMeter在测试期间将使用的线程组。 线程组元素是任何测试计划的起点。 线程组提供的控件允许:设置线程数;设置加速期;设置执行测试的次数;
线程组控制面板包括:
- 线程组名称。
- 线程数(您正在测试的用户数)。
- 加速时间(您希望允许线程组从0到3个用户的时间)。
- 循环计数(应该循环测试的次数)。
- 调度程序复选框(“线程组”面板底部的复选框用于启用/禁用额外字段,您可以在其中输入测试持续时间,启动延迟,运行的开始和结束时间)。
控制器可分为两大类:采样器和逻辑控制器。
1、采样器
采样器是允许JMeter将特定类型的请求发送到服务器的组件。它模拟用户对目标服务器的页面的请求。采样器是必须将组件添加到测试计划中的,因为它只能让JMeter知道需要将哪种类型的请求发送到服务器。请求可以是HTTP, HTTP(s), FTP, TCP, SMTP,SOAP等。
下面给出了JMeter采样器服务的请求列表:
- FTP请求
- HTTP请求(也可用于SOAP或REST Web服务)
- JDBC请求
- Java对象请求
- JMS请求
- JUnit测试请求
- LDAP请求
- 邮件请求
- 操作系统进程请求
- TCP请求
2、逻辑控制器
逻辑控制器可帮助您控制线程中采样器处理顺序的流程。 它还可以更改来自其子元素的请求的顺序。
以下是JMeter中所有逻辑控制器的列表:
- 运行时控制器
- IF控制器
- 事务控制器
- 录音控制器
- 简单控制器
- while控制器
- Switch控制器
- ForEach控制器
- 模块控制器
- 包括控制器
- 循环控制器
- 仅一次控制器
- 交错控制器
- 随机控制器
- 随机顺序控制器
- 吞吐量控制器
监听器可以在测试的任何地方进行调整,直接包括在测试计划下。JMeter提供了大约15个监听器,但主要使用的是表,树和图形。当JMeter的采样器组件被执行时,监听器提供JMeter收集的关于那些测试用例的数据的图形表示。它便于用户在某些日志文件中以表格,图形,树或简单文本的形式查看采样器结果。
以下是JMeter中所有监听器的列表:
- 图表结果
- 样条曲线可视化器
- 断言结果
- 简单的数据编写者
- 监控结果
- 分布图(alpha)
- 聚合图
- 梅勒展示台
- BeanShell监听器
- 总结报告
- 示例结果保存配置
- 图表完整结果
- 查看结果树
- 汇总报告
- 查看表格中的结果
计时器:当您在网站或应用程序上执行任何操作时,它们自然会有暂停和延迟。 这些可以使用计时器(Timers)进行模拟。
JMeter发送请求时不会在每个采样器/请求之间应用延迟。 如果在服务器上执行负载/压力测试没有指定延迟,它将会超载。 这可能不完全是我们想要的。可以添加一个计时器元素,该元素允许您定义在每个请求到达时间等待的终止。
下面给出了JMeter提供的所有计时器元素的列表:
- 同步定时器
- JSR223 时间
- BeanShell 时间
- 高斯随机定时器
- 统一随机定时器
- 恒定吞吐量计时器
- BSF时间
- 泊松随机时间
配置元素:配置元素的工作与采样器的工作类似。但是,它不发送请求,但它允许修改采样器发出的请求。
这是一个简单的元素,您可以在其中收集所有采样器的关联配置值,如webserver的主机名或数据库URL等。
配置元素只能从放置元素的分支内部访问。
下面给出了JMeter提供的一些最常用配置元素的列表:
- Java请求默认值
- LDAP请求默认值
- LDAP扩展请求默认值
- 密钥库配置
- JDBC连接配置
- 登录配置元素
- CSV数据集配置
- FTP请求默认值
- TCP采样器配置
- 用户定义的变量
- HTTP授权管理器
- HTTP缓存管理器
- HTTP Cookie管理器
- HTTP代理服务器
- HTTP请求默认值
- HTTP标头管理器
- 简单的配置元素
- 随机变量
预处理器元素:在采样器发出请求之前执行,如果预处理器附加到采样器元素,那么它将在该采样器元素运行之前执行。
预处理器元素用于在运行之前修改样本请求的设置,或更新未从响应文本中提取的变量。
以下是JMeter提供的所有预处理器元素的列表:
- JDBC预处理器
- JSR223预处理器
- RegEx用户参数
- BeanShell预处理器
- BSF预处理器
- HTML链接解析器
- HTTP URL重写修饰符
- HTTP用户参数修饰符
- 用户参数
后处理器元素:在发出采样器请求之后执行后处理器元素。 如果后处理器连接到Sampler元素,那么它将在该sampler元素运行之后执行。
后处理器最常用于处理响应数据,例如,为了将来目的而提取特定值。
下面给出了JMeter提供的所有后处理器元素的列表:
- CSS/JQuery抽取器
- BeanShell后处理器
- JSR223后处理器
- JDBC后处理器
- 调试后处理器
- 正则表达式提取器
- XPath抽取器
- 结果状态操作处理程序
- BSF后处理器
函数:JMeter函数可以称为特殊值,可以填充测试树中任何Sampler或其他元素的字段。
JMeter中函数的语法:
${__functionName(var1,var2,var3)} ,
这里_functionName
匹配函数的名称,圆括号围绕发送给函数的参数。
如果函数参数包含逗号,那么请务必使用“\”
对其进行转义,否则JMeter会将其视为参数分隔符。
例如:
${__time(EEE\, d MMM yyyy)}
函数列表
函数类型 | 名称 | 注解 |
---|---|---|
信息 | threadNum | 获取线程号 |
信息 | samplerName | 获取采样器名称(标签)。 |
信息 | log | 记录(或显示)消息(并返回值)。 |
信息 | machineName | 获取本地计算机名称。 |
输入 | StringFromFile | 从文件中读取一行。 |
输入 | FileToString | 读取整个文件。 |
输入 | CSVRead | 从CSV分隔文件中读取。 |
输入 | XPath | 使用XPath表达式从文件中读取。 |
计算 | Counter | 生成递增数字。 |
计算 | intSum | 相加int数字。 |
计算 | longSum | 相加long数字。 |
计算 | Random | 生成一个随机数。 |
计算 | RandomString | 生成随机字符串。 |
脚本 | BeanShell | 运行BeanShell脚本。 |
脚本 | javaScript | 运行javaScript脚本。 |
脚本 | jexl, jexl2 | 评估Commons Jexl表达式。 |
属性 | Property | 读取property文件。 |
属性 | P | 读取一个属性(速记方法)。 |
变量 | Split | 将字符串拆分为变量。 |
变量 | eval | 评估变量表达式。 |
字符串 | regexFunction | 使用正则表达式解析先前的响应。 |
字符串 | escapeOroRegexpChars | 引用ORO正则表达式使用的元字符。 |
字符串 | Char | 从数字列表生成Unicode char值。 |
字符串 | Unescape | 包含Java转义的进程字符串(例如\n&\t)。 |
字符串 | unescapeHtml | 解码HTML编码的字符串。 |
字符串 | escapeHtml | 使用HTML编码对字符串进行编码。 |
字符串 | TestPlanName | 返回当前测试计划的名称。 |
注意:JMeter函数和变量始终区分大小写。
Example:让我们考虑一个Log Function的例子来理解JMeter中函数的使用。
JMeter日志函数的语法:
${__log("message")}
首先,我们将使用HTTP请求采样器创建一个简单的测试计划。
创建JMeter测试计划
- 进入到
JMeter/bin
文件夹并双击jmeter.bat
文件以启动JMeter界面。 - 选择测试计划节点,然后右键单击所选项目。
- 鼠标悬停在“Add”选项上,然后将显示元素列表。
- 选择“Threads (Users)” > “Thread Grou”。
- 将此线程组重命名为Thread Group 1。
添加采样器
我们必须在线程组中添加一个HTTP请求采样器。
- 选择“Thread Group”,然后右键单击所选项。
- 鼠标悬停在“Add”选项上,然后将显示元素列表。
- 选择Sampler > HTTP请求选项。
- 它将添加一个空的HTTP请求采样器。
将HTTP Request Sampler的字段配置为 -
- Name - HTTP请求采样器1。
- Server名称或IP - 在示例中,Web服务器名称将为 - www.yiibai.com 。
- Protocol - 此字段保持不变。
- Path - 我们将其写为
“/”
(斜杠)。 它表示我们想要服务器的根页面。
现在,复制整个线程组1 并将其粘贴在测试计划中三次。
- 将其他线程组分别重命名为线程组2和线程组3。
- 将其他采样器分别重命名为HTTP Request 2 和HTTP Request 3。
下图显示了测试计划的目录结构。
添加监听器
- 选择“Test Plan”节点,然后右键单击所选项目。
- 鼠标悬停在“Add”选项上,然后将显示元素列表。
- 选择 Listener -> Summary Report。
保存并执行测试计划
- 单击文件 -> 将测试计划另存为。
- 将整个测试计划保存为
Function_test.jmx
。 - 单击“Run” -> “Start” 以执行测试计划。
验证输出
因此,已经成功执行了测试计划。 现在,我们将使用log函数作为第一个HTTP Request Sampler的名称。
您可以看到日志功能已打印“Hello World”而不是完整的采样器名称。
让我们来看看一个时间函数的例子,将再次使用它作为第二个HTTP采样器的名称。
时间函数的语法:
${__time(dd MM YYYY HH mm ss)}
单击Run > Start 以执行测试计划。
可以看到时间函数已打印确切的时间和日期,而不是完整的采样器名称。