git - 如何使用 github PR 工作流程更好地针对分布式系统进行端到端测试?

标签 git amazon-web-services jenkins github e2e-testing

我的团队使用内部 e2e 测试框架来测试从 http 请求到 http 响应的所有内容是否按预期工作。

由于 AWS 中跨多个地理位置的分布式架构的性质,这些测试的工作方式非常复杂且不稳定。

我们遇到的一个大问题是,当我们将功能 PR merge 到影响端点响应/行为的众多微服务/lambda 之一时,我们的 e2e 测试会失败。

我们处理这个问题的方法是接受 e2e Jenkins 作业将暂时变为红色,直到有人获得更新/添加测试的 e2e PR merge 。

由于接受 e2e 作业“暂时”呈红色,因此会导致其他可能包含或不包含错误的更改。

另一个问题是,如果构建失败(这很好),我们不允许 merge PR,但是如果 e2e 测试由于不同服务的更改而失败,则修复 e2e 测试的人员他们正在开发的功能需要修复同一 PR 中的其他故障。

所以我的问题是,我的团队可以采取什么措施来解决这个问题?

我希望我们保留 e2e 测试,因为它们非常有用,但由于上述原因,它们很容易被忽视。

我们能否以某种方式将 e2e 测试存储库绑定(bind)到每个功能分支,以便当有人将代码推送到分支时,我们的 e2e 测试服务上具有相同名称的功能分支会针对它运行并阻止 PR,直到他们更新 e2e 测试?

  • 这需要以某种方式链接 e2e 测试存储库,以便代码更改出现在相关服务/lambda 的功能 PR 中。不确定这是否可能。

任何有关如何使用 github 工作流程对 AWS 中的分布式微服务/lambda 架构进行 e2e 测试的建议/示例,我们将不胜感激。

此外,我很难相信我的团队是唯一遇到此问题的团队。所以也许这会对其他人有所帮助。

最佳答案

您可以采用的 e2e 测试的常见测试策略是拆分它们的执行:

  • 对于 Pull Request:隔离一些快速且非片状的 e2e 测试并将它们包含在您的主管道中
  • 对于主分支(或发布分支,具体取决于您的策略):隔离一些需要更长时间的非片状 e2e 测试。将它们与使用 PR 执行的 e2e 测试一起执行
  • 安排一项作业每天执行所有 e2e 测试,例如每天执行两次

关于您的 e2e 测试在更新时呈红色的问题,我建议更改您的交付策略:

  • 您可以阻止功能分支的 merge ,直到功能分支上的 e2e 测试通过。例如,您可以要求 e2e 测试至少运行一次,即使手动触发作业,并且在允许 merge 之前必须通过电子邮件确认执行成功
  • 您可以更改分支策略。例如,您将有一个开发分支、一个稳定分支和一个发布分支。您可以根据分支执行或多或少的 e2e 测试,并接受开发分支比稳定分支更频繁地变为红色

事实上,e2e测试没有完美的解决方案,但我希望我能给你一些想法

PS:你们的内部测试框架是用Selenium构建的吗?如果是这样,我建议使用 Selenium Grid 解决方案,例如 zalenium https://opensource.zalando.com/zalenium/

也可以尝试https://playwright.dev/该框架的目标是创建可靠的测试:D 它适用于事件。你不需要到处都放置 sleep 功能

关于git - 如何使用 github PR 工作流程更好地针对分布式系统进行端到端测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59791202/

相关文章:

java - Jenkins 作业的 Cron 表达式

git - 如何解决 `git stash pop` 子模块上的 git merge 冲突

amazon-web-services - 用于 EC2 的实例级别的 AWS IAM 自定义策略不起作用

linux - 使用 -Dsvnkit.http.sslProtocols ="SSLv3"选项启动 Jenkins

java - 无法使用 AWS CodeDeploy 部署 Springboot 应用程序 AWS Ubuntu 实例

mysql - 无法连接到 AWS 上运行的 MySQL 数据库

jenkins - 如果新构建正在等待管道中,如何强制 Jenkins 跳过下游作业?

git - Git 是否会在顶级存储库引用的子模块中进行垃圾收集提交?

git - 使用嵌套子模块克隆 repo 不起作用

git - DVCS 在远程服务器上工作