Jmeter Study
Jmeter是一个桌面应用,被设计为用于测试C/S结构的应用程序,如web应用或ftp应用,是到目前为止,一个使用的最广泛的开源测试工具。它是由纯java编写的,通过其API可以对它进行扩展。jmeter位于c/s中的客户端工作,它可以测试服务器的响应时间、cpu负载、内存占用和资源的使用。
绝大多数的jmeter测试脚本或测试计划都涉及到创建一个循环,按照预先定义的时间间隔和线程组来模拟向服务器发出请求。这些测试脚本可以定制和扩展。一个基本的jmeter测试计划应该至少包括三个部分:线程组、采样器和监听器。
线程组:用来模拟一组用户(用户数至少一个)。--作用:控制线程的数量。
采样器:使请求发往目标服务器。
监听器:捕获每个请求后收到的响应数据。
一个典型的测试计划由一个或多个线程组、逻辑控制器、监听器、定时器、断言和配置等元素组成。
线程组:一个线程模拟一个用户。所有的测试计划的元素都必须放在一个线程组元素下。
监听器:监视JMeter运行测试用例时接收到的数据。
控制器:其逻辑可以自定义,如让检验员告诉JMeter向服务器发出请求。
定时器:设定一个线程发出的两次请求间的间隔时长。
断言:测试返回的结果是否是期望的值。
配置:与检验员相关,可以增加和修改请求。
什么是测试计划?
测试计划定义了如何进行测试的框架。最简单的测试计划包括以下元素:
线程组:用于指定运行线程的个数和坡道期,循环次数。每个线程模拟一个用户,坡道期指定创建所有线程的时间。例如指定5个线程和10秒的坡道期,表示每个线程的创建时间为2秒。循环次数定义了测试重复的次数。而且可以指定开始和结束的具体时间。
采样器:用于发出http/ftp/soap/xml/jdbc/ldap请求到服务器。
jmeter采样器允许你定义发往服务器的请求,模拟一个用户通过网页向服务器发出的请求。每个采样器生成结果包含以下一些,如性能、延迟时间、吞吐量等。默认情况下,
监听器:用于处理每个请求后收到的响应数据。例如你可以保存数据到文件或者以图表显示。
开始运行JMeter,测试计划就会出现在工作区左边的面板窗口中。
具体描述如下:
User Defined Variables:你可以定义静态变量,它们是允许你在测试中重复提取的值,如服务器名,端口号等。例如你要测试一个www.example-jmeter.net的应用,你可以定义一个"server"变量,那么测试脚本中的"${server}"就会该值替代。
Functional Test Mode:它会记录下从服务器返回的数据。如果你要进行压力测试,请不要选择它因为它会影响结果。
Run each Thread Group separately:单独运行每个线程组。如果您有两个或更多的线程组在你的测试计划中。选中该项,表示JMeter会顺序地运行它们,否则会并发运行它们。
Add directory or jar to classpath:如果你自己扩展了JMeter组件,可以使用该项添加jar包。记住需要重启后才能生效。另外,你也可以直接把jar包拷贝到JMeter/lib目录下。或者通过编辑JMeter.properties文件来包含额外的jar,如"#user.classpath=../classes;../jars/jar1.jar,这样可以避免出现路径中包含空格引发的问题。
测试计划的组成
测试计划必须由至少一个线程组组成。每个线程组中都可以包含一个或多个以下组合:
采样器,逻辑控制器,配置,监听器和定时器。每个采样器能够关联一个或多个预处理元素,后处理元素和断言元素。让我们更进一步了解它们。
线程组
线程组是测试计划的入口,它包含所有其它的JMeter元素,一个线程组控制所有由JMeter创建的仿真线程,它们模拟多用户请求。
线程组代表着一组执行特定测试用例的用户,在线程组的控制面板里,显示在下图。如果有多个线程组那么它们会彼此独立地执行。
详细描述如下:
Action to be taken after a Sampler error:一旦采样器在测试过程中报错,你可以作出以下的选择:Continue继续进行下测试,Start Next Thread Loop开始下一个线程的测试,Stop Thread 停止线程,Stop Test Now完全停止测试,便于进行错误原因的查看。
Number of Threads:模拟用户的人数或者是web应用的连接数。
Ramp-Up Period:定义JMeter创建所有测试线程的时长。例如设定线程数为10,坡道期为60秒,那么每个线程会以6秒/个的速度连续创建。在60秒以后,所有的线程将会投入运行。比较好的策略是将你的坡道期设置得足够长以避免在测试一开始就造成很大的工作负载,但不要过长,你可以一开始将坡道期设置为等于要创建的线程数,稍后根据情况进行调整。
Loop Count:定义测试循环的次数,默认情况下,测试仅执行一次。点击Forever选项框那么测试会一直重复循环直到你手动停止它。
Scheduler Configuration(调度器配置):1.9之后的版本具有该项,允许你设定测试的开始和结束时间。只有时间到达开始时间,测试才会真正开始。在每个测试循环之后,除非结束时间到了,否则测试将会继续下去一直到达loop count的上限。startup delay[启动延迟(秒)]用于设定JMeter在第一个测试线程启动前的开始等待时间,duration[持续时间(秒)]用于设定整个测试的进行时间。前者用于覆盖start time的设定,后者覆盖end time的设定。