---Web自动化测试之Webdriver(python)--从零到熟练(系列)
7.3 Jenkins高级配置
经过上面的配置,我们已实现了把自动化测试用例接入到jenkins中,虽然比手工执行高端一点儿,但这不是我们想要的结果。我们想要自动化执行测试用例,监控执行结果,如果出错给我们发邮件或是短信,这样我们才能及时处理。所以我们要进一步去配置或是优化测试用例。
7.3.1 自动化执行测试用例
Jenkins是用来管理和配置持续化集成的,在持续化集成中,自动运行脚本语言是最基本的功能。下面我们就配置一下:
(1)定时执行测试用例
如图7.3.1.1所示,选择构建触发器中选择build periodically,配置执行的方法:
选择 Build periodically,在 Schedule 中填写 0 * * * *。
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 0 * * * * 表示的就是每个小时的第 0 分钟执行一次构建。
(2)触发式执行测试用例
如图7.3.1.2所示,选择构建触发器中选择“在其他项目完成后构建”或是“触发无私构建”,然后写上触发的项目了。如在开发上传完代码,完成构建后,自动触发回归测试自动用例来进行回归测试。
7.3.2 程序执行失败邮件通知
当测试用例实现自动化执行后,我们需要知道执行的结果。一般测试用例执行成功后,我们并不太关心。但是如果执行失败了,我们需要知道为什么失败,是被测试对象存在bug,还是我们的自动化测试代码有问题了?然后去排查,找出问题所在,这也是自动化测试的意义。
而用例执行失败后发邮件通知,这个功能是jenkins自带的功能,我们只需要对其进行如下配置即可。
(1)打开要进行配置的job, 单击“配置”项。
(2)在“构建后操作”下单击“Add post build actions”,然后选择“E-mail Notification”项。
(3)然后在Recipients后面的框中填写要接收错误报告的邮箱地址,以空格分隔多个地址。如图7.3.2.1所示:
图7.3.2.1 填写接收报告邮件地址
(4)在下面勾选“每次不稳定的构建都发送邮件通知 ”复选框,然后单击保存,这样在测试用例执行失败或者job构建失败后就会发邮件给所填写的邮件地址了。
7.3.3 测试执行失败短信通知
现在手机使用这么发达,邮件通知感觉到不那么及时了,如果不时常查看一下邮箱,即使是Jenkins给我们发了邮件我们也不能及时收到。所以如果自动化测试用例执行失败了,能发送短信,这不是很好吗?
遗憾的是,Jenkins没有这个功能,如果想实现这个目标,我们只有自己努力了!下面我们分析一下思路:
(1) 我们要根据执行结果来分析出测试用例执行成功了或是失败了,这个虽然Jenkins会自己分析,可是我们没有办法获取它分析的结果。所以我们要保存执行结果。
(2) 解析保存的执行结果,如果失败了,解析出哪些儿测试用例失败了,把测试用例名字保存下来,以便作为我们失败通知短信的内容。
(3) 需要一个发短信给固定手机的方法,我的办法是我们公司有一个公共短信平台,申请了相关的权限后就可以直接调用发短信接口向任何手机号发短信。读者要想达到这个目的,请自行想办法,因为没有免费的短信接口。
(4) 上面三方面我们需要写一个脚本来做这些儿事情,我们暂时命名为TestGetResult.php,因为调用接口php最方便。脚本都是在linux下执行的,所有python,php都不会相互影响的。脚本内容涉及公司接口,就不给大家展示了。
(5) 如果测试用例执行成功,则直接执行Jenkins返回成功,如果失败,则调用此脚本发送短信,并同时调用Jenkins发送邮件。所以我们的脚本执行不能影响Jenkins对执行结果的判断。
(6) 为了达到这个目的,我们需要在“构建”—>“Excute Shell”下添加脚本语言,如下所示:
01 #!/bin/sh
02 python .src estSuit estSuit_zhongchou_all.py >./Result/WebResult.log
03 if [ $? -ne 0 ];
04 then
05 php TestGetResult.php
06 exit 1
07 else
08 exit 0
09 fi
脚本讲解:
A,第02行我们是调用执行suite文件,执行测试用例,并将结果保存到./Result/WebResult.log文件中。
B,第03行判断第一行执行的结果,如果执行结果不等于0,说明测试用例执行失败,然后调用05行我们处理测试结果,发短信的脚本。
C,第06行很关键,当测试用例执行失败后,第02行会返回一个非0的结果,此时我们调用05行执行。05行执行成功后会返回0,此时jenkins接到的结果代码是0,会把执行结果置成成功,并且不会发邮件。所以06行,我们人为的返回一个非零的代码给Jenkins,为了不影响Jenkins的结果。
D,第08行和06行的目的是一样的,当03行判断结果为失败时,返回代码是非零的,如果不在08行添加一个人为地返回0的语句,测试用例执行成功时,Jenkins根据返回码也会认为是失败。为了不影响Jenkins原来的判断结果,我们添加了06和08两个强制返回语句。
至此,我们完成了Jenkins的配置,这些儿配置可以满足我们对自动化测试用例的失败监控。当然,如果你们有其他的需要,可以去网上学习Jenkins的其他配置及插件的使用,学无止境嘛!
7.4 自动化测试用例报告
Jenkins可以随时监控自动化测试用例的执行,如果有错误就会及时通知我们。如果我们想向我们的领导展示一下我们自动化的成果,这时一个漂亮的执行报告就是非常必要的了。虽然Python不能生成像testng那样漂亮的报告,不过也是可以生成清晰的报告的。
Python+Webdriver生成报告的方法如下:
(1)下载HTMLTestRunner.py文件:地址http://tungwaiyip.info/software/HTMLTestRunner.html
(2)将该文件保存在python安装路径下的lib文件夹中。在文件中能import HTMLTestRunner成功,即配置成功。
注:如果失败,在项目中新建一个这样的文件也是可以的,只要达到能引入和使用就行。
(3)修改TestSuite文件,添加生成测试报告的语句,如下所示:
# -*- coding: utf-8 -*-
'''
Created on 2014-6-12
@author: songxianfeng
'''
import unittest
import sys
import os
sys.path.append("..")
sys.path.append(os.getcwd()+"/src/")
#引用测试用例文件
from TestCases.TestCase_QT_Login import testcases_login
from TestCases.TestCase_QT_Index import testcases_index
class testsuit_online_all():
def test(self):
if __name__ == "__main__":
#1,登录检测: testlogin
#2,首页检测: testindex
#......
#构造测试集
suite = unittest.TestSuite()
suite.addTest(testcases_login('testlogin'))
suite.addTest(testcases_index ('testindex'))
# 运行测试用例集
filename="./Reoport/TestReport.html"#测试报告路径
fp=file(filename,'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='Result',description='Test_Report')#添加测试报告
runner.run(suite)
if __name__ == "__main__":
testsuit_online_all().test()
(4)当执行完测试用例后,去打开./Report/TestReport.html文件,就可以看到,类似图7.4.1样式的报告。现在你就可以将此报告发给你们老大,以数据形式展示你的成绩了。
7.5 本章小结
本章我们讲述了如何使用python unitest的testsuite组织测试用例,如果将自动化测试用例配置到Jenkins中,配置测试用例自动执行,执行失败后发邮件和短信通知相关人员,以及如何生成测试报告等内容。这也是我们自动化测试的具体使用,展示我们自动如何牛的地方。
当然不管你用什么来做自动化测试,也不管你测试的是网页,接口还是手机App,如果不拿出点儿数据来展示给老大们,他们是不会支持你的。像用例覆盖率啊,执行时间啊,发现Bug的数据啊,节省人力成本什么的,本章节的内容是你的加分项目,平时的编写自动化测试用例的努力,全靠此章来展示了!