纯干货:接口自动化测试的思考和技术实现

2023-11-16

一、思考
什么是自动化测试?

自动化测试是把人为驱动转换成计算机驱的测试行为。

人对于接口的测试行为:

第一步:理解业务需求,一般来说可以从需求理解接口的行为和描述,行为:当什么情况,做什么操作,发生什么事情。描述:情况是什么,操作是什么等。

第二步:查看(评审)接口文档的入参和返回是不是符合需求描述。

第三步:根据业务需求构造前置数据。

第四步:根据接口文档的入参请求接口。

第五步:查看返回值是不是符合需求行为和描述,对于接口有更新数据库的行为还要检查数据库的变化是否符合需求描述。

如何将人的行为最小成本的自动化?

设想了两种方案

第一种思路:

将整个集成起来的大系统视为被测试对象,将所有接口视为对于这个系统的操作控制器,但是将接口本身视为黑盒。这样我们从处于业务流程最顶部的第一个接口起,传递参数就会生成第一个业务数据或者业务行为,然后用这个产生的初级的业务数据调用相对来说处于业务下游的接口,从而产生更下游的业务数据以及业务行为。依次类推通过此种方式最终覆盖整个系统的所有接口。

意义(这样做的意义是什么?)

对于一个集成起来的复杂系统,这样不仅可以比较真实模拟业务的行为,还可以产生相对完整的业务数据。

问题和挑战

1:测试场景颗粒度不够。一个自动化case涉及到多个接口的调用,所以一个自动化case其实就是一个业务流程,这样的自动化颗粒度就是一个业务流程,如果case设置过多,就可能造成case膨胀,从而找不到测试重点,后期维护高成本。所以case量就不能设置太多,只能设置一些宏观层面主线业务case,一些支线业务case无法纳入进来。

2:问题定位不准确。自动化测试发现问题不能准确的定位是哪一个接口产生的,由于我们将接口视为黑盒,case中断言的就是一个个接口的返回值,那么就有可能一个接口的行为可能出现了异常,但是这个接口返回值是正确的。例如这个接口少更新了一个数据库字段的数据,少调用了一个第三方接口等。所以会导致这个问题继续向下游业务潜伏行进,直到真的影响自动化测试断言到的业务行为时才能被发现。

3:场景无法闭环。我们目前的系统还没有形成完备的接口体系,由于有些执行业务行为的接口缺失,不能仅仅通过调用一个个接口去完成业务操作。

第二种思路:

由于第一种的挑战,我们把测试对象由整个系统变成一个个单个的接口,这样我们对于这一个接口设置的各种正常和异常的测试用例,业务数据不在由上游模块提供,而是采用一步直达的方式将业务数据精确的注入至接口依赖的数据表,为了能够使自动化case稳定的持续执行,这个数据一步直达的步骤就要纳入到自动化测试用例。同时我们把接口白盒化,在理解业务需求的同时要阅读接口代码,获取到接口对于业务数据的处理细节,这样就能在业务逻辑和开发逻辑两个层面丰富测试场景,以及设置一些更加临界的测试用例。

意义(这样做的意义是什么?)

1:这样做可以和单元测试有效的形成互补关系。单元测试会预设一个个的方法可以组装成一个模块或接口,然后单元测试关注每一个个的单体方法是否正确。而单接口测试借鉴了单元测试的思路,单接口测试预设一个个的接口可以组装成一个系统,然后单接口测试关注一个个的单体接口是否正确。

2:性价比高,由于测试对象从一个业务系统缩小到一个接口,通过注入数据屏蔽了上下游依赖,一个接口可以很低成本的有大量case产出。更多测试技术文章,请前往51Testing软件测试网(51Testing软件测试网-中国软件测试人的精神家园)掌握哦~

问题和挑战

1:技术投入大。这样写的显然有一定的复杂度,所以投入较大。由于要做数据一步直达以及接口白盒化测试,需要对系统结构、第三方中间件的进行掌握,所以需要做较高的技术投入和时间投入。

2:收资收益比待衡量。有些业务发展迅速,产品形态尚未稳定,接口的产出数量和变更数量都很大,对于业务产生的价值和自动化测试的投入成本需要衡量。

3:case膨胀之后对于测试用例工程的代码组织结构、自动化测试系统架构等case本身的代码质量层面是一个挑战。

二、实现
在实现之前,我们调研了市面上一些开源的框架、技术和解决方案,目前自动化测试解决方案目前分两个阵营。

第一个阵营是无代码型,这种方式希望从一个界面设置URL、参数、请求数据、预期返回的数据就会形成一条case。这种方式的case通常对数据库中存留的业务数据以及当前数据状态有很强的依赖性,所以数据的变更对case的稳定性有很大的影响,而且由于自动化用例编辑器本身的限制,对于测试场景的丰富和接口返回值的验证无法做到全面、有效。如果去实现一个功能强大的、可编程的自动化用例编辑器,成本巨大。

第二个阵营是通过代码实现一个case的自动化执行过程。借鉴UnitTest框架,测试用例分为准备数据过程,请求接口过程,返回值断言过程,清理数据过程。这种方式编写的case由一行行的代码组成,一组对于一个系统的自动化测试case,就是一个代码工程。case数量少的时候,编写效率和执行效率都没有太大问题,当case量增多,量变引起了case编写维护效率和执行效率的质变,如何组织代码架构、增强代码可复用性、设计模式就成了挑战。

根据投入成本、灵活性、编写和执行效率、测试场景的多样性等因素,业界大部分公司选择了通过代码编写自动化case。所以综上述考虑决定选择第二个阵营的自动化方案。我们将要实现的自动化用例实现程度是对于接口测试的全过程自动化测试,包括数据的构造、入参定义、预期返回值定义、接口请求、接口返回值断言、数据清理。

我们预期自动化测试用例拥有这些特性

使用python脚本语言描述接口测试用例。
每个python脚本文件内包含一个测试类,该类被称为测试套件。
每个测试类(测试套件)只测试一个接口。
该测试类(测试套件)中包含针对该接口测试的若干用例。
该测试类中为了便于处理数据和制造前置场景应该包含以下几种方法:

所有用例执行前应该执行的“套件起始方法(suite_setUp)”。
所有用例执行后应该执行的“套件拆卸方法(suite_tearDown)”。
每个用例执行前应该执行的“用例起始方法(case_setUp)”。
每个用例执行后应该执行的“用例拆卸方法(case_tearDown)”。
以test开头测试用例方法“测试用例(test_xxx)”。
 

执行机制

 

用例工程结构

针对每个被测工程可以创建一个对应的测试工程,测试工程里按照模块自由的划分目录,目录里每接口对应一个测试suite(一个py文件),每个suite中包含若干针对该接口的case。

通过树形case组织结构,解决了case间的依赖问题,可以单独执行一个case或者一个接口的测试或者一个测试套件集,同时实践发现这样的结果也比较易于case的调试,排错和维护。

编写测试用例

每个测试用例通过一套类似于这样的模板去编写,测试用例一般是在在定义的以test开头的测试方法中编写,针对不同类型的接口采用不同的测试思路。

get类型的接口自动化case编写步骤

1:通过直接读写数据库或者调用上游接口制造测试数据/重用数据库现有数据。

2:定义一个字典表示要发起请求的数据。

3:定义一个字典表示预期返回数据(一般返回数据是json)

4:使用HttpRequest类库发起请求接口。

5:使用Should类库中的断言方法比对接口返回的json和定义的字典数据是不是一样。

6:通过操作数据库清理测试过程中产生的测试数据。

post类型的接口自动化case编写步骤

1:定义一个字典表示要发起请求的数据。

2:定义一个字典表示预期返回数据(一般返回数据是json)。

3:由于post接口会对数据库又操作仅仅查看接口返回值不足以证明接口行为的正确性所4、以还要定义一个字典表示数据库中的预期数据。

4:请求接口使用HttpRequest类库发起请求接口。

5:使用Should类库中的断言方法比对接口返回的json和定义的字典数据是不是一样。

6:使用DB类库查询到数据库中需要验证的数据,这个数据是数据库中实际数据。

7:使用Should类库中的断言方法比对数据库中的实际数据库和数据库中的预期数据是不是一样。

8:通过操作数据库清理测试过程中产生的测试数据。

接口自动化测试框架整体组成

自动化框架提供了两个端的使用方式,左边绿色的部分是向自动化用例开发者提供的SDK,右边蓝色的部分是case的管理、执行和结果查看的可视化系统。

其中,SDK为开发者提供了数据定义、数据驱动、场景切入、执行策略、工具库、断言等开发规范和功能。

开发完成的case可以被加载到运行容器上执行,执行的结果可以在web可视化系统上展示。

web可视化管理系统提供了执行控制、策略配置、结果展示、问题分析的功能,web管理端通过调用Jenkins接口在Jenkins生成job,通过Jenkins的任务编排机制调用运行容器执行相应的自动化测试用例或者测试套件集。

case结果关注着在查看到case执行结果后,对于执行失败的case进行问题分析,并且将分析结果通过web可视化管理系统标记记录。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

加入我的软件测试交流群:822269834免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 获取方式 :

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

纯干货:接口自动化测试的思考和技术实现 的相关文章

  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 【计算机毕业设计】电商个性化推荐系统

    伴随着我国社会的发展 人民生活质量日益提高 于是对电商个性化推荐进行规范而严格是十分有必要的 所以许许多多的信息管理系统应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套电商个性化推荐系统 帮助商家进行商品信息 在
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • MySQL 核心模块揭秘 | 03 期 | 我是一个事务,请给我一个对象

    每个事务都有一个对象 这篇文章我们聊聊 事务的对象从哪里来 要到哪里去 作者 操盛春 爱可生技术专家 公众号 一树一溪 作者 专注于研究 MySQL 和 OceanBase 源码 爱可生开源社区出品 原创内容未经授权不得随意使用 转载请联系
  • Oracle EBS AP发票导入 API Rejection List 第二部分

    Oracle EBS AP发票导入 API Rejection List 第二部分 The report lists the reason the invoice could not be imported and prints a bri
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • 数据库 | 面试官:一次到底插入多少条数据合适啊?.....面试连环炮

    数据库 面试官 一次到底插入多少条数据合适啊 面试连环炮 数据库插入操作的基础知识 插入数据是数据库操作中的基础 但是 我们程序员将面临随之而来的问题 如何快速有效地插入数据 并保持数据库 性能 当你向数据库中插入数据时 这些数据直接存储到
  • Redis分布式锁--java实现

    文章目录 Redis分布式锁 方案 SETNX EXPIRE 基本原理 比较好的实现 会产生四个问题 几种解决原子性的方案
  • Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

    场景 Mysql中怎样设置指定ip远程访问连接 Mysql中怎样设置指定ip远程访问连接 navicat for mysql 设置只有某个ip可以远程链接 CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式 如果通过可视
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 20年通过校招进入广州某软件公司 干了接近3年的 功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错

随机推荐

  • MIPI入门——DCS介绍

    DCS Display Command Set 即显示 控制 命令集 是DSI协议中所使用的相关 控制 命令的一个集合 显示设备 如LCD 厂商可以选择性地部分 或全部 实现DCS文档中规定的命令 为了便于理解下面的内容 首先介绍一下DSI
  • sqli-labs(24)

    这个关卡可能有时候会出现一些小问题 有时候登陆后是没有修改密码的选项的 这是因为有时候解压时logged in php文件解压不正确 重新解压即可 本关卡为二次注入 其产生原因是 服务器端虽然对用户的直接输入做了一些过滤或者将一些字符进行转
  • 数字经济专家高泽龙谈“金融元宇宙”与“元宇宙金融”

    开始聊所有话题之前 必须先说说 金融元宇宙 或者 元宇宙金融 的概念和定义 当然 前提是搞清楚 金融 和 元宇宙 百度百科中 金融 的定义 金融 Finance Finaunce 是市场主体利用金融工具将资金从资金盈余方流向资金稀缺方的经济
  • Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position xx: 解决方案

    Python在读取文件时 with open article txt as f 打开新的文本 text new f read 读取文本数据 出现错误 UnicodeDecodeError gbk codec can t decode byt
  • electron autoUpdater热更新

    最近创建了一个electron vue项目 用到了热更新 先看效果图 话不多说 直接上代码 main目录下创建update js 代码如下 安装包helatest yml所在服务器地址 const uploadUrl http 127 0
  • 金山WPS暑期实习招聘笔试题2013-7-28

    C 试卷B卷 应聘职位1 2 姓 名 性 别 学 位 所在院校 所学专业 联系电话 电子邮件 毕业时间 获知招聘信息渠道 说明 答题时间为 100 分钟 自我判断题 请选择最符合您本人意愿的一项 1 你
  • 从项目实施层面解析STEAM教育

    转自 https baijiahao baidu com s id 1614434815561381532 wfr spider for pc 一 引言 近几年大家常常听到STEAM教育这个词 似乎一夜之间所有的培训机构的课程都变成了STE
  • 第9章_瑞萨MCU零基础入门系列教程之SCI I2C

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • Android-SharedPreferences实现记住密码和自动登录

    效果图 第一次进入进来 勾选记住密码和自动登录成功后 第二次进来 说明 中间存在的图片或者多余的其他部分可删掉 留下最主要的填写部分和登陆按钮即可 功能还是可以实现的 XML文件
  • QQ飞车手游设计分析

    腾讯系竞速手游的逆袭 QQ飞车手游设计分析 前言 这是中山大学数据科学与计算机学院软件工程2019年3D游戏编程与设计的作业1 导语 在中国巨大的游戏市场下 手游战场上的战火从未熄灭 其中以王者荣耀为首的MOBA类手游与以PUBG 现改名和
  • 【Flink Rest-ful API 】

    Flink 有了一些查询job状态指标的API 这些监控 API is a REST ful API 接受 HTTP 请求并返回JSON data 这些监控API以jobManager中web server 为基础 默认其监听端口为8081
  • PHPstudy安装教程

    首先简单介绍一下PHPStudy PHPStudy是一个Windows下的Apache Nginx php MYSQL的集成开发环境 PHPStudy比较适合快速的在windows下部署一个Web开发环境 而且便于安装 部署方便 服务器本身
  • linux环境下安装nginx

    一 准备安装环境 安装nginx需要系统相关插件 所以在安装前先检查哈是否有这些插件 如果没有 则要先安装这些插件 由于笔者是新的虚拟机环境 所以这些插件都没有 都需要安装 读者可以根据自己实际情况进行相关操作 1 安装 gcc gcc c
  • HTML引用公共组件

    在test html引用footer html 效果图 代码 test html div 我是頁面 div div class footer div
  • 《再也不怕elasticsearch》REST API调用

    REST API调用 大家好我是迷途 一个在互联网行业 摸爬滚打的学子 热爱学习 热爱代码 热爱技术 热爱互联网的一切 再也不怕elasticsearch系列 帅途会慢慢由浅入深 为大家剖析一遍 各位大佬请放心 虽然这个系列帅途有时候更新的
  • linux桌面小程序开发日记2(pyqt5+yolov5)

    linux桌面小程序开发日记2 使用Pyqt5 制作一个界面 并连接摄像头 最后一篇博客地址 https blog csdn net Liuchengzhizhi article details 123692365 B站视频 https w
  • VS Code Material Icon Theme插件设置自定义文件夹图标关联

    VS Code Material Icon Theme插件设置自定义文件夹图标关联 方法与分析 自定义文件夹图片命名和位置如下 vscode extensions pkief material icon theme 4 5 0 icons
  • 程序的基本结构

    程序的基本结构 1 顺序结构 2 选择结构 选择结构如下图所示 当条件成立时 执行模块A否则执行模块B 3 循环结构 循环结构又两种形式当型循环和直道型循环 当型循环 先判断条件 条件成立就反复执行程序模块 当条件不成立时结束循环 当型循环
  • Django视图类View源码分析

    Django视图类View源码分析 一 视图函数 django中的视图函数 就是视图功能由函数实现 响应 或渲染模板后返回HTML 或直接返回JSON数据 参数 视图函数的第一个参数必须是request对象 文本响应 from django
  • 纯干货:接口自动化测试的思考和技术实现

    一 思考 什么是自动化测试 自动化测试是把人为驱动转换成计算机驱的测试行为 人对于接口的测试行为 第一步 理解业务需求 一般来说可以从需求理解接口的行为和描述 行为 当什么情况 做什么操作 发生什么事情 描述 情况是什么 操作是什么等 第二