文本

端到端测试的4种处理测试数据的方法

对Web应用程序运行自动化的端到端测试时,最常见的问题之一是如何处理测试数据。 端到端测试通常会在通过应用程序中的测试用例时创建,更新和删除各种信息。 不可避免地,您会遇到问题,因为先前的测试运行会留下一堆陈旧的数据,这些数据可能会干扰您当前的测试执行。

对于其他形式的测试,管理数据并不是一个大问题。有些测试,如功能测试和集成测试,只检查应用程序的一小部分,使每次运行测试后更容易清理。在其他类型的测试中,比如较小的单元测试,您可以使用stub或mock任何必要的数据。

对于端到端测试,理想的场景是在整个系统中尽可能接近真实的使用情况。这意味着您需要确保您的系统服务拥有用于测试的正确数据,并在所有移动部件之间维护适当的数据完整性。您还需要将测试数据保持在不会干扰未来测试运行的状态。

可悲的是,说起来容易做起来难。根据应用程序的复杂性以及团队规模、可用技能集和组织预算等其他因素,可以采用不同的方式处理此问题。如果你正在努力寻找解决这个问题的方法,这里有一些方法可以让你思考如何最好地解决你的情况。

1)用于自动化测试的专用测试服务器

👍好

您可以拥有被测试的整个应用程序的完整副本,其工作方式与生产应用程序相同。

单独的环境不会妨碍手工或探索性测试。

👎坏

如果你有一个复杂的系统架构,它会变得非常昂贵。

单独的服务器需要定期维护和升级,以保持系统平稳运行。

您仍然需要处理在测试运行之间保持数据处于良好状态的问题。

为了充分利用端到端测试,理想的做法是在尽可能接近生产环境的环境中执行它们。在一些组织中,您的生产应用程序将运行在专用的服务器上。很可能,它们也有用于UAT或登台目的的独立测试环境。虽然使用这些服务器运行自动化测试是可以接受的,但是最好有一个单独用于自动化测试的环境。

通过让专用服务器运行并准备好进行自动化测试,您可以创建相同的生产环境。这样,您就可以使用客户使用的相同结构的镜像对应用程序进行自动化操作。另外,拥有一个不会与手动或探索性测试产生冲突的独立环境也很有帮助。

这种方法确实有一些需要注意的地方。如果您的系统架构需要运行许多不同的服务,那么设置一个新环境可能会花费很多钱。如果有一个内部团队管理服务器,那么运行额外的服务器也会牺牲时间。最后,拥有一个不同的环境并不能完全解决在任何时候都拥有用于测试的正确数据的问题。它使得对数据的控制更易于管理,比如重新设置或恢复数据库。但是您仍然必须在测试中进行管理。

2)使用虚拟化或云计算来启动测试服务器

👍好

您可以随意启动完整的测试环境。

方便开发人员和测试人员在本地或在线创建一次性测试环境。

比一直使用专用硬件更便宜。

👎坏

需要一些预先的专业知识来开始启动。

如果您需要启动大量服务以使测试应用程序正确工作,那么它可能会降低测试周期。

你可能会不小心忘记关闭云服务,而这最终会花掉你一大笔钱。

与专用服务器一样,您还可以利用虚拟化和云服务来生成单独的测试环境。目前,大多数组织和初创企业都将其应用程序托管在某种形式的云服务上,在大多数情况下,创建单独的服务器不需要任何额外配置。

虚拟化和云的伟大之处在于,您可以在瞬间启动和关闭成熟的服务,因此不需要处理保持它们一直运行的时间和成本成本。此外,Docker等虚拟化工具帮助开发人员和测试人员在本地系统上复制相同的环境,从而简化未发布功能的端到端测试过程。在任何时候,测试人员都可以使用新数据重新生成新服务器。

虚拟化和云服务是中小型团队的最佳选择,但它也不是完美的解决方案。在开始时需要一些专业知识,以确保虚拟化服务按预期运行。如果您有很多服务要运行,那么启动新的服务可能会减慢团队的测试工作流程。最后,请记住,云计算公司通常根据服务运行时间收费。如果您在运行测试后忘记关闭服务器,那么您将会收到一笔惊人的服务费。

3)添加开发标志来控制现有登台环境上的数据

👍好

允许测试人员在测试期间轻松地添加和删除数据。

它可以通过绕过长工作流来生成测试数据来加速一些测试场景。

👎坏

它需要开发时间来实现,这在您的组织中可能是稀缺的。

这是开发人员需要在应用程序中维护的另一件事。

如果测试人员绕过长时间的工作流,不单独验证它们,那么它可以隐藏错误和回归。

一些团队在他们的应用程序中创建“开发标志”。这些标志是特殊的功能,允许团队执行生产环境中不可用的不同命令。例如,开发人员可以在使用特定帐户登录时访问应用程序中的特殊部分,或者访问绕过某些流的API端点。这些标志允许测试人员在运行测试场景之前自动创建数据库记录,而无需通过应用程序或清理数据库。

这种方法在测试环境中非常有用,因为您不需要过多地担心从一开始就在测试环境中拥有正确的数据。您可以在测试用例中包含一个设置步骤来清理数据库,并在每个场景之前生成所需的数据。它还可以显著加快测试速度,因为您可以跳过多个步骤来创建记录。一个典型的例子是在系统上创建新帐户时绕过电子邮件验证。使用开发标志,您可以创建一个有效的帐户,而不需要处理电子邮件验证部分。

开发标志的缺点是它需要开发人员实现和维护这些标志。在大多数组织中,开发人员每天可能有许多其他高优先级的任务要做,从特性到bug修复,以及两者之间的所有事情。这类任务的优先级通常较低,因为它不能直接为客户增加价值,所以团队构建和管理这些标志可能不可行。另一个问题是测试人员可能过于依赖这些标志,导致错误溜走,因为开发标志允许他们绕过应用程序的某些部分。

4)为测试api创建临时模拟数据服务

👍好

它允许测试人员在开发应用程序时进行自动化工作。

很容易设置一个干净的状态并在将来修改它,而无需潜入数据库。

👎坏

您并不是在真实的系统上进行测试,这是端到端测试的主要目标之一。

模拟服务不会暴露基础设施中的问题。

如果被测应用程序的数据结构不断变化,那么您将花费大量时间维护这些模拟服务。

测试应该在开发过程中尽可能早地开始。当开发团队仍在构建新特性和基础时,使用前面提到的策略之一可能不可能运行端到端测试。但这并不意味着在开发人员发布某些东西之前,您不能从测试自动化开始。根据您的应用程序,您可以模拟数据层,同时保持应用程序的其余部分用于测试。

目前,大多数应用程序使用RESTful api来检索和存储数据。如果你有一个API不完整的应用程序,你可以使用像Mirage JS这样的库来创建一个可以模拟最终API端点的服务。如果您不想构建模拟API服务,您可以使用在线服务,比如mockAPI。这些库和服务可以让您轻松地控制所需的数据和响应,并且适合在获得最终可用的API之前开始测试。

当然,使用模拟服务意味着您没有利用端到端测试的主要好处之一——针对您的环境运行您的测试场景。这些库和服务不会发现服务器可能遇到的潜在问题,比如安全漏洞或降低性能。另一个问题是,如果API规范以任何方式发生变化,您将不得不花费额外的时间更新模拟服务以实现奇偶性,即使这些变化并不影响您的测试。

总结

处理运行自动化的端到端测试所需的数据通常并不简单。这些测试遍历整个应用程序,并在测试环境中留下更改的踪迹,这使得为后续测试运行进行清理变得很棘手。根据您的组织和被测试的应用程序中的多个因素,您可以使用一些方法来帮助使测试过程对涉及的每个人都更舒适。

以下是本文所列策略的总结:

如果您的团队有技能、预算和可用的时间来维护额外的服务器,那么您可以设置专用的测试环境来复制生产服务。保持测试环境的独立性可以使您对数据有更多的控制,但是这样做的成本可能会很高,而且您仍然需要在每次测试运行之前将数据设置为可用状态。

如果您没有保持专用服务器运行以进行测试的预算,那么您可以利用虚拟化和云服务。这些服务允许您按需启动生产环境的镜像,并在完成后关闭它们。您甚至可以在本地运行这些环境。它需要预先投资才能正确运行,并且启动按需的应用程序会减慢测试周期。

如果您的开发团队能够做到这一点,他们可以向应用程序本身添加标志,以允许测试人员根据需要创建和删除数据。这些开发标志将使您能够通过不经过某些应用程序流来加速测试。然而,很容易忘记包含那些流的测试覆盖率,从而导致bug从裂缝中溜走。

对于依赖于仍在开发中的api的应用程序,可以根据需要创建模拟服务来模拟数据层。Mock服务允许您提前完成正在进行的工作,以便尽可能早地开始测试。但它不是一个真正的系统,因此这些服务不会暴露在最终产品上出现的潜在问题。

请注意,这四种策略并不是处理端到端测试测试数据的唯一方法。它们是一些最常见的方法,适用于不同的情况。不管您和您的团队如何处理这个棘手的场景,花时间使您的测试自动化尽可能顺利地进行是一个好主意。

您还有哪些方法没有在本文中介绍?在下面的评论中与他人分享你的建议吧!

author

石头 磊哥 seven 随便叫

company

thoughtworks

大家好,本人不才,目前依旧混迹于thoughtworks,做着一名看起来像全栈的QA,兴趣爱好前端,目前是thoughtworks 西安QA社区的leader,如果有兴趣分享话题,或者想加入tw,可以找我

roles

QA(营生) dev(front-end dev 兴趣爱好)

联系方式

如果想转载或者高薪挖我 请直接联系我 哈哈

wechat:

qileiwangnan

email:

qileilove@gmail.com