最完整的自动化测试流程:python编写执行测试用例及定时自动发送最新测试报告邮件建议收藏(代码片段)

程序员二黑 程序员二黑     2022-12-08     628

关键词:

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程。以后各位只要着重如何编写测试用例即可,其他模板可以套用的,希望帮助到大家。

环境准备:

操作系统:Windows7

集成开发环境:eclipse+pydev

一、编写测试用例

可以直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例,断言预期结果,以及批量执行测试用例等功能,可以很好的进行Web自动化测试的开发。

可以直接查看我另外一篇博文总结:unittest单元测试框架总结

里边详细总结了使用unittest框架编写测试用例思路(模板)和使用unittest框架编写测试用例实例。

目录结构如下组织:

如上图:test_case目录下有两个测试用例,其中test_baidu.py实例代码在博文“unittest单元测试框架总结”中有贴出。其他实例,可以参考模板实现,就不全部贴出代码了。

而这次需要测试的就是test_baidu.py和test_youdao.py这两个测试用例。

二、执行测试用例,查找最新测试用例,自动发送测试报告

整个代码执行过程可以分成三个步骤:

1.通过unittest框架的discover()找到匹配的测试用例(以test_开头的脚本),由HTMLTestRunner的run()方法执行测试用例并生成最新测试报告。HTMLTestRunner是Python标准卡unittest单元测试框架的一个扩展,主要用于生成HTML测试报告,以便生成一份通俗易懂的测试报告来展示自动化测试成果。

HTMLTestRunner模块下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

将下载的文件保存在C:\\Python27\\Lib目录下即可。

2.先定义new_file()函数(找到某目录最新文件),调用new_file()函数找到测试报告目录下最新生成的测试报告,返回最新测试报告的路径。

3.先定义send_email()函数(发送指定路径下某文件的邮件),将得到的最新测试报告的完整路径传给send_email()函数,实现发邮件功能。

关于发邮件功能,也可以参考我另外一篇博文:Python自动发邮件总结及实例说明

代码如下:注释中包括实现的过程说明以及一些在测试过程中遇到的问题。

文件命名为runtest_htmltestrunner_autosendemail.py

# coding=utf-8

'''

Created on 2016-7-26

@author: Jennifer

Project:整合自动发邮件功能,执行测试用例生成最新测试报告,取最新的测试报告,发送最新测试报告

问题,邮件始终不能显示html:将电脑时间改为北京时间即可

'''

import unittest

from HTMLTestRunner import HTMLTestRunner

import time

import os

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.header import Header

#2.定义:取最新测试报告

def new_file(test_dir):

    #列举test_dir目录下的所有文件,结果以列表形式返回。

    lists=os.listdir(test_dir)

    #sort按key的关键字进行排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间

    #最后对lists元素,按文件修改时间大小从小到大排序。

    lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\\\'+fn))

    #获取最新文件的绝对路径

    file_path=os.path.join(test_dir,lists[-1])

#    L=file_path.split('\\\\')

#    file_path='\\\\\\\\'.join(L)

    return file_path

#3.定义:发送邮件,发送最新测试报告html

def send_email(newfile):

    #打开文件

    f=open(newfile,'rb')

    #读取文件内容

    mail_body=f.read()

#调试使用

#    print u'打印'

#    print mail_body

    #关闭文件

    f.close()



    #发送邮箱服务器

    smtpserver = 'smtp.163.com'

    #发送邮箱用户名/密码

    user = 'XXX@163.com'

    password='XXX'

    #发送邮箱

    sender='XXX@163.com'

    #多个接收邮箱,单个收件人的话,直接是receiver='XXX@126.com'

    receiver=['XXX@126.com','XXX@126.com','XXX@doov.com.cn']

    #发送邮件主题

    subject = '自动定时发送测试报告20160808'



    #编写 HTML类型的邮件正文

#MIMEText这个效果和下方用MIMEMultipart效果是一致的,已通过。

#    msg = MIMEText(mail_body,'html','utf-8')



    msg=MIMEMultipart('mixed')



    #注意:由于msg_html在msg_plain后面,所以msg_html以附件的形式出现

#    text = "Dear all!\\nThe attachment is new testreport.\\nPlease check it." 

    #中文测试ok

#    text = "Dear all!\\n附件是最新的测试报告。\\n麻烦下载下来看,用火狐浏览器打开查看。\\n请知悉,谢谢。" 

#    msg_plain = MIMEText(text,'plain', 'utf-8')   

#    msg.attach(msg_plain)



    msg_html1 = MIMEText(mail_body,'html','utf-8')

    msg.attach(msg_html1)



    msg_html = MIMEText(mail_body,'html','utf-8')

    msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"'

    msg.attach(msg_html)



    #以附件的方式发送:但是会报554,倍163退信。--此路不通。

#    msg_html = MIMEText(mail_body,'base64','utf-8')

#    msg_html["Content-Type"] = 'application/octet-stream' 

#    msg_html.add_header('Content-Disposition', 'attachment', filename='testreport.html')

#    msg.attach(msg_html)



#要加上msg['From']这句话,否则会报554的错误。

#要在163有限设置授权码(即客户端的密码),否则会报535

    msg['From'] = 'XXX@163.com <XXX@163.com>'

#    msg['To'] = 'XXX@doov.com.cn'

    #多个收件人

    msg['To'] = ";".join(receiver)

    msg['Subject']=Header(subject,'utf-8')

    #连接发送邮件

    smtp=smtplib.SMTP()

    smtp.connect(smtpserver,25)

    smtp.login(user, password)

    smtp.sendmail(sender, receiver, msg.as_string())

    smtp.quit()

if __name__=='__main__': 

    print '=====AutoTest Start======'

    #1.执行测试用例,生成最新的测试用例

    #指定测试用例为当前文件夹下的test_case目录

    #如果用/可以不用r

#    test_dir='./test_case'

#Windows的cmd执行:python "D:\\system files\\workspace\\selenium\\test_project\\runtest_htmltestrunner_autosendemail.py"

#不用绝对路径会报:ImportError: Start directory is not importable: './test_case'

    test_dir = 'D:\\\\system files\\\\workspace\\\\selenium\\\\test_project\\\\test_case'

    #知道测试报告的路径

    test_report_dir='D:\\\\pythontest\\\\testresult'



    discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

    now=time.strftime('%Y-%m-%d_%H_%M_%S_')

    filename = test_report_dir+'\\\\'+ now + 'result.html'

    fp=open(filename ,'wb')

#需屏蔽fp中的中文文字说明。否则在windows下执行会报:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 553: ordinal not in range(128)

    runner = HTMLTestRunner(stream=fp,title=u'测试报告',description=u'用例执行情况:')

    runner.run(discover)

#注意:调用函数一定要加括号,一个括号害死个人,哎,查了几天的问题,才发现导致html文件始终显示空白,就是因为close函数调用不正确,漏了括号。

    fp.close()



    #2.取最新测试报告

    new_report=new_file(test_report_dir)

#调试用的

#    print new_report



    #3.发送邮件,发送最新测试报告html

    send_email(new_report)

    print '=====AutoTest Over======'

直接在eclipse运行,运行结果如下:

…表示两个测试用例都执行通过。
在这里插入图片描述

三、定时执行测试用例

方案一:直接使用Windows任务计划执行Python测试脚本。

1.创建runner.bat

由于runtest_htmltestrunner_autosendemail.py脚本目录为D:\\system files\\workspace\\selenium\\test_project,

所以在该目录下创建runner.bat,runner.bat的内容如下:

python runtest_htmltestrunner_autosendemail.py

建议:可以事先在cmd命令行下执行runtest_htmltestrunner_autosendemail.py,确保该脚本能够在Windows下正常运行。如不能正常运行,请继续调试,找出问题,直到能够正常运行。如下:

2.创建任务计划

2.1右键计算机,点击管理,点击任务计划程序,再点击右方的创建任务。

2.2常规中,填写名称,如:定时执行Python脚本

触发器中,指定执行脚本时间。

最重要的是操作设置:

程序和脚本填写runner.bat这个文件的名称

起始于填写runner.bat所在路径,D:\\system files\\workspace\\selenium\\test_project

如下:
在这里插入图片描述

3.查看

在任务计划程序库中,就会出现该任务。
在这里插入图片描述

方案二:使用Jenkins定时执行脚本

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,所以可用于定时执行python脚本。

环境准备:jdk1.7及以上+Jenkins[+tomcat(可选)]

Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。

jenkins下载地址:http://jenkins-ci.org 选择LTS(长期支持的版本),比较稳定,下载war包。

第一种启动方法,切换到jenkins.war存放的目录(随便哪个目录),输入如下命令:

java -jar jenkins.war #这样的话默认端口是8080

若要指定端口,则:

java -jar jenkins.war --httpPort=8080

然后在浏览器中(推荐用火狐)输入localhost:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins.

我就是用第一种方法安装Jenkins。

第二种方法是用tomcat打开

tomcat下载地址:http://tomcat.apache.org/

解压tomcat到某个目录,如D:\\tomcat9,进入tomcat下的/bin目录,启动tomcat:即双击startup.bat文件

将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。

项目配置

点击左方的“新建”。

下方为配置说明:


在这里插入图片描述

说明:日程表依次是 分钟 小时 日 月 星期

*:表示每,每分钟,每小时,每天,每月,每星期等

, :表示指定列表范围。

  • :表示区间范围

所以0 1 * * 1-5 表示 每个月的星期一到星期五,凌晨一点定时执行脚本。

说明:执行脚本的命令。

上面配置完成后点击保存即可。

立即构建

可先手动构建项目,查看项目是否能够执行通过。

点击左方的“立即构建”
在这里插入图片描述

构建完成后,Build History就会有一条记录。

在这里插入图片描述

点击这条历史记录进去

在这里插入图片描述

再点击Console Output,可查看到日志,Finished: SUCCESS,说明已成功。

四、成果验收

然后只需要静静的等待,测试报告邮件的到来。

在这里插入图片描述

最后为方便大家学习测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。


包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助……

关注我公众号:【程序员二黑】即可获取这份资料了!

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们的群:785128166 大家一起讨论交流,里面也有各种软件测试资料和技术交流。

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救

大学毕业开始销售…不甘于现状,转行测试的自救之路

从销冠到失业,最后选择软件测试,回头看看这段路,我很幸运!

自动化测试用例设计

一、了解自动化测试的目的和作用  自动化测试是为了让测试人员从繁琐重复的机械式测试过程中解脱出来,把时间和精力投入到更有价值的地方,从而挖掘更多的产品缺陷。目前自动化测试更多的是定位在冒烟测试和回归测... 查看详情

自动化测试用例设计

一、了解自动化测试的目的和作用  自动化测试是为了让测试人员从繁琐重复的机械式测试过程中解脱出来,把时间和精力投入到更有价值的地方,从而挖掘更多的产品缺陷。目前自动化测试更多的是定位在冒烟测试和回归测... 查看详情

web自动化测试的流程?

参考技术A自动化测试流程(1)需求分析(2)挑选适合做自动化测试的功能(3)设计测试用例(4)搭建自动化则试环境[可选](5)设计自动化测试项目的架构[可选](6)编写代码(7)执行测试用例(8)生成测试报告并分析结果自动化项目框架自动化... 查看详情

python单元测试之unittest框架使用总结

...eError把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试 二、unittest工作原理unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture(1)一个TestCase的实例就是一个测试用例。测试用例就是指一个完... 查看详情

单元测试--unittest(代码片段)

...框架,具备编写用例、测试用例、执行用例、输出报告等自动化框架的条件。unittest的四个核心概念:   testcase:一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在:测试前环境准备(setU... 查看详情

新手如何开始学习自动化测试?

对于测试人员来说,不管进行功能测试还是自动化测试,还是性能测试,都是需要编写测试用例,所以我们必须先要了解清楚手工测试用例与自动化测试用例的一些特点,才能更好的开展自动化测试工作。  1.1手工测试用例和... 查看详情

自动化测试都包含哪些内容?

...阶段主要是以测试规格为基础获得特性测试方案,对于有自动化测试的项目,进行自动化测试的分析,获得测试策略。输出产物:《产品或者版本总体测试方案》4、测试用例实现阶段。本阶段主要是完成各个特性的测试用例的... 查看详情

接口自动化测试怎么做的

...python语言的话,应用pytest,构建接口测试用例,完成接口自动化测试。以上两种,伟大的internet上都有很多教程,简单的学习基本就可以上手了~加油~ 查看详情

python自动化测试之详解unittest单元测试框架

...证比较方法和丰富的日志,能够帮助我们更好的组织自动化测试用例。一、unitest中几个重要的概念1、TestCase一个TestCase的实例就是一个测试用例,一个测试用例就是一个完整的测试流程,它包括测试前准 查看详情

unittest(代码片段)

...case/testsuite/testrunnerTestcase的实例就是一个测试用例,一个完整的测试流程测试准备前环境的搭建:setUp执行测试代码:run测试后环境的还原:tearDownTestsuite多个测试用例的集合,且Testsuit可以自我嵌套Testrunner执行测试用例,run会... 查看详情

一篇文章搞懂unittest单元测试框架

参考技术A码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试Python2.1及以后的版本,将unittest作为一个标准模块放入Python开发包中。01使用unittest编写测试用例规则:unittest的执行结果:02三个重要概念03测试用例执... 查看详情

python实现头条项目接口自动化测试

目标1.熟悉接口自动化测试的流程2.能够对一个项目的接口实现自动化测试接口自动化测试流程1.需求分析2.挑选需要做自动化测试的功能3.设计测试用例4.搭建自动化测试环境[可选]5.设计自动化测试项目的架构[可选]6.编写代码7.... 查看详情

接口自动化测试流程是啥样的?

...写一些测试逻辑。python去写,速度快,简单python也有很多自动化测试相关的工具。roboframework,是一个自动化测试框架,写自动化非常简单。参考技术A一般来讲,接口自动化测试流程分为如下几个步骤:1.需求分析2.挑选需要做自动... 查看详情

从功能测试到自动化测试,携程大牛总结一些工作经验分享

现如今应该有很多测试人员应该有这样的疑虑,自动化测试要怎么去做,今天把一些学习经验分享给大家,希望对你们有帮助,有说的不好的地方,还请多多指教!对于测试人员来说,不管进行功能测试还是自动化测试还是性能... 查看详情

接口自动化测试,完整入门篇(代码片段)

...层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。下面我们以一个HT... 查看详情

python实现头条项目接口自动化测试(代码片段)

目标1.熟悉接口自动化测试的流程2.能够对一个项目的接口实现自动化测试接口自动化测试流程1.需求分析2.挑选需要做自动化测试的功能3.设计测试用例4.搭建自动化测试环境[可选]5.设计自动化测试项目的架构[可选]6.编写代码7.... 查看详情

用例该如何书写?完整示例-qq登录界面

...师最基本也是最重要的能力,无论你是什么岗位:黑盒、自动化、接口、性能亦或是安全测试工程师。至于如何书写先不讲,先看下我们学员共同完成的一个完整版的用例示例图:软件测试起跑测试交流群:4216 查看详情

测试管理工具都有哪些?

...基础:一是标准化测试用例库构建。支持手工测试用例和自动化测试用例,支持测试用例树型结构。支持测试用例的各种状态:执行通过、未执行、执行失败;支持测试用例关联缺陷;支持测试关联到需求。支持执行中的测试用... 查看详情