在 Angular 中测试 e2e,最佳实践
Testing e2e in Angular, best practice
可能已经有一些关于这个问题的答案,但我还没有找到我正在寻找我的特定场景的答案。所以,这是我的情况:我正在开发 Angular 中制作的网络应用程序,其中所有单元测试都使用模拟数据。然后我们有一些用 Protractor 编写的端到端测试。我对它们不是很感兴趣,因为我们正在使用从实时 api 获得的数据测试用户界面。我认为我们正在使用这种方法,因为我们无法控制后端,但这样做的副作用是数据库可能会改变我们的测试。此外,我们用于 e2e 的 api 是内部网络上的 运行nung,这意味着我们无法 运行 在办公室外进行测试。我正在考虑模拟 http 响应以模拟数据库并能够 运行 从任何地方进行所有测试。问题是后端逻辑的行为可能与我们在测试中模拟的逻辑不同,这意味着一旦我们部署应用程序,它就会以意想不到的方式工作。
在类似情况下应遵循的最佳做法和工作流程是什么?
部署一个数据量有限的后端测试版本如何?
这样,在每一轮测试完成后,数据库就可以用加载的原始数据集进行重置。
这将确保您的测试结果的一致性,并且意味着如果后端人员更改他们的 master 分支,它不会影响您的测试。
最佳实践是主观的,但有已知的解决方案,每个解决方案 pros/cons。
使用共享环境
如果您在与自动化测试相同的环境中进行手动测试,您将面临有人搞砸您的测试的风险。将数据从生产环境复制到此环境也会停止您的测试,这并不好。通过确保设置处于测试预期的正确状态以及确保数据设置不与手动测试冲突,使测试幂等需要付出额外的努力。建议在测试设置期间创建实体时使用与测试相关的一些唯一令牌创建它,以便它对于该测试是唯一的。这既困难又昂贵。
使用单独的端到端环境
这显然更容易测试幂等性,因为您可以更好地控制数据并且无需人工干预。在每次测试或测试组之前,您可以清空数据库或使用多种解决方案(见下文)重新播种。您仍然必须小心确保测试不相互依赖或干扰其他测试。
模拟 APIs
您可以模拟 APIs 但它不是真正的 e2e 测试。如果您知道 API 正在针对特定输出进行测试,那么消费者驱动的合同将起作用,然后您可以将这些输出用作 e2e 输入的模拟。这些测试非常快。如果您无法控制您的环境及其数据,或者它是第 3 方系统,建议模拟 api。您冒着不测试可能导致很多失败的真正集成的风险。
使用APIs设置测试数据
这是一个非常好的解决方案,因为它不仅可以捕获 APIs 的问题,而且可以让您的端到端测试只关注被测试的区域,而您不必使用 GUI 设置数据。可以通过这种方式管理测试设置和清理。它可能比使用 GUI 设置更快,但肯定不会比模拟 API 响应更快。
使用GUI设置测试数据
这可以工作,但你必须聪明。由于您正在与手动测试共享环境,因此您必须确保数据处于正确的状态。明智的做法是创建与您的测试相关的单独实体,并且不要共享任何有人会手动测试的测试用例。这比较慢。这会使您的测试变得复杂,因为您花费大部分时间在 GUI 中浏览和设置内容。
使用脚本将数据直接加载到数据库
避免这种情况,因为您可能缺少业务逻辑并会导致不正确的状态。最好通过 API 加载数据,因为它可以验证输入和 运行 任何业务逻辑。
以下是一些需要跟进的相关资源:
可能已经有一些关于这个问题的答案,但我还没有找到我正在寻找我的特定场景的答案。所以,这是我的情况:我正在开发 Angular 中制作的网络应用程序,其中所有单元测试都使用模拟数据。然后我们有一些用 Protractor 编写的端到端测试。我对它们不是很感兴趣,因为我们正在使用从实时 api 获得的数据测试用户界面。我认为我们正在使用这种方法,因为我们无法控制后端,但这样做的副作用是数据库可能会改变我们的测试。此外,我们用于 e2e 的 api 是内部网络上的 运行nung,这意味着我们无法 运行 在办公室外进行测试。我正在考虑模拟 http 响应以模拟数据库并能够 运行 从任何地方进行所有测试。问题是后端逻辑的行为可能与我们在测试中模拟的逻辑不同,这意味着一旦我们部署应用程序,它就会以意想不到的方式工作。
在类似情况下应遵循的最佳做法和工作流程是什么?
部署一个数据量有限的后端测试版本如何?
这样,在每一轮测试完成后,数据库就可以用加载的原始数据集进行重置。
这将确保您的测试结果的一致性,并且意味着如果后端人员更改他们的 master 分支,它不会影响您的测试。
最佳实践是主观的,但有已知的解决方案,每个解决方案 pros/cons。
使用共享环境 如果您在与自动化测试相同的环境中进行手动测试,您将面临有人搞砸您的测试的风险。将数据从生产环境复制到此环境也会停止您的测试,这并不好。通过确保设置处于测试预期的正确状态以及确保数据设置不与手动测试冲突,使测试幂等需要付出额外的努力。建议在测试设置期间创建实体时使用与测试相关的一些唯一令牌创建它,以便它对于该测试是唯一的。这既困难又昂贵。
使用单独的端到端环境 这显然更容易测试幂等性,因为您可以更好地控制数据并且无需人工干预。在每次测试或测试组之前,您可以清空数据库或使用多种解决方案(见下文)重新播种。您仍然必须小心确保测试不相互依赖或干扰其他测试。
模拟 APIs 您可以模拟 APIs 但它不是真正的 e2e 测试。如果您知道 API 正在针对特定输出进行测试,那么消费者驱动的合同将起作用,然后您可以将这些输出用作 e2e 输入的模拟。这些测试非常快。如果您无法控制您的环境及其数据,或者它是第 3 方系统,建议模拟 api。您冒着不测试可能导致很多失败的真正集成的风险。
使用APIs设置测试数据 这是一个非常好的解决方案,因为它不仅可以捕获 APIs 的问题,而且可以让您的端到端测试只关注被测试的区域,而您不必使用 GUI 设置数据。可以通过这种方式管理测试设置和清理。它可能比使用 GUI 设置更快,但肯定不会比模拟 API 响应更快。
使用GUI设置测试数据 这可以工作,但你必须聪明。由于您正在与手动测试共享环境,因此您必须确保数据处于正确的状态。明智的做法是创建与您的测试相关的单独实体,并且不要共享任何有人会手动测试的测试用例。这比较慢。这会使您的测试变得复杂,因为您花费大部分时间在 GUI 中浏览和设置内容。
使用脚本将数据直接加载到数据库 避免这种情况,因为您可能缺少业务逻辑并会导致不正确的状态。最好通过 API 加载数据,因为它可以验证输入和 运行 任何业务逻辑。
以下是一些需要跟进的相关资源: