您的位置:软件测试 > 开源软件测试 > 开源性能测试工具 > Jmeter
Jmeter使用指南
作者:网络转载 发布时间:[ 2013/3/27 14:48:57 ] 推荐标签:

  通常情况下如果我们希望在每次循环中都发出不同的请求,那么可以将可能的请求内容放在一个文件中,并让CSV Date Config Element从中获取相应的值并交给变量,也可以通过BeanShell Sampler用脚本来自己定制变量的值(注意不能使用Pre Processor中的BeanShell PreProcessor来定制变量,Pre Processor是用来修改请求中的域的,这个动作发生在请求被创建以后。也是说如果我们在BeanShell PreProcessor中定义了一个变量,然后写在请求域中,那么结果是JMeter先看到了一个没有被赋值的变量,然后把这个${变量名}式子当作字符串处理,然后再执行BeanShell PreProcessor。这一点是很多人容易犯错误的地方),也可以使用Pre Processor直接修改请求中的域,还可以在请求域中写入一个JMeter函数,直接生成需要的值。

  在有些应用中,我们希望下一个请求的内容依赖于之前的请求。那么我们可以通过Post Processor将响应中的有用信息抽取出来,然后赋值给一个变量,以便下次使用。

5. JMeter中的属性

  在JMeter中有Property的概念,他们通常有两种用处:首先他们代表了JMeter的配置信息(存在JMeter目录下的bin/jmeter.properties);其次他们可以被用来作为MemCache使用,以便线程间能够通信(Properties的get和put方法是线程安全的)。Property的获取、定义、修改一般是通过JMeter函数来完成的,当然也可以通过强大的BeanShell。

  通常当我们希望多个线程之间有某种依赖关系时可以使用Property,但是这样的需求并不多见,因为我们模拟的用户多半都是相互独立的,他们并不应该知道其他人在干什么。

  此外我们还可以将一些常量配置在jmeter.properties文件中,以便在测试中随时使用

  6. JMeter中的函数

  有的时候我们需要执行一些简单的操作(例如生成一个随机数)而又不希望编写BeanShell的Code,那么可以考虑使用JMeter中内置的一些函数。这些函数的格式通常为${__函数名(参数1,参数2...)},他们有两种方式来返回自己的执行结果:一种是直接返回,也是说JMeter会在执行该函数后用函数的返回结果来替换原来调用函数的字符串(例如假设${__method(1,2)}返回world,那么如果我们在域中写hello ${__method(1,2)},则实际的结果是hello world)。另一种是通过参数(通常是后一个)指定一个变量后,JMeter会将执行结果存入该变量。具体使用哪种方式获得结果是根据不同的函数而定的,JMeter提供了一个强大的函数生成器(Options菜单中的Function Helper Dialog选项),其中列出了所有的方法以及可能的函数,并且有方便的帮助文档,用户可以通过该生成器来生成所需的函数。

  这里有必要再次强调JMeter读入一个域(任何一个可以填写内容的空格)的过程:当JMeter读入一个域中的字符串后,会首先查看其中的是否存在能够匹配${...}的字符串,如果有则递归地解析这个${...}中的字符串,直到括号中的字符串不再包含括号为止。然后再解析这个${...}是否为一个函数或变量,如果是则用其结果覆盖原来的${...}字符串,直至将整个字符串解析完毕。例如在输入栏中输入hello ${__method(${num},2)},而num变量的值为1,则这个字符串首先被转化为hello ${__method(1,2)},然后由于${__method(1,2)}的值为world,则终这个域中的内容为hello world。

  掌握了以上内容后基本可以将JMeter中的函数和变量运用自入了,而读者所需做得事情只是查看手册了解那些函数能够提供何种功能。(注意有些函数是不能放入一些特殊的域中的,例如${__threadNum}不能放在Test Plan的变量定义或者User Defined Element中的变量定义域中,具体原因手册上讲的很明白)

  7. JMeter中的BeanShell

  在多数情况下,JMeter提供的功能是不够我们使用的,我们的测试用例中可能会存在一些比较复杂的逻辑,而这些逻辑又不发通过简单的函数来实现,那么我们必须动用强大的BeanShell了(JMeter有一些元素专门用于在测试的不同地方加入BeanShell脚本,如BeanShell Sampler)。不幸的是,JMeter的手册中并没有介绍BeanShell如何使用,而是把责任全部推给了BeanShell的网站,BeanShell的网站中的确有完整的BeanShell使用手册,但是我们总不希望为了做测试又去学习一个脚本语言,因此这里给出了一些BeanShell的简单应用,如果觉得不够的话再去查看更加复杂的应用。

  7.1 BeanShell快速上手

  BeanShell是面向Java的脚本语言,因此如果你想在完全不会BeanShell的前提下使用他,那么直接编写Java code可以了。需要注意的是,BeanShell支持若类型的变量,也是不用指定变量类型,只要给他赋值好了,BeanShell知道这个变量的类型。无论这个若类型变量在哪里被使用,其后的代码都能访问这个变量,这与强类型俄变量不同。例如:

  view plaincopy to clipboardprint?

  // Arbitrary code block

  {

  y = 2;      // Untyped variable assigned

  int x = 1;  // Typed variable assigned

  }

  print( y ); // 2

  print( x ); // Error! x is undefined.

  // Arbitrary code block

  {

  y = 2;      // Untyped variable assigned

  int x = 1;  // Typed variable assigned

  }

  print( y ); // 2

  print( x ); // Error! x is undefined.

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd