这是我第一次玩黄瓜,还创建了一个测试和 API 的套件。我的问题是在测试 API 时是否需要运行它?
例如,我脑子里有这个,
启动快递服务器作为后台任务
然后当它启动时(我怎么知道这是否发生了?)然后运行黄瓜测试?
我真的不知道这方面的最佳做法。我认为这是这里的主要问题,抱歉。
查看 .travis.yml 文件或 bash 脚本会很有帮助。
这是我第一次玩黄瓜,还创建了一个测试和 API 的套件。我的问题是在测试 API 时是否需要运行它?
例如,我脑子里有这个,
启动快递服务器作为后台任务
然后当它启动时(我怎么知道这是否发生了?)然后运行黄瓜测试?
我真的不知道这方面的最佳做法。我认为这是这里的主要问题,抱歉。
查看 .travis.yml 文件或 bash 脚本会很有帮助。
我无法为您提供一个可行的示例。但我可以概述我将如何解决这个问题。
您的目标是自动验证 rest api 或类似的。也就是说,确保 Web 应用程序在给定特定问题时以预期的方式响应。
出于某种原因,您想使用 Cucumber。
首先我要提的是,行为驱动开发、BDD 和 Cucumber 不是测试工具。BDD 和 Cucumber 的目的是充当那些知道系统应该做什么、编写代码以实现它的人以及验证行为的人之间的通信工具。这就是为什么这些示例几乎是用一种自然语言编写的。
那我将如何解决这个问题?
我会通过从单元测试或 Cucumber 场景调用构成 API 的方法来验证绝大多数行为。也就是说,验证它们是否在没有运行服务器的情况下正常工作。并且没有数据库。这很快,速度很重要。我可能会以这种方式验证超过 90% 的逻辑。
我将通过启动服务器来验证接线,并验证是否可以使用上一步中验证的方法。这很慢,所以我会在这里尽可能少地做。如果可能的话,我会从用于实现验证的代码中启动服务器。我将启动服务器作为测试设置的一部分。
这不涉及任何外部工具。它只涉及您的编程语言和一些库。这样做的原因是我希望尽可能便携。您使用的工具越少,使用某些东西就越容易。
碰巧我已经在我的构建工具中完成了一些设置,并让它在运行集成测试之前启动了一个服务器。这通常是更重的重量,如果可能的话我会避免。
因此,在没有服务器的情况下验证行为。用服务器验证接线。重要的是仅在此步骤中验证接线。逻辑前面已经验证过了,无需赘述。
速度,就像在快速反馈循环中一样,非常重要。在一个好的世界里,构建和测试整个系统应该只需要几秒钟而不是几分钟。
如果您有兴趣(在 travis 上运行),我有一个工作示例。我使用 docker-compose 来启动 API 和所需的组件,例如数据库,然后针对正在运行的堆栈运行 cucumber-js 测试。
docker-compose 也用于本地开发和测试。
我还发布了一个库来帮助为 API 编写黄瓜,https://github.com/ekino/veggies。