接口测试用例设计 - 实战篇

一.接口测试流程

1.需求讨论

2.需求评审

3.场景设计

4.数据准备

5.执行

二.分析接口文档中哪些元素

1.接口名称

2.接口地址

3.支持格式

4.请求方式

5.请求参数(参数名称、类型、是否必填、参数说明等)

6.返回参数(返回码、返回值信息、返回json串信息)

三.如何设计接口测试用例

3.1 为什么要设计测试用例

1.理清思路,避免漏测

2.提高测试效率

3.跟进测试进度

4.告诉领导做过

5.跟进重复性工作

3.2 设计接口测试用例从哪些方面考虑

1.功能

• 功能是否正常

• 功能是否按照接口文档实现

• 正常场景

• 异常场景

2.逻辑业务

是否依赖业务,比如是否登录成功

3.异常测试

(1) 参数异常:

• 关键字参数、参数为空、多、少参数、错误参数

• 覆盖所有的必选参数,组合可选参数,参数有、无或为null,参数的顺序、个数、类型,

• 参数类型数值大小、输入的数值的范围,参数字串长短,参数包含特殊字符。

(2)数据异常:

• 关键字数据、数据为空、长度不一致、错误数据

4. 安全

Cookie、header、唯一识别码

四.常用的接口测试用例覆盖方法

4.1 必需参数覆盖

对于接口的参数,接口文档一般都会说明哪些儿是必需的,哪儿是非必需的。对于必需的参数,一定要测试传参数和不传参数接口是否报错?

4.2 必需的参数各种情况覆盖

传非法的字符,特殊的字符,空值,超过边界的参数是否报错?错误信息是否正确?

4.3 非必需参数覆盖

一般接口对于非必需参数都不会做非正常性传值的判断,所以要测试合法的参数值 ,接口返回的内容是否正确。如果有接口文档说明对非必需参数做了非正常的验证的话,也要对其进行验证。

4.4 参数的组合覆盖

有些儿参数需要相互配合着才起作用,如“offset”和“count”组合起来进行翻页,这个时候要组合起来进行测试。

4.5 业务逻辑相关的覆盖

有些儿接口与业务逻辑关联密切,单独从接口角度测试,可能会遗漏掉一些儿因业务逻辑而产生的bug。所以如果和业务逻辑相关,也要考虑到业务逻辑相关的测试用例。

其实接口的测试用例差不多也就这些儿情况,也许有特殊的接口,到时候和产品,开发人员做好沟通,尽量先从接口层面保证质量。这样再从测试接口的应用层的时候,就可以少很多工作量,只注重样式和各个接口调用的配合就可以了。

五.接口测试的接口优先级

5.1  优先级--针对所有接口

1.暴露在外面的接口,因为通常该接口会给第三方调用

2.供系统内部调用的核心功能接口

3.供系统内部调用非核心功能接口

5.2 优先级--针对单个接口

1.正向用例优先测试,逆向用例次之(通常情况,非绝对)

2.是否满足前提条件 > 是否携带默认参值参数 > 参数是否必填 > 参数之间是否存在关联 > 参数数据类型限制 >参数数据类型自身的数据范围值限制

六.接口测试的设计思路分析

6.1是否满足前提条件

有些接口需要满足前置条件,才可成功获取数据。常见的,需要登陆Token。

逆向用例:

针对是否满足前置条件(假设为n个条件),设计0~n条用例

6.2 是否携带默认值参数

正向用例:

带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其它不填写,设计1条用例; 

6.3 业务规则、功能需求

这里根据实际情况,结合接口参数说明,可能需要设计n条正向用例和逆向用例 

6.4 参数是否必填

逆向用例:

针对每个必填参数,都设计1条参数值为空的逆向用例

6.5 参数之间是否存在关联

有些参数彼此之间存在相互制约的关系

逆向用例:

根据实际情况,可能需要设计0~n条用例

6.6 参数数据类型限制

逆向用例:

针对每个参数都设计1条参数值类型不符的逆向用例

6.7 参数数据类型自身的数据范围值限制

正向用例:

针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例

逆向用例:

针对每个参数(假设n个),设计n条每个参数的参数值都超出数据范围最大值的逆向用例

针对每个参数(假设n个),设计n条每个参数的参数值都小于数据范围最小值的逆向用例

以上几个方面考虑全的话,基本可以做到如下几个方面的覆盖:

• 主流程测试用例:正常的主流程功能校验;

• 分支流测试用例:正常的分支流功能校验。

• 异常流测试用例:异常容错校验 

七.接口测试返回结果的比较

对于接口返回值的校验问题,其目的一是验证代码正常,二是验证代码正确,个人总结:

1.首先比较返回码

2.然后比较返回值的完整性,即返回的key全不全

3.然后比较key的value数据类型(也就是jsonschema)

4.然后比较key对应的value值(也包括验证业务相关数据的value值)

然而,一般接口自动化,通常验证1、2两点即可,第3点根据公司测试周期来评估,而第4点,在功能测试中会验证value值的正确性。

注:jsonschema 是把返回的键 和 键的数据类型定义包,然后保存到文件中,然后和读取到的接口 做键 和值的类型 做比较

八.实践操作

8.1接口样例

获取订单列表接口(多条件)

获取店铺指定期间的所有订单列表(多种条件组合),默认根据日期倒序排序。

接口方向

客户端 -> 服务端

接口协议

接口地址:$xxx_Home/xxx/鉴权前缀/xxxxx/getAllOrderList

接口协议:JSON

HTTP请求方式:GET

消息请求

字段列表如下:

字段名

数据类型

默认值

必填项

备注

shopId

int

商铺编号

token

string

条件

设备令牌。Token鉴权方式必填

dateType

int

1

订单查询时间字段。

1:下单时间(order_time)

2:订单完成时间(order_finish_time)

3:结算时间(shop_settle_time)

startDate

date

查询日期

endDate

Date

查询结束日期。

orderStatus

String

订单状态。

不填表示所有状态

多个状态之间以英文逗号分割

0:已预定

1:已开单

2:派送中

3:已完成(原已结帐)

4:退单中

5:已退单

8:自助下单

9:待确认

orderTransactionType

Int

订单交易状态。

不填表示所有。

1:未完成,

2:已完成(3:已完成, 5:已退单)

payType

int

支付方式。

不填表示所有。

1:现金

2:POS

3:线上

cashierId

int

收银员

billerId

int

导购员

pNo

int

页码,从第1页开始,默认为1

pSize

int

每页记录数,默认为10

消息请求样例:

?shopId=1111111111&token=123411nmk515155&queryDate=2015-10-10

消息响应

字段元素如下:

字段名

数据类型

默认值

必填项

备注

orderTotalPriceTotal

double

实收金额合计(已完成的合计)

platformTotalIncomePriceTotal

double

平台服务费合计

cashPayTotal

double

现金支付(已完成的合计)

posPayTotal

double

POS支付(已完成的合计)

onLinePayTotal

double

线上支付(已完成的合计)

lst

object

明细列表

明细列表对象字段元素定义:

字段名

数据类型

默认值

必填项

备注

orderId

string

订单ID

orderTitle

string

订单标题

mobile

string

会员账号,如果是会员则显示手机号,为空时表示“非会员”

settlePrice

double

交易金额

orderTime

datetime

下单时间

serviceAmount

double

平台服务费

Status

Int

订单状态。

0:已预定

1:已开单

2:派送中

3:已完成(原已结帐)

4:退单中

5:已退单

8:自助下单

9:待确认

cashPay

double

现金支付

posPay

double

POS支付

onLinePay

double

线上支付

成功时,返回JSON数据包:

{

    "code": 0,

    "msg": "查询订单列表成功!",

    "data": {

        "pNo": 1,

        "rCount": 5,

        "orderTotalPriceTotal": 23.3,

        "platformTotalIncomePriceTotal": 0,

        "lst": [

            {

                "orderTitle": "kouxiangtang",

                "settlePrice": 15.89,

                "cashTotal": 15.89,

                "posTotal": 0,

                "onLineTotal": 0,

                "orderTime": "2015-09-29 13:44:26",

                "orderId": "12345679282015092913440268141",

                "mobile": "13424183952"

            },

            {

                "orderTitle": "红塔山",

                "settlePrice": 7.5,

                "cashTotal": 7.5,

                "posTotal": 0,

                "onLineTotal": 0,

                "orderTime": "2015-09-29 11:37:58",

                "orderId": "12345679282015092911370588273"

            }

        ]

    }

}

8.2 接口测试用例设计

用例

设计思路

传参

用例1

覆盖所有参数,正向用例

data={'shopId':123,'token':'bolixiyang','dataType':1,'startDate':'2016-06-06','endDate':'2016-06-07','orderStatus':'','orderTransactionType':'','payType':'','cashierId':'','billerId':'','pNo':'','pSize':''}

用例2

覆盖所有必填参数,正向用例

data={'shopId':123,'token':'bolixiyang','startDate':'2016-06-06'}

用例3

某一必填参数为空,逆向用例

data={'shopId':'','token':'bolixiyang','startDate':'2016-06-06'}

data={'shopId':123,'token':'','startDate':'2016-06-06'}

data={'shopId':123,'token':'bolixiyang','startDate':''}

用例4

多传一个参数、少传一个参数,逆向用例

data={'shopId':123,'token':'bolixiyang','startDate':'2016-06-06','canshuduo':'123'}

data={'shopId':123,'token':'bolixiyang'}

用例5

必填参数数据类型错误,数据值错误,逆向用例

data={'shopId':'123','token':'bolixiyang','startDate':'2016-06-06'}

data={'shopId':666,'token':'bolixiyang','startDate':'2016-06-06'}

用例6

任意组合可选参数,正向用例

data={'shopId':123,'token':'bolixiyang','dataType':1,'startDate':'2016-06-06','endDate':'2016-06-07','cashierId':'','billerId':'','pNo':'','pSize':''}

用例7

参数数值的范围、参数默认值的范围、字符串的长度,逆向用例

data={'shopId':123,'token':'bolixiyang','startDate':'2016-06-06','orderStatus':'0,1,2,10'}

用例8

与业务逻辑相关的,token为空或者错误,逆向用例

data={'shopId':123,'token':'','startDate':'2016-06-06'}

data={'shopId':123,'token':'errorToken','startDate':'2016-06-06'}

用例9

字段的唯一性校验,如插入数据userName字段不能重复,发送两次请求,查看第二次返回结果

data={'userName':'bolixiyang'}

data={'userName':'bolixiyang'}

8.3 个人对接口的认知

  其实接口测试和其他测试一样,都是写用例,每次传递的参数发生不同的改变而已,我们真正的目的不是用接口测试去测试和覆盖所有内容,而是接口测试在实际工作中,可以在没有ui的情况下就可以直接介入测试,以及会使用接口测试。一般情况下,接口里不会做任何拦截,你传错了,可能也不会校验,校验一般都是在前端会加拦截器等内容,主要是接口能正常调起来就可以了。

 

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

 行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239252.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APM链路监控: Linux 部署 pinpoint

目录 一、实验 1.环境 2. 准备 3.HBase单机部署 4.pinpoint部署 二、问题 1.pinpoint有哪些功能 2.pinpoint架构是如何组成的 3.Linux中自带的jdk 如何设置JAVA_HOME 4. hbase启动报错 5.hbase的master启动失败 6.JPS命令如何安装和使用 一、实验 1.环境 &#x…

IPKISS ------ 远程服务器 IPKISS 内置示例安装问题

IPKISS ------ 远程服务器示例安装问题 引言正文 引言 很多时候,如果我们在服务器上使用管理员权限安装了 IPKISS 证书,而我们使用个人账号登录服务器时有时候会显示如下界面: 我们会看到这个 PyCharm (Luceda Academy) 是灰色的。那么该怎…

eclipse ADT安装及abap cds模版创建

文章目录 1.前提2.安装3.创建cds模版 abap cds 常用语法 https://blog.csdn.net/weixin_49198221/article/details/135531478?spm1001.2014.3001.5501 1.前提 需要了解版本关系: **1.eclipse:**2023-06 (4.28), 2023-09 (4.29), 2023-12 (4.30) 2.Windows: ​ 1.Windows …

短视频怎么截取gif动画?一个方法教你快速截取gif

电影、电视剧已经是我们日常生活中最常见最普遍的消遣娱乐方式了,当我们看到好看的画面想要截图里面的画面做成gif动画是应该如何制作gif动态图片(https://www.gif.cn/)呢?很简单,通过使用专业的gif在线制作工具&#…

VUE生命周期和生命周期四个阶段

Vue生命周期:一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁 vue的生命周期如图所示: Vue 生命周期函数(钩子函数):Vue生命周期过程中,会自…

世微AP5160宽电压 LED 降压型恒流芯片14-18V 3A 电源PCB线路

这是一款14-18V 3A 电流的PCB设计方案. 运用的是世微AP5160 电源驱动IC,这是一款效率高,稳定可靠的 LED 灯恒流驱动控制芯片,内置高精度比较器,固定 关断时间控制电路,恒流驱动电路等,特别适合大功率 LED 恒流驱动。 …

Markdown 流程图绘制详解

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&#x1f…

Docker-数据卷网络

docker数据卷 docker volume ls #查看有哪些数据卷 docker volume inspect mysql-db #查看具体数据卷的元信息 docker container run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORDTrue -v mysql-db:/var/lib/mysql mysql #会在docker 的卷下面新建一个mysqldb用于数据持久…

力扣hot100 杨辉三角 递归 DP

Problem: 118. 杨辉三角 文章目录 思路复杂度💖 DP💖 从下往上递归 思路 👨‍🏫 参考地址 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) …

Linux/Frolic

Enumeration nmap 还是扫描系统对外开放的端口情况,对外开放了22,139,445,还有9999端口,显示是http服务,使用了nginx 1.10.3 ┌──(kali㉿kali)-[~/HTB/Frolic] └─$ nmap -sC -sV -oA nmap -Pn 10.10.10.111 Starting Nmap 7.93 ( http…

Linux第25步_在虚拟机中备份“ST官方的TF-A源码”

TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"S…

【经典算法】有趣的算法之---遗传算法梳理

every blog every motto: You can do more than you think. 0. 前言 遗传算法是一种基于自然选择和遗传机制的优化算法,因此它通常被用于求解各种最优化问题,例如函数优化、特征选择、图像处理等。 一言以蔽之: 将数学中的优化问题&#xf…

ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇

文章目录 ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇0. ZooKeeper客户端 1. Curator1.1. 简介1.2. 应用场景1.3. 优势1.4. 依赖说明 2. 依赖导入3. 配置类3.1. 重试策略3.2. 实现代码3.3. 总结 4. Curator中的基本API4.1. 创建节点CreateMode中的节点类型4.2. 查询节…

【MATLAB源码-第114期】基于matlab的孔雀优化算法(POA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 POA(孔雀优化算法)是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中,每个孔雀代表一个潜在的解决方案,而…

通过IDE和jar包运行时加载json配置文件

程序中使用了json配置文件,位置在$rootPath/src/main/resources/config.json, 调试时使用IDE,但运行时使用Jar包,加载config.json配置文件的代码如下: public ConfigParser(String configFileName) throws IOException {try{Inp…

用el-image-viewer实现全局预览图片

背景 在后台管理系统中,一些预览图片的场景,通常都是使用 el-image-viewer 去实现,但是如果多个地方都需要预览图片,又要重复的去写 el-image-viewer 以及一些重复的和预览相关的代码。 可以把预览图片的组件放在根文件&#x…

Python - Bert-VITS2 语音推理服务部署

目录 一.引言 二.服务搭建 1.服务配置 2.服务代码 3.服务踩坑 三.服务使用 1.服务启动 2.服务调用 3.服务结果 四.总结 一.引言 上一篇文章我们介绍了如果使用 conda 搭建 Bert-VITS2 最新版本的环境并训练自定义语音,通过 1000 个 epoch 的训练&#xf…

streamlit设置sidebbar和页面背景

streamlit1.29.0 1. 设置sidebar背景 代码&#xff1a; import base64 import streamlit as stdef sidebar_bg(side_bg):side_bg_ext pngst.markdown(f"""<style>[data-testid"stSidebar"] > div:first-child {{background: url(data:im…

Express框架使用全流程

1.目的和使用场景 对于像我这样不常使用 Node.js 进行开发的人来说&#xff0c;每次开始一个新项目都意味着从头开始设置环境&#xff0c;这个过程相当繁琐。因此&#xff0c;我决定自己构建一个开箱即用的项目脚手架。我的目标是创建一个简单易用的基础框架&#xff0c;能让我…

【REST2SQL】07 GO 操作 Mysql 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统&#xf…