在 Sveltekit + Playwright 中模拟后端第 3 方调用

问题描述 投票:0回答:1

这是一个关于在 SvelteKit+Playwright 中开发端到端测试时的设计模式/最佳实践的相当高级的问题:

确保在 e2e Playwright 测试期间对任何调用第 3 方系统的后端代码进行存根/模拟的建议方法是什么?

在我的特定情况下,我定义了

hooks.js
文件,以便在用户尝试访问受限 URL 时将用户重定向到第 3 方登录服务。我想测试
hook.js
文件作为我的 e2e 测试的一部分,但我不希望它每次都访问第 3 方服务。我想将此模式应用于测试涉及 AWS S3 后端调用的流程时遇到的类似问题。

我知道 Playwright 允许您模拟客户端执行的网络调用,但我还没有读到服务器端调用的类似功能。

有没有办法拦截由

hooks.js
和其他后端处理程序触发的传出呼叫?

testing mocking e2e-testing playwright sveltekit
1个回答
0
投票

PlayWright 不应该(也不可能)成为帮助您模拟后端针对第三方 API 执行的调用的首选工具。对于这种情况,您可以使用WireMock。 WireMock 是一个网络服务器,允许您为要模拟的 API 调用定义所谓的“存根”。这些模拟可以以 JSON 文件的形式定义: { "request": { "method": "POST", "urlPath": "/path/to/reply/to/with/mock/response" }, "response": { "status": 200, "body": "{\"sampleResponseField\":\"valueThatWouldNormallyBeProvidedByTheThirdPartyApi\"}", "headers": { "Content-Type": "application/json" } } }

例如,如果您的后端是 Spring Boot 应用程序,您可以有一个 e2etest 配置文件 
application-e2etest.yml

,其中您的第三方 API url 与您正在运行的 WireMock 独立实例的 url 进行交换。您可以通过多种方式运行 WireMock。由于它是一个 Java 应用程序,您可以下载

其 JAR 文件
并在本地或某些服务器上运行。他们还为其提供了一个official Docker Image,因此您也可以以 Docker 化的方式运行它。因此,您还可以更进一步,将其包装到 Helm Chart 中,以便能够在 Kubernetes 集群中部署和运行(已经过测试,也像 charm 一样工作)。 无论您决定以何种方式运行它,您可能都必须在

application-e2etest.yml

中调整 WireMock 实例的(基本)url(仍然假设您有一个 Spring Boot 应用程序作为后端)。如果您的后端基于不同的框架,您很可能会采用类似的方式来运行具有不同配置的应用程序。

为了快速了解它,我建议您以 Docker 化的方式在本地运行 WireMock,并将您事先准备好的示例模拟挂载到其中:

docker run -d --rm -p 8080:8080 --name wiremock -v ~/host/path/to/my/wiremock/stubs:/home/wiremock wiremock/wiremock:2.35.0 # And subsequently run a curl on it in order to check whether it responds as expected curl http://localhost:8080/path/to/reply/to/with/mock/response

现在,WireMock 服务器应该回复您之前在存根中定义的所需响应。不要忘记将存根放入名为 
mappings

的目录中,因为

WireMock 期望存根位于具有该名称的目录中
我希望这能让你继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.