结合jenkins以及PTP平台的性能回归测试

Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目复刻。Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。可以通过各种手段触发构建。例如提交给版本控制系统时被触发,也可以通过类似Cron的机制调度,也可以在其他的构建已经完成时,还可以通过一个特定的URL进行请求。

1.2 PTP平台

性能测试一直是业界重点关注的部分,但是复杂的性能测试过程却让很多人望而生畏:管理测试用例、收集测试数据、进行数据分析、编写测试报告,每一项都需要耗费很多心血。
于是,PTP平台就这样应运而生了,它是网易自主开发的自动化性能测试平台,致力于将性能测试过程自动化、标准化、一体化,并且将性能测试过程持续起来,进行更多数据分析。

 

2自动化流程

2.1创建任务

QA管理员拥有新建节点权限,如需增加新节点,请找各自的QA管理员。QA管理员在Jenkins上添加一个新节点步骤如下:

(1)点击链接进入

(2)输入节点名称,节点名称通常以服务器hostname或者机器描述命名,比如qa10.server,ddb-23.photo,QA_AutoTest_1等。

(3)选择Dumb Slave选项,点击OK按钮

(4)输入以下设置:

a.# of executors:输入执行器的个数(一个或者多个):这个值控制着Jenkins并发构建的数量, 因此这个值会影响Jenkins系统的负载压力。使用处理器个数作为其值会是比较好的选择。

b.Remote FS root:输入slave机器作为持续集成Home的路径

c.Labels:用来对多节点分组,在目前杭研的应用中,我们一般设置其跟节点名称一样

d.用法:一般选只运行绑定到这台机器的job

e.Launch Method选择Launch slave agents via Java Web Start

(5)保存

Node Properties可设置环境变量,如果不设置就会使用jenkins主机上全局定义的环境变量,如下图所示:

结合jenkins以及PTP平台的性能回归测试

更详细的创建教程可参见wiki:?pageId=36463105

2.2 自动化环境部署

Jenkins上添加配置好的节点,如下所示:

结合jenkins以及PTP平台的性能回归测试

编写自动化部署脚本:

import requests import time import os import sys   # web is deployed on two servers,the arguments in url:moduleId,envId,instanceId test_web_arg_1 = (\'***\',\'***\',\'***\') basi_url = \'http://omad.hz.netease.com/api\'   productId = \'***\' envName=\'urs-regzj-perftest\' branch=\'perftest_jenkins\'   def get_token(appId, appSecret):         r = requests.get(basi_url + \'/cli/login?appId=%s&appSecret=%s\' % (appId, appSecret)).json         return r[\'params\'][\'token\']   def deploy_web(appId, appSecret,moduleId,envId):         test_web_url = \'/cli/deploy?token=%s&moduleId=%s&envId=%s\'%(get_token(appId, appSecret),moduleId, envId)         r = requests.get(basi_url + test_web_url).json         print \'Deploy result:\'   def get_status(appId, appSecret,envId,instanceId):         status_url = \'/cli/istatus?token=%s&envId=%s&instanceId=%s\'%(get_token(appId, appSecret), envId, instanceId)         r = requests.get(basi_url + status_url).json         return r[\'deployStatus\'],r[\'status\']   def check_deploy_result(appId, appSecret,envId,instanceId):         status = get_status(appId, appSecret,envId,instanceId)         print \'building .......\'         times = 0         while status[0] == \'success\':                 status = get_status(appId, appSecret,envId,instanceId)                 times += 1该过程主要是调用OMAD接口实现了自动化部署,分为以下几个步骤:(1)调用/api/cli/login接口获取个人token信息;(2)调用/api/cli/vcchange接口对指定产品的指定环境切换成指定分支;

(3)调用/api/cli/ls接口获取当前用户有权限的所有产品的所有工程的信息;

(4)调用/api/cli/deploy接口对指定环境的指定分支进行构建部署。

执行方式为python omad.py AccessKeyAccessSecret,其中$AccessKey和$AccessSecret为登录OMAD后的个人认证信息。

2.3 自动化脚本调试

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxjj.html