python - 如何通过电子邮件发送 pytest 覆盖率报告?
问题描述
我正在使用 pytest 框架和 pytest-cov 插件来生成覆盖率报告,它会在执行测试用例后在 htmlcov 目录中生成一个覆盖率报告文件,有没有办法我也可以将此报告文件作为附件发送,而执行测试用例?
解决方案
您可以在 conftest.py 文件中放置一个拆卸脚本。这是您可以放置 pytest 固定装置以及通用 pytest 选项的地方。请参阅此处的 API 参考。
pytest_session_finish
是您正在寻找的功能。你conftest.py
可能看起来像这样。这大量引用了带有附件的 smtplib 部分的这个答案:
import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
def send_mail(send_from, send_to, subject, text, files=None,
server="127.0.0.1"):
assert isinstance(send_to, list)
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach(MIMEText(text))
for f in files or []:
with open(f, "rb") as fil:
part = MIMEApplication(
fil.read(),
Name=basename(f)
)
# After the file is closed
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
msg.attach(part)
smtp = smtplib.SMTP(server)
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()
def pytest_sessionfinish(session, exitstatus):
send_mail('myemail', 'theiremail', 'Your Coverage Report', 'My Text',
files="coveragereport.html", server="myserver")
推荐阅读
- ruby - 按哈希数组分组
- azure-devops - 如何从 Azure DevOps CI 上的多个文件夹复制文件?
- c - C 编译错误 - #include "cmakeconfig.h" - 没有这样的文件或目录
- python - 按月和年Python取多列值的平均值
- wildfly - 使用 Elytron 保护 WildFly 数据源配置中的凭据
- javascript - 将已按输入文件类型上传的文件下载到本地
- angular - 如何在打字稿和角度定义静态常量
- ruby - Parslet:如何缓冲/解析增量数据
- swift - EXC_BAD_ACCESS 和 Address Sanitizer 下一步是什么?
- python - 用 Pandas 重新采样比原始时间范围更长的时间