测试前端时重置单独的后端服务

我有一个在localhost:8000连接到测试数据库的API项目,我有一个在localhost:9000上运行的前端角度应用程序。 如何在每个前端测试用例运行后重置数据库? 我为我的前端E2E测试使用了量角器。 我不想嘲笑或残留整个后端。 然而,尽管这会使我的测试运行得更快,但每次用户交互都会导致服务器状态发生变化,然后再向相同的服务器端点发出多个请求,在不同点处使用不同回报来终止这些终端可能代码太多,到真正的服务器。 我宁愿将数据库重置为初始状态或刷新所有表。

一个可行的方法是在我的API项目中编写我的前端E2E测试套件。 从现在开始,它由后端测试运行器运行,它可以在每个测试用例之前轻松地重置数据库。 但我宁愿将测试保留在我的前端项目中,因为我的api也会服务于其他客户端,而不仅仅是浏览器客户端。 由于我的后端是在php中,并使用Phpunit进行测试,而我正在使用量角器来测试我的前端,所以将它集成到后端似乎有点错位。

你遇到过这个问题,你的解决方案是什么? 你如何协调E2E(或集成)测试中的两个项目?


我遇到了同样的问题。 我的解决方案是在E2E测试开始之前添加一个“重置”api端点以将数据库恢复到其状态。

我们使用ASP.NET WebApi来构建RESTful服务。 这是我的代码结构。

[HttpGet]
[Route("reset")]
public IHttpAction Reset(){
    // check and remove records added in the e2e tests

    // check and restore the records modified in the e2e tests

}

因此,对此test/reset方法的api调用有助于将后端数据库恢复到其原始状态。 我们可以将调用放在afterAll() (如果您使用的是JasmineJS)。 或者,您可以通过从Postman或Fiddler进行GET调用来进行手动重置。

有时,我有多个重置api方法来调用。 这样我可以通过功能组进行测试和重置。 比如,对用户管理功能执行e2d测试并重置那部分数据,然后转到下一个功能。

有一点要提到的是,如果表上的主键被排序,删除测试中添加的数据将会中断该序列。 确保我们的测试不会对该主键“期望”。

整个目标是能够重新运行e2e测试并获得相同的结果。


当然,如果允许,另一个好办法是在我们的e2e测试之前备份数据库,并在测试结束后恢复它。 手动,愚蠢,但有时方便,足以让我们的e2e测试重新运行。


在去客户端路由失败后,我去了API项目中的所有E2E测试。 权衡:

  • API具有可用于引导测试用例的所有工厂和模型。 如果仅从客户端进行测试,则必须重新创建模型关系和工厂以使其工作,并且必须跟踪API模型的所有更改。

  • 每次运行E2E测试之前,我都必须手动设置客户端来与测试环境进行交流。 并且手动将api服务器设置为测试模式。 因为你需要保持实际的API Web服务器在某个地方运行,所以客户端可以击中。

  • 目前还很难找到一种方法将这种非常定制的测试设置移至云端,从而与持续集成服务器集成,因为客户端和API是两个单独的项目。 但是我终于在本地机器上运行了一些客户端E2E测试,这比没有测试好。

  • 链接地址: http://www.djcxy.com/p/93495.html

    上一篇: Reset separate backend service when testing frontend

    下一篇: Integration testing: Mock external API vs. use external API sandbox