最完整的自动化测试流程

article/2025/10/14 14:04:01

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

目录

一、编写测试用例

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

三、定时执行测试用例

   3.1方案一:Windows任务计划

   3.2方案二:Jenkins持续集成

四、成果验收

 

环境准备:

操作系统: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 unittestfrom HTMLTestRunner import HTMLTestRunnerimport timeimport osimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom 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
msg.attach(msg_html1)

msg_html = MIMEText(mail_body,'html','utf-8') msg_html[
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[
msg['Subject']=Header(subject,'utf-8') #连接发送邮件
smtp=smtplib.SMTP() smtp.connect(smtpserver,
smtp.connect(smtpserver,25) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() 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
now=time.strftime('%Y-%m-%d_%H_%M_%S_') filename
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) 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======'

复制代码
    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目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。
 
项目配置
点击左方的“新建”。


 

    直接在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,所以我们只需要下载安装就可以直接启动。 

 

下方为配置说明:

 

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

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

, :表示指定列表范围。

- :表示区间范围 

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

说明:执行脚本的命令。

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

 

立即构建

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

点击左方的“立即构建”

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

 

点击这条历史记录进去

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

 

四、成果验收

点击返回目录

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

 

在此需要感谢虫师编著的“selenium2 自动化测试实战 基于Python语言”。

同时也要感谢原创博主http://www.cnblogs.com/yufeihlf/p/5752146.html


http://chatgpt.dhexx.cn/article/BDWMe5VN.shtml

相关文章

图解《字典学习》

PPT&代码链接 csdn:https://download.csdn.net/download/u012037852/10899017 github:https://github.com/longfeizhou2016/Dictionary-learning

python学习 字典

22-9-15 1.格式&#xff1a;大括号{} eg&#xff1a; 2.创建字典&#xff1a; 6种常用方法&#xff1a; 3.增&#xff1a; 1.formkeys&#xff1a; eg&#xff1a; 2&#xff1a; 用此种方法,若键值存在&#xff0c;则修改其value&#xff0c;若不存在&#xff0c;则新…

[转]字典学习/稀疏编码

本文转自https://zhuanlan.zhihu.com/p/26015351 机器学习——字典学习/稀疏编码学习笔记 Esquirrel 2 个月前 以下资料是小编学习字典学习/稀疏编码时&#xff0c;整理的高质量的网络博客&#xff0c;供大家参考。欢迎留言交流&#xff0c;批评指正理解不足。 最Highlight的地…

【零散知识】字典学习(Dictionary Learning)

前言&#xff1a; { 之前的神经网络实践还卡在硬件上&#xff0c;不过目前已经打算先使用云设备&#xff0c;下次应该就会继续进行多目标识别的调试。这次就先写一点零散知识。 在专利[1]中我遇到了新的观点——字典学习&#xff08;Dictionary Learning&#xff09;。 } 正…

Python-字典学习

这次主要学习了字典学习的相关知识以及选择分支结构&#xff0c;根据课程编写了下图一些代码&#xff1a;

Python中的字典学习笔记

字典的格式&#xff1a;{"key":"value"} key表示数据的含义&#xff0c;value表示对应的数据的值字典是一种可变的数据类型&#xff0c;从python3.7开始&#xff0c;字典是有序的。 字典创建的方式 1、通过{}&#xff0c;要使用key:value的格式&#xff0c…

『ML笔记』字典学习3(Dictionary Learning,KSVD)

文章目录 一、字典学习数学模型1.1、数学描述1.2、求解问题1.3、字典学习算法实现 字典学习也是一种数据降维的方法&#xff0c;这里我用到SVD的知识&#xff0c;对SVD不太理解的地方&#xff0c;可以看看这篇博客&#xff1a; 奇异值分解SVD 一、字典学习数学模型 字典学习的…

字典学习日记

字典的创建 在定义字典时&#xff0c;每个元素都包含了两部分&#xff1a;键&#xff08;key&#xff09;和值&#xff08;value&#xff09;&#xff0c;并且在“键”和“值”之间使用英文冒号分隔&#xff0c;相邻两个元素使用英文逗号分离&#xff0c;所有的元素都放…

Dictionary Learning(字典学习、稀疏表示以及其他)

第一部分 字典学习以及稀疏表示的概要 字典学习&#xff08;Dictionary Learning&#xff09;和稀疏表示&#xff08;Sparse Representation&#xff09;在学术界的正式称谓应该是 稀疏字典学习&#xff08;Sparse Dictionary Learning&#xff09;。该算法理论包含两个阶段&am…

字典的学习笔记

列表 [] 单身什么是字典 {} 二人世界 python内置的数据结构之一&#xff0c;与列表一样是一个可变序列(可以增删改操作的) 以键值对的方式存储数据&#xff0c;字典是一个无序的序列 -> hash(key) 通过哈希函数来计算存储位置,key一定是不可变的字典的创建 使用花…

python学习之字典

目录 一、字典格式 二、操作 1、添加元素 2、修改value值 3、删除 4、遍历和查询 5、合并字典 三、小结 一、字典格式 特点&#xff1a;是以键值对的形式存储 结构&#xff1a;{键1&#xff1a;值&#xff0c;键2&#xff1a;值&#xff0c;键3&#xff1a;值} 字典…

『ML笔记』深入浅出字典学习1(Dictionary Learning)

目录 一、预备知识 二、字典学习以及稀疏表示的概要 2.1、我们为什么需要字典学习&#xff1f; 2.2、我们为什么需要稀疏表示&#xff1f; 三、下一节 参考文献 一、预备知识 稀疏向量&#xff1a;假设向量中的元素绝大部分为零元素&#xff0c;则称该向量是稀疏的。 …

机器学习(十三)k-svd字典学习

k-svd字典学习 原文地址:http://blog.csdn.net/hjimce/article/details/50810129 作者&#xff1a;hjimce 一、字典学习 字典学习也可简单称之为稀疏编码&#xff0c;字典学习偏向于学习字典D。从矩阵分解角度&#xff0c;看字典学习过程&#xff1a;给定样本数据集Y&…

字典学习(KSVD)详解

关于字典学习 对于一个事物&#xff0c;我们如何表征它呢&#xff1f;很明显&#xff0c;这个事物是有特征的&#xff0c;或者说&#xff0c;这个事物它是由许多个不同的特征经过一定的组合而形成的。字典学习的目标是提取实物的最本质特征。用字典来表征该事物的特征。&#…

语音增强———字典学习介绍

语音增强--------------字典学习 字典学习就是用较少的特征&#xff08;原子&#xff09;来表示信号&#xff0c;那么信号的多个特征组合就相当于多个原子组成的字典&#xff0c;那么信号就可以用字典中少量的原子进行表示。信号在字典下的表示系数越系数&#xff0c;那么重构…

字典学习(Dictionary Learning)

字典学习——Dictionary Learning 我主要从一下几个方面分享一下。 什么是字典学习字典学习的理论依据及公式字典学习的应用 1、什么是字典学习&#xff1f; 在人类发展的近几千年历史中&#xff0c;文字对人类文明的推动起着举足轻重的作用。人类用文字记述了千年的历史&a…

为什么我们需要机器学习,机器学习主要应用在哪几方面?

一、为什么需要机器学习&#xff1f; 有些任务直接编码较为复杂&#xff0c;我们不能处理所有的细微之处和简单编码&#xff0c;因此&#xff0c;机器学习很有必要。相反&#xff0c;我们向机器学习算法提供大量数据&#xff0c;让算法不断探索数据并构建模型来解决问题。比如…

什么是机器学习,目前机器学习的应用有哪些?

机器学习 机器学习就是让机器具备人一样学习的能力&#xff0c;专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能&#xff0c;它是人工智能的核心。 机器学习已经有了十分广泛的应用&a…

【机器学习】浅析机器学习各大算法的适用场景

最近在参加一个分类算法竞赛&#xff0c;也正好整理各个分类机器学习算法的简单介绍&#xff0c;应用场景和优缺点。资源来自网上和自己个人理解。 一、逻辑回归模型 1、理解逻辑回归模型&#xff08;LR&#xff09; 逻辑回归是一种分类算法&#xff0c;其原理是将线性回归预测…

什么是机器学习?有哪些应用?终于有人讲明白了

作者&#xff1a;星环科技人工智能平台团队 来源&#xff1a;大数据DT&#xff08;ID&#xff1a;hzdashuju&#xff09; 导读&#xff1a;人工智能的快速发展&#xff0c;带动了相关技术的繁荣。近些年&#xff0c;国内外的科技公司对机器学习人才都有大量需求。怎样入行机器学…