16 Web 自动化测试 -- Jenkins执行脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16 Web 自动化测试 -- Jenkins执行脚本相关的知识,希望对你有一定的参考价值。
参考技术A想要通过Jenkins来执行脚本,我们得在Jenkins上先安装一些必要的环境,并去新建一个Maven Job。
详细见个人博客: http://www.jianshu.com/p/026c0fcaedf0
这里对日程表的五颗 * 做个说明:
注意也需要在Jenkins Location中设置管理员邮件地址:
接着在Job 的配置的“构建后操作”中添加发送邮箱操作,可选“Editable Email Notification” 插件,并做配置。
Project Recipient List 配置要收到邮件的邮箱列表
Content Type 配置邮件发送类型
Default Content 配置邮件发送内容,例如content type我选择了html,那么我可以编写html于内容中,发邮件后会自动化解析成页面形式。例如:
web自动化 自动化无人值守运行
在你根据手工测试用例完善自动化测试用例后,每个测试用例都调试通过了,说明我们已完成了对被测对象的测试用例覆盖。可是在平时的上线回归中,你不可能一个一个地手工执行测试用例的,我们希望的是运行一个命令或是执行一次菜单,测试用例会一个一个地去执行。所以本章开始,我们将讲解如何组织测试用例,以及利用jenkins来自动执行测试用例。
7.1 TestSuite组织测试用例
平时我们编写测试用例的时候,都是继承unittest.TestCases类来编写测试用例的,重写了setUp(),tearDown()方法,并且定义以‘test‘开头的具体方法,来组织成一个个测试用例。而很多的测试用例文件,我们可以用unittest.TextTestRunner()来组织运行测试用例。而根据不同的测试需要,来编写不同的suite文件。
例如:我编写的TestSuite_Online_All.py文件:
# -*- coding: utf-8-*- ‘‘‘ Created on2014-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‘)) # 运行测试用例集 runner =unittest.TextTestRunner() runner.run(suite) if __name__ == "__main__": testsuit_online_all().test()
先引用测试用例文件中的测试类,如:testcases_index,然后利用“测试类(测试函数)”的方法,将具体的测试函数添加suite中,然后利用unittest.TextTestRunner()的run()函数来运行测试用例集中的测试用例。
测试用例的运行
通过testsuite将需要的测试用例组织起来后,当需要执行这一系列的测试用例的时候,只需要执行python TestSuite_Online_All.py 命令即可。或是右击TestSuite_Online_All.py文件,选择“Run As”—>”python run”运行测试集文件即可。
为了方便管理,我们将所有的测试用例集文件放在TestSuites文件夹下,在以后配置Jenkins自动运行Job的时候就可以根据需要,进行不同的配置。
7.2 利用Jenkins来管理自动化测试用例
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:
(1)持续的软件版本发布/测试项目。
(2)监控外部调用执行的工作。
由于其是开源的,所以现在很多公司都用它来管理代码,当然要做到持续集成还是有很多工作要做的,我们只用它来调用我们的自动化测试用例。
Jenkins基本配置
Jenkins这个开源工具的安装及配置管理,在网上有很多相关的教程,如:http://blog.csdn.net/wangmuming/article/details/22925127。
这个上面讲的就很详细,所以我们不在此详细讲述相关的操作。本节我们只讲解,如何把我们的自动化测试用例配置到jenkins上。
下面我们以一个实例来讲解:
(1)我们编写了测试用例文件以及suite文件,并将所有的文件放到SVN:svn://svn.corp.ncfgroup.com/selenium_test/yyzhongchou下面。
(2)我们在要运行测试用例的服务器上安装并配置好了jenkins,这个配置你可以在网上查找相关的方法自行安装配置。
(3)新建一个job ,命名为Zhongchou-web-test-testsuit,然后打开这个job,单击配置菜单。
(4)给我们这个Job添加描述,允许执行项目的人员“启动安全项目”,如图7.2.1所示:
图7.2.1 添加描述及启动项目安全
(5)对我们测试用例的源码进行管理,根据我们源码管理的工具不同,选择不同的方法。我们放的是SVN,所以选择Subversion项,然后在后面填写我们的SVN地址,如图7.2.2所示:
图7.2.2 源码管理
(6)添加构建命令。当我们执行Job的时候,怎么运行我们的测试用例呢,在这一步中,我们要添加上执行我们测试用例的命令:
python.src estSuit estSuit_zhongchou_all.py,这样运行的时候就会调用testsuite,执行测试集中的所有测试用例了,如图7.2.3所示:
图7.2.3 添加构建命令
(7)构建Job。填写完成之后,点击保存按钮,返回job页。当我们想执行测试用例的时候,点击页面左侧的“立即构建”,即可运行测试用例。如图7.2.4所示:
图7.2.4 构建Job
(8)查看执行结果。要想查看测试用例执行的结果,我们可以单击左侧的“Build History”下面的构建项目,在打开的页面中单击左侧的“控制台输出”,就能看出用例执行的结果了。这样就可以定位错误,进行调试。如图7.2.5所示:
图7.2.5查看控制台输出
7.3 Jenkins高级配置
经过上面的配置,我们已实现了把自动化测试用例接入到jenkins中,虽然比手工执行高端一点儿,但这不是我们想要的结果。我们想要自动化执行测试用例,监控执行结果,如果出错给我们发邮件或是短信,这样我们才能及时处理。所以我们要进一步去配置或是优化测试用例。
7.3.1 自动化执行测试用例
Jenkins是用来管理和配置持续化集成的,在持续化集成中,自动运行脚本语言是最基本的功能。下面我们就配置一下:
(1)定时执行测试用例
如图7.3.1.1所示,选择构建触发器中选择buildperiodically,配置执行的方法:
图7.3.1.1配置定时执行
选择 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.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.4.1 测试报告
7.5 本章小结
本章我们讲述了如何使用python unitest的testsuite组织测试用例,如果将自动化测试用例配置到Jenkins中,配置测试用例自动执行,执行失败后发邮件和短信通知相关人员,以及如何生成测试报告等内容。这也是我们自动化测试的具体使用,展示我们自动如何牛的地方。
当然不管你用什么来做自动化测试,也不管你测试的是网页,接口还是手机App,如果不拿出点儿数据来展示给老大们,他们是不会支持你的。像用例覆盖率啊,执行时间啊,发现Bug的数据啊,节省人力成本什么的,本章节的内容是你的加分项目,平时的编写自动化测试用例的努力,全靠此章来展示了!
以上是关于16 Web 自动化测试 -- Jenkins执行脚本的主要内容,如果未能解决你的问题,请参考以下文章
jenkins+selenium+python实现web自动化测试