JMeter-Samplers采样器

18.1 采样器


HTTP Request


HTTP采样器可以向web服务器发送http/https请求,并且可以控制jmeter是否解析图像和其他嵌入资源的html文件,并发送http请求来检索它们。HTTP采样器检索以下类型的嵌入资源:

  • 图像
  • 小程序
  • 样式表(css)和从这些文件引用的资源
  • 外部脚本
  • frames,iframes
  • 背景图像(正文、表格、TD、TR)
  • 背景声音

默认解析器是org.apache.jmeter.protocol.http.parser.lagartobasedhmlparser,可以通过属性htmlparser.className进行更改。
如果要向同一个web服务器发送多个请求,最好使用http请求默认配置元素,这样就不必为每个http请求输入相同的信息。
或者,使用jmeter的HTTP Request Defaults来帮助我们快速创建带有参数的http请求。
有两种不同的测试元素用于定义采样器:
AJP/1.3 Sampler
HTTP请求
<font color=#A52A2A>Java请求</font>
<font color=#A52A2A>HTTPClient4</font>
Java HTTP实现有一些局限性:

  • 无法控制如何重连。当jmeter释放连接时,它可能被同一个线程重用,也可能不被同一个线程重用。
  • API最适合单线程使用-通过系统属性定义各种设置,因此适用于所有连接。
  • 不支持kerberos身份验证
  • 它不支持使用密钥库配置进行基于客户端的证书测试。
  • 更好地控制重试机制
  • 不支持虚拟机
  • 它只支持以下方法,get、post、head、options、put、delete和trace。
  • 使用dns缓存管理器更好地控制dns缓存。

如果请求需要服务器或代理登录授权,则还必须添加http authorization manager配置元素。对于正常登录(即用户在表单中输入登录信息),需要使用适当的方法(通常是post)和表单定义中的适当参数创建http请求。如果页面使用http,则可以使用jmeter代理来捕获登录序列。

每个线程使用单独的SSL上下文。如果要使用单个SSL上下文(不是浏览器的标准行为),请设置jmeter属性:

https.sessioncontext.shared=true

自5.0版以来,默认情况下,SSL上下文在线程组迭代期间保留,并为每个测试迭代重置。如果在测试计划中,同一个用户重复多次,那么应该将其设置为false。这个配置不适用于Java的HTTP实现。

httpclient.reset_state_on_thread_group_iteration=true

jmeter默认为SSL协议级别TLS。如果服务器需要不同的级别,例如SSLv3,请更改jmeter属性,例如:

https.default.protocol=SSLv3

jmeter还允许通过更改属性https.socket.protocols启用其他协议。
如果请求使用cookies,那么还需要一个http cookie管理器,可以将这些元素添加到线程组或http请求中。如果有多个需要授权或cookie的http请求,请将元素添加到线程组。这样,所有http请求控制器都将共享相同的授权管理器和cookie管理器元素。
如果请求使用名为“url重写”的技术来维护会话,可能还需要使用其他配置 6.1 Handling User Sessions With URL Rewriting

Java Request


这个采样器允许我们使用自定义Java类控制多个线程、输入参数和数据收集,首先该类必须实现org.apache.jmeter.protocol.java.sampler.javasamplerclient接口。


Java请求控制面板.png

如果方法teardownTest没有被AbstractJavaSamplerClient的子类重写,则不会调用teardownTest方法。这样做是为了减少了JMeter内存需求,但并不会对现有的测试计划产生任何影响。

Add/Delete按钮目前没有任何作用。

  • Parameters
Attribute Description Required
Name 采样器名称 NO
Classname 需要采样的JavaSamplerClient接口的具体实现类 YES
Send Parameters with Request 采样类的参数列表。所有参数都作为字符串发送。具体设置见下文。 NO

以下参数适用于SleepTestJavaTest实现:

  • Parameters
Attribute Description Required
Sleep_time 休眠时间 YES
Sleep_mask 总的休眠时间计算如下:totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask) YES

此外,JavaTest的实现还用到以下参数:

  • Parameters
Attribute Description Required
Label 如果使用该属性,则会自动替换Name属性 NO
ResponseCode 该属性用于设置SampleResult的响应码 NO
ResponseMessage 该属性用于设置SampleResult的响应正文 NO
Status 用于设置SampleResult的状态,如果该项设为“OK”(忽略大小写),则认为该Sample成功,否则失败 NO
SamplerData 设置SampleResult的SamplerData NO
ResultData 设置SampleResult的ResultData NO

JSR223 Sampler


JSR223采样器允许使用JSR223脚本代码执行创建或更新变量所需的采样器或某些计算。

如果不希望在运行此采样器时生成采样器结果(Sample Result),需要调用以下方法:
sampleResult.setIgnore();

JSR223有一个可以显著提高性能的特性,受益于该特性:

  • JSR223采用Script files的方式而不是代码嵌入,这样JMeter可以编译并缓存脚本;
  • 或者使用Script Text+检查属性Cache compiled script if available的方式。

1.使用此功能时,需要保证脚本代码不会直接使用JMeter变量,而是使用脚本参数,因为缓存只会缓存第一个替换项。
2.为了从缓存和编译中获益,用于脚本编写的语言引擎必须实现JSR223可编译接口(Groovy支持此功能,java、beanshell和javascript都不支持)。
3.当使用Groovy作为脚本语言并且不检查Cache compiled script if available属性(建议使用缓存)时,应添加一条JVM属性-Dgroovy.use.classvalue=true,如果不这样设置,2.4.6版以后的Groovy有可能内存泄漏,请参阅:

如下的JMeter属性可以控制缓存大小:

jsr223.compiled_scripts_cache_size=100

在脚本引擎支持的情况下,JSR223测试元素使用Script files或Script Text+检查Cache compiled script if available属性的方式都会被编译,这将使性能得到极大的增强。

JSR223采样器控制面板.png

JMeter在将脚本字段传递给解释器之前处理函数和变量引用,因此这些引用只解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,可能会导致语法错误。因此,为了使用运行时变量,请使用适当的props方法,例如。

props.get("START.HMS");
props.put("PROP1","1234");

  • Parameters
Attribute Description Required
Name 采样器名字 NO
Scripting Language 使用的JSR223脚本语言的名称,这是一个下拉框。 YES
Script File JSR223脚本的文件名,如果使用相对文件路径,则它将相对于“user.dir”系统属性引用的目录。 NO
Parameters 传给脚本文件或脚本的参数列表。 NO
Cache compiled script if available 如果选中该属性(推荐选中),并且所使用的语言支持可编译接口(Groovy支持,java、beanshell和java script不支持),JMeter将编译脚本并使用其md5散列作为唯一的缓存键来缓存它。 NO
Script 脚本名,与Script File二者必须有一个存在 YES

如果提供了Script File,则将使用该文件,否则将使用Script。
在调用脚本之前,会设置一些JSR223变量,它们可以直接在脚本中使用。

vars.get("VAR1");
vars.put("VAR2","value");
vars.remove("VAR3");
vars.putObject("OBJ1",new Object());

props.get("START.HMS");
props.put("PROP1","1234");

  • OUT - System.out,例如:

OUT.println("message")

SampleResult的ResponseData是从脚本的返回值里设置的。如果脚本返回null,则可以使用SampleResult.setResponseData(data)方法直接设置响应,其中的数据可以是字符串或字节数组。数据类型默认为“文本”,但也可以使用方法SampleResult.setDataType(sampleResult.binary)将其设置为二进制。
SampleResult变量使脚本可以完全访问SampleResult中的所有字段和方法。例如,脚本可以访问方法setStopThread(boolean)和setStopTest(boolean)。
与BeanShell采样器不同,JSR223采样器不通过脚本变量设置ResponseCode、ResponseMessage和sample的状态。目前改变这些变量的唯一方法是通过SampleResult方法:

  • SampleResult.setSuccessful(true/false)
  • SampleResult.setResponseCode("code")
  • SampleResult.setResponseMessage("message")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268