• 0
  • 0
分享

摘要:通过自动化测试工具模拟正常、异常场景来对系统的各项性能指标进行性能测试可以分析一个系统能力、瓶颈、关键问题等,本文结合nGrinder工具的特点,主要介绍了nGrinder在性能测试过程中的应用。

1、性能测试工具

性能测试范围较广,负载与压力测试都属于性能测试,两者可以相结合进行测试。通过逐渐增加负载根据系统资源的变化情况,可找到系统瓶颈所在,通过压力测试能确定系统的最大服务级别,一般系统上线前均会进行性能测试。本文使用nGrinder作为性能测试工具,直接部署成web服务,通过对不同场景进行测试,确定系统瓶颈及系统最大服务级别。

2、nGrinder安装

2.1.安装Controller

从nGrinder官网下载nGrinder-controller-3.4.1.war,将nGrinder-controller-3.4.1.war放入tomcat的webapps目录下,启动tomcat,使用http://host:port/nGrinder-controller-3.4.1/ 进入登录界面。也可以使用jar启动该web服务,jdk1.7使用java  -jar -XX: MaxPerSize=200m -jar nGrinder-controller-3.4.1.war,jdk1.8不指定 MaxPerSize参数;java启动方式使用http://host:port/login进入登录界面,初始账号密码均为admin。

2.2.运行代理

解压nGrinder-agent.rar,解压后nGrinder-agent目录下的__agent.conf为配置文件,可根据实际情况进行修改。

common.start_mode=agent
agent.controller_host=127.0.0.1
agent.controller_port=16001

其中common.start_mode为启动模式可选择agent模式和monitor模式,做为agent使用时,配置成agent,agent.controller_host配置为controller机器的ip地址,agent.controller_port端口默认为16001,不需要修改。

Linix系统下运行run_agent_bg.sh,windows下运行run_agent.bat,即可启动nGrinder的agent,登陆后选择admin->agent Management即可看到刚才配置好的agent机器信息。

15243603_201912161036171Mrer.png

可通过Disapproved设置agent是否可用。

1)nGrinder可以通过添加用户的方式进行压力测试,测试过程中出现使用新建用户agent不能使用的情况,通过登陆该用户,Download Agent下载agent并重新启动该agent解决了该问题。

2)在压测过程中出现修改agent文件夹__agent.conf的配置后controller端看不到该agent的情况,经分析是由于nGrinder的agnet在启动时会默认在当前用户的根目录下建立.ngrinder_agent的文件夹,下次启动时会默认使用该文件夹中的配置文件agent.conf启动,直接删除该文件即可快速解决。

2.3.运行监控

解压nGrinder-monitor-3.4.1.tar到要监控的机器上,解压后nGrinder-agent目录下的__agent.conf为配置文件,可根据实际情况进行修改。Linux系统运行run_monitor_bg.sh,windows下运行run_monitor.bat即可启动monitor。

3.不同场景下的测试解决方案

3.1.登录接口的tps

测试过程中需要对平台登陆能力进行压测,接口使用Http请求,接口请求报文样例:POST http://*****/pushmsg.do?device_token=XXX&,我们通过开发对应的jar包,通过引入包的方式编写测试脚本,nGrinder.test下的HttpClient实现客户端发送get及post的http请求,通过导出jar包的方式导出HttpClient包,注意导出jar的时候的使用的Java的版本需要跟tomcat使用java的版本匹配,通过script->Create a folder,创建lib文件夹,将生成的jar包上传至该文件夹下。

15243603_201912161036172Ad9A.png

在引用类的位置加入引用import nGrinder.test.HttpClient;使用时直接在使用位置String result = HttpClient.doPost("XXXX","XXXX"),适合Java脚本开发,在编辑脚本处的Validate Script可验证当前脚本。

点击“Performance Test”,创建测试,输入名称、代理、用户数、执行时间等参数,选择刚才创建的脚本,点击“保存并运行”。设置时需要将要测试的目的ip地址填入Targer Host中,否则在测试结果没有测试服务器的监控数据。

15243603_201912161036173HhHK.png

测试过程中会实时显示测试服务器与压测服务器的CPU使用率及内存使用率,方便实时查看。

15243603_201912161036174mlus.png

从测试结果看,压测的tps为26,在测试过程中发现cpu达到了100%,由于agent、controller、monitor在同一台机器上,CPU存在瓶颈,agent、controller、monitor分别部署测试效果更明显,测试完成后可查看agent的日志及监控数据,windows系统的默认目录在C:/User/用户名/.nGrinder下,包含日志、配置、测试案例、资源、脚本等,监控测试案例数据在perftest/0_999/测试案例号,本案例为324,则在324文件目录下,report目录为所有测试数据,可根据实际需要进行二次开发。

3.2.同时在线能力

单台服务器支持长连接数是系统性能指标之一,在该场景中我们解决的问题有:

测试过程中,由于机器有限在一台机器部署多个,启动时拷贝了一个相同agent文件,启动时指定agent的名称及根目录位置使用 ./run_agent.sh -o -ah ~/ngrinder-agent --host-id  first-agent,./run_agent.sh -o -ah ~/ngrinder-agent2 --host-id  second-agent启动2个agent。

15243603_201912161036175WAvp.png

测试过程中,使用的agent机器为Suse linuxt虚拟机器8c16g及4c8g,部分机器在agent启动过程中报错

Failed  to instantiate [ch.qos.logback.classic.LoggerContext]  
Reported exception: sun.misc.ServiceConfigurationError: 
sun.net.spi.nameservice.NameServiceDescriptor: Provider 
org.ngrinder.dns.LocalManagedDnsDescriptor could not be instantiated: 
java.lang.ExceptionInInitializerError

java.lang.ExceptionInInitializerError,经查阅资料发现nGrinder必须通过DNS解析一次,即使解析不到也需要一个DNS Server,优先走DNS,不走本地的/etc/hosts解析,我们通过在/etc/resolv.conf中增加 nameserver 127.0.0.1解决。

在测试过程中,某些agent报错too many open filesXXX,这个问题主要是进程企图打开句柄,但是现在进程打开的句柄数已经达到上限了,我们调整/etc/security/limits.conf,增加* soft nofile 1000000、* hard nofile 1000000解决了该问题。

某些agent的只能达到28000的连接数,一直维持到28000,经分析该问题是由于使用的agent机器为虚拟机,该虚拟网卡可打开的端口最大为65535个,修改程序可打开的ip地址范围/proc/sys/net/ipv4/ip_local_port_range为5000 65535,使单台agent支持的最大连接数达到60000。

测试过程中还出现了 Name or service not known at java.net.Unknown Host Exception: host-10-XX: host-XX: Name or service not known,主机名称由vl-49064692851改为了host-XX,需要在 /etc/hosts下添加服务器ip地址 host-XX。

4.结论

使用开源性能测试工具nGrinder进行性能测试,当使用lib库内容较大时,由于nGrinder本身设计的原因,需要将lib库文件及对应的资源文件、脚分发到agent上,agent从启动到真正进行发压时间较长,同时nGrinder在计数上存在一些问题,对于只有放在Test里面的内容才能计算tps,对于逻辑复杂的过程,在计算tps上显得有些不足,我们通过开发一个接收工具,该工具可以统计接收的tps,通过小工具弥补nGrinder工具的不足,虽然nGrinder工具有缺陷,但相对于收费的Loadrunner,编程能力不强的JMeter已经满足了大部分性能测试场景,工具在使用过程中表现稳定。


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   接口自动化的代码是比较简单的,单接口用例5行代码,多接口场景用例10行、30行、60行不等,都是那种只要认真看都能看懂的,所以在编写用例代码的时候注释都很简洁。但当很用心去完成一个接口用例时,会发现能做的还可以更多,比如命名和注释,看起来更加赏心悦目。  场景用例  获取二维码+二维码扫码结果:  看起来是真的舒服呢!下面上代码。package com.XXXXXXX.api.kjkhd.naturalperson.login; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON...
            0 0 1223
            分享
          •   1、引言  在撸码过程中,99.1%的大佬,都不敢说自己的撸出来的代码,是不需要debug的。换句话说,码农在撸码过程中,最痛苦的,莫过于撸出来的代码,为了能避坑,小鱼也是在撸码过程中,总结的一点避坑方法,请各位大佬笑纳。  2、避坑内容总结  2.1无法定位到元素  遇到问题:  找不到元素,脚本报“NoSuchElementException:Unable to find element”,或"定位到了,不能操作,点击无效。  解决方法:  1)查看自己的“属性值”是否写正确  2)元素的标签不唯一,默认找到第一个  3)向上查看,元素是否在frame或iframe框架中  ...
            0 0 1331
            分享
          • 读者提问:adb 如何通过 Wi-Fi 将 PC 连接 Android 手机 ?阿常回答:想必通过 USB 连接 PC 和 Android 手机的方法大家都很熟知了,今天我和大家分享一下拔掉 USB 线,通过 Wi-Fi 使得 PC 和 Android 手机保持连接的方法,主要分为两大步骤,步骤如下。一、通过 USB 连接 PC 和 Android 手机1、Android 手机打开【开发者模式】。2、Android 手机打开【USB调试】。3、通过USB 线连接 PC 和 Android 手机。4、Android 手机第一次连接 PC 时需确定...
            0 0 1160
            分享
          • 读者提问:部门例会上做测试分享不知道分享什么比较好,平时主要是做功能测试居多,阿常可以指点一下吗 ?阿常回答:1、所负责平台的业务梳理,业务流程分享;2、所负责平台的测试难点梳理,分享某个测试难点你是如何层层剖析的;3、所负责平台发现的复杂 BUG 梳理,分享某些复杂 BUG 你是如何发现的、定位 BUG 的过程是什么样的、最终开发是如何解决这些 BUG 的,以及今后如何规避再次出现此 BUG。4、所负责平台你自研了什么小工具,提升了测试效率,分享你的工具设计思路;5、所负责平台你采用了哪些第三方工具,提升了测试效率,分享你引入这些工具的思路;6、针对团队现状,你觉得可以引入某个新工具,跟团队...
            0 0 1392
            分享
          • 前几天,我在《简历中打动人的 3 个关键点》和《简历中千万不要出现的 3 个问题》中讲了一些写简历的注意事项,今天想聊聊在面试过程中,如何更好的体现出自己的真实实力。面试时,我经常会拿下面 3 个问题开场:1.请做个简短的自我介绍;2.简单介绍一个自己参与度比较高的项目,以及自己在项目中的职责;3.简单描述下你在项目中发现的最有成就感的 Bug;下面我分别针对这 3 个问题逐一做下说明。1.请做个简短的自我介绍;大部分的鸡汤文或者面经给出的建议可能是这样:面试官你好,我叫张三,出生于 2018 年 8 月 31 号,女,属狗,我喜欢爬山、读书、游泳、跑步、下棋、写代码、做测试,非常高兴能获得今...
            4 10 2995
            分享
      • 51testing软件测试圈微信