python自动化测试33岁_Python3+unitest自动化测试初探(中篇)

本篇随笔承接:Python3+unitest自动化测试初探(上篇)

6、生成测试报告

6.1、下载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,查看生成的测试报告。

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy82MzE4NTAvMjAxOTA0LzYzMTg1MC0yMDE5MDQxNzE3NTczNjY0OS0xMTYzNzAxNzg4LnBuZw==.jpg

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。登录邮箱查看已经发送成功的邮件。

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy82MzE4NTAvMjAxOTA0LzYzMTg1MC0yMDE5MDQxODAxMTQyNjk1MC0zMzQyMDA2NDgucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy82MzE4NTAvMjAxOTA0LzYzMTg1MC0yMDE5MDQxODAxNDYzMDgxNy05NjUyNzAyMjUucG5n.jpg

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 ...

第9期《python3接口自动化测试》课程,6月29号开学!

2019年 第9期课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...

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 ...

[转] 浏览器自动化测试初探:使用 phantomjs 与 casperjs

[From] https://www.qcloud.com/community/article/641602001489391648 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测 ...

随机推荐

linux 学习3 第四讲 文件常用命令

好几天没有在网上总结了.我把ppt先誊写在本子上,这样听的时候记录就方便很多,添些东西就可以. 我想先看shell那部分,但是没有之前几章的准备,是没法跟着视频动手操作的.所以还是按部就班得学习. 虽 ...

在Entity Framework 7中进行数据迁移

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...

Android API 21 Toolbar Padding

up vote117down votefavorite 44 How do I get rid of the extra padding in the new Toolbar with Android ...

windows环境下配置php和redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 一.Window 下安装 下载地址:https://github.com/dmajkic/redis/downl ...

HDU-4902 Nice boat

Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

动态include与静态include的区别

搬一下以前写的 个人总结: 动态INCLUDE 用jsp:include动作实现 

CF 17B Hierarchy

Nick's company employed n people. Now Nick needs to build a tree hierarchy of «supervisor-surbodinat ...

自定义组件的properties和data

// components/epsoide/index.js Component({ /** * 组件的属性列表 */ properties: { index: { type: Number //va ...

Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十):接口服务整理

通用操作 通用操作是指一般的增删改查操作,逻辑大体都是一致的,所以统一抽象到CURD接口,需要用到CURD的表直接实现接口就可以了. 通用操作主要有以下几个: 保存操作 /** * 保存操作 * @p ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值