Angularjs 在角度最佳实践中测试e2e

Angularjs 在角度最佳实践中测试e2e,angularjs,protractor,angularjs-e2e,Angularjs,Protractor,Angularjs E2e,也许这个问题已经有了一些答案,但我还没有找到我想要的具体方案。所以,我的情况是:我正在开发一个在Angular中开发的web应用程序,其中所有的单元测试都使用模拟数据。然后我们有一些用量角器编写的端到端测试。我对它们不太感兴趣,因为我们正在使用从实时api获得的数据测试用户界面。我认为我们使用这种方法是因为我们无法控制后端,但这样做的副作用是数据库可能会改变我们测试中的混乱局面。此外,我们用于e2e的api在内部网络上运行,这意味着我们不能在办公室外运行测试。我在考虑模拟http响应,以便模拟数

也许这个问题已经有了一些答案,但我还没有找到我想要的具体方案。所以,我的情况是:我正在开发一个在Angular中开发的web应用程序,其中所有的单元测试都使用模拟数据。然后我们有一些用量角器编写的端到端测试。我对它们不太感兴趣,因为我们正在使用从实时api获得的数据测试用户界面。我认为我们使用这种方法是因为我们无法控制后端,但这样做的副作用是数据库可能会改变我们测试中的混乱局面。此外,我们用于e2e的api在内部网络上运行,这意味着我们不能在办公室外运行测试。我在考虑模拟http响应,以便模拟数据库并能够在任何地方运行所有测试。问题是后端逻辑的行为可能与我们在测试中模拟的不同,这意味着一旦我们部署应用程序,它将以一种意外的方式工作


在类似情况下,最佳做法和工作流程是什么?

如何获得部署的后端测试版本,该版本中的数据量有限

这样,在每一轮测试完成后,就可以使用加载的原始数据集重置数据库


这将确保测试结果的一致性,也就是说,如果后端人员对其主分支进行了更改,则不会影响您的测试。

最佳实践是主观的,但已知的解决方案各有利弊

使用共享环境 如果您在与自动测试相同的环境中进行手动测试,则可能会有人干扰您的测试。将数据从生产环境复制到此环境也会停止测试,这是不好的。通过确保设置处于测试所期望的正确状态,以及确保数据设置与手动测试不冲突,使测试幂等需要额外的努力。在测试设置期间创建实体时,建议使用与测试相关的某些唯一令牌来创建实体,以便该实体对于该测试是唯一的。这很难做到,而且代价高昂

使用单独的e2e环境 这在测试幂等性上显然更容易,因为您对数据有更多的控制,并且无需手动干预。在每次测试或测试组之前,可以使用多种解决方案(见下文)清空数据库或重新设置数据库种子。不过,您必须小心确保测试不会相互依赖或干扰其他测试

模拟API 您可以模拟API,但它不是真正的e2e测试。如果您知道API正在针对特定的输出进行测试,并且您可以使用这些输出作为e2e输入的模拟,那么消费者驱动的契约将起作用。这些测试进行得很快。如果您无法控制您的环境及其数据,或者它是第三方系统,建议您模拟api。您有可能无法测试真正的集成,这可能会导致很多失败

使用API设置测试数据 这是一个非常好的解决方案,因为它不仅解决了API的问题,而且使您的e2e测试只关注正在测试的区域,并且您不必使用GUI设置数据。测试设置和清理可以通过这种方式进行管理。它可能比使用GUI进行设置更快,当然也不会比模拟API响应更快

使用GUI设置测试数据 这可以奏效,但你必须聪明一点。由于您与手动测试共享环境,因此必须确保数据处于正确状态。明智的做法是创建与您的测试相关的单独实体,并且不要共享任何有人会手动接触测试的测试用例。这比较慢。这会使您的测试复杂化,因为您将大部分时间用于在GUI中导航和设置

使用脚本将数据直接加载到数据库中 避免这种情况,因为您可能缺少业务逻辑,这将导致不正确的状态。最好通过API加载数据,因为它可以验证输入并运行任何业务逻辑

以下是一些需要跟进的相关资源:


谢谢你的回答。这或多或少已经是我们正在做的事情了。我们使用的QA后端仅从我们的内部网络运行,并且应该是最新的API版本。但是,与其他用户同时运行测试将导致一些冲突。此外,我们在该环境中使用的数据库不是我们在生产环境中使用的数据库,我们在测试中进行断言,我们希望返回一些特定信息,因为我们以这种方式填充了测试数据库。那么您正在测试其他用户也使用的版本?这些用户正在进行手动测试吗?或者这些用户正在做演示,等等?是的@mindparse,我们正在使用一个共享后端进行测试,有时用于开发、测试和演示。好吧,这总是会给可重复测试带来问题。我们处于完全相同的情况,在同一办公室与后端团队一起工作,目前正在设置量角器测试,以便从构建服务器启动(我们使用的是Jenkins)。现在,我们也在使用一个共享后端,原因与您相同,但遇到了相同的问题,因此我们正在探索只进行测试的后端设置-但尚未完成!好的,但在我们的例子中,我们可以决定并重新设计运行测试的方式。我只是在寻找一个最佳实践答案,这样我们就可以有一个指导方针来遵循