企业落地级jmeter性能测试,结果分析以及报告(4-3)

交互设计

  前言: 嗨咯铁汁们,很久不见,我还是你们的老伙计测试君,性能测试的系列马上就要出完了,废话少说直接开始正题 【文章的末尾给大家准备了大量的福利】 Filename:选择数据源文件路径 File encoding:选择编码格式,一般选择UTF-8 Delimeter:分隔符,默认即可 Variable names:给变量命名 Fist line is CSV header:如果第一行是表头,则勾选下 其他没介绍到的默认即可,不用关心 下面进行实际使用 (1)信息配置: (2)执行结果: 5.8后置处理器(Post Processors) 用于对sampler发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据(类似LoadRunner中的关联)。 例如:我们在做接口测试的时候,难免会遇到一个接口的请求参数是另一个接口的响应结果,这个时候就需要用到后置处理器来处理我们的请求参数,如系统登录成功后我们要回去sessionid,在后面业务操作中服务器会验证这个sessionid,获取sessionid的这个过程,就是用后置处理器中的正则表达式提取器来完成的 后置处理器常用于处理响应数据,提取某个值 路径:线程组(用户)->添加->后置处理器();我们可以清楚地看到JMeter5中共有11个后置处理器 Jeter自带的后置处理器,如下图所示。 5.8.1CSS/JQuery提取器 CSS/JQuery提取器,是通过css选择器定位页面元素并读取数据 。 1、我们先来看看这个 CSS/JQuery提取器 长得是啥样子,路径:线程组 > 添加 > 后置处理器 > CSS/JQuery提取器,如下图所示: 关键参数如下说明: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Apply to: Main sample only 仅适用于主要样本 Sub-samples only 仅适用于子样本 Main sample and sub-samples 主要样本和子样本 JMeter Variable Name to use 用作Jmeter变量名称 Name of created variable:引用名称 也就是jmeter里面的变量 CSS Selector expression:CSS选择器表达式 CSS表达式 Attribute:属性 要提取的元素的属性。示例:<input type="checkbox" name="colors" value="blue" id="blue">蓝色<br>,那么这里的属性就是value,因为我们要提取blue Match No.(0 for Random):匹配数字 0随机一个,否则索引(从1开始) Default Value: 缺省值 在无法提取内容的情况下放入变量的值。 CSS选择器或JQuery选择器是Jmeter的两种语法,下面对其两种语法进行简单介绍 1、新建测试计划,线程组下添加访问 博客园主页的取样器,如下图所示: 2、然后再添加CSS/JQuery提取器,如下图所示: 其中CSS选择器表达式就按如下图的方法获取,如下图所示: 3、接着再添加一个取样器 用来确认是否提取到我们要提取的东西,提取出来的值用来传参,如下图所示: 4、配置好以后,点击“保存”,运行JMeter,查看表格结果(可以看到提取的路径就是我们要提取博客园的新闻路径),如下图所示: 实例2 1、新建测试计划,线程组下添加随机变量和访问 JMeter主页的取样器,如下图所示: 线程组 随机变量 取样器 然后再添加CSS/JQuery提取器,如下图所示: 接着再添加一个取样器 用来确认是否提取到我们要提取的东西,提取出来的值用来传参,如下图所示: 配置好以后,点击“保存”,运行JMeter,查看表格结果(可以看到提取的路径就是我们要提取博客园的新闻路径),如下图所示: 5.8.2 json提取器 JSON 提取器可以使用JSON-PATH语法从JSON格式的响应中提取数据。 该后处理器与正则表达式提取器非常相似。必须将其放置为HTTP Sampler或具有JSON响应的任何其他取样器的子级,可以以非常简单的方式提取JSON文本内容。 1、我们先来看看这个JSON提取器长得是啥样子,路径:线程组 > 添加 > 后置处理器 > JSON提取器,如下图所示: 关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Update Once Per Iteration:标识是否每轮迭代更新一次元素; Apply to(应用范围): Main sample and sub-samples:应用于主sample及子sample Main sample only:默认的是这个,应用于主sample Sub-samples only:应用于子sample JMeter Variable Name to use:应用于变量命名的内容 Name of created Variable:保存的变量名,后面使用${Variable names}引用 JSON Path Expression:json表达式 Match No.(0 or Random):匹配的值是哪一个,默认不填写是获取符合条件的第一个,这个与正则表达式的类似(0为随机、N为获取第N个、-1获取所有) Compute comcatemation var(suffix_ALL):如果发现许多结果,插件将使用“,”分隔符将它们连接起来,并将其存储在名为<variable name>_ALL的var中 Default Values:当没有获取到参数值时的默认值 JSON path expression 语法 实例 新建测试计划,线程组下添加天气预报接口取样器,如下图所示: 然后再在取样器下添加JSON提取器,如下图所示: 紧接着再添加一个取样器 度娘,用来获取提取的status,提取出来的值用来传参,如下图所示: 配置好以后,点击“保存”,运行JMeter,查看表格结果,如下图所示: 度娘请求结果: 5.8.3JSR223 后置处理程序 我们先来看看这个JSR223 后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > JSR223 后置处理程序,如下图所示: 关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; parameter:要传递到脚本文件或脚本的参数列表; file name:用于执行的脚本文件,若没有脚本文件,将执行脚本; Script:传递给JSR223执行的脚本;如果提供了脚本文件,则执行脚本文件,否则执行脚本。 5.8.4调试后置处理程序 调试后置处理程序,使用正则表达式为从另一个HTTP请求中提取的HTTP参数指定动态值,配合regular expression extractor使用。暂时没找到好的例子,后面想到补充。。 1、我们先来看看这个调试后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > 调试后置处理程序,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Regular Expression Reference Name:调用的正则表达式提取器中的引用名称; Parameter names regexp group number:用于提取参数名称的正则表达式的组编号; Parameter values regex group number:用于提取参数值的正则表达式的组编号。 5.8.5JDBC 后置处理程序 JDBC 后置处理程序,实际上JIBC PostProcessor就是一个JDBC Request,它与JDBC Request功能相同,都可以执行SQL语句。在测试的过程中可能会遇到这样的测试场景:我们用JDBC Request修改了一些数据,当测试完成后,我们希望还原到原先状态,此时我们可以用JDBC PostProcessor来完成,当然用JDBC Request也可以完成。具体的JDBC PostProcessor的使用参考宏哥关于JDBC Request的这篇文章:Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)。 我们先来看看这个JDBC 后置处理程序长得是啥样子,路径:线程组 > 添加 > 后置处理器 > JDBC 后置处理程序,如下图所示: 5.8.6结果状态处理器 结果状态处理器,实际上在测试的时候我们也经常会遇到这样的测试场景:在一些测试用例失败之后我们需要进行一些操作,例如停止测试,这里可以使用结果状态处理器。 1、我们先来看看这个结果状态处理器长得是啥样子,路径:线程组 > 添加 > 后置处理器 > 结果状态处理器,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Language:语言,开发脚本选择的语言,使用的JSR223语言,可根据需要选择; Parameters:参数,传递给脚本的参数; File Name:文件名,本地开发的脚本文件(会覆盖在JMeter里编写的脚本); Script compilation caching:存储编译的脚本,默认勾选; Script:要运行脚本。编写脚本的区域。 5.8.7XPath提取器 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:参数的默认值。 实例: 1、新建测试计划,线程组下添加1个取样器 天气预报,如下图所示: 2、天气预报返回HTML,然后再添加xpath提取器,如下图所示: 举例://p[@class='w_city city_guonei']//a/@href 选取p下带有class属性为w_city city_guonei的href属性节点。 注释://p选取了p节点的所有子节点 @选取属性 /@href 从根节点选取所有的href属性 Xpath提取器设置 继续添加GetWeatherInfo取样器,获取xpath提取到的参数,如下图所示: 配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔3s),如下图所示: 5.8.8XPath2 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(包括默认的命名空间),使用不带命名空间前缀的表达式是查询不到结果的。 5.8.9BeanShell 后置处理程序 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): 脚本编辑() 实例: 列举一个简单的例子,响应结果中有中文乱码,使用BeanShell 后置处理程序来处理中文乱码。 1、新建测试计划,线程组下添加1个取样器 访问度娘,如下图所示: https://www.cnblogs.com/du-hong/p/13217399.html 然后再添加BeanShell 后置处理程序,设置脚本:prev.setDataEncoding("UTF-8"); ,如下图所示: 3、配置好以后,点击“保存”,运行JMeter,禁用BeanShell 后置处理程序,查看表格结果(中文乱码),如下图所示: (1)禁用BeanShell 后置处理程序,查看表格结果(有中文乱码) (2)启用BeanShell 后置处理程序,查看表格结果(无中文乱码) 5.9断言 (Assertions) 断言时自动化测试中最重要且绕不开的一个概念,让自己的程序尽可能像人一样去做判断,这是自动化测试需要实现的重要功能 JMeter中的断言用于检查测试中得到的响应数据等是否符合预期,Assertions一般用来设置检查点,用以保证性能测试过程中数据交互与预期一致(它的作用和LoadRunner中的检查点类似) JMeter中断言的原理:在Request的返回层面,增加一层判断机制,因为Request成功了,并不代码结果一定正确 一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,多个断言属于并的操作。当Sampler下所有的断言都通过了,那么才算是请求成功 JMeter自带的断言,如下图所示: 5.10监听器(Listener) JMeter中的监听器,是对测试结果进行处理和可视化 展示的一系列组件,能够显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据 常用的监听器有图形结果、查看结果树、集合报告等 1. 监听器放的位置不同,查看的结果也不同。 在线程组下添加监听器,查看线程组下所有请求的结果; 放在具体某个请求下,只查看此请求的结果; 若放在某个控制器节点下,则查看此控制器下节点执行的结果; 2. 该监听器推荐做调试用,在实际运行压测时,应该禁用。因为大量 请求时,启用监听器时打印的日志比较多,会造成大IO消耗,影响 压力机性能。 3. 不同的监听器,通过不同的方式,展示服务器响应信息,但是它们 原始结果数据都是一样的。 4. JMeter监听器有两种方式存储监听记录: 1)默认保存方式:CSV格式。占用磁盘比较少,推荐使用这种方式 保存。 2) 保存方式:保存数据最全面,但是占用内存大。 JMeter自带的监听器,如下图所示: JMeter自带的监听器,如下图所示 5.10.1 察看结果树 察看结果树,显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据。 (1)察看结果树,放的位置不同,查看的结果也不同。在线程组下添加察看结果树,查看线程组下所有请求的结果;放在具体某个请求下,只查看此请求的结果;若放在某个控制器节点下,则查看此控制器下节点执行的结果; (2)该监听器推荐做调试用,在实际运行压测时,应该禁用,因为大量请求时,启用该监听器时打印的日志比较多,会造成大IO消耗,影响压力机性能。 1、我们先来看看这个 察看结果树 长得是啥样子,路径:线程组 > 添加 > 监听器 > 察看结果树,如下图所示: 2、关键参数说明如下: 名称:控制器的描述性名称,显示在左边节点上,并用于命名事务 注释:控制器注释信息,非必填项 文件名:载入文件名 Log/Display Only: 仅日志错误、Success ;勾选中显示对应的日志信息 Configure:定义report中自己所关心的数据项。 取样器结果: Thread Name: 线组名称 Sample Start: 启动开始时间 Load time: 加载时长 Latency: 等待时长 Size in bytes: 发送的数据总大小 Headers size in bytes: 发送头大小 Body size in bytes: 发送数据的其余部分大小 Sample Count: 发送统计 Error Count: 错误统计 Response code: 返回码 Response message: 返回消息 Response headers:返回头信息 请求 数据获取方式、路径、地址等以及传递的参数、cookie 响应数据 响应加载的页面html 3、作用 1)查看请求结果,请求成功的测试通常为绿色;红色则代表失败。 注:在没有对请求断言的情况下,显示绿色并不一定是成功,只代表响应码是200或300系列,显示红色说明响应码是400或500系列。所以要想确定请求返回的是正确的,必须要加上断言,只有断言成功才会显示绿色。 2)查看对应Sampler的测试结果的请求、响应数据。 取样器结果:显示的是取样器相关参数(客户端参数与响应参数)请求:发送请求的具体内容响应数据:服务器返回的相应参数5.10.2 汇总报告 汇总报告,为测试中的每个不同命名的请求创建一个表行。这与聚合报告类似,只是它使用更少的内存。提供了最简要的测试结果信息,同时可以配置将相应的信息保存至指定的文件中(xml、csv格式的文件)。 单击Configure按钮,可以配置结果保存各种选项,具体这里不做说明了。 该监听器是笔者在调试jmeter项目时常用的监听器之一。 1、我们先来看看这个 汇总报告 长得是啥样子,路径:线程组 > 添加 > 监听器 > 汇总报告,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Label 取样器别名,如果勾选Include group name ,则会添加线程组的名称作为前缀 # Samples 取样器运行次数 Average 请求(事务)的平均响应时间 Min 请求的最小响应时间 Max 请求的最大响应时间 Std. Dev 响应时间的标准方差 Error % 事务错误率 Throughput 吞吐量 也就是TPS Received KB/sec 每秒收到的千字节 Sent KB/sec 每秒发送的千字节 Avg. Bytes 响应平均流量 5.10.3聚合报告 聚合报告,记录这次性能测试的总请求数、错误率、用户响应时间(中间值、90%、最少、最大)、吞吐量等,用以帮助分析被测试系统的性能。在聚合报告中,各个响应时间不能超过客户的要求,就是合格,例如不能超过响应时间2s,大于2s就是不合格的. 聚合报告应该是最详细的报告了,也是最为常用的报告。是大家在压测过程中最常用的监听器。 该监听器对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,中位数、90%、95%、错误率,吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量。 单击Configure按钮,可以配置结果保存各种选项,具体这里不做说明了。 1、我们先来看看这个 聚合报告 长得是啥样子,路径:线程组 > 添加 > 监听器 > 聚合报告,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Label :每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值 #Samples :表示测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里就显示对应的 HTTP Request的执行次数是100 Average :平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间 Median :50%用户的响应时间 90%Line :90%用户的响应时间 Min :最少响应时间 Max :最大响应时间 Error% :本次运行测试中出现错误的请求的数量/请求的总数 Throughput :吞吐量,默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数 接收/发送)KB/sec :每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec 5.10.4 后端监听器 后端监听器,是一个异步侦听器,可以将数据推入到数据库中,提供了InfluxDB,graphite选项 1、我们先来看看这个 后端监听器 长得是啥样子,路径:线程组 > 添加 > 监听器 > 后端监听器,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Back Listener implementation:BackListenerClient类的实现,Jmeter默认提供如下两种实现,因为我们使用的influxdb作为持久存储 org.apache.jmeter.visualizers.back.graphite.GraphiteBackListenerClient org.apache.jmeter.visualizers.back.graphite.InfluxdbBackListenerClient 因为我们使用的influxdb作为持久存储,所以后续只介绍InfluxdbBackListenerClient Async Queue size:异步队列大小 队列值包含异步处理时的度量标准。除非有一些特定的性能问题,否则最好不要从默认的5000。 3、我们使用InfluxdbBackListenerClient influxdbMetricsSer:org.apache.jmeter.visualizers.back.influxdb.HttpMetricsSerinfluxdbUrl:influx数据库的url。example : http://influxHost:8086/write?db=jmeterapplication:被测试的应用名称。此值也作为名为“application”的标记存储在“events”中measurement:使用默认的”jmeter“就行summaryOnly:为true的情况下,只输出所有请求的集合数据报告,为flase的情况下,输出每条数据的详情报告、samplersRegex:正则表达式将与样本名称匹配并发送到后端。默认匹配所有testTitle:测试名称。默认的设置为 Test name。该值作为名为“text”的字段存储在“事件”度量中。 JMeter在测试的开始和结束时自动生成一个注释,其值以'started'和'ed'结尾percentiles:要发送到后端的百分位数,多个值已;分割TAG_WhatEverYouWant:自定义标签。您可以根据需要添加任意数量的自定义标签。对于它们中的每一个,只需创建一个新行并在其名称前加“TAG_”5.10.5汇总图 汇总图,我们可以看到表格显示的结果与图形结果,看着挺复杂,其实稍微翻译一下就知道,绝大多数都是对图形的设置。 1、我们先来看看这个 汇总图 长得是啥样子,路径:线程组 > 添加 > 监听器 > 汇总图,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空; Column settings Columns to display 选择要在图表中显示的列Rectangles color 单击右侧颜色矩形打开弹出对话框,选择自定义颜色。(就是点击)Foreground color 允许更改值文本颜色Value font 允许定义文本的字体设置Draw outlines bar? 在条形图上绘制或不绘制边界线Show number grouping? 是否显示Y轴标签中的数字分组Value labels vertical? 更改值标签的方向。(默认为水平)Column label selection 按结果标签过滤Title 图表的头部定义图表的标题 Graph size 根据当前JMeter窗口大小的宽度和高度计算图形大小。使用“ 宽度”和“ 高度”字段定义自定义大小。单位是像素。 X Axis settings 定义X轴标签的最大长度(以像素为单位) Y Axis settings 为Y轴定义自定义最大值。 Leg 定义图表图例的放置和字体设置 5.10.6断言结果 断言结果,对相应的请求添加断言。对取样器进行断言后,我们希望知道断言结果;此元件可以帮助我们显示断言结果(察看结果树元件中也可以看到)。消耗了大量资源(内存和CPU),性能测试时候不建议使用。 作用:用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致,一般与结果树结合使用。 1、我们先来看看这个 断言结果 长得是啥样子,路径:线程组 > 添加 > 监听器 > 断言结果,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空。 5.10.7比较断言可视化器 比较断言可视化器,和比较断言配合使用。 1、我们先来看看这个 比较断言可视化器 长得是啥样子,路径:线程组 > 添加 > 监听器 > 比较断言可视化器,如下图所示: 2、关键参数说明如下: Name:名称,可以随意设置,甚至为空; Comments:注释,可随意设置,可以为空。 5.10.8生成概要结果 生成概要结果,该测试元素可以放置在测试计划中的任何位置。生成到目前为止对日志文件和/或标准输出的测试运行的摘要。显示了运行总计和差异总计。在适当的时间边界每n秒(默认为30秒)生成一次输出,因此将同步在同一时间运行的多个测试。 1、我们先来看看这个 生成概要结果 长得是啥样子,路径:线程组 > 添加 > 监听器 > 生成概要结。

标签: 交互设计