自动化测试生成HTML测试报告和自动发邮件

一、生成HTML测试报告

1、下载HTMLTestRunner

地址:http://tungwaiyip.info/software/HTMLTestRunner.html

保存在Python\Lib目录下

修改它使其支持python3

# 第94行
import datetime
import io
import sys

# 第539行
TestResult.startTest(self, test)
# just one buffer for both stdout and stderr
self.outputBuffer = io.StringIO()
stdout_redirector.fp = self.outputBuffer

# 第631行
self.generateReport(test, result)
print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
return result

# 第642行
for n,t,o,e in result_list:
            cls = t.__class__
            if not cls in rmap:
                rmap[cls] = []

# 第766行
# uo = unicode(o.encode('string_escape'))
            uo = e

# 第772行
# ue = unicode(e.encode('string_escape'))
            ue = e

2、生成测试报告

# 使用HTMLTestRunner生成测试报告
# 扩展测试用例:calculator文件,增加了sub方法
from calculator import Count
import unittest
from HTMLTestRunner import HTMLTestRunner
import time

class TestAdd(unittest.TestCase):
	# doc string类型注释,调用时不显示,可通过help(TestAdd)方法查看
	# HTMLTestRunner可以读取到
	'''加法测试'''
	def setUp(self):
		print('test add start')

	def add1(self):
		'''加法测试第一个'''
		j = Count(2, 3)
		self.assertEqual(j.add(), 5)

	def add2(self):
		j = Count(1, 2)
		self.assertEqual(j.add(), 3)

	def tearDown(self):
		print('add end')

class TestSub(unittest.TestCase):
	def setUp(self):
		print('test sub start')

	def test_sub1(self):
		j = Count(3, 2)
		self.assertEqual(j.sub(), 1)

	def test_sub2(self):
		j = Count(4, 2)
		self.assertEqual(j.sub(), 2)

	def tearDown(self):
		print('test sub end')

if __name__ == '__main__':
	# 测试用例执行的顺序,为添加套件的顺序,
	# unittest.main()是以ASCII码的顺序
	suite = unittest.TestSuite()
	suite.addTest(TestAdd('add1'))
	suite.addTest(TestAdd('add2'))
	suite.addTest(TestSub('test_sub1'))
	suite.addTest(TestSub('test_sub2'))

	# 按照一定格式获取时间
	now = time.strftime("%Y-%m-%d %H-%M-%S")
	# 定义报告存放路径
	filename = './' + now + 'result.html'
	# 定义报告存放路径,如果没有,创建
	fp = open(filename, 'wb')
	# 定义测试报告
	runner = HTMLTestRunner(stream=fp,    # 指定测试报告文件
		                    title='我是测试标题', 
		                    description="我是描述:== 副标题")
	# 运行测试用例
	runner.run(suite)
	# 关闭报告文件
	fp.close()

二、自动发邮件

# 发邮件
# 负责发送邮件
import smtplib
# 负责构造邮件的正文
from email.mime.text import MIMEText
# 负责邮件的标题
from email.header import Header

# 发送邮箱的服务器
smtpserver = 'smtp.163.com'
# 发送邮箱用户、授权密码非登录密码
user = 'xxx@163.com'
password = 'xxxx'

# 发送的邮箱
sender = 'xxx@163.com'
# 接受的邮箱
receiver = 'xxx@qq.com'

# 发送邮件主题,不能有test,否则会发不出去
subject = '我就来试一下'

# 编写HTML类型的邮件正文
msg = MIMEText('<html><h1>你好!</h1></html>', 'html', 'utf-8')
# 主题,固定属性
msg['Subject'] = Header(subject, 'utf-8') 
# 谁发的
msg['from'] = 'xueer<xxx@163.com>'
# 发给谁
msg['to'] = 'xxx@qq.com'

# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

三、发送带附件的邮件

# 发送附件
# 负责发送邮件
import smtplib
# 负责构造邮件的正文
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 发送邮箱的服务器
smtpserver = 'smtp.163.com'
# 发送邮箱用户、授权密码非登录密码
user = 'xxx@163.com'
password = 'xxx'

# 发送的邮箱
sender = 'xxxx@163.com'
# 接受的邮箱
receiver = 'xxx@qq.com'

# 发送邮件主题
subject = '我就来试一下'

# 发送的附件
sendfile = open('E:\\workspace\\selenium\\unit_test\\log.txt', 'rb').read()

att = MIMEText(sendfile, 'base64', 'utf-8')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = 'attachment; filename="log.txt"'

msgRoot = MIMEMultipart('related')

msgRoot['Subject'] = subject
msgRoot['from'] = 'xueer<xxx@163.com>'
# 发给谁
msgRoot['to'] = 'xxx@qq.com'
msgRoot.attach(att)

smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()

四、查找最新的测试报告

# 查找最新的测试报告
import os

# 定义文件目录
result_dir = 'E:\\workspace\\Python37\\www\\selenium\\unit_test\\report'
# 列出所有的目录和文件
lists = os.listdir(result_dir)
# 重新按照时间排序
lists.sort(key = lambda x: os.path.getmtime(result_dir+'\\'+x))

print(('最新的文件为:' + lists[-1]))
file = os.path.join(result_dir, lists[-1])
print(file)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值