引言
本指南将帮助您检测脆弱(不稳定)的Cypress测试,并提供十种策略来驾驭它们。
通过了解如何使用Cypress CTRF报告来快速发现脆弱测试,生成详细报告,提醒您的团队,甚至分析发展趋势。
脆弱的Cypress测试
正所周知,脆弱的测试对开发团队来说是非常令人沮丧的,它不仅造成延误还会破坏团队对测试流程的信心。
测试故障的间歇性使其难以被识别、导致耗时的原因调查、并会影响CI/CD 流水线的可靠性。
通过从一开始就识别和管理脆弱测试,可以增强测试套件的可靠性,提高CI/CD流水线的效率,并防止对假的失败进行长时间的调查。
虽然有许多方法,同时也有各种已知的解决方案来管理脆弱测试,但下面介绍的是CTRF(Common Test Report Format 是一种通用的JSON测试报告格式)报告这个方法。
CTRF JSON报告
Cypress CTRF Reporter包含了一个带有脆弱和重试属性的测试对象:
[{
"name": "用户应该能够成功登录",
"status": "passed",
"duration": 1200,
"retries": 2,
"flaky": true,
},
]
这就意味着使用CTRF识别脆弱测试会很容易。现在来看看你可能会如何处理它们的方法。。
在Github Actions里查看脆弱测试
使用GitHub Test Reporter工具,您可以使用单个命令生成Github Actions摘要:
npx github-actions-ctrf flaky path/to/ctrf-report.json
该摘要提供了测试运行中每个脆弱测试的详细信息。
现在,每次有脆弱测试出现时,您都会在GitHub中收到一份详细的报告,类似于下面的截图:
在GitHub Actions中查看Cypress测试的脆弱率
脆弱率可以用来跟踪测试随着时间的推移呈现出脆弱行为的频率。
该指标是识别不稳定测试的关键,而这些不稳定的测试可能就需要多加关注,才能最终提高测试整体的可靠性。
使用GitHub Test Reporter工具,您可以轻松计算出所有脆弱测试的脆弱率,并得出测试整体的脆弱率。
这个比率在每次测试运行后都会更新,这让您能够随时清楚地了解测试的稳定性情况。
npx github-actions-ctrf flaky-rate path/to/ctrf-report.json
给GitHub PullRequest(PR)添加带有脆弱测试详细信息的注释
您可以通过自动将脆弱测试详细信息直接添加到GitHub PR注释中来增强您的PR请求审查。
这样,在代码审查期间,团队就可以轻松发现和解决脆弱测试,而无需切换到其他地方进行调查。
要做到这一点,只需将—pull-request参数添加到您的GitHub Test Reporter命令中。
这样就会把脆弱测试报告包含为PR注释的一部分,让每个人都了解到潜在的测试不稳定情况。例如:
npx github-actions-ctrf flaky path/to/ctrf-report.json —pull-request
npx github-actions-ctrf flaky-rate path/to/ctrf-report.json —pull-request
在Cypress测试脆弱的时候,向Slack发送警报。
一旦检测到脆弱的Cypress测试后,就立即向您的Slack频道发送警报来提醒您的团队。
警报里包含有哪些测试是脆弱测试的信息,因此您可以立即修复它们。
这可以通过CI/CD流水线中的单独命令来实现。
使用Slack Test Reporter工具,您就可以在发生脆弱测试的时候发送slack警报:
npx slack-ctrf flaky path/to/ctrf-report.json
所以现在,每次发生脆弱测试时,都会收到下面这样的通知:
在Cypress测试脆弱的时候,向Microsoft Teams发送警报。
您猜对了,Teams也是如此!
使用Microsoft Teams Reporter工具,您可以在发生脆弱测试的时候发送Teams警报:
npx teams-ctrf flaky path/to/ctrf-report.json
在Cypress测试脆弱的时候,向MatterMost发送警报。
使用MatterMost Test Reporter工具,您可以在发生脆弱测试的时候发送 MatterMost警报:
npx mattermost-ctrf flaky path/to/ctrf-report.json
在脆弱测试出现的时候记录日志
您可以使用ctrf-cli软件包来记录脆弱测试:
npx ctrf flaky path/to/ctrf-report.json
该命令会输出脆弱测试的名称和每个测试的重试次数,如下:
正在处理报告:reports/sample-report.json
在reports/sample-report.json中发现1个脆弱测试:
- 测试名称:测试1,重试次数:2
对脆弱测试进行分析处理
CTRF JSON测试对象包含脆弱和重试属性,这意味着很容易检测脆弱测试:
[{
"name": "User should be able to login",
"status": "passed",
"duration": 1200,
"retries": 2,
"flaky": true,
},
]
这也意味着如果您将CTRF报告发布到数据库中,您就可以对脆弱测试进行分析处理,比如确定其发生的频率和识别哪些测试是脆弱的。
使用JSON报告和Shell脚本自动检测脆弱测试。
这是一个有趣的方法,您可以简单地将CTRF报告存储在共享目录中,并在shell脚本中使用jq命令迭代处理它们:
#!/bin/bash
# Directory containing JSON reports
REPORT_DIR="ctrf"
# Iterate over each JSON report
for REPORT in "$REPORT_DIR"/*.json; do
# Parse the report with jq to find flaky tests
jq '.tests[] | select(.flaky == true) | {name: .name, retries: .retries}' "$REPORT"
done
结语
检测和处理脆弱测试的方法有很多,当需要战胜脆弱测试的时候,我希望使用Cypress CTRF reporter的方法能为您提供更多的选择!