如何通过电子邮件发送pytest覆盖率报告?

How to send pytest coverage report via email?

我正在使用 pytest 框架和 pytest-cov 插件来生成覆盖率报告,它会在执行测试用例后在 htmlcov 目录中生成一个覆盖率报告文件,有没有办法让我也可以发送这个报告文件在执行测试用例时作为附件?

您可以将拆卸脚本放入 conftest.py 文件中。这是您可以放置​​ pytest 固定装置以及通用 pytest 选项的地方。请参阅 API 参考 here.

pytest_session_finish 是您要查找的函数。您的 conftest.py 可能看起来像这样。这大量引用了带有附件的 smtplib 部分的 this answer

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")