简介
pact 是一个用于前后端契约测试(consumer-driven contract testing)的工具。在构建 Web 应用时,前后端通常会通过 API 交互数据。在这种情况下,前端和后端需要达成共识,即 API 的数据格式、请求参数和返回结果等方面的约定。而 pact 则提供了一种基于契约的 API 测试方法,帮助前端和后端开发者达成 API 交互方面的共识,从而保证系统的可靠性和稳定性。
@pact-foundation/pact-standalone-linux-x64 是 pact 的一个 npm 包,它是 pact 的一个完全独立的二进制文件,可以在一个单独的进程中运行 Pact Mock Service 和 Pact Broker。
本篇文章将详细介绍如何使用 @pact-foundation/pact-standalone-linux-x64 这个 npm 包。
安装
npm install --save-dev @pact-foundation/pact-standalone-linux-x64
安装成功后,通过命令 node_modules/.bin/pact-standalone help
可以查看 pact-standalone
的使用帮助。pact-standalone
的使用可以分为三个阶段:准备 Mock Server、运行测试和推送 Contracts 到 Pact Broker。
准备 Mock Server
Mock Server 是一个虚拟的服务,前端开发者可以通过在测试中访问 Mock Server 来模拟后端 API 的返回结果。
首先需要在测试代码中创建一个 pact
实例,然后在 beforeEach
阶段启动 Mock Server:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - -------------------------------------- ----- - --------------- - - ------------------------------- ----- -------- - --- ------ --------- ----------- --------- ---------- ----- ----- ---- --------------------------- ------- ------------ ---- --------------------------- --------- ----- -- --- -------------------- -- -- - ------------- -- ------------------ ------------ -- ------------------- -------------- ----------------- -- -- - ----------- --- -------- ---------- ----- -- -- - -- ---- --- --- ---
在 provider.setup()
中,会启动一个 Mock Server。注意,consumer
和 provider
的名字在测试中需要一致。在 provider.verify()
中,会检查测试中发出的请求是否与 Mock Server 的契约一致。
运行测试
在测试中,需要发出 API 请求,并验证 Mock Server 的返回结果是否符合预期。在测试代码中,可以使用 pact.MockService.create()
来创建一个 Mock Service:
-- -------------------- ---- ------- ----- - -------- - - --------------------------------- ----- --------------- - ----------------------------------------------- ----- -------- - ----- ----- -------- - ------------------------ ----- ------------ - ------------------------- --------- ----------- --------- ---------- ----- --------- --- -------------- ----------------- -- -- - ----------- --- -------- ---------- ----- -- -- - ----- -------- - - ----- ------ -- ----- ------------ ------------- -- ---- ------ ----------------- ------- --- ------ -------------- ------- ------ ----- -------- -------- - ------- ------------------- -- -- ------------------ ------- ---- -------- - --------------- ------------------ --------------- -- ----- --------- --- ----- -------- - ----- -------------------------- ----------------------------------- --- ---
在 mockProvider.given()
中,指定了 Mock Server 的初始状态。在 mockProvider.uponReceiving()
中,指定了 HTTP 请求的信息。在 mockProvider.willRespondWith()
中,指定了 Mock Server 对这个请求的响应。在测试代码中发出 HTTP 请求,并验证返回结果是否符合预期。
推送 Contracts 到 Pact Broker
Contracts 是 Pact 契约的文档形式,保存在 Pact 中。Pact Broker 是一个可视化的工具,它可以将 Contracts 的版本控制和发布变得更加简单明了。
在 CI/CD 环境中,可以使用 pact.publish()
将 Contracts 推送到 Pact Broker:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - -------------------------------------- ----- --------------- - ----------------------------------------------- ----- -------- - --- ------ --------- ----------- --------- ---------- ----- ----- ---- --------------------------- ------- ------------ ---- --------------------------- --------- ----- -- --- ----- -------- - ----- ----- -------- - ------------------------ ----- ------------ - ------------------------- --------- ----------- --------- ---------- ----- --------- --- -------------------- -- -- - ------------- -- ------------------ ------------ -- ------------------- -------------- ----------------- -- -- - ----------- --- -------- ---------- ----- -- -- - ----- -------- - - ----- ------ -- ----- ------------ ------------- -- ---- ------ ----------------- ------- --- ------ -------------- ------- ------ ----- -------- -------- - ------- ------------------- -- -- ------------------ ------- ---- -------- - --------------- ------------------ --------------- -- ----- --------- --- ----- -------- - ----- -------------------------- ----------------------------------- ----- ------------------------------------------------- ----- ------------------ ----- -------------------- ----- -------------- ---------------- ---------------------------- --------- --- --- --- ---
在 provider.addInteraction()
中,将 Mock Server 和 Pact 进行交互。在 provider.finalize()
中,将 Mock Server 关闭。在 pact.publish()
中,将保存的 Pact 文件推送到 Pact Broker。
总结
本篇文章介绍了如何使用 @pact-foundation/pact-standalone-linux-x64 这个 npm 包来进行 API 测试。在测试中,首先需要准备 Mock Server,然后运行测试,最后将 Contracts 推送到 Pact Broker,以便管理和版本控制。Pact 是一种基于契约的 API 测试方法,可以帮助前后端开发者达成 API 交互方面的共识,从而保证系统的可靠性和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60057c2081e8991b448ebb69