FavoriteLoading
0

搭建私有PTS性能测试服务(二)

上一篇给大家介绍了阿里云的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相比,有很多共同点

  1. 都是BS架构,web界面操作,界面清爽,配置简单
  2. 都是分布式并发压测,可模拟业务场景进行测试
  3. 都可在线管理测试脚本、测试任务、测试结果
  4. 测试脚本都可用Jython进行编写,实现较为复杂的逻辑
  5. 都可以使用插件进行脚本的录制,降低编写测试脚本的成本
  6. 都可定时执行任务,配置好任务,预约好执行的时间,性能测试再也不用盯着了。

当然也有一些不同的地方,比如对测试机的管理,阿里云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:

http://sourceforge.net/projects/ngrinder/files

安装Controller

nGrinder的安装文件是作为一个可自执行的网络存档文件(WAR包)分发的。像Jenkins一样,你可以把这个存档文件放到你熟悉的Web应用服务器(像Tomcat)中,或者在命令行中直接运行。

千万注意,别将文件放到包含空格的文件夹路径中,比如:"C:\Program Files\Tomcat\webapps\"。

作为一个自执行程序运行

  1. 请确定正确安装了JAVA的SDK,很多问题都是没有正确配置环境变量导致的。
  2. 用下面的命令运行nGrinder controller:
    1
    java -jar ngrinder-controller-X.X.war
  3. 如果你看到如下的错误信息,是因为nGrinder需要加载很多库文件,比如SVNKit, maven, Jetty webserver, groovy和python,所以需要很大的PermGen内存空间。带上PermGen设置参数重新运行nGrinder。
    1
    2
    3
    nGrinder needs quite big perm-gen memory.  
    Please run nGrinder with the following command.  
    java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.3.war
  4. 默认情况下,nGrinder用8080作为web端访问的端口,如果你想使用其他的端口,请增加参数配置--port port_number。
    1
    java -XX:MaxPermSize=200m -jar  ngrinder-controller-3.3.war --port 80
  5. 当执行这个war包文件,war包中的文件会解压到~/.ngrinder/webapp文件夹中并创建默认数据文件到.ngrinder文件夹中。
  6. 如果你能在屏幕中看见下面的日志信息,说明ngridner controller已经正常启动运行。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INFO 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
  7. 现在可以打开浏览器访问http://localhost:8080/使用nGrinder了。

在Tomcat中运行

  1. 将war包文件放到tomcat的webapps文件夹中,${TOMCAT_HOME}/webapps 。如果你不想通过路径ngrinder-controller访问nGrinder,可以修改war包文件的名称为ROOT.war.
  2. 然后打开catalina.sh或者catalina.bat将下面这行命令添加到文件头部。
    1
    JAVA_OPTS="-Xms600m -Xmx1024m -XX:MaxPermSize=200m" # for catalina.sh
    1
    set JAVA_OPTS=-Xms600m -Xmx1024m -XX:MaxPermSize=200m # for catalina.bat
  3. 然后运行${TOMCAT_HOME}/startup.sh或者startup.bat
  4. 打开浏览器访问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通信。

  1. 通过admin帐号登录nGrinder,admin的默认密码是admin。 
  2. 点击顶部右侧菜单中的Download Agent进行下载。

    因为使用的是admin帐号登录,下载的agents包中的配置可以分享给所有的用户使用。
    如果你登录的是一个普通帐号,下载链接将变成“Download Private Agent” 下载的agents包中的配置只能当前用户使用。

  3. 等待agent的tar压缩文档下载完成.
    • tar格式的文档在Windows下可以使用7zip解压,在Linux下可以使用tar xvf tar_file.tar命令解压。
  4. 然后解压tar包并运行其中的run_agent.sh或者run_agent.bat,agent将以下面的逻辑来运行。
    1. 检查~/.ngrinder_agent目录下是否存在agent.conf配置文件。
    2. 如果不存在,复制当前目录下的__agent.conf文件到~/.ngrinder_agent/agent.conf中并加载它。
    3. 如果存在,直接使用~/.ngrinder_agent/agent.conf这个配置文件运行。
  5. 如果你不想覆盖掉最近一次使用的配置文件,可以在启动agent时使用-o参数
    1
    2
    run_agent.sh -o # for linux / mac
    run_agent_bg.sh -o # If you want to run it in the background for linux / mac

    或者

    1
    run_agent.bat –o # for windows
  6. 如果你想停止运行agent,执行下面命令。
    1
    stop_agent.sh # for linux / mac

    或者

    1
    stop_agent.bat # for windows
  7. 从nGrinder 3.3开始, agent是自动批准连接到controller的。当然,你可以配置手动批准。
    1
    controller.enable_agent_auto_approval=true

    在controller的系统配置中配置,这样你需要自行在代理管理中批准哪些代理是否可用。

  8. 可以点击右上角菜单中的agents management链接进入agents管理页面。
  9. 如果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
    8
    your_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。

  1. 下载monitor。

  2. 解压monitor的包并运行下面的命令:
    1
    run_monitor_bg.sh # for linux / mac

    1
    run_monitor.bat # for windows
  3. 如果你想停止monitor,运行下面的命令:
    1
    stop_monitor.sh # for linux / mac

    1
    stop_monitor.bat –o # for window

到此,nGrinder已经安装配置完毕,接下来就可以开始你的第一个性能测试了。

Tips

在完成agent和monitor的安装后,如果发现在agent管理列表中没有看到已经启用的agent服务器,那么请检查以下事项:
1. 防火墙是否关闭
2. 如果需要开启防火墙,检查上文提到的各个端口是否在防火墙的白名单中
3. 查看服务器的hostname,然后配置服务器的hosts,将hostname指向服务器的ip地址,而不是127.0.0.1


未完待续 下一篇讲解怎么利用nGrinder进行性能测试

声明:本文为原创,作者为 归根落叶,转载时请保留本声明及附带文章链接:https://www.bstester.com/2015/09/build-private-pts-testing-service-b

最后编辑于:2016/10/26作者: 归根落叶

关注微信公众号 – 聚合软件测试类精华

关注微信公众号 – 聚合软件测试类精华