使用HTMLTestRunner生成测试报告并发送邮件,但每次都是等到执行完邮件发送的代码才能生成测试报告?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用HTMLTestRunner生成测试报告并发送邮件,但每次都是等到执行完邮件发送的代码才能生成测试报告?相关的知识,希望对你有一定的参考价值。
import unittest
import os
from handlepath import CASEPATH, REPORTPATH
from htmlTestRunnerNew import HTMLTestRunner
from email import send_email
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.discover(CASEPATH))
report_file = os.path.join(REPORTPATH, "report2.html")
# 执行用例
runner = HTMLTestRunner(stream=open(report_file, "wb"),
description="测试报告",
title="测试报告",
tester="tester"
)
runner.run(suite)
send_email(report_file, "测试报告")
python 生成测试报告并发送邮件
前言:
使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况。
但如果想向领导汇报工作,就需要提供更直观的测试报告。
思路:
使用unittest编写测试用例,HTMLTestRunner生成测试报告,yagmail发送测试报告
代码:
测试用例:
from selenium import webdriver
import unittest,time,os
from HTMLTestRunner import HTMLTestRunner
#配置信息
desired_caps = {}
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.0"
desired_caps["deviceName"] = "HuaWeiP9"
desired_caps["appPackage"] = "com.android.calculator2"
desired_caps["appActivity"] = "com.android.calculator2.Calculator"
# 支持输入中文
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
class TestCalc(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 启动appium服务
cls.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_add(self):
\'\'\'加法计算\'\'\'
driver = self.driver
driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
driver.find_element_by_id("com.android.calculator2:id/op_add").click()
driver.find_element_by_id("com.android.calculator2:id/digit_3").click()
driver.find_element_by_id("com.android.calculator2:id/eq").click()
res = driver.find_element_by_id("com.android.calculator2:id/formula").text
# 添加断言
self.assertEqual(res,"10","结果错误")
def test_sub(self):
\'\'\'减法计算\'\'\'
driver = self.driver
driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
driver.find_element_by_id("com.android.calculator2:id/op_sub").click()
driver.find_element_by_id("com.android.calculator2:id/digit_3").click()
driver.find_element_by_id("com.android.calculator2:id/eq").click()
res = driver.find_element_by_id("com.android.calculator2:id/formula").text
# 添加断言
self.assertEqual(res,"4","结果错误")
if __name__ == "__main__":
unittest.main()
生成测试报告:
将if __name__ == "__main__": 后的语句做如下修改:
if __name__ == "__main__":
#创建测试套
suite = unittest.TestSuite()
#向测试套添加测试用例
suite.addTest(TestCalc("test_add"))
suite.addTest(TestCalc("test_sub"))
#指定测试报告存储路径 及 文件名
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename= "../report/"+now+" result.html"
#使用HTMLTestRunner生成HTML测试报告
with open(filename,"wb") as f:
runner = HTMLTestRunner(
stream=f,
title="测试报告",
description = "用例执行情况"
)
runner.run(suite)
测试报告格式如图:
用例通过:
用例失败:
发送邮件
#测试报告存储路径
report_dir = "../report/"
#将测试报告文件夹下的所有文件名作为一个列表返回
lists = os.listdir(report_dir)
#对所有测试报告按照生成时间进行排序
lists.sort(key = lambda filename : os.path.getmtime(report_dir+filename))
#获取最新的测试报告
recent=lists[-1]
#指定最新的测试报告路径
file=os.path.join(report_dir,recent)
#填写登录信息
yag = yagmail.SMTP("username@126.com","password","smtp.126.com")
#邮件正文
content="计算器测试报告"
#将测试报告作为附件发送
yag.send("username@hmkx.cn","测试报告",content,file)
补充说明:
1.填写的邮箱登录密码为:126邮箱授权码,不是自己126账号的登录密码
2.不理解sort方法请查阅:http://www.cnblogs.com/kaerxifa/p/8543491.html
3.不理解os.path.join()请查阅:http://www.cnblogs.com/kaerxifa/p/8543505.html
4.lists.sort(key = lambda filename : os.path.getmtime(report_dir+filename))
sort 方法改变原数组内部的排列顺序,key参数表示一个函数,依次将数组内的每一个元素作用在该函数
关于匿名函数:lambda,举个小例子:
函数定义:
func=lambda x: x+1
调用方法:
func(4) 返回值 5
就这样,一个还冒着热乎气儿的测试报告就诞生了,第一次通过代码方式将用例报告以邮件形式发送,是不是还挺有成就感的呢~
以上是关于使用HTMLTestRunner生成测试报告并发送邮件,但每次都是等到执行完邮件发送的代码才能生成测试报告?的主要内容,如果未能解决你的问题,请参考以下文章
Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件
Python3+HTMLTestRunner+SMTP生成测试报告后发送邮件