文本
如何处理测试数据是自动化端到端测试中最棘手的部分之一。这里有一些策略来解决这个问题。 在为 web 应用程序运行自动化端到端测试时,最常见的问题之一是如何处理测试数据。端到端测试通常在应用程序中通过测试用例时创建、更新和删除各种信息。不可避免地,您会遇到问题,因为以前的测试运行会留下一系列陈旧的数据,这些数据可能会干扰您当前的测试执行。 对于其他形式的测试,管理数据并不是一个大问题。有些测试,比如功能测试和集成测试,只检查应用程序的一小部分,使得在每次测试运行后更容易清理。在其他类型的测试中,比如小型的单元测试中,您可以通过存根或模拟任何必要的数据来逃脱处罚。 对于端到端测试,理想的场景是尽可能接近真实的使用情况遍历整个系统。这意味着您需要确保您的系统服务具有正确的数据来进行测试,并在所有移动部件之间保持适当的数据完整性。您还需要将您的测试数据保持在不会干扰未来测试运行的状态。 遗憾的是,说起来容易做起来难。根据应用程序的复杂性以及团队规模、可用技能组合和组织预算等其他因素,可以用不同的方式处理这个问题。如果你正在努力寻找解决这个问题的方法,这里有一些方法可以让你思考如何最好地解决这个问题。 1)自动化测试专用测试服务器 好的方面 您可以有一个完整的复制品的整个应用程序的测试,工作相同的生产应用程序 一个独立的环境不会妨碍手工操作或者探索性测试 坏的方面 如果你有一个复杂的系统架构,它可能会变得非常昂贵 单独的服务器需要定期维护和升级,以保持系统平稳运行 您仍然需要处理在测试运行之间维护数据处于良好状态的问题 为了充分利用端到端测试,理想的做法是在尽可能靠近生产环境的环境中执行它们。在某些组织中,您将在专用服务器上运行生产应用程序。很可能,它们还有用于 UAT 或暂存目的的单独测试环境。虽然使用这些服务器来运行自动化测试是可以接受的,但是最好有一个完全用于自动化测试的环境。 通过让专用服务器运行并为自动化测试做好准备,您可以创建一个相同的生产环境。这样,您的自动化可以使用与客户使用的结构相同的镜像来遍历应用程序。它也有助于拥有一个独立的环境,不会引起任何与手动或探索性测试冲突。 这种方法的确有一些注意事项。如果系统的体系结构需要运行许多不同的服务,那么设置一个新环境可能会花费很多钱。如果有一个内部团队管理额外的服务器,那么运行这些服务器也是以时间为代价的。最后,拥有不同的环境并不能完全解决在任何时候拥有正确的测试数据的问题。它使得控制数据更易于管理,就像重置或还原数据库一样。但是你仍然需要在你的测试中处理这个问题。 2)使用虚拟化或云计算来启动测试服务器 好的方面 您可以随意启动完整的测试环境 开发人员和测试很容易在本地或在线创建可任意使用的测试环境 比任何时候都启动专用硬件要便宜 坏的方面 需要一些前期的专业知识才能在开始的时候跑起来 如果您需要启动许多服务以使测试应用程序正常工作,那么它可以减慢测试周期 你可能会不小心忘记关闭云服务,这可能会花费很多钱 与拥有专用服务器一样,您还可以利用虚拟化和云服务来生成单独的测试环境。现在,大多数组织和创业公司都在某种形式的云服务上托管他们的应用程序,而且在大多数情况下,你不需要任何额外的配置来创建单独的服务器。 虚拟化和云计算的好处是,您可以在瞬间启动和拆除完全成熟的服务,因此您不需要处理让它们一直运行的时间和成本费用。此外,像 Docker 这样的虚拟化工具可以帮助开发人员和测试人员在他们的本地系统上复制相同的环境,从而使端到端的测试过程对于未发布的功能更加简单。在任何时候,测试人员可以用新的数据重新生成一个新的服务器。 对于中小型团队来说,虚拟化和云服务是一个很好的选择,但它也不是一个完美的解决方案。在开始阶段需要一些专业知识,以确保虚拟化服务按预期运行。如果要运行很多服务,那么新服务的旋转可能会减慢团队的测试工作流程。最后,请记住,云计算公司通常会对运行服务的时间收费。如果您在运行测试之后忘记关闭服务器,那么您将收到高额服务费的惊喜。 3)添加开发标志来控制现有登台环境中的数据 允许测试人员在测试期间轻松地添加和删除数据 它可以通过绕过长的工作流来生成测试数据,从而加快某些测试场景的速度
坏的方面 它需要开发时间来实现,这在您的组织中可能是稀缺的 这是开发人员需要在应用程序中维护的另一件事 如果测试人员绕过长的工作流并且不单独验证它们,那么它可以隐藏 bug 和回归
有些团队在他们的应用程序中创建“开发标志”。这些标志是特殊的功能,允许团队执行在生产环境中不可用的不同命令。例如,当使用特定帐户登录时,开发人员可以访问应用程序中的特殊部分,或者访问绕过某些流的 API 端点。这些标志允许测试人员自动创建数据库记录,而无需在运行测试场景之前遍历应用程序或清理数据库。 这种方法在测试环境中非常有用,因为从一开始您就不需要太担心测试环境中是否有正确的数据。您可以在测试用例中包含一个设置步骤来清理数据库,并在每个场景之前生成所需的数据。它还可以显著加速测试,因为您可以跳过创建记录的多个步骤。一个典型的例子是在系统上创建新帐户时绕过电子邮件验证。使用开发标志,您可以创建一个验证帐户,而无需处理电子邮件验证部分。 开发标志的缺点是需要开发人员实现和维护这些标志。在大多数组织中,开发人员可能每天都有许多其他高优先级的任务要处理,从特性到 bug 修复,以及介于两者之间的任何事情。这类任务的优先级通常较低,因为它不会直接为客户增加价值,所以团队可能无法构建和管理这些标志。另一个问题是,测试人员可能过于依赖这些标志,导致错误错过,因为开发标志允许他们绕过应用程序的某些部分。 4)创建用于测试 api 的临时模拟数据服务 好的方面 它允许测试人员在开发应用程序时从事自动化工作 很容易设置一个干净的状态并在将来修改它,而无需潜入数据库。 坏的方面 您不是在真正的系统上进行测试,这是端到端测试的主要目标之一
模拟服务不会显示基础设施中的问题
如果被测应用程序的数据结构不断变化,那么您将花费大量时间维护这些模拟服务
测试应该在开发过程中尽可能早地开始。当开发团队仍在构建新特性和基础时,可能不可能使用前面提到的策略之一运行端到端测试。但这并不意味着在开发人员发布一些东西之前,您不能开始测试自动化。根据您的应用程序,您可以模拟数据层,同时保持应用程序的其余部分进行测试。 如今,大多数应用程序都使用 RESTful api 来检索和存储数据。如果应用程序的 API 不完整,可以使用 Mirage JS 等库创建一个服务,模拟最终的 API 端点。如果您不想构建一个模拟 API 服务,您可以使用诸如 mockAPI 之类的在线服务。这些库和服务使您可以轻松地控制所需的数据和响应,并且适合在您拥有最终的 API 之前开始测试。 当然,使用模拟服务意味着您没有利用端到端测试的主要好处之一——针对您的环境运行您的测试场景。这些库和服务不会发现服务器可能遇到的潜在问题,比如安全漏洞或降低性能。另一个问题是,如果API规范以任何方式发生变化,您将不得不花费额外的时间更新模拟服务以实现奇偶性,即使这些变化并不影响您的测试。 摘要 处理运行自动化端到端测试所需的数据通常并不简单。这些测试遍历整个应用程序,并在测试环境中留下一系列更改的痕迹,这使得为后续的测试运行进行清理变得非常棘手。根据您的组织和被测应用程序中的多个因素,您可以使用一些方法来帮助使测试过程对所涉及的每个人都更加舒适。 如果您的团队有技能、预算和时间来维护额外的服务器,那么您可以设置专用的测试环境来复制您的生产服务。保持测试环境的独立性使您能够更好地控制数据,但是它可能会变得昂贵,并且您仍然需要在每次测试运行之前将数据设置为可用状态
如果您没有预算来维护专用的服务器并为测试目的运行,那么您可以利用虚拟化和云服务。这些服务使您可以按需启动生产环境的镜像,并在完成后关闭它们。您甚至可以在本地运行这些环境。它需要预先投资才能正常运行,并且启动按需应用程序可以减缓测试周期
如果您的开发团队能够胜任,他们可以向应用程序本身添加标志,允许测试人员根据需要创建和删除数据。这些开发标志将使您能够通过不查看某些应用程序流来加速测试。但是,很容易忘记包含这些流的测试覆盖率,从而导致漏洞 对于依赖于仍在开发中的 api 的应用程序,可以根据需要创建模拟服务来模拟数据层。Mock 服务允许您在进行中的工作之前进行测试,因此您可以尽早开始测试。但它不是一个真正的系统,所以这些服务不会暴露出成品上出现的潜在问题 请注意,这四种策略并不是处理端到端测试的测试数据的唯一方法。它们是在不同情况下最常用的一些方法。无论您和您的团队如何处理这个棘手的场景,花时间使您的测试自动化尽可能顺利地进行都是一个好主意。
author
石头 磊哥 seven 随便叫
company
thoughtworks(离职了。。。。)
大家好,本人不才,目前依旧混迹于thoughtworks,做着一名看起来像全栈的QA,兴趣爱好前端,目前是thoughtworks 西安QA社区的leader,如果有兴趣分享话题,或者想加入tw,可以找我
roles
QA(营生) dev(front-end dev 兴趣爱好)
联系方式
如果想转载或者高薪挖我 请直接联系我 哈哈
wechat:
qileiwangnan
email:
qileilove@gmail.com