验收测试 Rails 使用“测试 API”进行客户端状态控制

Posted

技术标签:

【中文标题】验收测试 Rails 使用“测试 API”进行客户端状态控制【英文标题】:Acceptance Testing Rails using a "Testing API" for client side state control 【发布时间】:2014-03-10 14:52:25 【问题描述】:

我目前正在评估如何测试一个相当大而复杂的 Web 应用程序,基于服务器端的 Rails 4 和客户端的 EmberJS。在我们的应用程序中,客户端专门通过RESTful JSON API 与服务器进行通信。

到目前为止,我们基于 Konacha 进行了很多单元测试,现在也愿意设置集成/验收测试。我们不确定是否应该开始编写端到端测试,所以测试包括我们的服务器的运行实例,或者我们是否应该分别进行 API 和客户端的集成测试。

我们目前的首选是端到端测试,因为我们担心在单独集成测试 API 和客户端的情况下,我们需要花费两倍的精力来创建和维护测试,并且可能会有非常小的专业我们无法捕捉到的 API 和客户端之间的通信。

好吧,我们喜欢像 Konacha 这样的现代快速测试框架,所以我们真的不想使用 Selenium。不仅因为感觉有点老旧,还因为它的性能相当差。您仍然需要控制服务器上模拟数据的实例化和服务器的重置,为什么我们想出了以下方法:

我们实现了一个测试 API,它在概念上用于控制服务器的状态,例如它有以下方法:

GET /api/test/setup  # Simple bootstrapping of the database, e.g. populate table with ISO language codes etc...
GET /api/test/reset  # Reset the database, using `database_cleaner` gem

然后,konacha 测试用例将分别在每个测试用例之前和之后调用 setupreset

您如何看待这种方法?

【问题讨论】:

【参考方案1】:

不确定我会分别调用 API 和客户端的测试,但即使您考虑运行这种测试,您仍然应该进行端到端测试。

所以是的,我认为您进行端到端测试的想法非常好。

您设置简单命令以实现系统测试自动化(设置和重置命令)的想法也非常好。准备好在自动化过程中添加更多内容 - 同时 端到端测试在概念上是一个黑盒测试,实际上它通常是一个灰盒测试,即您需要访问系统的内部状态。我将其称为被测系统的“运维接口”。

【讨论】:

以上是关于验收测试 Rails 使用“测试 API”进行客户端状态控制的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails中编写JSON API的测试用例[重复]

在干净的架构中,如何进行验收测试?

聊天客户端的验收测试

在 Rails 中,我应该在 capybara(或集成)测试中包含用户输入表单错误流吗?

符合规范的简单验收测试

客户验收测试应该有多详细?