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中的random.uniform()函数教程与实例解析

    Python中的random.uniform()函数教程与实例解析 介绍 random.uniform() 方法是 Python 内置的生成一个指定范围内的随机浮点数的函数。如果我们需要在指定的范围内产生一个随机浮点数,这个函数肯定会派上用场。 语法 random.uniform(a, b)函数接收两个参数:* a:随机数范围的起始点* b:随机数范围的结束…

    python 2023年6月3日
    00
  • Python中exit、return、sys.exit()等使用实例和区别

    讲解“Python中exit、return、sys.exit()等使用实例和区别”的完整攻略如下: 一、return return 是 Python 中的一个关键字,用于结束函数的执行并返回函数值。 当函数执行到 return 语句时,函数将会终止并返回后面的表达式或值。 如果不带参数,则返回 None 对象。 def hello(name): print(…

    python 2023年5月13日
    00
  • 利用Python脚本写端口扫描器socket,python-nmap

    什么是端口扫描器 端口扫描器是一种工具,其主要作用是分析目标主机开放了哪些端口。端口扫描器通过向目标主机发送网络请求,判断响应结果来确认端口是否是开放状态。一般来说,端口扫描器会通过一系列的算法或规则发现目标主机开放了哪些端口。其中常用的扫描方式有全端口扫描,以及针对特定端口实施的扫描方式。 Python脚本实现端口扫描器 Python作为一门功能非常强大的…

    python 2023年6月6日
    00
  • 使用python对excle和json互相转换的示例

    以下是使用Python对Excel和JSON互相转换的完整实例教程,包含两个示例。 背景知识 在开始介绍实例之前,我们先了解一些关于Excel和JSON的基础知识。 Excel: 是一种电子表格软件,用于数据处理和管理。 JSON: 是一种轻量级的数据交换格式,通常用于数据传输和存储。 在Python中,有很多开源的库可以用于Excel和JSON的处理,例如…

    python 2023年5月14日
    00
  • Python关于excel和shp的使用在matplotlib

    首先,在使用Python进行可视化时,对于一些需要矢量数据的操作,比如利用地理信息系统(GIS)来绘制图表时,我们需要用到一些文件格式,比如Excel(.xlsx)和SHP(shapefile)。在这个示例教程中,我们将讲解如何在matplotlib中使用这些文件,帮助读者更好地了解Python数据可视化的知识。下面是一些具体的步骤: 1.准备数据 首先,我…

    python 2023年5月13日
    00
  • 一个Python案例带你掌握xpath数据解析方法

    一个Python案例带你掌握xpath数据解析方法 XPath是一种用于在XML文档中定位元素的语言,也可以用于HTML文档的解析。在Python中,我们可以使用lxml库来解析HTML文档,并使用XPath来定位元素。本文将详细讲解一个Python案例,带你掌握XPath数据解析方法,包括如何使用lxml库、如何使用XPath、如何提取数据等。 使用lxm…

    python 2023年5月15日
    00
  • 跟老齐学Python之复习if语句

    跟老齐学Python之复习if语句 if语句是Python中最常用的控制结构之一。它可以帮助程序员根据某个条件控制程序的执行流程。在这里,我们将回顾一下if语句的基础知识,包括语法,用法和示例。 if语句语法 Python中的if语句语法很简单,它由if关键字,条件表达式和一条或多条语句组成。下面是if语句的基本语法: if condition: # 在条件…

    python 2023年5月20日
    00
  • Python基于argparse与ConfigParser库进行入参解析与ini parser

    Python基于argparse与ConfigParser库进行入参解析与iniparser攻略 在Python中,我们可以使用argparse和ConfigParser库来解析命令行参数和INI配置文件。argparse库可以帮助我们解析命令行参数,而ConfigParser库可以帮助我们解析INI配置文件。本攻略将介绍如何使用这两个库来解析命令行参数和I…

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