|
测试平台系列(88) 完成邮件通知功能(附赠精美邮件模板)
大家好~我是
米洛
!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程
,希望大家多多支持。
欢迎关注我的公众号米洛的测开日记
,获取最新文章教程!
回顾
书接上回,我们找准了一款看似不错
的邮件模板,但由于数据都是死的,所以我们需要获取测试报告产生的数据,并渲染HTML模板
。
这节我们就来彻彻底底完善这块功能。
效果图
这次数据已经真实,而且有定时任务直接跑了发送出来,相当靠谱
!
编写邮件模块
由于之前yagmail不是太好用,所以我们需要改写send_msg
方法,由于比较简单,我就直接上代码了。
不过在此之前呢,我们需要先去配置文件里面加上一个字段:
其实smtplib提供了From的选项,我本来想叫Pity自动化测试平台
,但是那样的话邮件死活发不出去,遂放弃。
@staticmethod
def send_msg(subject, content, attachment=None, *receiver):
configuration = SystemConfiguration.get_config()
data = configuration.get("email")
sender = data.get("sender")
to = data.get("to")
message = MIMEText(content, 'html', 'utf-8')
message['From'] = sender
message['To'] = Header(to, 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
try:
smtp = smtplib.SMTP()
smtp.connect(data.get("host"))
# 我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。
smtp.set_debuglevel(1)
smtp.login(sender, data.get("password"))
smtp.sendmail(sender, list(receiver), message.as_string())
except Exception as e:
raise Exception(f"发送测试报告邮件失败: {e}")
新的send_msg方法很简单,在保持参数一致的情况下,代码量比yagmail多了很多。
大概思路就是先封装MIMETEXT,并设置为html模式,接着把收件人
、发件人
、主题
以及内容
等数据都放入其中,最后通过sendmail发送邮件。
改造run_test_plan方法
- 添加执行人参数
目前我们的测试计划还不支持手动执行
,一方面为了适配手动执行,一方面为了在邮件体现执行人信息,所以我们在run_test_plan加上执行人这个参数:
执行人默认是0,也就是CPU(小时候打小霸王的时候的感觉)
-
改写run_multiple方法
run_multiple这个方法是我们测试计划执行的核心方法,由于我们测试计划是支持
多环境
的,并且一个测试环境对应一份测试报告。我们在执行完一个测试计划可能出现多个报告链接,每个环境也有自己的通过率这些数据。
所以我们需要记录一个map,里面存放env => 测试结果的映射,最终返回。
由于我们是异步执行,所以我们在外部设定一个map,当做参数传递进去,由于
引用传递
的原理,函数执行完毕,我们的map也更新好了。
顺理成章的,run_multiple方法里面也需要改造,它应该接收新的map参数,但为了不影响原先的功能,所以它可传可不传。
下面是获取执行人姓名的操作:
接着是run_multiple在返回之前的改造:
生成真实html
上述操作都是为了获取测试报告需要的数据
,获取了之后我们还得利用jinja2
渲染html。
这里我放上原生html:
测试报告
上述代码在pity/templates/report.html
文件内。
接着编写渲染html的方法:
其中kwargs是传递对应的参数给html。
之前也说过一个邮件对应一个地址,所以send_msg调用的地方也得跟着修改。
至此,我们的邮件推送功能就全部完成了。
今天的内容就到这里了,咱们下期见。