jmeter应用---测试元件介绍(四)
JSR223 Sampler
jsr223的采样器允许使用jsr223脚本代码来运行一个取样器。
jsr 223测试元素有一个可以显著提高性能的特性(编译)。从这个特性中获益:
- 使用脚本文件而不是内联它们。这将使JMeter编译它们,如果这个特性在ScriptEngine中可用,并缓存它们。
- 若编译属性设置为true,可以使用脚本文本和检查缓存编译的脚本。
在使用这个特性时,确保脚本代码没有直接在脚本代码中使用JMeter变量,因为缓存只会缓存第一个替换。
缓存大小由以下JMeter属性(JMeter.properties)设置:
jsr223.compiled_scripts_cache_size = 100
JSR223支持的变量有,可以直接在脚本中使用
- log:log 写入信息到jmeber.log文件
- ctx:JmeterContext该变量引用了当前线程的上下文
- vars - JMeterVariables操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁
- vars.get(String key):从jmeter中获得变量值
- vars.put(String key,String value):数据存到jmeter变量中
- vars.putObject(“OBJ1”,new Object());
- props - JMeterProperties - class java.util.Properties操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
- props.get(“START.HMS”) START.HMS为属性名,在文件jmeter.properties中定义
- props.put(“PROP1”,”1234”);
- SampleResult - SamplerResult:提供对前一个取样器结果的访问
- sampler - sample当前取样器
- Label - 取样器标签
- FileName - 文件名称
- Parameters - 入参列表
- args - 入参变量数组类似java main中的args
- SampleResult - SampleResult
- ResponseCode:默认是200
- ResponseMessage:默认是ok
- IsSuccess:默认是true
支持的语言:

TCP Sampler
TCP 取样器通过TCP/IP来连接特定服务器,连上服务器之后发送消息,然后等待服务器响应。JMeter提供纯TCP协议级别Sampler,可以通过它来完成所有基于TCP协议的性能测试

TCPClient classname:TCP Sampler提供了3个Sampler的实现,分别是
- org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
- org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl
- org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl
Re-use connection:如果“Re-use connection”(重复使用连接) 复选框被选中了,在同一个线程中Samplers(取样器)共享连接,包含相同主机名和端口,不同主机/端口合并将会使用不同线程。如果“Re-use connection” 和 “Close connection”(关闭连接)同时被选中,这个套接字在运行完当前Samplers将会关闭。再下一个Sampler将会另外创建一个新套接字。你可能想要在每次线程循环结束之后关闭套接字。
如果请求发生错误或者“Re-use connection” 没有被选中,这个套接字将会关闭,新的套接字将会在接下个Sampler调用的时候打开。
Close connection:关闭连接
以下的属性可以控制设置TCP
- tcp.status.prefix
用文本来表示前缀的状态数字 - tcp.status.suffix
用文本来表示后缀的状态数字 - tcp.status.properties
用属性文件名称去将状态码转成消息 - tcp.handler
表示处理请求的实现类(默认是TCPClientImpl)-对应界面TCPClient classname
这个处理器请求的类已经在GUI配置了,tcp.handler设置的类无效,如果没有找到,它就会去org.apache.jmeter.protocol.tcp.sampler包下找,用户可以提供他自己的实现类,这个类必须要继承org.apache.jmeter.protocol.tcp.sampler.TCPClient父类
TCP Sampler实现类介绍:
- TCPClientImpl
实现了以文本编辑器中所编辑的纯文本为内容进行发送。最简单的实现类,也是tcp默认使用的。如果你设置属性tcp.eolByte(在配置文件jmeter.properties中),将读取一行字节作为响应,其他的情况是通过读取流的方式,你可以采用平台默认字符编码或者你通过设置属性tcp.charset来设置你想要的编码。 - BinaryTCPClientImpl
以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的字节内容进行发送。读取响应的时候反过来。当读取响应的时候,它会读取到设置属性tcp.BinaryTCPClient.eomByte结束符,否则读取到输入流的末尾。 - LengthPrefixedBinaryTCPClientImpl
继承BinaryTCPClientImpl,在BinaryTCPClientImpl基础上默认以发送内容的长度以字节前缀进行填充,会自动在前缀增加内容长度,它默认有两个字节,当然你也可以通过属性tcp.binarylength.prefix.length(在配置文件jmeter.properties中)进行设置 - Timeout handling:
如果你设置超时,读取流在超时之后会终止,所以当你在使用eolByte/eomByte 确保超时时间设置足够长,否则读取流过早终止。
EOL是与读数据相关的,就是设定来自于服务器数据流的一个结束标识字节。没有设置EOL将会一直读到输入流结束为止,这是个十进制的值(千万不要写成hex)
看一个设置EOL的例子

- Response handling:
如果tcp.status.prefix(在配置文件jmeter.properties中) 被定义了,那么它会自动搜索前缀和后缀包裹的文本信息,如果发现了这样信息,它将被用来设置响应码。然而响应信息可以根据响应码从属性文件中读取(如果你提供了属性文件的话)。
tcp.status.prefix与tcp.status.suffix
可以通过配置一对状态闭合区域来识别来自服务器对于一些特殊状态的标识,比如HTTP的200、300、400、500状态,对于TCP Sampler默认是无法区分的,但可以通过配置如下属性,将[]作为闭合区域放在响应数据的最前端作为状态标识:
tcp.status.prefix=[
tcp.status.suffix=]
这样可以自定义状态标识了,并可以对请求响应在properties文件中进行维护
登录用户名/密码将不会被用来支持TCP实现。
# status.prefix and suffix = strings that enclose the status response code
tcp.status.prefix=[
tcp.status.suffix=]


当然这里可以设置复杂的边界比如单词等,例如
tcp.status.prefix=status:
tcp.status.suffix=.
那么结果将返回

| 属性 | 描述 | 是否必须 |
|---|---|---|
| Name | 展示在右侧树形列表的名称 | 否 |
| TCPClient classname | 表示处理请求的实现类,默认是TCPClientImpl ,对应属性设置名为tcp.handler,已知实现TCPClientImpl、BinaryTCPClientImpl、LengthPrefixedBinaryTCPClientImpl | 否 |
| ServerName or IP | 服务器 主机名,ip地址 | 是 |
| Port Number | 端口 | 是 |
| Re-use connection | 如果选中,这个链接处于保持打开状态,不选中就是读取数据后就关闭 | 是 |
| Close connection | 如果选中,这个链接将会在运行中取样器之后被关闭 | 是 |
| SO_LINGER | enable/disable(启用/禁用)SO_LINGER设置特定的值,单位为秒,它线性创建套接字,如果你是设置的值为0,你可以避免大量套接字处于TIME_WAIT (等待状态) | 否 |
| End of line (EOL) by value | 表示一行结束符,如果设置值在-128到127之外将会跳过eol 检查,你可以在jmeter.properties文件中增加属性eolByte进行设置,如果你在TCP Sampler Config中也设置这个属性,那么TCP Sampler Config 中设置的将会生效 | 否 |
| Connect TimeOUt | 连接超时(单位毫秒,0 表示禁用超时) | 否 |
| Response Timeout | 连接超时(单位毫秒,0 表示禁用超时) | 否 |
| Set NoDelay | 可以参考java.net.Socket.setTcpNoDelay(),如果选中,它将会禁用Nagle’s算法(利用缓存功能),反之 | 是 |
| Text to Send | 发送文本信息 | 是 |
| Login User | 用户名-它不会使用默认实现 | 否 |
| Password | 密码-它不会使用默认实现,(N.B.它在测试计划中采用非加密存储) | 否 |
未完待续……
jmeter应用—测试元件介绍(一)
jmeter应用—测试元件介绍(二)
jmeter应用—测试元件介绍(三)
jmeter应用—测试元件介绍(四)
原文连接 http://blog.csdn.net/yue530tomtom/article/details/78644527
更多推荐



所有评论(0)