端到端测试详解

端到端测试(End-to-end Test)是一种用于测试整个应用程序的流程是否符合预期的测试技术。它模拟用户真实的使用场景,通过用户界面测试应用程序:

端到端测试详解

与其他类型的测试相反,端到端测试是面向业务的,其目的是验证应用程序系统整体上是否符合业务目标。为了实现这一目标,该系统通常被视为黑盒子:尽可能完整地部署系统中的微服务,并主要通过 GUI API 等公共接口对其进行操作。

GUI:Graphical User Interface,又称图形用户界面或图形用户接口。它是采用图形方式显示的计算机操作用户界面,是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其他一些日常任务。

API:Application Programming Interface,又称呼应用程序编程接口或应用程序接口。它是一组定义、程序及协议的集合,通过 API接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集,同时也是一种中间件,为各种不同平台提供数据共享。

由于微服务架构包含多个具有相同行为的活动部件,因此端到端测试为服务之间传递消息的正确性提供了更多的信心,而且还可以确保正确配置了其他网络基础结构,例如防火墙、代理或负载均衡等。

测试范围

通过微服务的分层测试策略可知,端到端测试的范围比其他类型的测试大得多。

端到端测试详解

绝大多数情况下,微服务应用系统会依赖一个或多个由外部管理的微服务。通常,这些外部服务包含在端到端测试范围内。但是,在极少数情况下,也可以主动排除它们。因为如果外部服务由第三方管理,可能会经常出现稳定性和可靠性问题,这会导致端到端测试因不可控的原因而失败。

端到端测试详解

比如,某个应用程序系统依赖公安部门的背景审查服务,通过调用该服务来查询用户是否有过违法前科。首先这样的服务通常会按调用次数付费(每次 5-10 元),具有较高的测试成本,其次背景审查服务不总是稳定可用的。在这种情况下,通过服务虚拟化技术模拟背景审查服务是个不错的选择,这虽然多少会降低端到端测试的信心,但增加了测试用例套件的稳定性。

测试入口

因为端到端测试是面向业务的,那么测试时要从真实用户的使用场景来进行测试,根据应用程序系统是否有 GUI,可以分为两种情况:

  • 应用程序系统有 GUI,这种情况下用户可以直接操作 GUI 来使用系统,那么诸如 Selenium WebDriver 之类的工具可以帮助驱动 GUI 触发系统内的特定行为。
  • 应用程序系统没有 GUI,这种情况下,使用 HTTP 客户端通过其公共的 API 直接操作微服务。没有真实的 GUI,不能直观地看到业务功能行为,但可以通过后台数据来确定系统的正确性,比如 API 的返回结果、持久化数据的变化情况,等等。

测试设计

确定测试范围和测试入口后,可以进一步梳理出要测试的功能列表或用例集,并对其按业务能力、优先级、重要性等维度进行分组。这样可以将它们拆分为较小的任务,以便整个团队可以排序处理,比如可以首先实施优先级较高的用例组,或按紧急程度处理关键的用例,这有助于我们尽早消除潜在的障碍。

另外,由于端到端测试的目标是完全集成后的系统的行为,使得编写和维护测试用例会比其他类型的测试更加困难:

  • 端到端测试涉及的活动部件比其他测试多得多;
  • 端到端测试须考虑系统中的异步处理。

这些因素都可能给端到端测试带来挑战,比如测试过程不稳定、测试时间过长、测试用例集的维护成本高,等等。因此,应尽可能以最粗粒度进行端到端的测试设计。

如何开展端到端测试?

熟悉了端到端测试的基本内容,我们来看下如何开展端到端测试,主要有如下几类:

UI 自动化

对于带有 GUI 的应用程序系统,在进行端到端测试时,可以通过 UI 自动化的方式进行。如果 GUI 是 Web 形式,则 Selenium 是首选工具;如果 GUI 是 Native 形式,则可以使用 Appium。

使用 UI 自动化方式进行端到端测试时,UI 本身也存在不稳定性,因此在测试应用程序时避免使用 GUI 也许是个不错的主意。

API 自动化

REST-assured 库可以绕开 GUI 来测试 REST API 的服务,它用于针对API 触发实际的 HTTP 请求并评估收到的响应是否符合业务需要。

手工测试

手工测试则是像真实用户那样通过用户界面使用应用程序系统,而且测试自动化工作从来都不可能是完美的。比如,几乎不可能通过编写自动化用例来检测特定的错误,有时会在自动化测试中错过某些边缘情况,某些质量问题在自动化测试中并不明显,不容易被发现,等等。因此,进行某种形式的手工测试依然是一个好主意,且当进行手工测试时,可以适当地引入探索式测试

探索式软件测试是一种手动测试方法,强调测试人员在运行系统中发现质量问题的自由度和创造力。只需使用破坏性的思维方式,并提出在应用程序中引发问题和错误的方法。记录所有找到的内容,以备日后使用。当心错误、设计问题、响应时间慢、丢包或错包、以及所有其他会困扰软件用户的问题。

端到端测试实践心得

通过上述内容可知端到端测试的重要性、实用性、复杂性,这里跟你聊一下我对端到端测试的几点实践心得。

编写尽可能少的端到端测试,但绝不能省略它

由于可以通过较低级别的测试技术来获得微服务的质量信心,因此端到端测试的作用是确保一切都紧密联系在一起,从而实现业务目标。在端到端这个级别的测试上,全面地测试业务需求无疑是浪费的,尤其当微服务数量较多时,它的投入产出比必然很低。所以需要所有其他测试手段都用尽后,再进行端到端测试,并以此作为最终的质量保证。

同时需要警惕的是,端到端测试要尽可能地少,但绝不能省略它。因为微服务架构下的分层测试,每一层都有独特的作用,不可轻易省略某一层级的测试。对于端到端测试来说,无论如何也需要验证业务的核心链路和功能。微服务测试人员经常会犯的错误是,在充分进行了较低层次的测试后,会乐观地认为已不存在质量问题,结果问题被生产环境的真实用户发现后才追悔莫及。

分析缺陷产生的层次,推进分层测试的落地与完善

在微服务测试过程中,要善于对出现过的缺陷进行合理性分析。比如,如果较高级别的测试发现缺陷,并且没有进行较低级别的测试或较低级别的测试未执行失败,则需要推动落地或完善较低级别的测试。只有尽可能将测试推到测试金字塔的下方,才能逐渐将分层测试策略在项目中落地。

上一页12下一页


留言