【问题标题】:Testing e2e in Angular, best practice在 Angular 中测试 e2e,最佳实践
【发布时间】:2016-02-09 08:04:14
【问题描述】:

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

在类似情况下要遵循的最佳做法和工作流程是什么?

【问题讨论】:

    标签: angularjs protractor angularjs-e2e


    【解决方案1】:

    最佳实践是主观的,但有已知的解决方案,每个都有优点/缺点。

    使用共享环境 如果您在与自动化测试相同的环境中进行手动测试,您将冒着有人搞砸您的测试的风险。将数据从生产环境复制到这个环境也会停止你的测试,而且不好。通过确保设置处于测试预期的正确状态以及确保数据设置与手动测试不冲突,需要付出额外的努力来使测试具有幂等性。建议您在测试设置期间创建实体时使用与测试相关的一些唯一令牌创建它,以便它对于该测试是唯一的。这既困难又昂贵。

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

    模拟 API 您可以模拟 API,但这不是真正的 e2e 测试。如果您知道 API 正在针对特定输出进行测试,那么消费者驱动的合约将起作用,然后您可以将这些输出用作 e2e 输入的模拟。这些测试速度很快。如果您无法控制您的环境及其数据,或者它是第 3 方系统,建议您模拟 api。你冒着不测试真正的集成的风险,这可能会导致很多失败。

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

    使用 GUI 设置测试数据 这可以工作,但你必须聪明。由于您通过手动测试共享环境,因此您必须确保数据处于正确状态。明智的做法是创建与您的测试相关的单独实体,而不是共享任何有人会手动测试的测试用例。这个比较慢。这会使您的测试复杂化,因为您会花费大部分时间在 GUI 中进行导航和设置。

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

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

    【讨论】:

      【解决方案2】:

      如何部署一个包含有限数据量的后端测试版本?

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

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

      【讨论】:

      • 感谢您的回答。这或多或少已经是我们正在做的事情。我们使用的 QA 后端仅在我们的内部网络中运行,并且应该是最新的 API 版本。但是,与其他用户同时运行测试会导致一些冲突。此外,我们在该环境中使用的数据库不是我们在生产中使用的数据库,我们在测试中做出断言,因为我们以这种方式填充了测试数据库,所以我们期望返回一些特定信息。
      • 所以您正在测试一个也被其他用户使用的版本?这些用户是否在进行手动测试?还是这些用户在做演示等?
      • 是的@mindparse,我们正在使用有时用于开发、测试和演示的共享后端进行测试
      • 好的,这总是会给您的可重复测试带来问题。我们处于完全相同的情况,与同一个办公室的后端团队一起工作,目前正在设置量角器测试,以便从我们的构建服务器开始(我们使用的是 Jenkins)。目前,我们也在使用与您相同的原因的共享后端,但遇到了同样的问题,因此正在探索获取仅用于测试的后端设置 - 但尚未完成!
      • 好的,但在我们的例子中,我们可以决定和重新设计我们运行测试的方式。我只是在寻找最佳实践答案,以便我们可以遵循指南
      猜你喜欢
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2020-02-05
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多