4 相关元件介绍
4.1 前置处理器
1 BeanShell预处理程序
BeanShell预处理程序为取样器运行设置初始化的脚本文件。通过右键在弹出菜单中选择“添加–>前置处理器–>BeanShell 预处理程序”,如图11所示。
图11 BeanShell 预处理程序
- 重置解释器:是否为每个采样器重新创建解释器,默认为:False。
- 传递给BeanShell脚本的参数,参数存在下面的变量中。
Ø Parameters:整个参数字符串作为一个变量Parameters。
Ø bsh.args:用空格分隔的字符串被保存到变量数组bsh.args。
- 文件名:包含有待运行的脚本文件名。
- Script:书写的脚本。
在这里可用的变量有:ctx、vars、props、prev、sampler和log。除了prev和sampler,其他参数我们在第5.5.5节军介绍过。
Ø prev 提供对当前取样器结果的访问能力。它映射 org.apache.jmeter.samplers 的
SampleResult 类。比如。
√ prev.getResponseCode():获得响应码。
√ prev.getResponseDataAsString():获得响应内容。
√ prev.isResponseCodeOK():判断响应状态码是否为OK对应的状态码(200),范围布尔值。
√ prev.getThreadName():获取线程名。
√ prev.getAssertionResults():获取取样器断言结果。
√ prev.getContentType():获取取样器响应Content-Type首部字段的值域(包含参数)。
√ prev.getMediaType():获取取样器响应Media-Type首部字段的值域(不包含参数)。
√ prev. getSentBytes():获取取样器请求报文的大小。
√ prev. getBytesAsLong():获取取样器响应报文的大小。
√ prev. getLatency():获取延迟时间。
√ prev. getConnectTime():获取连接时间。
√ prev. getURL():获取取样器请求URL。
√ prev. getUrlAsString ():获取取样器请求URL字符串。
√ prev. getGroupThreads ():获取线程组下正在运行的线程数。
√ prev. getHeadersSize():获取取样器响应首部字段大小。
√ prev. getBodySizeAsLong():获取取样器响应正文大小。
由此可见Prev在Beanshell断言中也是可以使用的,我就不知道在Beanshell断言就没有提及。
Ø sampler:访问当前samper对象,常用方法如下。
√ sampler.setName("beanshell1"):设置Sample名。
√ sampler.getName():获得Sample名。
4.2后置处理程序
1 BeanShell 后置处理程序
BeanShell后置处理程序在取样器取样完毕后进行处理的脚本文件。通过右键在弹出菜单中选择“添加–>后置处理器–>BeanShell 后置处理程序”,如图12所示。
图12 BeanShell 后置处理程序
这里的重置解释器、传递给BeanShell脚本的参数、文件名和Script均与BeanShell预处理程序一致。
在这里可用的变量有:ctx、vars、props、prev、data和log。除了data以外,其他变量均在第5.5.5节或第4.1节中介绍过。
Ø data:允许访问当前样本数据。
4.3 取样器
1 Java请求
有些请求逻辑比较复杂,JMeter中自带的取样器很难实现,就需啊哟自己写Java程序来实现请求。比如Socket请求,复杂的HTTP请求,RocketMQ请求等,只要Java能实现的都可以放到JMeter中执行。Java请求,通过右键在弹出菜单中选择“添加–>取样器–> Java请求”,如图13所示。
图13 Java请求
将编写好的程序(必须包括一个implements JavaSamplerClient的类)打成jar包,放在%JMETER_HOME%/lib/ext/目录下,即可在Java请求中找到,下面的部分为设置函数的参数。JMeter自带两个Java 请求:org.apache.jmeter.protocol.java.test.JavaTest和org.apache.jmeter.protocol.java.test.SleetTest。
- JavaTest采样器对于检查测试计划非常有用,因为它允许在几乎所有字段中设置值。然后可以由断言等使用这些变量。字段允许使用变量,因此可以很容易地看到这些变量的值。
Ø Sleep_time:sleep多长时间(ms)。
Ø Sleep_mask:要添加多少“随机性”,Sleep时间的计算如下:总睡眠时间 =
SleepTime + (System.currentTimeMillis() % SleepMask)。
Ø Label:要使用的标签,如果提供,则覆盖名称。
Ø ResponseCode:如果提供,则设置SampleResult ResponseCode。
Ø ResponseMessage:如果提供,则设置SampleResult ResponseMessage。
Ø Status:如果提供,则设置SampleResult状态。如果该值等于“OK”,则状态设置为success,否则样本将标记为failed。
Ø SamplerData:如果提供,则设置SampleResult SampleData。
Ø ResultData:如果提供,则设置SampleResult ResultData。
- SleetTest设置测试计划sleep时间。Sleep_time和Sleep_mask同JavaTest的Sleep_time和Sleep_mask。
5 总结
本章我们采用三种方法来对付比较复杂逻辑的代码进行接口测试的方法。
- 书写类文件,在BeanShell中调用。
- 书写类文件,在函数助手中调用。
- 书写类文件,在Java请求中调用。
最后我们对。
- 前置处理器:BeanShell预处理程序。
- 后置处理器:BeanShell 后置处理程序。
- 取样器:Java请求。
共3个元件进行了学习。