当前位置: 首页 > news >正文

软件测试中,pytest 运行完成后,如何自动发送邮件?

回答重点

在软件测试中,我们可以利用 pytest 和邮件发送库(例如 smtplib )结合,实现 pytest 运行完成后自动发送邮件的功能。主要思路是通过 pytest 的钩子函数 pytest_terminal_summary 来检测测试结果是否有错误或故障,然后利用 Python 的 smtplib 库编写发送邮件的逻辑。

具体步骤如下:

1)安装 pytest,如果还没有安装的话:

pip install pytest

2)创建一个 conftest.py 文件,定义 pytest_terminal_summary 钩子函数,同时设置发送邮件的功能。下面是一个基本的实现示例:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartdef pytest_terminal_summary(terminalreporter, exitstatus, config):total = terminalreporter._numcollectedpassed = len(terminalreporter.stats.get('passed', []))failed = len(terminalreporter.stats.get('failed', []))errors = len(terminalreporter.stats.get('error', []))skipped = len(terminalreporter.stats.get('skipped', []))body = f"""Testing Summary:Total: {total}Passed: {passed}Failed: {failed}Errors: {errors}Skipped: {skipped}"""print(body)  # 选装步骤:打印在终端上send_email(subject="Pytest Results", body=body)def send_email(subject, body):sender_email = "sender@example.com"receiver_email = "receiver@example.com"password = "your_password"msg = MIMEMultipart()msg['From'] = sender_emailmsg['To'] = receiver_emailmsg['Subject'] = subjectmsg.attach(MIMEText(body, 'plain'))with smtplib.SMTP_SSL("smtp.example.com", 465) as server:server.login(sender_email, password)server.sendmail(sender_email, receiver_email, msg.as_string())

3)在终端运行 pytest:

pytest

扩展知识

不仅限于 pytest 的 pytest_terminal_summary ,我们还可以使用其他钩子函数进行更细粒度的控制,如 pytest_sessionstartpytest_sessionfinish ,它们分别在测试会话开始和结束时执行。

另外,需要注意到邮件发送过程中,可能会遇到各种安全和配置问题。例如,某些邮箱服务商会对第三方登录作限制,需要加上专用密码或调整安全设置。对于更加复杂邮件内容(如带附件、富文本),可以使用 MIMEImageMIMEApplication 等。

我们也可以利用 pytest 插件如 pytest-html 生成测试报告,并将生成的 HTML 报告作为附件发送。在企业环境下,这样做会使得报告更直观,方便大家查看和分析。

http://www.lryc.cn/news/612851.html

相关文章:

  • 解密MVCC:如何实现高效的数据库并发
  • Linux学习-数据结构(二叉树)
  • 【物联网】基于树莓派的物联网开发【24】——树莓派安装influxDB时序数据库
  • 关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。
  • 时序数据库的功能与应用价值
  • uniapp-vue2导航栏全局自动下拉变色
  • 护网行动之后:容器安全如何升级?微隔离打造内网“微堡垒”
  • imx6ull-驱动开发篇12——GPIO子系统驱动LED
  • Android Studio(2025.1.2)Gemini Agent 使用指南
  • 如何使用 pnpm创建Vue 3 项目
  • Vue内置动画组件 Transition
  • 【FreeRTOS】(号外)任务间通讯2: 信号量- Counting Semaphore
  • 前端发布 发布前端项目流程
  • Spring AI + Redis:构建高效AI应用缓存方案
  • 华为 2025 校招目标院校
  • 杂谈:大模型与垂直场景融合的技术趋势
  • 高通芯片漏洞被在野利用,谷歌发布紧急安卓补丁
  • Swift 实战:高效设计 Tic-Tac-Toe 游戏逻辑(LeetCode 348)
  • ansible-playbook之yum
  • Daemon Tools for Mac —— 专业虚拟光驱与磁盘映像工具
  • LeetCode 面试经典 150_数组/字符串_除自身以外数组的乘积(13_238_C++_中等)(前缀积)
  • 数据结构初阶(5)队列
  • java - 深拷贝 浅拷贝
  • KT148A 语音芯片自研板烧录方案:接口预留与电路连接指南
  • 线上业务突然流量掉 0 ?一次 DNS 污染排查与自救实录
  • itextPdf获取pdf文件宽高不准确
  • 无人机航拍数据集|第8期 无人机海上目标检测YOLO数据集3641张yolov11/yolov8/yolov5可训练
  • BES2700量产项目
  • 7. 什么是事件委托
  • 经营帮:重构企业经营全流程,打造产业互联网新生态