www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
 

基于Jmeter和Jenkins的自动化性能测试的一站式解决方案

作者: Yu, Qingguo Shen, Vivien Wu,Biyun

背景

性能测试用来保证产品发布后系统的性能满足用户需求,在软件质量保证中起着重要作用。Jmeter是一款广泛使用的性能
测试工具,然而,在执行测试前,用户往往需要花费很多额外的精力和时间配置测试环境。同时在进行测试时,使用单台服务器模拟数以千计的用户对目标服务器产
生负载,受限于服务器的性能可能无法满足需求,这就需要一个多台服务器的分布式的并发的测试环境。因此我们决定开发一个基于Jmeter和Jenkins
的自动化性能测试的一站式解决方案ELP(Easy Load and Performance
Testing, 简单的负载性能测试)来解决以上问题。

Jmeter是一款纯java开发并且开源的性能测试工具,其启动方式可以是GUI方式或者nonGUI方式,ELP中
使用nonGUI方式启动Jmeter并执行分布式测试,启动命令为:jmeter -n -t testplan.jmx –R
slave1,slave2。关于Jmeter的详细信息,请参阅附录[3]。

持续集成(CI,Continuous
Integration)作为敏捷编程的基石现在已经被绝大多数的开发团队所广泛采用,自动化的持续集成测试也越来越受欢迎。我们目前使用的持续集成工具
是Jenkins,我们的方案和Jenkins 服务器作了无缝的集成。关于Jenkins的详细信息,请参阅附录[1]和[2]。

概述

我们开发了一个Jenkins插件来完成整个性能测试过程,其中Jmeter
Master启动在CI服务器上,负责分配和调度Jmeter Slave(启动在Traffic
Server上)执行测试任务。关于如何开发Jenkins的插件,请参阅附录[5]。关于如何使用Jmeter进行分布式测试,请参阅附录[4]。
ELP的设计需求如下:

1)       简洁的用户界面。

2)       自动完成测试环境的配置。

3)       支持通用的性能测试需求。

4)       调用Jmeter进行分布式测试。

5)       收集目标服务器的性能指标。

6)       根据性能指标数据生成图表报告。

除了以上功能需求,我们尽可能使用已有的资源,我们使用了已有的Jenkins插件Performance Plugin来展示测试结果。目前,这个方案能支持所有通用的性能测试,比如web应用测试,数据库测试等。

下图是ELP的用户界面,用户只需要填写相关配置信息。因为需要解决防火墙问题,因此需要用户输入登录远程服务器的用户名和密码来建立SSH隧道,其中密码经过加密后存储到磁盘。

Figure 1

下图是ELP执行测试后收集到目标服务器性能指标的图形化报告。

Figure 2

下图是执行测试后利用Performance Plugin显示测试结果报告的图片。可以展示每一次测试的结果,也可以展示历史测试结果的趋势图。

Figure3

ELP基本工作流程

1.       在目标服务器上安装ServerAgent,用于收集性能指标。

2.       在每一台Jmeter Slave上安装Jmeter并启动Jmeter Server。

3.       与每台Jmeter Slave建立SSH隧道。

4.       启动分布式测试。

5.       收集性能指标并输出。

6.        展示测试结果。

Figure 4

架构和实现细节

ELP 以Jenkins插件的形式集成到持续集成服务器上。ELP的整体结构图如下图所示。

Figure 5

ELP采用MVC模型开发,M(Model 模型)指保存ELP相关数据的类,V(View 视图)指ELP的用户界面,C(Controller控制器)指接收用户输入数据和控制模型输出的ELPBuilder类。

1.视图

ELP的用户界面允许用户输入Target Server的主机名,添加每台要使用的TrafficServer的主机名、登录账号及密码,测试计划的文件名,测试数据的文件名等。用户界面是通过设计jelly页面来实现的,具体细节可参阅参考文档[6]。

 

2.模型

模型主要用于保存ELP的相关数据和用于控制访问和修改这些数据的业务逻辑。其中密码经过加密后再存储,取出密码时解密再使用。

3.控制器

控制器关联着视图和模型,用于接收用户在用户界面上的输入以及控制模型的数据显示到用户界面。ELP中的ELPBuilder类继承了
Hudson.Task.Builder
类。ELP的主要入口点是ELPBuilder类中的perform方法,在perform方法中实现了测试环境的自动配置、建立SSH隧道、执行分布式
测试,展示性能指标等功能。 ELP的代码中复用了Jenkins 执行shell的plugin,所以下面各个步骤都是通过shell
script实现,非常简洁。相对于使用java的ssh的解决方案,使用shell
script大大降低了开发的工作量。

1.       在Target Server上安装ServerAgent并启动。

2.       在每台Traffic Server上安装Jmeter并启动Jmeter Server。

命令:jmeter-server-Djava.rmi.server.hostname=127.0.0.1
-Jserver.rmi.localhostname=127.0.0.1-Jserver.rmi.localport=55601
-Jserver_port=55501(命令中设置的相应属性的含义请参阅文件jmeter.properties内的注释说明。)

3.       在Master与每台Slave之间建立SSH隧道。

命令:sshpass -p'password' ssh -L 55501:127.0.0.1:55501 -L 55601:127.0.0.1:55601 -R55500:127.0.0.1:55500 username@hostname

4.       执行分布式测试。

命令:jmeter -Djava.rmi.server.hostname=127.0.0.1-Jclient.rmi.localport=55500 -n -t testplan.jmx –R slave1, slave2(127.0.0.1:55501)

5.       发布性能指标。

使用JavaScript图表库Highcharts生成性能图形化指标报告。关于Highcharts的使用,请参阅附录[7]。

4. SSH 隧道介绍

ELP中需要建立SSH隧道来绕过CI服务器与Traffic server之间的防火墙,这里重点介绍在CI服务器与Traffic Server间建立SSH隧道的过程。

(1)Jmeter Client 与Jmeter Server间的连接

当Jmeter执行分布式测试时,JmeterClient端(CI服务器)与Jmeter
Server端(Traffic Server)通是过Jmeter连接和远程方法调用(RMI)进行通信的。Jmeter连接是由Jmeter
Client端建立的,而RMI是双向建立的,即除了要建立一条从Jmeter Client端到Jmeter
Server端的连接,还需要建立一条反向连接来返回测试采样结果,因此一共需要建立三条连接,如下图所示。

Figure 6

(2)在CI服务器与Traffic Server之间建立SSH隧道

SSH隧道也叫做SSH端口转发,端口转发分为LocalForward和RemoteForward,这里的local指的是本地端,即CI服务器端;remote指的远程端,即TrafficServer端。

LocalForward指将本地服务器的某个端口转发到远端指定服务器的指定端口。如下图所示,将Jmeter Client端的“A”端口转发到Jmeter Server端指定的服务器127.0.0.1(Server本机)的“B”端口。

在Client端执行命令:ssh -LA:127.0.0.1:B username@hostname

Figure 7

RemoteForward指将远程服务器的某个端口转发到本地端指定服务器的指定端口。如下图所示,将Jmeter Server端的“B”端口转发到Jmeter Client端指定的服务器127.0.0.1(Client本机)的“A”端口。

在Client端执行命令:ssh -R B:127.0.0.1:A username@hostname

Figure 8

如上文所述,Jmeter在执行分布式测试时,CI服务器与每台TrafficServer间需要建立三条连接。如下图
所示:55501端口用于Jmeter连接;55601端口用于CI 服务器到Traffic
Server的RMI连接;55500端口用于Traffic Server到CI服务器的RMI连接。

CI服务器与一台Traffic Server建立SSH隧道的命令为:ssh -L 55501:127.0.0.1:55501-L 55601:127.0.0.1:55601 -R 55500:127.0.0.1:55500 username@hostname

Figure 9

(3)CI服务器与多台TrafficServer间建立SSH隧道

目前网上很少有关于使用多台Jmeter
Slave时建立SSH隧道的资料。我们在ELP里的解决方案是:如果使用多台TrafficServer就执行多条命令,CI服务器与每台
Traffic Server间的连接通过不同的端口来区分。具体实现方法是:每增加一台Traffic
Server,CI服务器端需要指定另外两个空闲端口用于Jmeter连接以及Client端到Server端的RMI连接,Traffic
Server端需要指定一个端口用于Server端到Client端的RMI连接。

当增加另外一台Traffic Server时,指定不同的端口(假设CI服务器端指定的端口为55502和55602,Traffic Server端指定的端口为55500),再执行一条相同命令:ssh -L 55502:127.0.0.1:55502-L 55602:127.0.0.1:55602 -R 55500:127.0.0.1:55500 username@hostname


小结

后续计划使用Mesos集群管理器来调度和分配Jmeter Slave,这样能优化ELP的性能,并且能大大提高资源的利用率。同时,计划设计一种方案替换项目中目前所用到的公司内部的组件,并尝试把项目开源。

参考资料

1.        The official web site for Jenkins:
http://jenkins-ci.org/

2.        The description about Jenkins on Wikipedia:
http://en.wikipedia.org/wiki/Jenkins_%28software%29

3.        https://jmeter.apache.org/

4.        https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf

5.        http://ccoetech.ebay.com/tutorial-dev-jenkins-plugin-distributed-jenkins

6.        https://wiki.jenkins-ci.org/display/JENKINS/Basic+guide+to+Jelly+usage+in+Jenkins

7.        http://www.highcharts.com

基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)的更多相关文章

  1. Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)

    转自:http://www.cnblogs.com/victorcai0922/archive/2012/06/20/2555502.html Jmeter+maven+Jenkins构建云性能测试平 ...

  2. 基于Jmeter+maven+Jenkins构建性能自动化测试平台

      一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...

  3. Jmeter+ant+Jenkins接口自动化框架搭建

    摘自:https://testerhome.com/topics/13389 一.背景  上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...

  4. 基于Jmeter和Jenkins搭建性能测试框架

    搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工 ...

  5. 「转」基于Jmeter和Jenkins搭建性能测试框架

    搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工 ...

  6. Win10系统Jmeter+maven+Jenkins接口自动化环境搭建(一)

    Jmeter+maven+Jenkins实现接口自动化,需要使用idea或eclipse配置maven项目,这里我使用的是idea.具体步骤如下: 1.安装jmeter+jdk jmeter安装之前需 ...

  7. jmeter+ant+jenkins实现自动化接口测试

    一.安装前准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jen ...

  8. Jenkins +Ant +Jmeter(apache-jmeter-5.1.1)自动化性能测试平台

    1.安装配置好Jdk, 下载网址:https://www.cr173.com/soft/33894.html 2.Jmeter下载地址:http://jmeter.apache.org/downloa ...

  9. Jmeter+Ant+Jenkins接口自动化框架

    最近应公司要求,搭建一套接口自动化环境.看到通知邮件,没有多想就确定了Jmeter路线.可能有些人会 说,为啥不用python,相对而言高大上一些.因为公司内部现在项目有用到Jmeter,正好可以结合 ...

随机推荐

  1. XML和JSON优缺点

    <1>.XML的优点 A.格式统一,符合标准: B.容易与其他系统进行远程交互,数据共享比较方便.<2>.XML的缺点 A.XML文件庞大,文件格式复杂,传输占带宽: B.服务 ...

  2. emouse思·睿—评论与观点整理之一

    虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...

  3. 如何查看Isilon的节点的CPU的信息?

    使用Isilon自带的命令 isi_hw_status 使用如下的命令 dmidecode --type processor 笔者只是想了解一下F800的CPU有多少个core.上面的命令都可以获得这 ...

  4. centos7 开机自动连网

    新安装好的CentOS7桌面版,默认的网络都是关闭的,在图形页面中,开启后,重启后网络又关闭了.下面配置开机自动连网. 工具/原料   CentOS7.2 方法/步骤     首先打开终端,用ifco ...

  5. Windows10系统.NET Framework 3.5离线安装方法

    Win10技术预览版给用户们带来很多新功能的同时,也给用户们带来了不害臊的麻烦与问题.其中.NET Framework 4.5是系统预装的,但是在Win10技术预览版中的部分应用需要.NET Fram ...

  6. ubuntu忘记root密码 的解决方法

    alt+f2,在弹出的运行窗口中输入:gnome-terminal,回车. 即进入终端 输入:sudo passwd root,回车后会提示你输入你当前用户的密码 之后 按提示输入两次root的密码( ...

  7. 转: Centos安装gcc及g++

    Centos安装gcc及g++   Centos支持yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户. 按照这个思路,我想安装过程如下: 安装gcc ...

  8. Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常

    异常处理是异步编程的一个难点. 在同步的代码中,异常可以非常easy地通过try catch语句来完毕: try { f(); g(); h(); } catch (e) { // handle an ...

  9. MFC自定义控件如何向父窗口发送自定义消息

    自定义了一个控件 class CHtmlEditCtrlEx : public CHtmlEditCtrl   想在这个控件接收到Ctrl+V键盘消息的时候,向该控件所在的窗口发送一个自定义消息.具体 ...

  10. 运行代码时报linker command failed with exit code 1 错误

    一个c语言项目,在.h文件中原来只有一些方法的声明,后来我加入了一些变量声明后,编译的时候报错: 运行代码时报linker command failed with exit code 1 错误 怎么回 ...