下面是详细的攻略:
1. 为什么需要自动发送测试报告邮件
在开发过程中,我们经常需要进行大量的自动化测试用例。为了方便测试人员、开发人员以及其他人员查看测试结果,我们常常需要将测试报告通过邮件发送给相关人员。但是手动发送既费时间、又容易出现手误、遗漏等问题,为了解决这个问题,我们可以采用 Python 编写自动发送测试报告邮件的脚本并配合 CI/CD 工具实现自动化。
2. 实现自动发送测试报告邮件的步骤
2.1 生成测试报告
使用 Python 编写测试代码并执行后,一般都会生成测试报告。在使用 Python 自动发送测试报告邮件时,我们需要使用 HTML 格式的测试报告。一些常用的生成测试报告的工具有:unittest、pytest、nose等。
以 pytest 为例,我们可以通过以下命令行来执行 pytest 测试用例并生成 HTML 格式的测试报告,并将其保存到 report 目录中:
pytest --html=report/report.html
2.2 编写发送测试报告的脚本
编写发送测试报告的 Python 脚本涉及多个方面,包括邮件发送、邮件接收人、邮件主题、邮件正文等。此处以 Gmail 为例,使用 Python 中的 smtplib 库进行邮箱的邮件发送。
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import os
def send_report_mail(sender_email, sender_password, receiver_email, report_path):
smtp_server = "smtp.gmail.com"
smtp_port = 587
msg = MIMEMultipart()
msg["From"] = sender_email
msg["To"] = receiver_email
msg["Subject"] = "测试报告"
# 添加邮件正文
text = MIMEText("您好,附件是测试报告,请查收。")
msg.attach(text)
# 添加邮件附件
report_name = os.path.basename(report_path)
report = MIMEApplication(open(report_path, "rb").read())
report.add_header("Content-Disposition", "attachment", filename=report_name)
msg.attach(report)
try:
s = smtplib.SMTP(smtp_server, smtp_port)
s.starttls()
s.login(sender_email, sender_password)
s.sendmail(sender_email, receiver_email, msg.as_string())
s.quit()
print("邮件发送成功")
except Exception as e:
print("邮件发送失败")
print(str(e))
该脚本包括以下参数:
- sender_email:发送者邮箱地址;
- sender_password:发送者邮箱登录密码;
- receiver_email:接受者邮箱地址;
- report_path:测试报告的路径。
此脚本将生成一个包含邮件正文和附件的 MIMEMultipart 对象,并将其发送给指定的邮件接收人,其中测试报告作为附件附加在邮件中。
2.3 使用 CI/CD 工具实现自动化
通过 CI/CD 工具,我们可以实现自动化进行测试,并在测试结束后自动发送测试报告邮件。例如,在使用 Gitlab CI 时,我们可以将发送测试报告邮件的脚本放置在 .gitlab-ci.yml 文件中,代码如下:
test:
script:
- pytest --html=report/report.html
- python send_report_mail.py
artifacts:
paths:
- report/report.html
其中,测试用例执行和测试报告生成与发送邮件的脚本都在 test:script 中执行,同时,我们也声明了测试报告( HTML 报告)作为 artifac 打包起来,以供后续使用。
3. 示例说明
以下是一个使用 pytest 和 Gmail 自动发送测试报告邮件的示例。
3.1 创建 pytest 测试用例
test_demo.py
def test_demo_pass():
assert True
def test_demo_fail():
assert False
将该文件保存到项目的根目录下。
3.2 创建发送测试报告邮件的 Python 脚本
send_report_mail.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import os
def send_report_mail(sender_email, sender_password, receiver_email, report_path):
smtp_server = "smtp.gmail.com"
smtp_port = 587
msg = MIMEMultipart()
msg["From"] = sender_email
msg["To"] = receiver_email
msg["Subject"] = "测试报告"
# 添加邮件正文
text = MIMEText("您好,附件是测试报告,请查收。")
msg.attach(text)
# 添加邮件附件
report_name = os.path.basename(report_path)
report = MIMEApplication(open(report_path, "rb").read())
report.add_header("Content-Disposition", "attachment", filename=report_name)
msg.attach(report)
try:
s = smtplib.SMTP(smtp_server, smtp_port)
s.starttls()
s.login(sender_email, sender_password)
s.sendmail(sender_email, receiver_email, msg.as_string())
s.quit()
print("邮件发送成功")
except Exception as e:
print("邮件发送失败")
print(str(e))
3.3 在 Gitlab CI 中自动化执行测试并发送测试报告邮件
.gitlab-ci.yml
test:
script:
- pytest --html=report/report.html
- python send_report_mail.py
artifacts:
paths:
- report/report.html
3.4 Gmail 邮箱设置
开启 Gmail 的 SMTP 服务,并申请授权码。同时,将发送邮件的账户登录密码输入到 .env 文件中,便于调用。
最后,配置 Gitlab CI/CD 环境变量。
在 Gitlab 项目设置中,添加一个名为 “GMAIL_SENDER_PASSWORD”的变量,该变量的值为 Gmail 邮箱登录密码。
3.5 执行自动化测试
执行测试的分支:
创建一个 feature 分支并 push 到远程仓库,Gitlab CI 会自动下载分支代码,并执行自动化测试。
测试完成后,Gitlab CI 会将测试报告和发送邮件的 Python 脚本打包成 artifacts,并保存到项目中。同时,邮件也会自动发送给指定接收人。
总结
本文简单介绍了 Python 自动发送测试报告邮件功能的实现,主要涉及到生成测试报告、编写 Python 发送邮件脚本、使用 CI/CD 的实现自动化测试和自动发送邮件等方面。代码示例可以在实际应用时进行修改,以适应具体的应用场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动发送测试报告邮件功能的实现 - Python技术站