文章目录
JMeter
简介
Apache JMeter是Apache组织开发的基于Java的压力测试工具
- 可以用于对服务器、网络或对象模拟巨大的负载
- 通过创建带有断言的脚本来验证程序是否能返回期望的结果
-
测试静态的或动态的资源的性能。
文件、Servlet、Perl脚本、Java对象、数据库和查询、FTP服务器等。
-
模拟在服务器、网络或者其他对象上附加高负载以测试它们的轻度或受压能力
-
分析它们提供的服务在不同负载条件下的总性能情况
-
可进行性能的图形分析或负载测试服务器/脚本/对象
适用领域:
- 用于对软件做压力测试,它最初设计用于Web应用测试,但后来扩展到其他测试领域。例如静态资源、java小服务程序、CGI脚本、java对象、数据库、FTP服务器等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和整体性能。
- JMeter能够对程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你的期望结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
- Apache jmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和 查询,FTP服务器等等的)的性能进行测试
- 接口测试
- 数据压力测试
- 批量产生测试数据
优点
- 开源、免费
- 跨平台
- 支持多协议
- 小巧
- 功能强大
缺点
- 不支持IP欺骗
- 使用JMeter无法验证JS程序,也无法验证页面UI,所以要和Selenium配合来完成Web2.0应用的测试。
安装与配置
安装
-
http://jmeter.apache.org/
-
系统中首先安装JDK(要求1.3以上的版本)并正确地设置了环境变量JAVA_HOME;
并把JAVA_HOME下的bin目录加到path环境变量中
环境变量
-
JMETER_HOME C:\Users\lf-27\OneDrive\tools\apache-jmeter-5.5
-
path
- %JMETER_HOME%\bin
-
配置完成后powershell中验证
jmeter -v
启动
-
运行bin目录下的JMeter.bat可启动JMeter
-
如果测试实在防火墙后或需要通过代理服务器的条件下进行,那么启动时需要通过命令行参数指明防火墙或代理服务器的主机名和端口号
-
Jmeter -H my.proxy.server -P 8080 -u username -a password # -H [代理服务器的主机名或IP地址] # -P [代理服务器端口] # -u [验证的用户名] # -a [验证的用户密码]
实例
-
JMeter是根据测试计划中描述的测试步骤来执行测试的
测试计划描述了执行测试过程中JMeter的执行过程和步骤
-
一个完整的测试激活包括
- 一个或多个线程组(Thread Groups)
- 控制器(Logic Controller)
- 监听器(Listener)
- 定时器(Timer)
- 断言(Assertions)
- 配置元件(Config Elements)
- 前置处理器(Pre Processor)
- 后置处理器(Post Processor)
HTTP
request详解
一个http请求指从客户端到服务端的请求信息,我们可以通过浏览器的F12键,可以看到以下信息
- 请求地址:url
- 请求方法:HEAD、GET、POST、PUT、OPTIONS、DELETE、PATCH
- HTTP协议/版本:
- 请求头:(告诉服务器关于客户端环境和请求正文相关的一些信息,例如浏览器版本,请i去参数的长度
- 请求参数
response详解
一个http response(http响应)指的是从服务端到客户端的响应消息,它包括了以下信息
响应状态码
标记响应状态的一个标志,200——成功,404——资源找不到,500——服务器异常,302——重定向等
响应头
告诉客户端关于服务器,响应报文相关的一些信息,例如:服务器类型,响应报文格式
location:告诉浏览器跳到哪里
content-length:告诉浏览器回送数据的长度
content-type:告诉浏览器回送数据的
响应报文
针对请求服务响应回来的数据,比如html、xml、json等
http请求常见状态码
2开头(请求成功)表示成功处理了请求的状态代码
3开头(请求被重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务的请求
5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错
状态吗 | 请求状态 | 详解 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求。通常,这表示服务器提供了请求得网页。 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回得信息可能来自另一来源。 |
204 | 无内容 | 服务器成功处理请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,但没有返回任何内容 |
206 | 部分内容 | 服务成功处理了部分GET请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。 |
301 | 永久移动 | 请求得网页已永久移动到新的位置。服务器返回此响应(对GET或HEAD请求得响应)时,会自动将请求者转到新的位置 |
302 | 临时移动 | 服务器目前从不同位置得网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | 查看其他位置 | 请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码 |
304 | 未修改 | 自从上次请求后,请求得网页未修改过。服务器返回此响应时,不会返回网页内容 |
305 | 使用代理 | 请求者只能使用代理访问请求得网页。如果服务器返回此响应,还表示请求者二应使用代理 |
307 | 临时重定向 | 服务器目前从不同位置得网页响应请求,但请求者应继续使用原有位置进行以后得请求。 |
400 | 错误请求 | 服务器不理解请求得语法 |
401 | 未授权 | 请求要求身份验证。对于需要登录得网页,服务器可能返回此响应 |
403 | 禁止 | 服务器拒绝请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 禁用请求请求中指定的方法 |
406 | 不接受 | 无法使用请求中的内容特性响应请求的网页 |
407 | 需要代理 | 此状态代码与401(未授权)类似,但指定请求者应当授权使用代理 |
408 | 请求超时 | 服务器等候请求时超时 |
409 | 冲突 | 服务器完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。 |
410 | 已删除 | 如果请求的资源已永久删除,服务就会返回此响应。 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求。 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件。 |
413 | 请求实体过大 | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力 |
414 | 请求的 URI过长 | 请求的 URI(通常为网址)过长,服务器无法处理 |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持 |
416 | 请求范围不符合要求 | 如果页面无法提供请求的范围,则服务器会返回此状态代码。 |
417 | 未满足期望值 | 服务器未满足”期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 尚未实施 | 服务不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | 服务不可用 | 服务器目前无法使用《由于超载或停机维护》。 通常,这只是暂时状态。 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP 版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本 |
参数化
CSV Data Set config
此方法设置引用全部数据:多次循环
发起请求
- 添加线程组:介绍线程组的功能
- 添加sampler(取样器):介绍http请求的界面
- paramters:参数 bodydata json xml
- 保存脚本,进行请求
param参数
- 键值对类型
- 注意空格
bodydate参数
-
json xml格式的参数
{'key':'251518e073ef6c3c9504dd286c3f6a86','city':'阆中'}
<xml> <p1 name="key" value=""/> <p2 name="city" value=""/> </xml>
-
注意空格
FilesUpload参数
- 上传文件
- 参数
- 文件名称 文件地址
- 参数名称 file
- MIME类型 多媒体类型 (根据文件的后缀 去找MIME类型
- 以上三个参数都是必填
- 注意空格
http请求默认值
- http请求默认值 会在发送http请求的时候 自带的参数
默认值设置后,在后续的再次设置时后续设置将无效 相当与**final static
**
结果树
设置查看结果树,我们就可以实时看到每个请求的数据以及响应数据
CSS/JQuery_Tester使用
作用:CSS/jQuery测试程序只适用于文本响应,可以根据JSoup或Jodd对响应数据进行过滤和查看。
HTML使用
html模式一共有三种选择
- HTML:HTML试图将响应以HTML方式呈现。渲染的HTML可能无法与浏览器显示的页面相比较;但是可以提供一个基本的页面判断,帮助我们确定是否请求页面成功,但是图像、样式表等不会下载。所以看起来页面会比较乱。
- HTML(download resources):如果选择了HTML(download resources)选项,则会下载HTML代码引用的图像、样式表等,呈现出更加具体的HTML样式。
- HTML Source formatted:如果选择了HTML Source格式化试图选项,则呈现有Jsoup格式化和清理的HTML源代码。相对于第一种来说是,更加的简单,跟TEXT模式并没有区别
JSON模式使用
-
JSON:JSON试图将显示树形风格的响应(也处理JavaScript中嵌入的JSON)。跟text格式是有明显的区别的。
-
JSON Path Tester:JSON路径测试试图将允许您测试JSON-PATH表达式,并从特定响应中查看所提取的数据
//$表示根节点 新版本jmeter无需添加$ //$.result['city'] or $.result.city 两种表示方式
Document使用
视图将显示各种类型的文档中提取文本,例如,Microsoft Offfice(Word、Excel、PowerPoint 97-2003、2007-2010(openxml)、Apache OpenOffice(writer、calc、impress)、HTML、gzip、jar/zip文件(一组内容)
- 使用Document方式需要下载Apache Tika binary package(tika-app-x.x.jar),并将它放到JMETER_HOME/lib目录,如果文档大于10MB,则不会显示
- 若要更改此限制,请将JMeter属性文件中document.max_size设置足够大,或设置为0以移除限制。
- 安装完后,重启Jmeter
RegexpTester
Regexp仅适用于文本响应。点击“Test”按钮,系统将应用regexp对上面板中的文本及逆行查询,将结果显示在面板中。
正则表达式引擎与正则表达式提取器中使用的正则表达式引擎相同
字符 | 描述 | 例 |
---|---|---|
[aeiou] | 匹配[……]中所有的字符 | “google” |
[^aeiou] | 匹配除了[……]中所有字符 | “google” |
[A-Z] | [A-Z]表示一个区间,即匹配所有大写字母 | “Google” |
. | 匹配除换行符(\n、\r)之外的任何字符,相当于``[^\n]r` | “Google” |
[\s\S] | 匹配所有。空白符,包括换行(\s)和非空白符,不包括换行(\S) | “Google bing” |
\w | 匹配字母、数字、下划线。等价于[A-Za-z0-9] | “A1b2” |
元字符
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。‘\n’ 匹配一个换行符。序列 ‘\’ 匹配 “” 而 “(” 则匹配 “(”。 |
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
? | 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。 |
. | 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(.|\n)"的模式。 |
(pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘(’ 或 ‘)’。 |
(?:pattern) | 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。 |
(?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如"Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"`(?<=95 |
(?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。例如"`(?<!95 |
x|y | 匹配 x 或 y。例如,‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 则匹配 “zood” 或 “food”。 |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、‘l’、‘i’、‘n’。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,‘[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,‘[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。 |
\cx | 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]'。 |
\W | 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。 |
\xn | 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,‘\x41’ 匹配 “A”。‘\x041’ 则等价于 ‘\x04’ & “1”。正则表达式中可以使用 ASCII 编码。 |
\num | 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,‘(.)\1’ 匹配两个连续的相同字符。 |
\n | 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 |
\nm | 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。 |
\nml | 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 |
\un | 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。 |
运算符优先级
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?😃, (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,“或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |
XPath Tester使用
XPath仅适用于文本响应。上面板显示了纯文本。点击”Test“按钮,系统将应用XPath多亏上面版中的文本进行查询,结果将显示在下面板中
判断返回的页面中是否含有该结构
响应结果
fiddler查看响应结果
配置原件
HTTP信息头管理器
-
什么是信息头?
请求头
-
什么时候用?
传cookie,token或者是其他的信息的时候
-
我们的场景设计?
反爬虫添加信息头——模拟浏览器发送请求
-
其他场景?
-
范围?
- 放于线程组中,整个线程组生效
- 放于某个请求中,整个请求生效
断言
jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似;用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。所以通过断言,我们不再回被200所迷惑,而是可以通过断言看到我们请求是否真正的成功
响应断言
使用方法:
-
给某个请求添加好断言
-
添加对应的断言结果监听器
XPath Assertion
定义:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
作用对象:针对返回信息为XPath的数据类型进行断言
函数助手
CSVRead
使用此函数时,想使用全部数据就得多设置线程
RandomString
从0-9中选取任意三个字符
调用时
num ${__RandomString(3,1234567890,)} #生成以num 开头,后边从0-9中选取任意三个字符
正则表达式
元字符 | 意义 |
---|---|
. | 任意单个字符 |
\d | 任意单个数字 |
[0-9] | 等价0-9 |
[a-zA-Z] | 等价所有的大小写字母 |
限定符 | 意义 |
---|---|
+ | 匹配至少大于1次 |
? | 匹配0次或1次 |
* | 匹配0次或多次 |
{n,}、{n,m}、{n} | 匹配限定次数(至少n次、n到m次、最多n次) |
Metch No.
默认0 随机匹配
-1 匹配所有
foreach控制器
把menu的数组中的每个值
存到id_1、id_2、id_3到id_10的值中
JSON Extractor
cookie处理方式
方法一
添加cookie管理器
方式二
添加正则表达式和HTTP cookie管理器
token处理
存储测试结果
结果写入excel
与全国职业院校技能大赛无关,不看了
以后有需要再了解
文件上传
脚本录制
录制脚本优化
- 添加请求过滤
-
js/css/png/jpeg等这类请求删掉
-
没有传递任何数据的请求可以屏蔽掉
-
没有传递任何数据的请求可以删掉
web脚本参数化
压力测试,场景设计
-
哪些业务需要做压力测试?
- 比较常用得业务场景(or功能模块)
- 但业务场景/或多业务场景
- 项目要求做得业务场景
-
压力测试并发数是多少
-
有预期值?
一次性达到?逐步增加?
参照上次性能测试结果
2:8原则
-
无预期值?
只有参考在线用户数2:8原则
可以用在线用户数的20%作为参考去测试
1000个用户–200个并发—不支持–调低
–支持–调高
-
-
关注的参数
-
响应时间
1 3 5 /2 5 8参考值
在性能测试结果基础上,去进行有必要的调整
-
tps
Transactions Per Second
每秒事务数
越高越好
-
错误率
越低越好
-
cpu和内存的使用情况
-
设置线程数
- 线程数:就是并发数,目标100采取叠加的方式进行添加
- 启动时间:每秒启动多少个(可以根据结果去进行调整额),策略:想要服务器压力大点就时间少点,想要服务器药理慢慢增加就时间长点
- 循环测试:指定次数or永远(跟下面的持续时间配合使用
- 调度器:配合永远使用,去设置持续时间
- 负载测试:逐步增加并发数
- 稳定性测试:时间确定~~查看改时间段内的性能情况
查看压力测试结果
Aggregate Report
聚合报告
Average:平均响应时间——默认情况下是单个Request的平均响应时间,当使用了Transaction Controller是,也可以以Transaction为单位显示平均响应时间
Median:中位数
90%line:90%用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现的错误的请求的数量/请求的总数
Throughput:吞吐量—默认情况下表示每秒完成的请求数(Request per Second)
压力测试结果分析
使用Assertion对结果进行简单的分类
- 响应断言:通常是用于对每个request sampler进行额外验证的工具
- 响应时间断言:规定请求的响应时间不能超过多少毫秒
- 文件大小断言:单位bytes,
通过jtl结果分析
选择某个监听器,点击页面中的configure按钮。对结果文件进行配置,建议多勾选如下项:Save Field Name,Save Assertion Failure Message
经过以上设置,此时保存下来的jtl文件会有如下项:
timeStamp 请求发出的绝对时间 elapsed 响应时间 label 请求的标签 resposeCode 返回码 responseMessage 返回消息 threadName 请求所属的线程 dataType 数据类型 success 是否成功 failureMessage 失败消息 bytes 字节 latency 响应时间 吞吐量=完成成的transaction数/完成这些transaction数所需要的时间
平均响应时间=所有响应时间的总和/完成的transaction数
失败率=失败的个数/transaction数
非GUI模式
#运行测试脚本,生成结果文件
jmeter -n -t my_test.jmx -l log.jtl
#利用结果文件生成html报告
jmeter -g log.jtl -o report1001 #report1001为不存在的目录(会自动新建)
#运行脚本,生成结果文件,同时生成html报告
jmeter -n -t my_test.jml -l log.jtl -e -o report1001 ##report1001为不存在的目录(会自动新建)
非GUI模式命令学习(CLI模式 command line)
命令参数 命令释义 -n 设置命令行模式 -t 指定JMX脚本路径
参数为:JMX脚本路径,若非当前目录需用全路径或相对路径-l 指定结果文件路径(jtl或csv)
参数为:结果文件路径。路径不存在时会自动创建-j 指定执行日志路径
参数为:日志路径。路径不存在,不会自动创建-r 设置分布式(远程)执行
服务器列表有JMETER_HOME\bin\jmeter.properties中remote_hosts指定-R 指定远程(分布式)服务器列表
参数为:指定服务器列表,配置形式同remote_hosts-g 指定测试结果文案路径。仅用于生成测试报表
参数为:csv结果文案-e 设置测试完成后生成测试报表 -o 指定测试报表生成文件夹。文件夹必须为空或不存在
参数为:报表文件夹路径-H 指定代理服务器域名或代理域名服务器IP
参数为:代理服务器域名或代理服务器IP-P 指定代理服务器端口
参数为:代理服务器端口
html报告
-
APDEX指数
性能指数,Apdex(Application Performance Index)是一个国际通用标准,Apdex是用户对应用性能满意度的量化值。它提供了一个统一的测量和报告用户体验的方法,把最终用户的体验和应用性能作为一个完整的指标进行统一度量。
0~1
越近1满意的用户越多
-
Response Times Over Time
响应时间变化曲线:展示平均响应时间随时间变化情况
-
Bytes Throughput Over Time
展示每秒数据吞吐量随时间变化的情况
-
Lateny Latencies Over Time
展示Latency time随时间变化的情况
-
Hits per Second
每秒点击数曲线
-
Response Codes per Second
HTTP状态码时间分布曲线:展示响应状态码随时间的分布情况
-
Transactions per Second
事务吞吐量时间曲线(TPS):展示每秒处理的事务数随时间变化情况
-
平均响应是啊金与每秒请求数的关系图
展示平均响应时间与每秒请求数(可以理解为QPS)的关系
-
Latency time与每秒请求数的关系图
展示Latency time与每秒请求数的关系
-
响应时间百分位图
响应时间的百分位分布图
-
活动线程数变化曲线
展示测试过程中活动线程数随时间变化情况
-
平均响应时间与线程数的关系图
展示平均响应时间与线程数的关系
-
柱状响应时间分布图
展示落在各个平均响应区间的请求数情况