(转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件
今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程。以后各位只要着重如何编写测试用例即可,其他模板可以套用的,希望帮助到大家。
目录
环境准备:
操作系统: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,所以我们只需要下载安装就可以直接启动。
下方为配置说明:
说明:日程表依次是 分钟 小时 日 月 星期
*:表示每,每分钟,每小时,每天,每月,每星期等
, :表示指定列表范围。
- :表示区间范围
所以0 1 * * 1-5 表示 每个月的星期一到星期五,凌晨一点定时执行脚本。
说明:执行脚本的命令。
上面配置完成后点击保存即可。
立即构建
可先手动构建项目,查看项目是否能够执行通过。
点击左方的“立即构建”
构建完成后,Build History就会有一条记录。
点击这条历史记录进去
再点击Console Output,可查看到日志,Finished: SUCCESS,说明已成功。
四、成果验收
然后只需要静静的等待,测试报告邮件的到来。
原文出处:https://www.cnblogs.com/yufeihlf/p/5752146.html 如有侵权,请联系本人删除,非常感谢!
(转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件的更多相关文章
- 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件
今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写 ...
- 使用jmeter+ant进行接口自动化测试(数据驱动)之二:利用apache-ant执行测试用例并生成HTML格式测试报告
在 使用jmeter+ant进行接口自动化测试(数据驱动)之一 介绍了如何使用csv文件来批量管理接口 本次接着介绍如何利用apache-ant执行测试用例并生成HTML格式测试报告 ①下载安装 ap ...
- Python编写Appium测试用例(1)
有段时间没有使用python编写测试用例了,很长时间以来,感觉appium这个测试工具确实不错,今天又重新拿起来,分享一下自己学习的一些用例,欢迎大家一起交流.学习! 1.登录客户端 #coding= ...
- web自动化测试实战之批量执行测试用例
01实战之分离测试固件 在UI 自动化测试中,不管编写哪个模块的测试用例,都需要首先在测试类中编写测试固件初始化WebDriver类及打开浏览器,执行登录,才能进行下一步业务逻辑的操作,测试用例执行完 ...
- 28. Python编写自动化测试用例
接口文档已经提供了,requests库.unittest单元测试框架也已经介绍过,笔者相信读者朋友已经可以独立编写接口自动化测试用例了.但是有一些细节,我们需要聊一下.比如我们写登录接口测试用例,用户 ...
- Python编写Appium测试用例(2)
#coding=utf-8import os,sysimport unittestfrom appium import webdriverimport timefrom selenium.webdri ...
- RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib
使用Python构建Lib工程 可以用来开发Python Lib的IDE工具有很多,常见的有Pycharm,Eclipse with PyDev插件等,而且在RobotFramework官网中也已经提 ...
- Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介
前言 之前的系列博客,陆续学习整理了自动化测试环境的搭建.IE和Chrome浏览器驱动的配置.selenium-webdriver模块封装的元素定位以及控制浏览器.处理警示框.鼠标键盘等方法的使用,这 ...
- 【转载】Python编写简易木马程序
转载来自: http://drops.wooyun.org/papers/4751?utm_source=tuicool 使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马. 首先准备好 ...
随机推荐
- Python内置函数(36)——iter
英文文档: iter(object[, sentinel]) Return an iterator object. The first argument is interpreted very dif ...
- 5.Django cookie
概述 1.获取cookie request.COOKIES['key'] request.COOKIES.get('key') request.get_signed_cookie(key, defau ...
- 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控
6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...
- laravel的消息队列剖析
laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...
- 关于mybatis中typeHandler的两个案例
在做开发时,我们经常会遇到这样一些问题,比如我有一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,怎么实现?再比如我有一个User类,User类中有一个属性叫做 ...
- Mongodb~Linux环境下的部署
< mongodb服务脚本的制作> Mongodb这个文档型非关系型数据库,可以说它是最像关系型的了,之前大叔主要讲如何使用mongodb,而没有说过如何去部署和安装它,而今天大叔有必要讲 ...
- exec族函数详解及循环创建子进程
前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...
- Kafka Producer源码简述
接着上文kafka的简述,这一章我们一探kafka生产者是如何发送消息到消息服务器的. 代码的入口还是从 kafkaTemplate.send开始 最终我们就会到 org.springframewor ...
- centos7安装xfce桌面
用了centos自带的gnome桌面 太重了 启动超慢 内存占用近2G 因此打算换一个轻量级的桌面xfce 先安装桌面协议yum groupinstall "X Window system& ...
- selenium和webdriver区别
接触selenium大概半年时间了.从开始的预研,简单的写个流程到后期的自动化框架的开发,因为本人不属于代码方面的大牛,一直的边研究边做.逐步深入学习.近期发现自己对本身selenium的发展还存在困 ...