使用nodemailer库可在自动化测试后发送带附件的邮件报告,支持Gmail、Outlook等SMTP服务。配置时需使用应用专用密码而非登录密码,通过attachments参数添加HTML、JSON或截图等附件。该方法适用于CI/CD流水线,实现测试报告自动分发。
本文介绍使用 Node.js 的 Nodemailer 库实现自动化测试报告(如 HTML、JSON 或截图)通过邮件自动发送给相关人员,支持 Gmail、Outlook 等主流 SMTP 服务,并详细说明配置步骤、安全凭证设置及附件添加方法。
自动化测试执行完成后,报告已生成,但如何让团队第一时间获取结果?通过邮件发送带附件的报告是常见做法。这一需求在持续集成流程中几乎不可或缺——无论是基于 Selenium 的 Web UI 测试,还是其他类型的自动化项目,测试报告若不能及时同步给利益相关方,整个质量反馈闭环将缺失关键环节。
Node.js 生态中,Nodemailer 是目前最成熟、轻量且广泛使用的邮件发送库,原生支持附件、HTML 内容、多收件人、抄送等功能,完全能满足测试报告(如 Allure、JUnit XML、自定义 HTML 报告)的自动化分发需求。下面直接进入正题,讲解如何配置、如何发送,以及如何安全地管理凭证。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
先初始化项目并安装依赖,步骤简单:
npm init -y npm install nodemailer
注意:切勿在代码中硬编码密码。Gmail 要求使用“应用专用密码(App Password)”或启用两步验证后的 OAuth2 token。推荐做法如下:
const nodemailer = require('nodemailer');
const fs = require('fs');
const transporter = nodemailer.createTransporter({
service: 'gmail', // 或显式配置:host: 'smtp.gmail.com', port: 465, secure: true
auth: {
user: 'your-email@gmail.com',
pass: 'your-app-specific-password' // 不是 Gmail 登录密码!
}
});
假设 Selenium 测试执行后生成了 report.html 和 screenshots.zip,可按以下方式附加多个文件:
const reportPath = './reports/report.html';
const zipPath = './reports/screenshots.zip';
transporter.sendMail({
from: '"Test Automation" ',
to: 'stakeholder@company.com, qa-team@company.com',
cc: 'manager@company.com',
subject: `【自动化测试报告】${new Date().toLocaleDateString()}`,
html: ` 自动化测试已完成
执行环境:Chrome v124 | 总用例数:42 | 通过率:95.2%
详见附件报告。
`,
attachments: [
{ filename: 'test-report.html', path: reportPath },
{ filename: 'screenshots.zip', path: zipPath },
// 也可直接传 Buffer 或字符串内容(如 JSON 报告)
{
filename: 'summary.json',
content: JSON.stringify({ passed: 40, failed: 2, duration: '2m18s' }, null, 2)
}
]
}).then(info => console.log(' 邮件已发送,Message ID:', info.messageId))
.catch(err => console.error(' 邮件发送失败:', err));
.env 文件(配合 dotenv 加载),避免提交到 Git;sendMail() 并加入指数退避重试逻辑;Nodemailer 不仅解决了“发送带附件邮件”这一刚需,更因其稳定性和文档完善度,成为 CI/CD 流水线(如 GitHub Actions、Jenkins)中集成邮件通知的事实标准。配合 Selenium 测试脚本的 afterAll 或 onFinish 钩子调用,即可实现“测试结束 → 生成报告 → 自动归档 → 邮件通知”的完整闭环。最后再次强调:安全凭证管理比功能实现更重要——始终优先使用应用专用密码或 OAuth2,而非账户主密码。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述