为什么记录和重放不足以进行自动化的应用编程接口测试


几周前,我们在Parasoft SOAtest中发布了一个新功能,叫做智能应用编程接口测试生成器。我被耍了。这项技术具有合理的开创性——它使用人工智能将手动用户界面测试转换为自动应用编程接口测试,因此您不需要应用编程接口测试方面的专业知识,甚至不需要编写任何代码就能开始。它完全是无脚本的,并且是通过一个简单的Chrome插件激活的,所以你不必安装一个大的工具集来使用它。

然而,在5月份的STAREAST测试会议上,我花了很长时间谈论这项技术有多棒,我不断遇到有人问我这项技术与市场上已经存在的记录和回放技术有什么不同。人工智能当然是答案,但是AI for AI's sake is meaningless——我们为什么在乎?

我们关心是因为记录和重放测试是不够的。我们需要让应用编程接口测试更容易!为了真正扩大应用编程接口测试的采用,并解决测试团队与开发保持同步的问题,我们需要更多!我们需要能够自动帮助用户识别并组织捕获的应用编程接口活动,使之成为有意义的、可重用的和可扩展的测试,而不仅仅是收集流量、记录流量和回放流量。我们可以降低应用编程接口测试的采用门槛,让更多的测试人员参与进来。

为什么我们甚至需要原料药测试

首先,让我确保你明白这有多重要。

历史上,组织依赖用户界面测试作为主要的测试实践,因为它易于定义和执行,并且易于自动化,至少在最初是这样。进入门槛很低,它可以跨越一个大的测试团队。

这种完全依赖手工和用户界面测试的挑战在于隐藏的成本。任何使用过Selenium的人都知道,当用户界面发生变化,需要更新脚本时,事情会变得很困难。事实上,我们已经发现,多达80%的测试时间花费在执行手动用户界面测试或修复由于应用程序更改而中断的自动用户界面测试上。最重要的是,在整个应用程序可用之前,用户界面测试无法执行——如果发现了缺陷,返工的成本很高,因为在测试继续之前,应用程序需要被拆开、修复和重新组装。通常,这种后期周期缺陷检测会导致显著的发布延迟,并增加测试的总成本。

用应用编程接口测试补充用户界面测试

为了补充和减少对用户界面测试的依赖,组织可以利用应用编程接口测试,它通过提供可维护的、端到端的场景来解决这些问题,这些场景可以被重用,而不仅仅是功能测试。应用编程接口测试在开发人员和测试人员之间创建了一个良好的沟通渠道,因为它们有助于用具体、现实的术语记录应用编程接口的行为。将通过应用编程接口测试发现的错误和安全漏洞的诊断和修复转移到生命周期的早期阶段,在实现进度和质量目标方面有很大的回报。

然而,组织很难采用应用编程接口测试,因为即使是很棒的应用编程接口测试工具也没有提供足够的帮助。为了有效地使用应用编程接口测试工具,测试人员需要对他们试图测试的应用编程接口有深入的了解,包括所讨论的应用程序如何使用应用编程接口,这需要专门的技能和专业知识。开发人员没有时间测试它们,所以这种非常有益的实践被避免了——对测试人员来说是站不住脚的,对开发人员来说也是不受欢迎的。

为什么要从流量中构建应用编程接口测试(“记录和重放测试”)

为了解决这个挑战,功能测试自动化公司在很多年前就想出了记录应用编程接口活动和从流量中创建应用编程接口测试的想法。这非常强大,因为通过简单地记录应用程序和后端系统之间的事务,您可以捕获应用程序接口的活动,包括应用程序接口调用如何重组正在传递的数据。

有了这项技术,您就能够记录在后端系统中发生的场景。这有助于非技术用户理解调用了哪些应用编程接口,并在每次调用时对所使用的数据有一个基本的了解;然而,简单的流量收集并没有帮助他们提高技能,也没有帮助他们学习如何维护或扩展他们的测试。它不能教会他们用API使用的所有不同的消息格式和协议来构建不同的测试所需的技术技能,而且它本身也没有提供足够的帮助来允许非技术用户进行实践。在交通记录和全面运行的应用编程接口测试场景之间还有很长的路要走。

为什么记录和重放是不够的

这就是我们开始考虑降低采用应用编程接口测试的障碍的下一步的地方。我们开始思考。简单地记录测试人员的用户界面和目标应用程序之间的网络流量不足以帮助自动化应用程序接口测试,直到实现其有用性。这可能类似于MP3录音。您可以回放它来听歌曲,但它不包含任何关于歌曲是如何创作的或使用了什么乐器的信息。这首歌不能修改或扩展。

使用简单的记录和重放测试考虑以下问题:

如果我的用户界面改变了怎么办?

用户界面在开发过程中不断变化,维护基于用户界面的测试自动化非常耗时。用户界面只展示了应用程序底层业务逻辑的某种(可能是有限的)表示,依赖记录和重放既有局限性,又容易受到频繁变更的破坏。

什么是正确的交通?

从用户界面进行系统级的应用程序测试将会产生大量的网络流量。即使是训练有素的人也很难理解哪个流量是在用户界面级别发生的实际测试场景的一部分。依靠人工解释网络流量既耗时又容易出错。此外,这通常不是测试人员所拥有的技能,所以他们不得不依靠开发人员的帮助。

我如何将这些测试步骤连接到场景中?

从基本的交通记录中创建测试场景是困难的。如果需要多次测试来创建一个场景,这种困难就会成倍增加。重放流量记录来代替场景通常很困难,因为它依赖于原始测试的精确前提条件。此外,可能不可能重复重放相同的测试,例如,这对于创建性能或安全相关的测试很重要。

我如何获取和重用知识?

流量记录只是测试会话期间所有网络活动的总和。对底层消息传递和与应用编程接口服务的关系没有内在的理解。没有这一点,就不可能将这些录音扩展到其他目的,甚至不可能进行修改以适应新的要求。它们经常被冻结在时间里,而且只有用处他们被记录的那段时间。

让我们回到人工智能

这就是人工智能发挥作用的地方因此交通记录不仅可以地方而是被扩展为对用户来说真实的、可操作的价值。这就是为什么我们开发了智能应用编程接口测试生成器,所以我们可以为新的应用编程接口测试人员创建一个不用编写一行代码就可以开始应用编程接口测试的地方。因此,用户可以快速开始构建完整的、有意义的测试场景,甚至将这些应用编程接口测试扩展到安全性和性能测试中,利用Parasoft SOAtest

它是如何工作的?

在测试用户界面时,智能应用编程接口测试生成器会监控对应用程序进行的底层应用编程接口调用,就像流量收集器一样,然后使用人工智能来发现模式并理解这些应用编程接口调用之间的关系。然后,它可以生成自动化的应用编程接口测试场景,这些场景执行与用户界面测试相同的操作,但是完全自动化并且易于扩展。

本质上,这:

但这有什么关系呢?以下是这种方法提供的一些好处:

  • 通过将您在浏览器中执行的操作自动转换为自动应用编程接口测试,从而减少确定构建应用编程接口测试的正确方法所花费的时间,该测试对您在用户界面中执行的相同操作进行建模(以正确的顺序)。
  • 通过基于不同应用编程接口调用之间的关系自动创建完整的测试场景,使得构建有意义的、全面的应用编程接口测试变得更加容易。(如果没有这些,用户必须花时间调查测试用例,寻找模式,并手动建立关系来形成每个测试场景。(
  • 自动添加断言和验证,以确保您的应用编程接口按预期工作,这样您就可以执行即使是最复杂类型的断言逻辑,而不必编写任何代码(或者冒着构建错误的风险)。
  • 减少维护测试的时间。因为它没有脚本,所以每当服务改变时,用户不必花费时间为测试用例重写代码。
  • 帮助开发和测试团队通过一个单一的工件进行协作,这个工件可以被两个团队容易地共享和理解(并且比用户界面测试更擅长于诊断缺陷的根本原因)。
  • 通过帮助用户扩展测试、测试流逻辑和数据解决方案,为可扩展的应用编程接口测试策略奠定基础,以实现在给定的短时间内完全验证应用所需的全部应用编程接口测试覆盖范围。

总而言之,该工具既基于对捕获的应用编程接口活动的有意义的解释自动创建测试,又支持这些测试的简单扩展和维护,因此它们的价值在整个软件生命周期中成倍增加。

让我们更进一步

所有这些本身都是好的,但是让我更加兴奋的是智能应用编程接口测试生成器帮助用户理解用户界面动作和应用编程接口调用之间的关系,使测试人员更容易“熟练”并采用全面的应用编程接口测试实践。由于应用编程接口测试可以完全自动化并且容易扩展,团队可以降低总质量成本,同时避免延迟发布。

让我们把它分解一下。因为智能应用编程接口测试生成器承担了繁重的工作,为测试人员提供了一个简单的、无脚本的地方来开始构建应用编程接口测试,它降低了应用编程接口测试的技术切入点,将初学者带入应用编程接口测试世界和用户友好的Parasoft SOAtest生态系统,在那里用户可以从易于采用和使用的强大可视化工具中受益。

这就是我兴奋的原因

哦,暗示!在系统和用户界面测试期间,应用编程接口活动的流量收集对于自动化应用编程接口测试来说是不够的,但这是迄今为止业界所拥有的。对先决条件的依赖使得这些记录的可重用性降低,并且几乎不可能扩展到其他目的。更不用说从复杂的流量中创建有意义的测试场景的困难,这是大多数测试人员不擅长的。

但这已经不重要了!现在我们有了Parasoft SOAtest智能应用编程接口测试生成器,用户可以利用人工智能来完成繁重的工作。初级的应用编程接口测试人员可以用它来开始并学习应用编程接口测试如何工作,有经验的应用编程接口测试人员可以利用它来大大提高效率(这是我们现在使用它的主要方式之一,在Parasoft这里)。最终,通过利用机器构建有意义的、可扩展的和可重用的测试,组织可以从节省时间和金钱中获益。它存在2018年,对吗?