基于Jenkins+CVS+RobotFrameWork
构建持续集成的自动化测试实践
一、引言
2018年公司全面推进Devops。全新的工作模式不管是对项目经理、需求人员、开发人员、测试人员、维护人员都有了新的要求。但终究其目标都是为了加快产品的迭代,实现高质量的产品持续交付 。作为测试人员构建“程序的自动发布/回退->快速启动自动化测试->即时反馈自动化测试结果”这样一条持续集成的流水线成为我们跨入DevOps时代的必要条件。写这边文章的目的也是为了对这一段时间的工作经历做一个简单的总结,希望能够为后续改进提供参照。
二、关键字
Ø 持续集成 (Continuous Integration)
Ø 持续部署(Continuous Deployment)
Ø 持续交付(Continuous Delivery)
三、目标
通过Jenkins集成CVS,RobotFramework实现自动化测试的快速构建。
Ø Cvs:自动化测试代码/脚本提供的版本管控保。
Ø RobotFramwork:自动化测试框架。
Ø Jenkins:持续集成的框架,实现任务调度、结果反馈推送。
四、引入Jenkins
所谓“工欲善其事必先利其器”,实现持续集成的首要前提就是搭建一个可持续集成的环境。Jenkins作为近年来最为突出的可持续、可持续集成引擎,提供了丰富的可持续扩展插件,为我们提供了构建可持续集成环境的基础框架,满足了我们日常大部分工作的要求。其突出特性:
易安装:支持跨平台,易部署,不需要数据库支持。
部署建议使用:Jenkins.war(2.138.2) +JDK1.8(最新的版本必须1.8)+Tomcat7.0 。
易配置:任务配置分模块,功能描述清晰,容易上手。
易定位问题:任务构建提供了可视化的调试日志,便于分析构建失败原因。
分布式构建:通过slave节点实现多台主机分布式同时构建任务。
测试报告聚合:每次构建的结果聚合展示,结果一目了然,便于分析任务稳定性以及进展趋势。
即时通告结果:邮件插件解决了结果及时通知的问题。
定时构建:实现7*24小时不间断的持续构建。
开源插件:降低开发投入,加快集成效率。
五、Jenkins常用插件简介
01
SSH plugin
功能:插件支持SSH到远程服务器,让远程SSH执行shell命令变的轻松简单。
使用方法:
1)编辑SSH remote hosts
2)在构建任务直接调度需要在远程服务器上构建的命令
02
SSH Slaves plugin& Windows Slaves Plugin
功能:通过slave插件,让同一套自动化测试代码在不同的环境 (如:Windows和Linux系统)中部署、测试,从而实现分布式调度自动化测试任务。
使用方法:
1)配置Windows节点如下
2)配置Linux节点
关键的环境变量配置:
3)在构建任务的时候指定任务运行的节点
注意:
①所有Slave节点Linux或者Windows机器的环境路径需要统一(如:Jdk、Python) 。
②如果Slave节点是Windows服务器,需要设置windows定时开机(防止服务器被人为关机),并将slave-agent.jnlp设置成通过批处理命令开机启动的服务。
③配置Linux的Slave节点个人感觉没 SSH插件方便,配置的方法类似。
03
Build periodically
功能:通过Jenkins的构建触发器,实现自动化任务定时调度。
使用方法:
1)定时构建语法
第一个*表示分钟,取值0~59
第二个*表示小时,取值0~23
第三个*表示一个月的第几天,取值1~31
第四个*表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
2)定时构建的任务实例
04
Email Extension Plugin、Robot Framework Plugin
功能:将RobotFramework的自动化测试结果整理成表格的方式,邮件通知相关的成员。
使用方法:
1)通过Email Extension Plugin、Robot Framework Plugin构建自动化RobotFramework的测试用例结果反馈模板。(邮件模板配置篇幅较长,不在本文阐述)
2)自动化测试结果自动反馈的邮件如下
3)Robot Framework插件同时还提供了自动化任务构建趋势图以及RF的详细执行日志,便于分析查询执行结果。
六、实践
接下来以Boss下一代自动化测试持续集成的一个Job为例子,介绍一下BOSS下一代自动化日常构建流程:
1
整体流程
Ø 测试人员通过个人PC编辑调试RF自动化测试,调试通过将自动化脚本/代码提交到CVS服务器。
Ø 每天18:00执行自动化发布任务,更新当天所有的程序。其中数据库配置通过oracle的定时Job自动更新。
Ø 每天18:55 逐个启动自动化测试任务。
Ø 每天00:00 高并发启动所有的自动化测试用例,对应用执行并发压测。
2
自动调度测试用例的过程
构建日志
18:00:49 由用户 NPBOSS 启动
18:00:49 [EnvInject] - Loading node environment variables.
18:00:49 在远程节点 10.1.9.69_NPBOSS 上构建 (For_69_Windows) 在工作空间 E:\AutoBuild\workspace\AutoTest-JF-BOSSRATE-01-IVR 中
18:00:49 [WS-CLEANUP] Deleting project workspace...
18:00:49 [WS-CLEANUP] Deferred wipeout is used...
18:00:49 [WS-CLEANUP] Done
18:00:49 No emails were triggered.
18:00:49 [AutoTest-JF-BOSSRATE-01-IVR] $ cmd /c call C:\Users\ADMINI~1\AppData\Local\Temp\jenkins7220497970723203040.bat
18:00:49 18:00:49 E:\AutoBuild\workspace\AutoTest-JF-BOSSRATE-01-IVR>set.UTF-8
18:00:49 18:00:49 E:\AutoBuild\workspace\AutoTest-JF-BOSSRATE-01-IVR>cvs -d :pserver:yujianwei:000000@10.1.0.192:/home/cvsroot/QM login
18:00:49 Logging in to :pserver:yujianwei@10.1.0.192:2401/home/cvsroot/QM
18:00:49 18:00:49 E:\AutoBuild\workspace\AutoTest-JF-BOSSRATE-01-IVR>E:
18:00:49 18:00:49 E:\AutoBuild\workspace\AutoTest-JF-BOSSRATE-01-IVR>cd E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate\
18:00:49 18:00:49 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate>cvs update -A -d IVR语音套餐
18:00:49 cvs update: Updating IVR语音套餐
18:00:49 cvs update: Updating IVR语音套餐/Product-3731010008
18:00:49 cvs update: Updating IVR语音套餐/Product-3731010009
18:00:49 18:00:49 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate>cd E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate\
18:00:49 18:00:49 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate>cvs update -A -d SqlScripts
18:00:49 cvs update: Updating SqlScripts
18:00:49 18:00:49 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\Boss_Rate>cd E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\
18:00:49 18:00:49 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest>cvs update -A -d CommonInfo
18:00:50 cvs update: Updating CommonInfo
18:00:50 18:00:50 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest>E:
18:00:50 18:00:50 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest>cd E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest\
18:00:50 18:00:50 E:\cvsroot\QualityManage\work\TEST\BOSSTC\自动化测试\2-NPBOSS-TEST\FJ-ChinaMobile\FJ_Boss_AutoTest>pabot --processes 2 --outputdir E:\AutoBuild\RF_LOG\01-RFBOSSRATE_JF_IVR\191 .\Boss_Rate\IVR语音套餐
18:00:50 2018-12-28 18:00:06.071000 [PID:26408] [0] EXECUTING IVR Product-3731010008.3731010008-IVR.txt
18:00:50 2018-12-28 18:00:06.071000 [PID:24928] [1] EXECUTING IVR Product-3731010009.3731010009-IVR
18:00:56 2018-12-28 18:00:11.484000 [PID:24928] [1] PASSED IVR Product-3731010009.3731010009-IVRin 5.4 seconds
18:01:03 2018-12-28 18:00:18.676000 [PID:26408] [0] PASSED IVR Product-3731010008.3731010008-IVR in 12.6 seconds
18:01:03 Output: E:\AutoBuild\RF_LOG\01-RFBOSSRATE_JF_IVR\191\output.xml
18:01:03 Log: E:\AutoBuild\RF_LOG\01-RFBOSSRATE_JF_IVR\191\log.html
18:01:03 Report: E:\AutoBuild\RF_LOG\01-RFBOSSRATE_JF_IVR\191\report.html
18:01:03 Elapsed time: 0 minutes 13.490 seconds
18:01:04 Robot results publisher started...
18:01:04 -Parsing output xml:
18:01:04 Done!
18:01:04 -Copying log files to build dir:
18:01:04 Done!
18:01:04 -Assigning results to build:
18:01:04 Done!
18:01:04 -Checking thresholds:
18:01:04 Done!
18:01:04 Done publishing Robot results.
18:01:04 Started calculate disk usage of build
18:01:04 Finished Calculation of disk usage of build in 0 seconds
18:01:04 Started calculate disk usage of workspace
18:01:04 Finished Calculation of disk usage of workspace in 0 seconds
18:01:04 Notifying upstream projects of job completion
18:01:04 Email was triggered for: Always
18:01:04 Sending email for trigger: Always
18:01:04 Sending email to: xxxx@fmcc.boss
18:01:04 Finished: SUCCESS
3
注意点
1)必须配置丢弃旧的构建, 通过设置 “保持构建的天数” 和 “保持构建的最大个数” 两个参数,控制该 Job 最大保存构建数量,否则久而久之Jenkins的master主机将会消耗大量的构建结果。
2)在邮件生成RobotFramework的自动化测试报告,执行的工作工作目录必须保持一致,注意batch命令行和jenkins对环境变量引用的方法存在差异。
3)设置构建超时时间
有些 Job 在执行构建时,由于某些原因导致构建挂起,耗时比较长,而这些长时间挂起的 Job 会导致 Jenkins 内存占用比较大,性能下降,严重的会直接导致 Jenkins 挂掉。所以,我们需要设置构建超时时间来预防这种事情发生,一旦超过一定的时间,要让 Job 自动停止掉。这里我设置构建超过 45 分钟则将本次 Build 置为失败。
4)保持非同一套件的测试用例的独立性
通过pabot并发执行RF自动化测试用例,有效提高用例的执行效率。注意在使用pabot并发执行RF用例的时候,各个套件的测试用例尽量保持独立,否则有可能测试用例在执行初始化脚本的时候出现冲突。
· END ·
领取专属 10元无门槛券
私享最新 技术干货