Python3+unitest自动化测试初探(中篇)
本篇随笔承接:Python3+unitest自动化测试初探(上篇)
6、生成测试报告
6.1、下载HTMLTestRunner.py
原版下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 。原版的只支持Python 2.x版本,Python 3.x版本需要做适配。
适配后的下载地址:https://github.com/Slience007/pyunitest/blob/master/untils/HTMLTestRunner.py
6.2、安装HTMLTestRunner.py
安装方法比较简单,将HTMLTestRunner.py放到sys.path路径下即可。ubuntu下,我放到了如下路径:/usr/lib/python3.7。
6.3、生成报告
HTMLTestRunner.py提供HTMLTestRunner()类来代替unittest.TextTestRunner()执行用例,修改后的run.py的代码如下:
#coding:utf-8
import unittest
#导入HTMLTestRunner
from HTMLTestRunner import HTMLTestRunner
#从testCase包里面导入测试类
from testCases.userLoginTest import loginTest
from testCases.userRegTest import regTest
#构造测试套
def suite():
suite = unittest.TestSuite()
suite.addTest(loginTest("test_loginsucess_L0"))
suite.addTest(loginTest("test_pwdwrong_L0"))
suite.addTest(loginTest("test_statuserr_L1"))
suite.addTest(regTest("test_pwdlenerr_L1"))
suite.addTest(regTest("test_regsucess_L0"))
suite.addTest(regTest("test_regagain_L1"))
return suite
#运行测试用例
if __name__ == '__main__':
# runner = unittest.TextTestRunner()
# #调用test runner的run方法执行用例
# runner.run(suite())
#以二进制格式打开TestReport.html用于写入数据
with open("./TestReport.html","wb") as f:
runner = HTMLTestRunner(stream=f,title="Reg And Login Test Report")
runner.run(suite())
运行run.py后,打开TestReport.html,查看生成的测试报告。
7、编写邮件发送工具
在Project下新建包utils用来封装一些常用的工具,在utils下新建Python文件emailUtil.py。定义sendEmail类。这个类主要包含3个方法:
- init():初始化
- writeEmail():构造邮件主题,邮件正文,添加邮件附件。
- sendEmail():连接邮件服务器,认证,发送邮件。我采用的是网易邮件服务器,其地址是smtp.126.com。收件地址为QQ邮箱。
[ 代码如下:]emailUtil.py
#coding:utf-8
'''
email模块负责构造邮件内容
smtplib模块负责发送邮件
'''
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email.header import Header
class sendEmail():
#定义全局变量邮件服务器地址,登录用户,授权码
global MAILHOST,MAILUSER,MAILPWD
MAILHOST = "smtp.126.com"
MAILUSER = "××××@126.com"
MAILPWD = "×××"
def __init__(self,subject,content,reveiver,attachPath=""):
self.subject = subject
self.content = content
self.receiver = reveiver
self.attachPath = attachPath
#写邮件,返回msg.as_string()
def writeEmail(self):
msg = MIMEMultipart()
#邮件正文
msg.attach(MIMEText(self.content, 'plain', 'utf8'))
receiverName = ",".join(self.receiver)
msg['from'] = Header(MAILUSER,'utf-8')
#msg['to'] = Header(",".join(self.receiver)).encode()
msg['to'] = Header(receiverName).encode()
#邮件主题
msg['Subject'] = Header(self.subject,'utf-8').encode()
#print("msg is:",msg)
#attachPath不为空则添加附件到邮件中
if self.attachPath != "":
with open(self.attachPath, 'rb') as f:
attach1 = MIMEText(f.read(), 'base64', 'utf-8')
attach1["Content-Type"] = 'application/octet-stream'
#filename可以随便写
attach1["Content-Disposition"] = 'attachment; filename="Result.html"'
msg.attach(attach1)
return msg.as_string()
#发送邮件
def sendEmail(self):
receiver = ";".join(self.receiver)
try:
#连接邮件服务器
server = smtplib.SMTP()
server.connect(MAILHOST,25)
#打开debug模式可以看到握手过程
#server.set_debuglevel(1)
#登录,MAILPWD为网易邮件的授权码
server.login(MAILUSER,MAILPWD)
#发送邮件
server.sendmail(MAILUSER,receiver,self.writeEmail())
server.quit()
print("Email send sucess.")
except Exception as e:
print("Email send fail.")
print(e)
在编写邮件工具的时候,碰到了一个错误:smtplib.SMTPDataError: (554, b'DT:SPM。原因可能是:邮件被网易邮件服务器当成了垃圾邮件。解决办法:邮件主题不能包含test,另外msg[from"],msg['to']要和server.sendmail(MAILUSER,receiver,self.writeEmail())中的MAILUSER和receiver保持一致。
8、发送邮件
在发送邮件之前,先获取本次执行用例总数,失败用例数,成功用例数,跳过的用例数。并计算出用例通过率。
- suite().countTestCases():获取用例总数。
- runner.run(suite()).success_count:运行通过的用例数。
- runner.run(suite()).failure_count:失败的用例数。
- runner.run(suite()).skipped:返回的是跳过的用例list。
接下来来修改run.py ,需要先从utils模块导入sendEmail类,构造主题,邮件正文,指定收件人列表,指定测试报告的路径,之后调用sendEmail方法发送邮件。修改后的run.py代码如下:
#coding:utf-8
import unittest
#导入HTMLTestRunner
from HTMLTestRunner import HTMLTestRunner
#从testCase包里面导入测试类
from testCases.userLoginTest import loginTest
from testCases.userRegTest import regTest
from utils.emailUtil import sendEmail
#构造测试套
def suite():
suite = unittest.TestSuite()
suite.addTest(loginTest("test_loginsucess_L0"))
suite.addTest(loginTest("test_pwdwrong_L0"))
suite.addTest(loginTest("test_statuserr_L1"))
suite.addTest(regTest("test_pwdlenerr_L1"))
suite.addTest(regTest("test_regsucess_L0"))
suite.addTest(regTest("test_regagain_L1"))
return suite
#运行测试用例
if __name__ == '__main__':
# runner = unittest.TextTestRunner()
# #调用test runner的run方法执行用例
# runner.run(suite())
#以二进制格式打开TestReport.html用于写入数据
with open("./TestReport.html","wb") as f:
runner = HTMLTestRunner(stream=f,title="Reg And Login Test Report")
result = runner.run(suite())
totalNums = suite().countTestCases()
passedNums = result.success_count
failedNums = result.failure_count
skippedNums = len(result.skipped)
#通过率,保留两位小数
passRate = round(passedNums * 100/ totalNums)
emailBody = "Hi,all:\n \t本次构建一共运行:{totalNums}个用例,通过{passedNums}个,失败{failedNums}个,跳过{skippedNums}个。通过率:{passRate}%.\n \t详细信息请查看附件。"
content = emailBody.format(totalNums=totalNums,passedNums=passedNums,failedNums=failedNums,skippedNums=skippedNums,passRate=passRate)
#收件人列表
receiver = ['××××@qq.com',"×××××@126.com"]
#测试报告的路径
path1 = "/home/stephen/PycharmProjects/unitTestDemo/TestReport.html"
subject = "登录注册功能每日构建"
e = sendEmail(subject,content,receiver,attachPath=path1)
#发送邮件
e.sendEmail()
运行run.py。登录邮箱查看已经发送成功的邮件。
Python3+unitest自动化测试初探(中篇)的更多相关文章
- Python3+unitest自动化测试初探(下篇)
目录 9.用例结果校验 10.跳过用例 11.Test Discovery 12.加载用例 unittest官方文档 本篇随笔承接: Python3+unitest自动化测试初探(中篇) Python ...
- Python3+unitest自动化测试初探(上篇)
目录 1.概念介绍 2.准备工作 3.一个简单的例子 4.test fixture 5.测试套 1.概念介绍 unit test:单元测试,可以简单粗暴地理解成用一段代码去测试另外一段代码.unitt ...
- Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing 'value'
Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing ' ...
- 第9期《python3接口自动化测试》课程,6月29号开学!
2019年 第9期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...
- 《手把手教你》系列技巧篇(六十四)-java+ selenium自动化测试 - cookie -中篇(详细教程)
1.简介 今天按照原计划宏哥要用实例来给小伙伴或童鞋们来演示一下,如何利用cookie实现跳过验证码进行登录.这个场景是自动登陆.有很多系统的登陆信息都是保存在cookie里的,因此只要往cookie ...
- 18年selenium3+python3+unittest自动化测试教程(下)
第六章 自动化测试进阶实战篇幅 1.自动化测试实战进阶之网页单选性别资料实战 简介:讲解使用selenium修改input输入框和单选框 2.自动化测试之页面常见弹窗处理 简介:讲解使用seleniu ...
- 18年selenium3+python3+unittest自动化测试教程(上)
第一章 自动化测试课程介绍和课程大纲 1.自动化测试课程介绍 简介:讲解什么是自动化测试和课程大纲讲解,课程需要的基础和学后的水平 python3.7+selenium3 pycharm 第二章自动化 ...
- 浏览器自动化测试初探 - 使用phantomjs与casperjs
收录待用,修改转载已取得腾讯云授权 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测试,因为本文只关注发布后页面功能的自动化测试,也就是UI层面的自动化. 浏览器测试有别于js代码的 ...
- Python3+Selenium3自动化测试-(二)
python3 元素定位和操作方法总结 # coding=utf-8 ''' #8种元素定位方法 find_element_by_id() find_element_by_name() find_el ...
随机推荐
- java基础小项目练习之1----3天做出飞机大战
Shoot射击游戏第一天一. 关键问题(理论):1. 简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系2. 简述Hero类构造 ...
- 【bzoj3598】: [Scoi2014]方伯伯的商场之旅
Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...
- BZOJ_3282_Tree_LCT
BZOJ_3282_Tree_LCT Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询 ...
- BZOJ_3427_Poi2013 Bytecomputer_DP
BZOJ_3427_Poi2013 Bytecomputer_DP Description 给定一个{-1,0,1}组成的序列,你可以进行x[i]=x[i]+x[i-1]这样的操作,求最少操作次数使其 ...
- 【Canal源码分析】Canal Instance启动和停止
一.序列图 1.1 启动 1.2 停止 二.源码分析 2.1 启动 这部分代码其实在ServerRunningMonitor的start()方法中.针对不同的destination,启动不同的Cana ...
- python--装饰器(附偏函数、断言)
博客地址:http://www.cnblogs.com/yudanqu/ 概念:装饰器是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数 装饰器就是在我们需要的一个函数外 ...
- 自动化测试框架 hierarchyViewer、Uiautomator、Appium的区别比较!
一.HierarchyViewer: 优点:1)能够可视化的角度直观地获得UI布局设计结构和各种属性的信息 2)使用hierarchyviewer.bat来检索手机界面布局 缺点:1)稳定性差,出现过 ...
- Docker最全教程——Redis容器化以及排行榜实战(十三)
前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...
- Scala 编码习惯
1. 不用var.var是可以被不断修改的,而val是不能被修改的.使用val而不是var能让你的程序更强壮,bug更少,更好调试,更容易测试,在并发条件下,更容易调优而获得更好的性能.数学证明我们不 ...
- Java实现大批量数据导入导出(100W以上) -(二)导出
使用POI或JXLS导出大数据量(百万级)Excel报表常常面临两个问题: 1. 服务器内存溢出: 2. 一次从数据库查询出这么大数据,查询缓慢. 当然也可以分页查询出数据,分别生成多个Excel打包 ...