接口自动化测试实践指导(上):接口自动化需要做哪些准备工作

简介: 接口自动化测试实践指导(上):接口自动化需要做哪些准备工作

1. 为什么做接口自动化

1.1 什么是接口测试

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

在这里呢,首先抛个问题:接口测试和接口自动化有什么不同

在这里先不做解答,大家可以带着这个问题去阅读后面的内容,相信自然会得到这个问题的答案。

1.2 做接口自动化的原因

在这里插入图片描述

如果要一一列举原因会列举出很多,在这里我把认为比较重要的几点原因列举如下:

  • 现在越来越多的系统采用前后端分离架构、微服务架构,各服务之间更多的通过各种接口实现信息的互通,对接口直接进行测试,可以更全面的覆盖各类测试场景
  • 如果仅依赖通过前端进行测试,因为前端对入参数据有些逻辑控制,会造成有些测试场景无法测试到,特别一些安全测试方面的场景无法覆盖
  • 敏捷测试对测试效率上的要求很高,测试自动化的占比应该要远大于手工测试占比,才能比较好的胜任敏捷的要求
  • 一般实际工作中,实施接口自动化要优先于界面自动化,因为在实际实施中,接口自动化脚本的维护成本要低于界面自动化,稳定性也要好很多
  • 如今业务系统复杂度越来越高,单纯依赖手工回归,成本会急剧增加且测试效率大幅下降,接口自动化测试是一种非常好的解决方案,另外加上有很多工具的支持,接口自动化成为很多项目测试中必须要做的一块。

1.3 测试分层模型

在这里插入图片描述
要做接口自动化,我们先熟悉测试分层模型,从图中可以知道接口测试处于金字塔的第2层

针对业务逻辑自动化测试层,主要分为接口自动化界面自动化

从测试体量上来看,接口自动化要大于界面自动化,这是综合测试成本、测试成效等多方面考虑的结果。

实际项目中,更多的是一种纺锤形的测试分层模型,中间最大的一部分是接口自动化,因为单元测试往往落地效果不好,项目的质量提升更多的依靠接口自动化来实现。

2. 需要哪些准备工作

[接口自动测试的准备工作基本包括以下:

在这里插入图片描述

2.1 自动化工具选型

我们在进行接口自动化测试前,首先要选择适合的测试工具,磨刀不误砍柴工,工具选好了,后面的测试工作也易于开展。

关于工具的选型不是本文的重点,在此不过多展开。对于刚接触接口测试的同学,可以本着易于上手、适合自己、满足项目需求这三点来选择

目前常用的测试工具如下:

在这里插入图片描述

建议:

如果你第一次接触接口自动化,可以先选择Postman开展接口自动化,该工具使用简单易于入门,当然更深入使用该工具,还是需要费些时间研究学习一下,该工具的支持的功能还是很强大。

本文的实战样例会采用Jmeter进行展示,因为笔者演示的项目使用的测试工具就是Jmeter。大家阅读本篇文章时,重点要放在测试思路如何组织上,具体接口用例的实现形式上可以忽略,不同工具的实现形式是不一样的。

2.2 测试环境准备

在这里插入图片描述

测试环境准备可分为两部分:被测系统环境准备和测试客户端环境准备

1) 被测系统环境准备

该环境就是被测系统的运行环境准备,进行测试前,我们肯定需要知道要测试哪个系统,这个系统的访问地址是多少,这样我们才能进行后续的测试工作。

测试环境最好由测试人员自己维护起来,这样避免依赖开发人员,也能加强测试人员对测试环境管控,避免环境被人随意改动,影响测试工作。

最开始的测试环境部署,最好要请教开发人员,尽量保证测试环境各项配置与生产基本一致,避免因为配置不同,遗漏某些bug。当然像数据库这样的配置肯定要使用测试环境专用的配置,连接测试数据库,决不能直接连接生产数据库进行测试。

2) 测试客户端环境准备

该环境的准备比较简单,就是部署有测试工具的客户端环境,最简单的方式就是本机部署安装测试工具,当然也有比较复杂的客户端环境准备,如你要做持续集成测试,可能要集成Jenkins,环境部署上就会复杂好多,初学者可以先不关注。

因采用不同的测试工具,客户端环境准备上会有所不同,具体的依据自己采用的测试工具来准备。

注:
目前我采用的测试工具是Jmeter,客户端环境准备比较简单,只需安装好java运行环境,从官网下载Jmeter安装包解压即可使用。

2.3 获取接口文档

在这里插入图片描述

测试工具和测试环境准备就绪之后,那下一步是不是就可以开始测试了,当然还不行,按照正常思路,你得知道要测试什么,依据什么来测试,搞清楚这些才能开始下一步的测试工作。
在传统的瀑布软件流程中,测试人员在做某个系统的手工功能测试时,测试人员会首先从业务人员或开发人员那边获取需求文档、系统设计文档,通过这些文档了解学习被测系统,测试用例也会依据这些文档来进行编写。

如果你的项目采用敏捷开发模式,文档虽然不多,但依然可以从产品经理那里获取产品设计原型、PRD文档等,据此来了解被测系统,进行用例分析和编写工作。

说了上面这么些,只是给大家一个对照,对于接口测试,同样也需要首先获取一些文档,依据这些文档来了解被测接口,并进行用例分析和编写。不过需要注意,接口文档形式比较多样,有的项目组可能采用word文档,更多可能采用一个系统维护接口文档(如:RAP、eolink等),也有的组采用Swagger工具生成。

目前测试最多的是http类的接口(一般以RESTful API居多),也有WebService类接口,本篇演示内容会以RESTful API风格的http类接口来进行展示。

2.4 实际项目展示

目前这个项目采用eolink这款工具来维护接口文档,使用这块工具来维护接口文档还是非常方便(该项目使用的是老版本的eolink,新版本eolink丰富了很多更易用的功能,更多功能介绍可参见文末),具体展示如下:

  • 接口列表展示

在这里插入图片描述

  • 删除应用”接口维护内容展示

在这里插入图片描述
在这里插入图片描述

3. 测试数据准备和设计测试用例

上面内容准备就绪后,就可以开始接口测试用例的设计,用例设计完毕后只需要再准备一些初始测试数据,就可以开始进行接口的调试与测试工作了。

测试数据准备和设计测试用例可以同步进行,说起测试数据准备,我们要准备哪些内容呢,这个就要看具体的项目了,举个例子:如果你这个项目是需要用户登录的,那至少你要准备你的测试用户。

当然你要明确一点,并不是所有数据都是测试前要准备好的,很多测试数据可能是一边测试一边准备的,因为只有测试到某个接口,才知道需要准备哪些数据,对于数据准备这块,依据实际情况灵活处理即可。

对于测试数据按照我自己总结的思路可以从如下三个角度考虑:

在这里插入图片描述

3.1 测试数据准备思路

个人感觉做接口自动化最麻烦的地方是对测试数据的准备和规划,测试数据准备的好不好非常影响脚本的健壮性,经常会因为测试数据问题,造成用例跑不过,影响接口自动化的成效。
对于测试数据准备,我的一般把测试数据分为两类:
①死数据;
②活数据。

1) 死数据

死数据指在测试前准备好的测试数据,这些数据往往都是手工在被测系统中准备好的,直接作为脚本的初始化参数供脚本使用。

这部分的数据建议不要太多,不然会导致前期准备时间比较长。能够当做死数据来准备的数据,建议是一些比较固定的、后续测试中不太容易发生变化的数据,像类似用户名密码这样的数据,在后续测试中不易发生变化,对后续数据维护成本不会太大。

2) 活数据

建议更多的测试数据以活数据的形式准备,这样可以提高脚本的自动化率,减少后续手工的干预,活数据的准备手段比较多,我主要使用如下几种方式:

  • 编写SQL查库
  • 通过执行相关接口来提取准备
  • 编写脚本自动生成

3.2 测试数据准备实战演示

为帮助大家更好的理解,这里拿之前用Jmeter做的接口自动化中的数据准备案例给大家做一下演示:

死数据

在这里插入图片描述

说明:

上图是目前我这个项目设置的死数据,有用户方面数据,团队方面数据、应用方面数据,这些数据一般手工创建好后,后续一般不会有太多调整。

活数据

  • 编写SQL查库

在这里插入图片描述
在这里插入图片描述
说明:
图中SQL脚本用来获取删除状态的用户名,用于后面用例(“错误值检查(传入已经删除的username),接口返回失败”)的测试数据

  • 通过执行相关接口来提取准备

在这里插入图片描述
在这里插入图片描述
说明:
图中通过创建应用和查询应用列表接口来准备测试数据“拥有所有环境的应用id”,用于后面用例的测试。

  • 编写脚本自动生成

在这里插入图片描述

说明:
图中为了生成appName这字段值,用了Jmeter的自带函数“${__time(MMdd-HHmm-SSS,tt)}”来生成不会重复的应用名称,保证后续测试该字段不会重复(后台程序不允许该字段重复),从而使脚本能够多次成功运行。

以上是对接口自动化需要做哪些工作的整体思路阐述,进一步思考,细心的同学会发现,对前期的准备工作,包括接口文档,环境等,需要一个平台管理,这样可以起到极大提升效率的作用,包括后续的脚本编写

Jmeter工具虽然很简单易用,也能满足需求,但脚本结构上还是过于灵活,比较适合单兵作战,不太适合团队协作。这里呢,推荐大家一款好用的既能兼顾接口文档维护、环境管理,又能用来做接口自动化的测试平台:eolink,其官网:https://www.eolink.com/,最新版本的eolink有着丰富易用的功能,帮助项目团队更好的对API接口进行管理和测试,这里简单介绍一下该平台对于API接口设计维护、环境管理、测试数据维护、Mock的功能:

1)API接口设计维护

平台提供了多种API维护方式:手工表单维护、通过模板创建、自动生成API文档等,并对API有状态和历史版本的管理,想了解更多可以参见:https://help.eolink.com/#/tutorial/?groupID=c-655&productID=13
在这里插入图片描述
在这里插入图片描述

2)环境管理

在接口测试中往往需要在不同环境中进行测试,对于环境,eoLink也提供了项目环境的管理模块,方便统一对环境进行管理。想了解更多可以参见:https://help.eolink.com/#/tutorial/?groupID=c-703&productID=13

在这里插入图片描述
在这里插入图片描述

3)测试数据维护

对于一个测试平台,测试数据维护功能是必须的,eolink也提供了非常易用的测试数据管理功能,在这里可以添加维护多组测试数据,并支持动态赋值。想了解更多可以参见:https://help.eolink.com/#/tutorial/?groupID=c-722&productID=23
在这里插入图片描述

4)Mock功能
在开发联调中Mock功能是使用最多的,少量自动化测试场景也需要Mock,eolink平台提供了高级Mock功能,可以满足一些复杂场景的Mock需求。想了解更多可以参见:https://help.eolink.com/#/tutorial/?groupID=c-687&productID=13

在这里插入图片描述
在这里插入图片描述
因eolink平台功能非常丰富,更多的其他功能将会在后续文章中继续介绍,想详细了解的同学可以直接去官网的帮助中心,会有更详细的介绍。

相关文章
|
9天前
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
48 16
|
11天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
10天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
35 4
|
10天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
11天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
6天前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
28 12
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
1天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
8 1
|
9天前
|
Devops jenkins 测试技术
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第41天】在软件开发的世界中,快速迭代和高效交付是企业竞争力的关键。本文将带你走进DevOps的核心实践——自动化部署与持续集成,揭示如何通过它们提升开发流程的效率与质量。我们将从DevOps的基本理念出发,逐步深入到具体的技术实现,最终展示一个实际的代码示例,让理论与实践相结合,为你的开发旅程提供清晰的指引。
20 4
|
14天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
49 3
下一篇
无影云桌面