|
本帖最后由 啦啦啦啦哈 于 2017-7-20 10:59 编辑
保持使用最新版本
JMeter被经常推荐用来测试性能,鼓励用户使用最新的版本。
确保你要经常去阅读变更记录中的新功能和模块的提升。你不应该再使用3.0之前的版本了
使用正确的线程数
你硬件设备的能力及测试计划将都会影响你的JMeter可运行的线程数。数量也依赖于你的服务有多快(一个可快速响应的服务可以让JMeter变更更加给力)。像其它性能测试工具一样,如果你没有正确的线程数,你将面对不准备或错误结果的Coordinated Omission问题。如果你需要大数量级的压力测试,考虑使用分布式模式在多台机器上运行无GUI的JMeter实例。当使用分布式模式时,结果将被聚合在控制器的结果中,如果使用多个自已的实例,结果文件可以聚合用于持续性分析。对于如何在一个给定的平台上使用JMeter测试,JavaTest Sampler可以考虑使用。它不需要任何网络请求便可返回一些信息在最大的吞吐量。
JMeter有选项用于延迟线程创建直到线程正常启动,如在其它线程组延迟之后和线程自身的启动时间。这样就允许一个非常大数量级的线程数,不需要太多的线程同时并发。
Cookie管理器的位置
可在构建一个Web测试中查看
Authorization管理器的位置
可在构建一个高级Web测试中查看
使用HTTP(S) Test Script Recorder录制
关于HTTP(S) Test Script Recorder的细节在建议录制器中。最重要的事情是,剔除你不感兴趣的。比如,不关心在录制过程中的图片请求(JMeter可以下载一个页面中的所有图片-具体查看HTTP Request)。这些内容将会让你的测试计划一团糟糕。大部人都会这样,有一个扩展对你的所有文件集,如.jsp,.asp,.php,.html或者其它。这些内容你通过输入.*\.jsp在Include Pattern中引入。
或者,你也可以剔除图片通过输入.*\.gif在Exclude Pattern中。具体依据你的应用程序,你可以选择一种更好的方案去执行。你也可以去剔除stylesheets,javascritpt文件和其它文件类型。测试你的配制来验证你的录入内容是你想要的,接着清除内容并且开始刷新页面。
HTTP(S) Test Script Recorder期望用于使用Recording Controller发现HTTP Request记录的元素至一个线程组元素中。这样便于你可以直接将所有的样例打包至一个控制器下,当然可以再给出一个可描述测试用例的名称。
现在,执行测试用例的步骤。如果你有无前置步骤的测试用例,使用JMeter来录制你的操作定义你的测试用例。一旦你完成了一系列特定的操作,保存整个测试用例至一个合适的文件名中。接着,清理记录开始一个新的测试用例。通过这样操作,你可以快速记录大量粗糙的测试用例。
HTTP(S) Test Script Recorder最有用的一个特性是你可以通过录制的样例来抽象出通用的元素。通过定义自定义的用户变量在测试计划级别或在用户自定义变量元素中,你可以用JMeter自动替换你录制样例中的值。比如,如果你测试一个APP在服务xxx.example.com,你可以定义一个变量server的值为xxx.example.com,再所有在录制样例中的值将会被替换为${server}
匹配时,注意大小写敏感
如果JMeter没有录制到任何请求,检查你的浏览器是否启用代理设置。如果在JMeter没有启动时,浏览器可正常使用,那浏览器一定是没有使用代理设置。一些浏览器忽略了代理设置localhost或127.0.0.1,那么请使用本机名或IP代替。
错误unknown_ca可以是你正试图录入HTTPS,浏览器不接收JMeter的代理服务证书。
用户变量
一些测试计划中,需要使用不同的值对于不同的用户/线程。如,你想测试需要每个用户登录后的一系列步骤。这个使用JMeter可以很容易实现。
比如:
创建一个文件,包含用户名和密码且使用逗号分隔。存放到与你的测试计划在同一文件夹。
添加一个CSV DataSet的配制元素至你的测试计划。定义变量名为USER和PASS。
替换登录名为${USER}和密码为${PASS}
CSV DataSet元素将会为每个线程读取一新行内容。
减少资源使用
减少资源使用的一些建议:
使用无GUI的模式: jmeter -n -t test.jmx -l test.jtl
尽量少使用监听器Listener;如果使用上面的-l标记,他们均可以被删除或禁用
在压力测试过程中,不要使用查看结果树或在Table中查看结果监听器,仅在脚本调试阶段使用即可
相比使用大量相似的样例,在一个循环中使用相同的样例,并使用变量(CSV DataSet)来实现样例的不同。[Include Controller在此步骤没有任何用,它在文件中添加所有的测试元素至测试计划中]
不要使用功能模式
使用CSV格式输出要优于XML
仅保存需要的数据
尽可能使用少的断言
使用最优的脚本语言(查看JSR223部分)
如果你的测试需要大量的数据 - 特别是如果需要随机化的 - 创建测试数据在可被读取的CSV文件中。这样会避免浪费资源在运行时。
BeanShell服务
BeanShell解释器有一个很有用的特性 - 当可以用来扮演server,可被telnet或http访问。
没有安全性。能连接至端口的任何人都可以发布任何BeanShell命令。这些可以提供无限制的访问至JMeter程序和目标。
不要启用服务除非端口被限制访问,如,被防火墙。
如果你想使用服务,在jmeter.properties中定义下面内容:
beanshell.server.port=9000
beanshell.server.file=../extras/startup.bsh
在上面的例子中,服务将会被启动,将会监听端口9000和9001。端口9000用于http访问,端口9001用于telnet访问。startup.bsh文件将会被服务处理,可被用于定义功能和启动时的变量。启动文件定义用于启动和输出JMter和系统属性的方法。这些是你将在JMeter控制台看到的:
Startup script running
Startup script completed
Session started on port: 9001
有一个样例脚本(extras/remote.bsh)你可以用来测试服务。[看看它怎么工作的]
当启动当在JMeterbin目录(调整目录,如果你在其它位置),输出会像这样:
$ java -jar ../lib/bshclient.jar localhost 9000 ../extras/remote.bsh
Connecting to BSH server on localhost:9000
Reading responses from server …
BeanShell 2.0b5 - by Pat Niemeyer
bsh % remote.bsh starting
user.home = C:\Documents and Settings\User
user.dir = D:\eclipseworkspaces\main\JMeter_trunk\bin
log_level.jmeter = INFO
log_level.jorphan = INFO
Setting property 'EXAMPLE' to '0'.
Setting property 'EXAMPLE' to '1'.
Setting property 'EXAMPLE' to '2'.
Setting property 'EXAMPLE' to '3'.
Setting property 'EXAMPLE' to '4'.
Setting property 'EXAMPLE' to '5'.
Setting property 'EXAMPLE' to '6'.
Setting property 'EXAMPLE' to '7'.
Setting property 'EXAMPLE' to '8'.
Setting property 'EXAMPLE' to '9'.
EXAMPLE = 9
remote.bsh ended
bsh % … disconnected from server.
举个例子,假设你有一个运行时间较长的非GUI运行模式测试,并且你想让吞吐量在测试过程中不同。测试计划包括Constant Throughout Timer定义属性,如${__P(thoughput)}。下面的BeanShell可用于改变测试:
printprop("throughput");
curr = Integer.decode(args[0]); // Start value
inc = Integer.decode(args[1]); // Increment
end = Integer.decode(args[2]); // Final value
secs = Integer.decode(args[3]); // Wait between changes
while(curr <= end) {
setprop ("throughput",curr.toString()); // Needs to be a string here
Thread.sleep(secs*1000);
curr += inc;
}
printprop("throughput");
脚本可以被存储在一个文件中(如,throughput.bsh),使用bshclient.jar发送至服务。参考:
java -jar ../lib/bshclient.jar localhost 9000 throughput.bsh 70 5 100 60
|
|