python自动发送测试报告邮件功能的实现

下面是详细的攻略:

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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • python几种常用功能实现代码实例

    下面给您详细讲解一下Python几种常用功能实现代码实例的攻略。 目录 处理文件 读取文件内容 写入文件内容 网络编程 获取网页内容 发送邮件 数据库操作 连接数据库 执行查询语句 1. 处理文件 Python 可以方便地读取和写入文件。 1.1 读取文件内容 可以使用 open 函数打开文件,其中第一个参数为文件路径,第二个参数为打开文件的模式。模式为 r…

    python 2023年5月19日
    00
  • Python对接支付宝支付自实现功能

    Python对接支付宝支付自实现功能的攻略主要涉及以下几个步骤: 注册支付宝开发者账号,获取商户号和应用ID,并设置应用公钥和私钥。 配置Python的开发环境,安装必要的依赖库,如alipay-sdk-python等。 实现支付宝支付接口的调用,包括订单创建、订单查询、退款申请等功能。 以下是对接支付宝支付自实现功能的详细攻略: 1. 注册支付宝开发者账号…

    python 2023年6月3日
    00
  • ubuntu 安装pyqt5和卸载pyQt5的方法

    下面是ubuntu安装pyqt5和卸载pyqt5的完整攻略。 安装pyqt5方法 确认安装python3 在开始安装pyqt5之前,需要确认已经安装了python3。可以使用以下命令查看: python3 –version 如果没有安装,可以使用以下命令进行安装: sudo apt-get update sudo apt-get install pytho…

    python 2023年6月2日
    00
  • 使用Python3中的gettext模块翻译Python源码以支持多语言

    使用Python3中的gettext模块可以轻松地将Python源码翻译成多种语言,实现国际化的目的。下面是使用gettext模块翻译Python源码的完整攻略: 创建翻译文件 首先,需要创建一个翻译文件 (.po 文件),该文件包含原始语言的翻译以及每个需要翻译的字符串。可以使用 gettext 工具根据 Python 源码生成翻译文件。 例如,假设我们要…

    python 2023年6月5日
    00
  • Python全栈之路正则函数

    Python全栈之路正则函数 正则表达式是一种强大的文本处理工具,可以用于字符串匹配、替换、分割等操作。在Python中,我们可以使用re模块来实现正则表达式的相关操作。本攻略将详细讲解Python全栈之路正则函数,包括正则表达式的基本语法、常用函数的用法、匹配模式、替换操作、分割操作等内容。 正则表达式的基本语法 正则表达式是由普通字符和特殊字符组成的字符…

    python 2023年5月14日
    00
  • 分享一个提高运维效率的 Python 脚本

    哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的 python 脚本 咸鱼平常在工作当中通常会接触到下面类似的场景: 容灾切换的时候批量对机器上的配置文件内容进行修改替换 对机器批量替换某个文件中的字段 对于 Linux 机器,咸鱼可以写个 shell 脚本或者直接批量使用 sed 命令就能很好的解决 但对于 Windows 机器,上面的方法就不管用…

    python 2023年5月9日
    00
  • Python网络编程之HTTP客户端模块urllib与urllib3

    Python中有两个常用的HTTP客户端模块:urllib和urllib3。本文将详细讲解这两个模块的用法和区别,并提供一些示例。 1. urllib模块 urllib是Python标准库中的一个HTTP客户端模块,可以用于发送HTTP请求和处理HTTP响应。它包含四个子模块:urllib.request、urllib.parse、urllib.error和…

    python 2023年5月14日
    00
  • Python 文件与文件对象及文件打开关闭

    Python 文件与文件对象及文件打开关闭 在Python中,使用文件对象来操作文件。你可以用Python做很多文件操作,例如读写文件、复制文件、删除文件等等。 文件对象 在Python中,文件操作通过文件对象来实现,这个对象代表了一个打开的文件。 我们通常使用内置函数open()来创建一个文件对象,并返回该文件对象,open()函数需要传入两个参数,文件名…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部