gpt4 book ai didi

mysql - BDD 测试 REST/JSON-RPC API

转载 作者:行者123 更新时间:2023-11-29 02:51:34 25 4
gpt4 key购买 nike

我从事的项目针对移动应用混合使用 REST 和 JSON-RPC 后端 API。应用服务器构建在 node.js (express, cluster, pm2) + redis (ioredis) + mysql (node-mysql) + rabbitmq (amqp) 上。现在我们面临着大量的重构,但是没有测试!毫无疑问,这是一个巨大的麻烦:(

一开始,我们计划用 BDD 测试来覆盖它。这听起来很容易,但有一个障碍,即在测试开始前准备环境。例如,一些测试更改了存储中的数据,我们每次都必须重新加载数据库转储。坦率地说,这非常不方便。此外,将其保持在实际(最新)状态并不容易,例如当我更改代码时,我也必须更改转储。

因此,我对可用于准备数据存储(MySQL 和 Redis)的状态(内容)的方法/工具/范式很感兴趣。

提前感谢您的任何建议。

最佳答案

关于大多数 BDD 工具使用的“Given/When/Then”模板的有趣之处之一是行为是由“When”而不是“Given”引起的。因此,“给定”的设置方式并不重要。

很多人使用真正的工具来设置 Given,但不一定非得那样。

您可以使用现有标准数据设置“给定”。例如,我可能会说,“给定一篇关于寨卡病毒危机的文章……”如果你现在在一家报纸网站上工作,你会有很多文章。您可以检查以确保有一个,甚至可以使用此步骤来存储您希望在后续步骤中看到的文章 ID。你可以设置一些给你这篇文章的“默认数据”。可以检查是否有一个,如果没有,则创建一个(只要它始终使数据库处于下一个场景的一致状态 - 不要依赖一个场景接一个场景运行!)

即使您更改了默认数据,您也可以随时在“AfterScenario” Hook 中重置这些更改。 JBehave、Cucumber 和 SpecFlow 都有这些,as does Cucumber.js .

如果您每次都需要设置不同的内容,请尝试将日期时间戳附加到所使用的名称。例如,该帐户不是 Mr North 创建的,而是由 Mr North20160202224400 创建的。这样您将始终拥有唯一的 ID。您可以将它与“after” Hook 结合使用,以确保您也清理了正确的东西。

不要害怕使用“背景”数据,可以为每个场景设置它来代替“默认”数据。请记住,您可以为这些进行简单的 SQL 调用;您无需通过任何 UI。

最后,看看page object pattern .它旨在复制网页的行为并抽象出实际的按钮点击,但您应该能够看到这与抽象出创建不同数据片段的行为之间的相似之处。我喜欢从能力的角度思考:“我能用这个服务/网页/API 做什么?”这有助于我形成 PageObject。这也将帮助您隔离数据创建的行为,以便当它确实发生变化时,它只会在一个地方发生变化。

如果没有更多的上下文,很难知道这些方法中的哪一个适合你,但所有这些东西——Givens 的“我不在乎如何”方法、背景数据、“AfterScenario”钩子(Hook),以及PageObject 模式 - 旨在解决您面临的这类问题。

关于mysql - BDD 测试 REST/JSON-RPC API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35156540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com