热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins自动化无人值守运行(上/下)

转自:http:blog.sina.com.cnsblog_68f262210102vmlv.htmlhttp:blog.sina.com.cnsblog_68f

转自:

http://blog.sina.com.cn/s/blog_68f262210102vmlv.html

http://blog.sina.com.cn/s/blog_68f262210102vmlx.html


在你根据手工测试用例完善自动化测试用例后,每个测试用例都调试通过了,说明我们已完成了对被测对象的测试用例覆盖。可是在平时的上线回归中,你不可能一个一个地手工执行测试用例的,我们希望的是运行一个命令或是执行一次菜单,测试用例会一个一个地去执行。所以本章开始,我们将讲解如何组织测试用例,以及利用jenkins来自动执行测试用例。

7.1TestSuite组织测试用例

平时我们编写测试用例的时候,都是继承unittest.TestCases类来编写测试用例的,重写了setUp(),tearDown()方法,并且定义以'test'开头的具体方法,来组织成一个个测试用例。而很多的测试用例文件,我们可以用unittest.TextTestRunner()来组织运行测试用例。而根据不同的测试需要,来编写不同的suite文件。

例如:我编写的TestSuite_Online_All.py文件:

# -*- 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_Loginimporttestcases_login
from TestCases.TestCase_QT_Indeximporttestcases_index
class testsuit_online_all():deftest(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将需要的测试用例组织起来后,当需要执行这一系列的测试用例的时候,只需要执行pythonTestSuite_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\testSuit\testSuit_zhongchou_all.py,这样运行的时候就会调用testsuite,执行测试集中的所有测试用例了,如图7.2.3所示:

 



图7.2.3 添加构建命令

(7)构建Job。填写完成之后,点击保存按钮,返回job页。当我们想执行测试用例的时候,点击页面左侧的“立即构建”,即可运行测试用例。如图7.2.4所示:

 



图7.2.4 构建Job

(8)查看执行结果。要想查看测试用例执行的结果,我们可以单击左侧的“BuildHistory”下面的构建项目,在打开的页面中单击左侧的“控制台输出”,就能看出用例执行的结果了。这样就可以定位错误,进行调试。如图7.2.5所示:



图7.2.5查看控制台输出

7.3 Jenkins高级配置

经过上面的配置,我们已实现了把自动化测试用例接入到jenkins中,虽然比手工执行高端一点儿,但这不是我们想要的结果。我们想要自动化执行测试用例,监控执行结果,如果出错给我们发邮件或是短信,这样我们才能及时处理。所以我们要进一步去配置或是优化测试用例。

7.3.1 自动化执行测试用例

Jenkins是用来管理和配置持续化集成的,在持续化集成中,自动运行脚本语言是最基本的功能。下面我们就配置一下:

(1)定时执行测试用例

如图7.3.1.1所示,选择构建触发器中选择build periodically,配置执行的方法:

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 填写接收报告邮件地址

在下面勾选“每次不稳定的构建都发送邮件通知 ”复选框,然后单击保存,这样在测试用例执行失败或者job构建失败后就会发邮件给所填写的邮件地址了。 

7.3.3 测试执行失败短信通知

现在手机使用这么发达,邮件通知感觉到不那么及时了,如果不时常查看一下邮箱,即使是Jenkins给我们发了邮件我们也不能及时收到。所以如果自动化测试用例执行失败了,能发送短信,这不是很好吗?

遗憾的是,Jenkins没有这个功能,如果想实现这个目标,我们只有自己努力了!下面我们分析一下思路:

(1)   我们要根据执行结果来分析出测试用例执行成功了或是失败了,这个虽然Jenkins会自己分析,可是我们没有办法获取它分析的结果。所以我们要保存执行结果。

(2)   解析保存的执行结果,如果失败了,解析出哪些儿测试用例失败了,把测试用例名字保存下来,以便作为我们失败通知短信的内容。

(3)   需要一个发短信给固定手机的方法,我的办法是我们公司有一个公共短信平台,申请了相关的权限后就可以直接调用发短信接口向任何手机号发短信。读者要想达到这个目的,请自行想办法,因为没有免费的短信接口。

(4)   上面三方面我们需要写一个脚本来做这些儿事情,我们暂时命名为TestGetResult.php,因为调用接口php最方便。脚本都是在linux下执行的,所有python,php都不会相互影响的。脚本内容涉及公司接口,就不给大家展示了。

(5)   如果测试用例执行成功,则直接执行Jenkins返回成功,如果失败,则调用此脚本发送短信,并同时调用Jenkins发送邮件。所以我们的脚本执行不能影响Jenkins对执行结果的判断。

(6)   为了达到这个目的,我们需要在“构建”—>Excute Shell”下添加脚本语言,如下所示:

#!/bin/shpython .\src\testSuit\testSuit_zhongchou_all.py >./Result/WebResult.logif [ $? -ne 0 ];thenphp TestGetResult.phpexit 1elseexit 0fi

脚本讲解:

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原来的判断结果,我们添加了0608两个强制返回语句。

   至此,我们完成了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 unitesttestsuite组织测试用例,如果将自动化测试用例配置到Jenkins中,配置测试用例自动执行,执行失败后发邮件和短信通知相关人员,以及如何生成测试报告等内容。这也是我们自动化测试的具体使用,展示我们自动如何牛的地方。

     当然不管你用什么来做自动化测试,也不管你测试的是网页,接口还是手机App,如果不拿出点儿数据来展示给老大们,他们是不会支持你的。像用例覆盖率啊,执行时间啊,发现Bug的数据啊,节省人力成本什么的,本章节的内容是你的加分项目,平时的编写自动化测试用例的努力,全靠此章来展示了!



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 1jdk去网站下载,然后拷贝到linux上;或直接wgethttp:download.oracle.comotn-pubjavajdk8u181-b1 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • IamsettingupApacheserverwithTortoiseSVNforalocalsourcecoderepository.Ihaveobservedt ... [详细]
  • 文章目录UnsafeDeserialization反序列化漏洞背景认识Java序列化与反序列化用途应用场景Java中的API实现:序列化基础类型参数序列化对象漏洞是怎么来的呢?解决 ... [详细]
  • SVN自动化正文共:5007 字预计阅读时间: 13 分钟平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
author-avatar
一片绿洲053766
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有