https://www.bstester.com/2015/09/build-private-pts-testing-service-b
上一篇给大家介绍了阿里云的PTS服务,工具虽好,毕竟是需要花点钱的,比起高大上的LoadRunner是要便宜不少,但互联网讲究什么啊,Free啊,开源啊……那市场上有没有一个开源工具跟阿里云的PTS一样,即开即用呢?答案是肯定的,甚至比阿里云PTS出现的时间还早。其实啊,阿里云的PTS也是根据它进行二次开发来的,当然,这是我的怀疑,参考淘宝开放平台—聚石塔性能测试服务(http://open.taobao.com/doc/detail.htm?spm=0.0.0.0.UspfOC&id=102088)便可看出一些端倪。
在前段时间进行项目的性能测试时,让我无意间发现了这款神器—nGrinder,瞬间便被它清爽的界面,操作简单且不失强大的功能所吸引,下面进入正题。
nGrinder简介
nGrinder(http://naver.github.io/ngrinder/)是基于Grinder开源项目,但由NHN(据说是韩国最大的互联网公司)公司的nGrinder开发团队进行了重新设计和完善(所以叫做nGrinder)。nGrinder是一款非常易用,有友好简洁的用户界面和controller-agent分布式结构的强大的压力测试工具。
它是由一个controller和连接它的多个agent组成,用户可以通过web界面管理和控制测试,以及查看测试报告,controller会把测试分发到一个或多个agent去执行。用户可以设置使用多个进程和线程来并发的执行该脚本,而且在同一线程中,来重复不断的执行测试脚本,来模拟很多并发用户。
nGrinder的测试是基于一个python的测试脚本,用户按照一定规则编写测试脚本以后,controller会将脚本以及需要的其他文件分发到agent,用Jython执行。并在执行过程中收集运行情况、响应时间、测试目标服务器的运行情况等。并保存这些数据生成运行报告,以供以后查看。
nGrinder的一大特点就是非常容易使用,安装也非常容易,可以做到开箱即用,测试新手也可以很容易就开始测试任务。当然,如果想执行一些比较复杂场景的性能测试,就需要测试人员对python有一定认识。
跟阿里云的PTS相比,有很多共同点
- 都是BS架构,web界面操作,界面清爽,配置简单
- 都是分布式并发压测,可模拟业务场景进行测试
- 都可在线管理测试脚本、测试任务、测试结果
- 测试脚本都可用Jython进行编写,实现较为复杂的逻辑
- 都可以使用插件进行脚本的录制,降低编写测试脚本的成本
- 都可定时执行任务,配置好任务,预约好执行的时间,性能测试再也不用盯着了。
当然也有一些不同的地方,比如对测试机的管理,阿里云PTS可以直接在线管理被测服务器,而nGrinder需要我们手工在被测试服务器上安装监控程序,这样才能收集服务器的性能数据。阿里云PTS测试中可配置的更多,对新手来说更加方便,而nGrinder要实现稍微复杂的逻辑,就需要在测试脚本中实现。
nGrinder的安装
先决条件
- nGrinder是一个web应用(Controller)和Java应用(Agent, Monitor)的组合。安装 nGrinder的Controller和Agent,需要安装JDK 1.6或更高的版本。
- 请检查你的PATH环境变量,java安装路径是不是在PATH环境变量之前,如果是,那就可以正常的运行java了。
- nGrinder需要用到很多端口。如果有些端口被防火墙阻挡,请联系服务器管理开放下面这些端口。
- Agent : Any ==> Controller : 16001
- Agent : Any ==> Controller : 12000 ~ 12000+(允许并发测试的数量)
- Controller : Any ==> Monitor : 13243
- Controller ==> Public user : 这取决于你的Tomcat的配置,默认为8080。
下载
先从下面位置下载nGrinder:
安装Controller
nGrinder的安装文件是作为一个可自执行的网络存档文件(WAR包)分发的。像Jenkins一样,你可以把这个存档文件放到你熟悉的Web应用服务器(像Tomcat)中,或者在命令行中直接运行。
作为一个自执行程序运行
- 请确定正确安装了JAVA的SDK,很多问题都是没有正确配置环境变量导致的。
- 用下面的命令运行nGrinder controller:1java -jar ngrinder-controller-X.X.war
- 如果你看到如下的错误信息,是因为nGrinder需要加载很多库文件,比如SVNKit, maven, Jetty webserver, groovy和python,所以需要很大的PermGen内存空间。带上PermGen设置参数重新运行nGrinder。1
2
3nGrinder needs quite big perm-gen memory.
Please run nGrinder with the following command.
java -XX:MaxPermSize=200m -jar ngrinder-controller-3.3.war - 默认情况下,nGrinder用8080作为web端访问的端口,如果你想使用其他的端口,请增加参数配置–port port_number。1java -XX:MaxPermSize=200m -jar ngrinder-controller-3.3.war --port 80
- 当执行这个war包文件,war包中的文件会解压到~/.ngrinder/webapp文件夹中并创建默认数据文件到.ngrinder文件夹中。
- 如果你能在屏幕中看见下面的日志信息,说明ngridner controller已经正常启动运行。1
2
3
4
5
6
7
8
9
10
11
12INFO 14. 1. 20 ?? 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_22.xml::22::ngrinder.3.3 r
an successfully in 4ms
INFO 14. 1. 20 ?? 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_23.xml::23::ngrinder.3.3 r
an successfully in 7ms
INFO 14. 1. 20 ?? 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_24.xml::24::ngrinder.3.3 r
an successfully in 2ms
INFO 14. 1. 20 ?? 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_25.xml::25::ngrinder.3.3 r
an successfully in 7ms
INFO 14. 1. 20 ?? 4:39:liquibase: ChangeSet ngrinder_datachange_logfile/db.changelog_schema_26.xml::26::ngrinder.3.3 r
an successfully in 8ms
2014-01-20 16:39:30.633:INFO:/:Initializing Spring FrameworkServlet 'appServlet'
2014-01-20 16:39:31.141:INFO::Started SocketConnector@@0.0.0.0:8080 - 现在可以打开浏览器访问http://localhost:8080/使用nGrinder了。
在TOMCAT中运行
- 将war包文件放到tomcat的webapps文件夹中,${TOMCAT_HOME}/webapps 。如果你不想通过路径ngrinder-controller访问nGrinder,可以修改war包文件的名称为ROOT.war.
- 然后打开catalina.sh或者catalina.bat将下面这行命令添加到文件头部。1JAVA_OPTS="-Xms600m -Xmx1024m -XX:MaxPermSize=200m" # for catalina.sh1set JAVA_OPTS=-Xms600m -Xmx1024m -XX:MaxPermSize=200m # for catalina.bat
- 然后运行${TOMCAT_HOME}/startup.sh或者startup.bat
- 打开浏览器访问http://localhost:8080/ngrinder-controller-X.X或者http://localhost:8080如果你修改了war包文件的名称为ROOT.war
安装Agents
nGrinder 3.3的 agents可以通过controller页面中的链接直接下载使用。下载的包中agents的相关配置已经默认配置好了,所以可以直接解压包,并运行“run_agent.sh”或者“run_agent.bat”启动agents,让其和controller通信。
- 通过admin帐号登录nGrinder,admin的默认密码是admin。
- 点击顶部右侧菜单中的Download Agent进行下载。
- 等待agent的tar压缩文档下载完成.
- tar格式的文档在Windows下可以使用7zip解压,在Linux下可以使用tar xvf tar_file.tar命令解压。
- 然后解压tar包并运行其中的run_agent.sh或者run_agent.bat,agent将以下面的逻辑来运行。
- 检查~/.ngrinder_agent目录下是否存在agent.conf配置文件。
- 如果不存在,复制当前目录下的__agent.conf文件到~/.ngrinder_agent/agent.conf中并加载它。
- 如果存在,直接使用~/.ngrinder_agent/agent.conf这个配置文件运行。
- 如果你不想覆盖掉最近一次使用的配置文件,可以在启动agent时使用-o参数1
2run_agent.sh -o # for linux / mac
run_agent_bg.sh -o # If you want to run it in the background for linux / mac或者
1run_agent.bat –o # for windows - 如果你想停止运行agent,执行下面命令。1stop_agent.sh # for linux / mac
或者
1stop_agent.bat # for windows - 从nGrinder 3.3开始, agent是自动批准连接到controller的。当然,你可以配置手动批准。1controller.enable_agent_auto_approval=true
在controller的系统配置中配置,这样你需要自行在代理管理中批准哪些代理是否可用。
- 可以点击右上角菜单中的agents management链接进入agents管理页面。
- 如果agent运行在Linux下,你可能需要配置ulimit让其运行更多的线程。请检查下面的配置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17> ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30676
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 16000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 32768
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited如果你的机器很小,当你运行”ulimit -a”时,会显示”max user processes”和”open files”项,请配置它至少大于10000。使用root权限打开/etc/security/limits.conf文件,添加下面几行。
1
2
3
4
5
6
7
8your_account soft nproc 32768
your_account hard nproc 32768
root soft nproc 32768
root hard nproc 32768
your_account soft nofile 16000
your_account hard nofile 16000
root soft nofile 16000
root hard nofile 16000
安装Monitor
nGrinder的Monitor是agent的一个子集,是安装在目标服务器中的用于收集系统相关数据(比如CPU, MEM and Network) 的程序。
你可以通过右上角菜单下载monitors。
- 下载monitor。
- 解压monitor的包并运行下面的命令:1run_monitor_bg.sh # for linux / mac
或
1run_monitor.bat # for windows - 如果你想停止monitor,运行下面的命令:1stop_monitor.sh # for linux / mac
或
1stop_monitor.bat –o # for window
到此,nGrinder已经安装配置完毕,接下来就可以开始你的第一个性能测试了。