在Angular中测试e2e,最佳实践

时间:2016-02-09 08:04:14

标签: angularjs protractor angularjs-e2e

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

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

2 个答案:

答案 0 :(得分:3)

最佳做法是主观的,但是已知的解决方案各有利弊。

使用共享环境 如果您在与自动化测试相同的环境中进行手动测试,则可能会导致某人误操作您的测试。将数据从生产复制到此环境也将停止测试并且不好。通过确保设置处于测试期望的正确状态以及确保数据设置与手动测试不冲突,可以进一步努力使测试具有幂等性。建议在测试设置期间创建实体,以使用与测试相关的一些唯一标记创建实体,以使其对于该测试是唯一的。这很难并且成本很高。

使用单独的e2e环境 由于您可以更好地控制数据而无需人工干预,因此您的测试幂等性显然更容易。您可以在每个测试或一组测试之前清空数据库或使用多个解决方案(参见下文)重新设置它。仍然必须小心,确保测试不依赖于彼此或干扰其他测试。

模拟API 您可以模拟API,但它不是真正的e2e测试。如果您知道API针对特定输出进行测试,那么消费者驱动的合同将起作用,然后您可以将这些输出用作e2e输入的模拟。这些测试非常快速。如果您无法控制您的环境及其数据,或者它是第三方系统,建议您模拟api。您可能无法测试可能导致大量故障的真正集成。

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

使用GUI设置测试数据 这可以工作,但你必须聪明一点。由于您通过手动测试共享环境,因此必须确保数据处于正确状态。创建与您的测试相关的单独实体并且不共享任何有人会手动测试的测试用例是明智的。这比较慢。当您花费大部分时间浏览并在GUI中设置内容时,这会使您的测试变得复杂。

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

以下是一些相关资源:

答案 1 :(得分:0)

如何部署具有有限数据的后端的测试版本?

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

这将确保测试结果的一致性,并且意味着如果后端人员对其主分支进行更改,则不会影响您的测试。