Jmter学习日志二

在我们进行正式使用Jmeter测试之前,我们必须得先了解Jemter中几个重要的元件。

在介绍元件之前,我们先介绍一下 Threads users 线程用户:

  1.setup thread group:一种特殊类型的Thread Group,可用于执行预测试操作,设置的这些类型的线程执行测试前进行定期线程组的执行(类似于lr中的init()函数)

  2.teardown thread group:一种特殊类型的 Thread Group,可用于执行测试后的操作(类似于lr中的end()函数)

  3.thread group:这个就是我们通常添加的线程组。可以看做一个虚拟用户组,线程组中每个线程都可以理解为一个虚拟用户,线程组中包含的线程数量在测试执行的过程中是不会发生改变的。(类似于lr中的action())

我们介绍下jmeter经常使用的一些元件,以及解释:

一 、配值元件(Config Element):用于提供对静态数据配值的支持。

  CSV Data Set Config:被用来从文件中读取数据,并将它们拆分后存储到变量中,适合处理众多变量。【CSV dataset在每次测试循环的初始阶段定义,由于定义发生在配置处理完成之后,由于定义发生在配置处理完成之后,所以他们不能用于一些配置元件(如JDBC Config),以便在配置时处理他们的内容。可在HTTP Auth Manager中正常使用。】

    Variable Names:变量名列表(多列可用逗号进行分开),如果变量名为空,那么文件第一行将被读取。默认情况下,该文件仅打开一次,而每个线程会使用文件中不同的数据行。至于数据行快递给线程的顺序,依赖于他们执行的顺序,数据行在每次测试循环的开始阶段读取,文件名和模式在第一次循环时解析。

    Delimiter:默认为逗号。

    Allow quoted data?:CSV文件是否允许值被引用。

    Recycle on EOF?:达到文件结尾后,是否从文件开始循环重新读取(默认为true),当文件达到结尾,且Recycle 选项设置的为true,就会从文件的第一行从新进行读取。如果设置的为False,而 Stop thread  on EOF?是False,那么当到达文件结尾时所有的变量都将被设置为<EOF>,可以通过设置jmeter属性cvsdataset.eofstring来改变该值。如果Recycle设置的为false,二stop thread设置的为true,那么问价到达结尾后,将导致程序被终止掉。

    Stop thread EOF?:达到文件结尾后,线程是否改终止。

    Sharing mode:如果希望每个线程拥有自己独立的值集合,那么就需要创建一系列数据文件。为每个线程准备一个数据文件如 test1.csv、test2.csv,使用文件名为test${_threadNum}.csv,并将Sharing mode设置为“Current thread”。

    All threads:文件在所有的线程共享。

    Current thread group ::每个文件夹会针对每个线程组打开一次。

    Current thread:每个文件夹会针对内个线程单独打开。

    Identifier:所有的线程共享相同的标识、共享相同的文件。

  HTTP授权管理器:可以帮助测试人员指定针对web页面的一个或多个登录。如果没有定义,http客户端采样器默认使用pre-emptive校验,要禁止这一功能,需做如下设置jmeter.propertied中:设置 httpclient.parameters.file=httpclient.parameters  httpclient.parameters中:设置 http.authentication.preemptive$Boolean=false ,上面的设置只影响HTTPClient采样器(SOAP采样器,也使用HTTPClient。

    Base Url(基础url):一部分或者完整的URL,用于匹配一个或多个Http请求url。例如,指定一个Base URL(http://jakarta.apache.org/restricted/),对应的用户名'jmeter',密码’jmeter‘,如果测试人员发送一个http请求到url(http://jakarta.apache.org/restricted/ant/myPage.html),授权管理器就会发送用户为’jmeter‘的登录信息。

    username(用户名):校验用到的用户名

    password(密码):该用户的密码

    Domain(域):针对NTLM使用的域

    Realm:针对NTLM使用的realm

  Http  Cache Manager:被用来为其作用域内的http请求提供缓存功能,如果‘Use Cache-Control/Expires header When ...’选中,那么会根据当前的时间来进行选择,如果请求为get,而时间指向未来,那么采样器就会立即返回,而无需从远程服务器请求URL,这样是为了模拟浏览器的操作,请注意Cache-Control头必须是“pulic”的,并且只有"max-age"终结选项会被处理,如果请求文档自从其被缓存以来没有发生任何改变,那么响应包体就会为空。

  Http Cookie管理器:主要有两个功能1:像web浏览器一样存储和发送cooklie,如果测试人员有一个http请求和响应里包含Cookie,Cookie管理器会自动存储Cookie,那么接下来针对特定的web站点的所有请求中都使用该cookie。可在结果数中查看,接收到的cookie可以被保存为变量,预定义属性’CookieManager.server.cookie=true',另外,在被存储前Cookie名称会加上前缀“COOKIE_",要恢复早前处理方式,则定义属性”CookieManager.name.prefix="(一个或多个空格)。如果启动了该功能,那么名称为TEST的Cookie,可以通过${COOKIE_TEST}加以引用。2:手动为cookie管理器添加一个cookie(为所有jmeter线程所共享)。

  Http 请求默认值:设置Http请求使用的默认值。

  Http 信息头管理:可添加或重载http请求头,jmeter支持多个信息头管理器。信息头部将被合并起来构造采样器列表。如果一个待合并条目匹配一个已存在的信息头名,那么他将会替代当前的条目,除非条目为空,在这种情况下已经存在的条目会被移除,这容许用户设置一系列默认信息头,并对特定采样器进行调整。

    Name(header):请求头名称,经常用到的两个通用请求头“User-Agent" 和”Referer"

    Value:请求头的值。

  登录配置元件:为采样器添加或重载用户名和密码。

  用户定义的变量:定义初始化一系列变量。都在初始化阶段处理。因此有些变量不能引用。

  Random Variable:被用来产生随机数据字符串,接下来将其存放到变量之中。

    variable name:变量名,用于保存随机字符串

    output format:使用java.text.DecimalFormat格式字符串,例如”000"会产生至少3个数字的随机数,或者“USER_000"产生的输出格式为USER_nnn,如果不指明,就是用long.toString()来产生数字

    Minimum Values:产生随机数的最小值(整数)

    Maximum values:产生随机数的最大值(整数)

    Seed for Random function:随机数产生器的种子,默认为当前时间(以毫秒为单位)

    Per Thread(User)?: 如果为False,则随机数产生器在线程组的所欲线程共享,为True,则每个线程都有自己的随机数产生器。

    计数器:容许用户创建一个计数器,可在线程组中任何地方被引用

  简单配置元件:可以在采样器中添加或者重载任意值

二、定时器(TIme):用于操作之间设置等待时间,等待时间是在性能测试中常用的控制客户端QPS的手段。(类似于LR中的思考时间)

  定时器的作用:1.定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);

         2.当执行一个sampler之前时,所有的当前作用域内的定时器都会被执行;

         3.如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;

            4.如果希望在sampler执行完成之后在等待,则可以使用Test Action;

  固定定时器(Constant timer):如果你需要让每个线程在请求之前按相同的指定时间间隔,那么可以使用这个定时器,需要注意的是固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。我们所说的响应时间,应该在大部分的情况下针对某一具体的sampler(http请求之类的),而不是针对于一组sampler组合的事务。【包括:名称、注解、线程延迟(毫秒)】

  高斯随机定时器(Gaussian Random Timer):如需要每个线程在请求前按随机时间停顿,那么使用这个定时器。【包括:名称、注释、偏差(毫秒)、固定延迟偏移(毫秒)】

  均匀随机定时器(Unifrom random timer):和高斯随机定时器的差异不大,区别在于延迟时间在指定的范围之内且每个取值的概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏见值之和。【包括名称、注释、随机延迟时间的最大毫秒数、暂停的毫秒数减去随机延迟的毫秒数】

  固定吞吐量的定时器(Contant Throughput timer):可以让Jmeter以指定数字的吞吐量(即指定的tps,只是这里要求指定每分钟的执行数,而不是每秒)执行。吞吐量的范围可以为指定为当前线程,当前线程组,所有线程组等范围,并且计算吞吐量的依据可以是最近一次线程的执行时延。【名称、注释、每分钟的吞吐量、计算基于吞吐量的方式(1.this thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target(目标) Throughput 乘以该线程的数量;2.all activie thread:设置的target(目标) Throughput将分配在每个活跃线程上,每个活跃线程在上一运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同事运行的线程;3.:All avtive threads(shared):与All active threads的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行;4.设置的target throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时。该选项与all active thread效果相同;5.All active threads in current thread group(shared):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。)】

   同步定时器(Synchronizing Timer):这个定时器和lr中的集合点类似,其作用为:阻塞线程,直到指定的线程数目到达后,再一起释放。【名称、注释、模拟用户的数量,即指定同时释放的线程数数量、超时时间,即超时多少毫秒后同时释放指定的线程】

  BeanShell 定时器:这个定时器,一般情况下用不到,但它可以说是最强大的,因为可以自己变成实现想要做的任何事情,例如:希望在每个线程执行完等待一下,或者希望在某个变量达到指定值的时候等待一下。请参考:http://www.cnblogs.com/jssy/archive/2006/10/23/537101.html

  柏松随时定时器(Poisson Random Timer):这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。【名称、注释、兰布达值、暂停的毫秒数减去随机延迟的毫秒数】。请参考:http://baike.baidu.com/link?url=CJ0_Qtuilzp3a4Xos9N7V_hFQjaf_zb_aM1wggqxIYGDGWjtKsp6JSjRIQ110lE38sQOKYcgNUMjRuMAPGb3xK

  JSR223定时器(JSR223 Timer):这个定时器相当于BeanShell定时器的“父集”,它可以使用java、JavaScript、beanshell等多种语言去实现你希望完成的事情。请参考:http://wenku.baidu.com/link?url=GUFnww9nb_1D6MlFd1YksYrNVk1NXF74ov8kJL06MmqVdmH_Q9v4YnWK-_gZ-04zL4QEqD9VN48OrXi4JyXpxosNZd8LBfIWhyhhxgUbrAC

  BSF定时器(BSF Timer):其使用方法和JSR223 Timer很相似,只需要在jmeter的lib文件夹导入其jar包,就可以支持脚本语言直接访问Java对象和方法的一定时器。清参考:http://baike.baidu.com/link?url=0RRkO1WqT1SdaXIzohqnEU8lcilpc_Sqwy7HtfpzCdCX1kyyLC5qttpF8jayTWFZi_tCbFbzMEw8FxHFYnIGYK

三、前置处理器(per processors):用于在实际的请求发出之前对即将发生的请求进行特殊的处理。例如 http url重写修复符则可实现url重写。当url中有sessiondid一类的session信息时,可以通过改处理器填充发出请求的实际sessionID。在sampler执行之前用来修改sampler的,无法被“查看结果数查看”。

  Bean Shell  PreProcessor:使用BeanShell在请求之前进行操作,

  JDBC PreProcessor:

  JSR223 PreProcessor:

  HTML链接解析器:

  HTTP URL 重写修饰符:

  RegEx USer Parametes:

  Sample Timout:

四、后置处理器(Post Processors):用对于Sampler发出请求后得到的服务器进行处理,一般来提取响应数据中的特定数据。

  

原文地址:https://www.cnblogs.com/wzw-1230074/p/8672346.html