标题党了一波,最近被自动化测试折磨的,今天又发现了一个坑,但可能是因为我不够严谨导致的,希望这篇文章能给新人一些启发。
事情是这样的:
我想把我生成的测试报告也就是html文件可以通过邮箱发送出去,但是发送好几次都是空白,
调试的时候也发现我的html_content:'',代码跳转到html文件中确实为空,但是当我关闭调试后,我查看我的html文件时,所有代码都出现了。然后我就又开始了漫长的搜索之旅。
找到了一篇,不得不说这位兄台的标题写的太简单易懂了,我感觉这就是我想要的答案,但是他在2019年就遇到了这个问题,看来只有我这种半吊子才会出现打开文件不关闭的错误。python之邮件发送附件为什么一直是空的_python邮件自动发送,附件打开没有内容怎么办-CSDN博客
未修改前我的源码是这样的:
suit = unittest.TestSuite()
# 测试套件
suit.addTest(TestSalesOrder("test_SalesOrderDemand_total_equal_zero"))
suit.addTest(TestSalesOrder("test_SalesOrderDemandEqual"))
filename = 'report/login1Report.html'
fp = open(filename, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u"测试报告",
)
# 执行用例
runner.run(discover)
send_email = SendEmail(host="smtp.163.com", port=465, user="邮箱@163.com", password="smtp授权码")
send_email.send_html_content(
from_addr="邮箱@163.com",
to_addrs="邮箱@163.com",
subject="自动化测试报告",
html_content=html_content
)
然后...就遇到了这种空白邮件,我还尝试把他用附件发送,也出现了0字节的情况
最后看了上面的文章,醍醐灌顶,把代码改成了这样,顺便加了个判断。
with open(filename, "wb") as fp:
suit = unittest.TestSuite()
# 测试套件
suit.addTest(TestSalesOrder("test_SalesOrderDemand_total_equal_zero"))
suit.addTest(TestSalesOrder("test_SalesOrderDemandEqual"))
runner = HTMLTestRunner.HTMLTestRunner(
# 指定测试报告的文件
stream=fp,
# 测试报告的标题
title=u"测试报告",
# 测试报告的副标题
description=u'测试数据'
)
# 执行用例
runner.run(discover)
time.sleep(5)
try:
with open('report/login1Report.html', 'r', encoding='utf-8') as file:
html_content = file.read()
# 检查是否读取到内容
if not html_content:
print("文件是空的或读取内容失败。")
except UnicodeDecodeError as e:
print(f"文件编码错误:{e}")
except FileNotFoundError:
print("文件未找到。")
except Exception as e:
print(f"读取文件时发生未知错误:{e}")
send_email = SendEmail(host="smtp.163.com", port=465, user="@163.com", password="授权码")
send_email.send_html_content(
from_addr="@163.com",
to_addrs="@163.com",
subject="自动化测试报告",
html_content=html_content
)
最后终于可以了,但是不能发送css就没想到。也算是成功了一半