jmeter这个测试工具在测试界十分常用,我们经常会利用它进行一些测试。其中,有一些组件,我们在一般的测试中可能不常使用,但却十分方便,可以为我们的测试工作提供很大的帮助,现在就让我们来看一看JMeter中几个非常实用的功能。

一、Json提取器(JSON Extractor)的使用

在利用http请求器进行的测试中,往往服务器会返回JSON格式的Response message,我们又时常需要提取其中的一些键值来进行下一步的测试。这时,JSON Extractor无疑是最好的工具。

JSON Extractor有如下几个参数设置:

Variable names:保存的变量名,后面使用${Variable names}引用

JSON Path expressions:JSON表达式

Match Numbers:匹配数字(0代表随机,1代表第一个,-1代表所有,留空默认是0)

Default Values:找不到时的默认值

Compute concatenation var(suffix_ALL):如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值

以合成主播项目的测试为例,在启动流的请求中,服务端会返回所启动流的streamID。


我们可以利用以下设置进行提取,将streamID值保存在同名变量中:


在需要该值的地方,我们只需使用${streamID}进行引用。

比如在查询流状态的过程中,我们需要利用前一步启动流时所使用的streamID来调用查询接口,查询当前流的状态。如图所示,在查询请求的Path位置引用${streamID},即可完成查询请求。


二、断言(Assertion)的使用

在利用jmeter进行测试时,有时服务器返回的信息很多,在结果树中看不出哪些请求出现了错误,必须要通过后续分析log文件才能发现,在长时间稳定性测试中还好,但对于一些要实时发现错误并统计错误率的场景就显得十分不便······



这时候,断言的作用就体现了出来。

通过添加断言,我们可以自己设置一些错误标识,经筛选后在结果树和聚合报告显示为错误,并计入错误率统计,方便我们随时观察测试中的错误情况。

在jmeter中有多种断言可供添加,其中最常用的就是响应断言(Response Assertion)。如下图所示,我们可以在请求器下添加响应断言。


比较关键的是Field to Test和Patterns Matching Rules这两个选择,前者设置判断的属性,后者设置判断的逻辑。比如,我们要对响应结果文本中是否含有error进行判断,以确定服务器返回结果的正确性,这时就在Field to Test中选择Text Response(响应文本),Patterns Matching Rules中选择Contains(包含),同时勾选Not(表示不含error的就是正确的),然后在下面的Patternsto Test里面填上error。

这样,在测试过程中,正确的(不含error)的响应结果在结果树中显示为绿色,错误的(含有error)响应结果显示为红色,十分便于我们观察出错情况,同时,错误的结果也会计入聚合报告的统计之中,可以实时观察错误率。


三、BeanShell的使用

BeanShell在jmeter脚本中的地位十分重要,灵活使用BeanShell可以为编写jmx脚本带来很大帮助,令我们能方便地设计出一些特定的测试方案,结合jmeter测试工具多线程的优势,更可以真实地模拟出大量不同客户端对于服务器的各种请求。

以下是有关BeanShell的一些简单介绍:

1、BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

2、BeanShell是一种松散类型的脚本语言(这点和JS类似);

3、BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。

4、BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。


从以上介绍可以看出,BeanShell对于Java有着良好的兼容性,可以在其中执行Java代码来完成一些工作。

BeanShell几乎可以用在jmeter脚本的各个地方:其中最常用的有BeanShell PreProcessor(前置处理器)、BeanShell PostProcessor (后置处理器)和BeanShell Sampler(采样器)。他们的使用方法大同小异,只是因作用的位置不同而略有区别。下面就来举几个例子,体会一下beanshell简单实用的功能。

1、获取、修改、设置变量值

在jmeter中,我们可以设置各种各样的变量,无论是从外部文件引用的数据,还是自定义、随机的参数值等,他们都会作为变量在各自区域供我们灵活调用。而有时,我们希望在测试进行的过程中,对这些相对固定的值进行一些修改,这时BeanShell就可以为我们提供有力的支持。对于变量的操作,BeanShell提供了以下两种常用操作方法:

//获取变量值vars.get(“变量名”); //设置变量值vars.put(“变量名”, “变量值”);

比如在测试lstmlm服务时,需要构造像

文本1;文本2;…;文本n-1;文本n

这种形式的字符串,其中文本数量、长度、排列顺序等都要在一定范围内随机。这在不使用BeanShell的情况下,仅凭jmeter变量很难做到。而有了BeanShell,这种构造就变得十分简单。



其中的一种方法,我们先将备选的文本分别放置在n个变量之中。


然后在线程组添加Beanshell Sampler,在Scripts区域写入以下代码:


拼接好的字符串会保存在str这个变量之中,在需要调用字符串的地方,只需用${str}调用即可。最后执行脚本,线程组中的各个线程就会分别用每次拼接的字符串去做相应的请求了。

实际测试结果(因为本测试有关工具需要在linux环境中使用,所以将windows中的jmx脚本设置好,修改相关文件路径,放置在linux环境下运行)


从结果日志中可以看到,请求时的确按要求构造了我们需要的字符串。

2、保存返回文件

有时,http请求返回的是一个文件,但jmeter显示、记录Response内容是使用日志形式,默认无法直接将文件保存下来。这时,我们可以利用BeanShell来编写简单代码,实现文件的的保存。这里用到了BeanShell PostProcessor(后置处理器)。

下面以利用在线服务转换音频格式,生成特定speex格式的音频文件为例:

首先设置好http请求,并在请求器下添加BeanShell PostProcessor(后置处理器)。


在BeanShell PostProcessor的Scripts区域写入以下代码:


执行脚本,最终会将请求的返回结果(转换好的speex格式音频)写入文件。由于jmeter的多线程,非常适用于做这种批量转换。


关于BeanShell的用法还有很多,用好BeanShell可以为我们的测试工作带来很大的帮助,使一些工作变得简单、灵活、高效。

好啦,以上就是本期有关JMeter功能介绍的全部内容。我们下期再见啦~如果还想了解更多软件测试知识,可关注“织雀聊测试”公众号,回复“资料”,就能得到织雀教育软件测试视听大礼包,快来一起学习吧!

1.《(jmeter聚合报告如何清除)jmeter的聚合报告》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《(jmeter聚合报告如何清除)jmeter的聚合报告》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3299398.html