【软件测试】--接口测试
1. 接口用例设计
接口测试的测试点

功能测试
-
单接口功能:
- 手工测试中的单个业务模块,一般对应一个接口
- 登陆业务 --> 登陆接口
- 加入购物车业务 --> 加入购物车接口
- 订单业务 --> 订单接口
- 支付业务 --> 支付接口
- 借助工具、代码。绕开前端界面,组织接口所需要的数据,展开接口测试
- 手工测试中的单个业务模块,一般对应一个接口
-
业务场景功能
- 按照用户实际使用场景,梳理接口业务场景
- 组织业务场景时,一般只需做正向测试即可(与手工一致)
- 一般建议用最少的用例覆盖最多的业务场景
性能测试
- 响应时长
- 吞吐量
- 并发数
- 服务器资源利用率
安全测试
- 攻击安全 – 与测试工程师无关
- 业务安全 – 测试的方向
- 敏感数据是否加密
- SQL注入:在用户输入数据的位置,写入SQL语句
1.1 设计方法与思路
与手工测试相同之处
- 手工测试对应的功能测试点与接口测试对应的功能完全一致
与手工测试不同之处
- 手工测试,测写入到输入框中的数据是否正确。接口测试测参数对应的参数值是否正确
- 接口测试,不单单针对参数值进行进行,还可以针对参数本身进行测试
- 正向参数:
- 必选参数:所有的必选(必填)都包含
- 组合参数;所有的必选+任意一个或多个可选参数
- 全部参数:所有的必选+所有的可选参数
- 反向参数:
- 多参
- 少参
- 无参
- 错误参数
- 正向参数:
1.2 单接口测试用例
手工测试用例文档8大要素:
用例编号、用例标题、模块、优先级、预置条件、测试数据、操作步骤、预期结果
接口测试用例文档10要素:
用例编号、用例标题、模块、优先级、预置条件、请求方法、URL、请求头、请求体(请求数据)、预期结果
以TPShop为例
登陆模块的接口测试用例测试点
数值
- 正向
- 登录成功
用例编号 | 模块 | 用例名称 | 接口名称 | 请求URL | 请求方法 | 请求参数类型 | 请求参数 | 预期结果 | 测试结果 | 备注 |
---|---|---|---|---|---|---|---|---|---|---|
tpshop_login_001 | 登陆 | 登陆成功 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 登陆成功 |
- 反向
- 用户名为空
- 用户名包含特殊字符、字母
- 用户名超过11位(12位)
- 用户名不足11位(10位)
- 用户名未注册
- 密码为空
- 密码包含特殊字符、字母
- 密码为1位
- 密码为100位
- 密码错误
用例编号 | 模块 | 用例名称 | 接口名称 | 请求URL | 请求方法 | 请求参数类型 | 请求参数 | 预期结果 | 测试结果 | 备注 |
---|---|---|---|---|---|---|---|---|---|---|
tpshop_login_002 | 登陆 | 账号不存在 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 账号不存在 | ||
tpshop_login_003 | 登陆 | 密码错误 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 密码错误 |
参数(接口测试特有)
-
正向
- 必选参数:正确用户名+正确密码
- 可选参数:忽略
- 全部参数:正确用户名+正确密码
-
反向
- 多参:多"abc":“123”
- 少参:少username,正确密码
- 无参:没有任何参数
- 错误参数
用例编号 模块 用例名称 接口名称 请求URL 请求方法 请求参数类型 请求参数 预期结果 测试结果 备注 tpshop_login_001 登陆 登陆成功 获取验证码 登陆 http://106.54.9.13/index.php?m=Home&c=User&a=verify
http://106.54.9.13/index.php?m=Home&c=User&a=do_loginGET POST form data = {
“username”:
" 18184761327", “password”: “123456”, “verify_code”: 8888 }获取到验证码图片 登陆成功 tpshop_login_002 登陆 用户名为空 获取验证码 登陆 http://106.54.9.13/index.php?m=Home&c=User&a=verify
http://106.54.9.13/index.php?m=Home&c=User&a=do_loginGET POST form data = { “username”: " ", “password”: “123456”, “verify_code”: 8888 } 获取到验证码图片 账号不存在 tpshop_login_003 登陆 多参数 获取验证码 登陆 http://106.54.9.13/index.php?m=Home&c=User&a=verify
http://106.54.9.13/index.php?m=Home&c=User&a=do_loginGET POST form data = {
“username”:
" 18184761327", “password”: “123456”, “verify_code”: 8888, “abc”:“123”}获取到验证码图片 密码错误 tpshop_login_003 登陆 密码错误 获取验证码 登陆 http://106.54.9.13/index.php?m=Home&c=User&a=verify
http://106.54.9.13/index.php?m=Home&c=User&a=do_loginGET POST form data = {
“username”:
" 18184761327", “password”: “123456”, “verify_code”: 8888 }获取到验证码图片 密码错误 tpshop_login_001 登陆 无参数 获取验证码 登陆 http://106.54.9.13/index.php?m=Home&c=User&a=verify
http://106.54.9.13/index.php?m=Home&c=User&a=do_loginGET POST form data = {
“username”:
" 18184761327", “password”: “123456”, “verify_code”: 8888 }获取到验证码图片 登陆成功
1.3 业务场景测试用例
- 用户怎么用,怎样设计业务
- 用最少的测试用例,尽量覆盖最多的接口
分析测试点
针对“员工管理”业务场景
- 登陆–添加员工–查询员工–修改员工–再次查询–删除员工–查询员工列表
针对每个业务设计单接口用例
登陆
添加员工-
查询员工
修改员工
再次查询
删除员工
查询员工列表
2. postman
2.1 简介和安装
- 简介
- postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用
- 特征
- 简单易用的图形用户界面
- 可以保存接口请求的历史记录
- 使用测试集collection可以更有效的管理组织接口
- 可以在团队之间同步接口数据
2.2 collection管理测试用例
步骤:
- 创建用例集
- add request
2.3 postman断言
2.3.1 postman断言简介
断言:让程序判断预期结果和实际结果是否一致
特点:
- postman的断言是使用JavaScript语言编写的,卸载’Tests’标签页里
- Tests中的脚本在发送请求之后执行,会把断言的结果(Pass/Fail)最终在"Test Results"标签页中展示
2.3.2 常用postman断言
- Status code :Code is 200
//判断响应状态码是否等于200
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});
pm:postman的一个实例
test():postman实例的一个方法参数1:断言完成后给出的提示信息参数2:function(){},匿名函数调用
- Response body :Contains string
//判断响应体中是否包含指定的字符串
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
pm:postman的一个实例
test():postman实例的一个方法参数1:"Body matches string"断言完成后给出的提示信息参数2:function(){},匿名函数调用"string_you_want_to_search" :判断是否包含的字符串
- Response body : Is equal to a string
//判断响应体数据是否等于指定的字符串
pm.test("Body is correct",function(){pm.response.to.have.body("response_body_string");
});
pm:postman的一个实例
test():postman实例的一个方法参数1:"Body is correct"断言完成后给出的提示信息参数2:function(){},匿名函数调用"response_body_string" :判断响应体是否相同的字符串
- Response body :JSON value check
//校验响应的JSON数据
pm.test("Your test name",function(){var jsonData = pm.response.json();pm.expect(jsonData.value).to.eql(100);
});
pm:postman的一个实例
jsonData:定义的一个json格式的响应体变量
test():postman实例的一个方法参数1:"Body is correct"断言完成后给出的提示信息参数2:function(){},匿名函数调用"response_body_string" :判断响应体是否相同的字符串
- Response headers:Content-Type header check
//判断相应头中是否包含指定的头标签
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});
2.4 全局变量与环境变量
2.4.1 概念
- 全局变量:全局变量是全局唯一的,不可重复定义的变量
- 环境变量:
- 一个变量只能属于某个环境,在某一个环境中变量不可重复定义
- 在环境与环境之间可以定义重复的变量
- 一个环境可以包含多个环境变量
- 常见环境分类:开发环境、测试环境、生产环境
2.4.2 设置变量
- 全局变量
- 手动测试
- 代码设置:pm.globals.set(“var_name”,value);
- 环境变量
- 手动测试
- 代码设置:pm.environment.set(“var_name”,value);
2.4.3 获取变量值
-
全局变量
- 请求参数中获取:{{var_name}}
- 代码中获取:var value = pm.globals.get(“var_name”);
-
环境变量
-
请求参数中获取:{{var_name}}
-
代码中获取:var value = pm.environment.get(“var_name”);
-
2.5 postman请求前置脚本
假设,这样一种场景:
调某接口时,要输入“时间戳”,如果输入的“时间戳”的绝对值,超过标准时间10分钟。则不允许调用
-
时间戳:表示当前系统时间。表示方式:从1970年1月1日 00:00:00~现在所经历的秒数
-
请求前置脚本:
- 书写在“pre-request Script”标签中
- Postman 在http请求发送之前,会自动执行,该脚本中的代码!
案例
调用百度首页接口,传时间戳给服务器
步骤:
- 创建“请求前置脚本”用例集和http请求页
- 指定请求方法GET,URL:http://www.baidu.com
- 在Pre-request Script标签页中,写入代码,获取时间戳,写入到全局变量中
//获取时间戳 var timestamp = new Date().getTime()//将时间戳保存到全局变量中 pm.globals.set("glb_timestamp",timestamp)
- 点击Send按钮,促使Pre-request Script 标签页中被自动执行。点击右上角的“眼睛”图标查看Globals中,多出一个全局变量。
- 在URL中,借助查询参数,使用全局变量{{glb_timestamp}}。点击Send按钮,发送带有时间戳的请求。
- 查看(View-Show Post Console )
2.6 postman关联
postman的关联,用来解决接口和接口之间调用的依赖关系。需要借助全局变量、环境变量来解决关联问题。
实现步骤:(以A接口返回的数据,供B接口使用为例)
- 组织A接口http请求,发送A接口请求
- 获取A接口返回的响应数据,写入全局/环境变量中
- 组织B接口的请求,从全局/环境变量中获取A返回的数据
案例
请求获取天气接口,提取响应结果中的城市,将城市名,给百度搜索接口使用
实现步骤
- 创建用例集和请求页面
- 组织天气接口的请求方法、URL,发送http请求
- 获取响应结果的json数据,从数据中提取城市名,保存到全局变量中glb_city
//获取响应数据
var jsonData = pm.response.json();
//获取城市名
var city = jsonData.weatherinfo.city
//写入全局变量
pm.globals.set("glb_city",city)
-
点击小眼睛查看全局变量是否设置正确
-
组织百度搜索接口的请求方法、URL,在查询参数中,指定使用全局变量{{glb_city}}
2.7 批量执行测试用例
步骤
- 点击用例集名称,选择“Run”按钮,进入Runner标签页中
- 在Runner标签页中,用例集内的所有请求页会被默认自动选中
- 点击Run,即可批量执行
运行结果:
2.8 postman测试报告
使用newman命令,运行导出的测试集脚本,打开cmd输入:
newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export report.htmleg:
newman run demo.postman_collection.json -r html
newman run demo.postman_collection.json -r html --reporter-html-export report.html
命令说明:
- run xxx.json :表示要执行的postman脚本,即导出的测试集数据
- -e source :用来指定环境变量文件的路径
- -d source :用来指定测试文件的路径
生成报告步骤:
- 导出用例集
- 在用例集所在目录,输入cmd打开终端
- 键入命令,生成报告
F:\Four_year\测试\postman> newman run postman关联.postman_collection.json -r html --reporter-html-export postman关联报告.html
点击查看
相关文章:

【软件测试】--接口测试
1. 接口用例设计 接口测试的测试点 功能测试 单接口功能: 手工测试中的单个业务模块,一般对应一个接口 登陆业务 --> 登陆接口加入购物车业务 --> 加入购物车接口订单业务 --> 订单接口支付业务 --> 支付接口 借助工具、代码。绕开前端界面…...
【前端】上传视频,截取第一帧图片
使用input上传视频,获得视频的第一帧 参考:JavaScript获取视频的尺寸信息和第一帧图片 - 掘金 (juejin.cn) html: <inputbind:this{uploadRef}on:change{handleUpload}accept"video/*"type"file"/>视频类型校验&a…...
Redis-GEO数据结构的基本用法
GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD:添加一个地理空间信息,包含:经度…...

【Linux C | 网络编程】进程池大文件传输的实现详解(三)
上一篇实现了进程池的小文件传输,使用自定义的协议,数据长度数据本身,类似小火车的形式,可以很好的解决TCP“粘包”的问题。 【Linux C | 网络编程】进程池小文件传输的实现详解(二) 当文件的内容大小少于…...
Mac如何通过SSH连接Github
目录 前言 一、实现步骤 1.生成 SSH 密钥对 2.添加 SSH 密钥到 GitHub: 3.配置 SSH 连接 1.更新远程仓库 URL 2.测试 SSH 连接 前言 GitHub 在 2021 年 8 月 13 日停止了对使用密码进行身份验证的支持。因此,你需要使用其他认证方式,如…...

成就巴西休闲游戏如何借助Google谷歌广告投放优势
在探讨巴西休闲游戏如何借助谷歌广告投放优势实现市场扩张的过程中,我们不得不深入分析巴西市场的独特属性、休闲游戏的兴起背景,以及谷歌广告平台在全球范围内的强大影响力。近年来,随着移动游戏市场的快速发展,特别是中轻度休闲…...
利用python检查磁盘空间使用情况
目录 一.前言 二.使用的库介绍 三.代码实现以及解析 3.1导入模块 3.2邮件发送函数 send_email 3.3检查磁盘空间函数 check_and_clean_disk 3.4主程序逻辑 四.致谢 一.前言 在信息技术飞速发展的今天,数据量的激增使得磁盘空间管理成为系统运维中的一项基…...

卷积神经网络(五)---图像增强的方法
前面的部分专注于卷积神经网络的层结构介绍,同时还介绍了到目前为止比较出名的卷积神经网络,接着使用比较复杂的卷积神经网络提高了 MNIST 数据集的准确率。下面将从另外的角度——图像增强的方面入手,提高模型的准确率和泛化能力。 一直以来…...

矩阵常见分解算法及其在SLAM中的应用
文章目录 常见特殊矩阵定义Cholesky分解(正定Hermittian矩阵,分解结果唯一)Cholesky分解应用 SVD分解(将singularvalues排序后分解唯一)SVD 分解的应用(任意矩阵) QR分解(任意矩阵&a…...
【排序】快速排序详解
✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:排序 个人主页:Celias blog~ 一、快速排序的思想 快速排序的核心思想是: 选定一个…...

贪心算法总结(2)
一、买卖股票的最佳时机 . - 力扣(LeetCode) class Solution { public:int maxProfit(vector<int>& prices) {int miniINT_MAX;int ret0;for(int&price:prices){//遍历的时候,我们随时去更新最小的值,然后让每一位…...

弘景光电:技术实力与创新驱动并进
在光学镜头及摄像模组产品领域,广东弘景光电科技股份有限公司(以下简称“弘景光电”)无疑是一颗耀眼的明星。自成立以来,弘景光电凭借其强大的研发实力、卓越的产品性能、精密的制造工艺以及严格的质量管理体系,在光学…...

2024年7月23日~2024年7月29日周报
目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议,并完成了初稿。 本周继续修改论文࿰…...
M3U8流视频数据爬虫
M3U8流视频数据爬虫 HLS技术介绍 现在大部分视频客户端都采用HTTP Live Streaming(HLS,Apple为了提高流播效率开发的技术),而不是直接播放MP4等视频文件。HLS技术的特点是将流媒体切分为若干【TS片段】(比如几秒一段…...

保护您的数字财富:模块化沙箱在源代码防泄露中的突破
在数字化浪潮中,企业面临着前所未有的数据安全挑战。源代码、商业机密、客户数据……这些宝贵的数字资产一旦泄露,后果不堪设想。SDC沙盒防泄密系统,以其卓越的技术实力和创新的解决方案,为企业提供了一个坚不可摧的安全屏障。 核…...
FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析
一、引言 AVIOContext是FFmpeg(本文演示用的FFmpeg源码版本为5.0.3)中的字节流上下文结构体,用来管理输入输出数据。打开一个媒体文件的时候,需要先把数据从硬盘读到缓冲区,然后会用到AVIOContext中的如下成员&#x…...
如何使用 API 查看极狐GitLab 镜像仓库中的镜像?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...

软件-vscode-plantUML-IDEA
文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLIDEA下载及安装Eval Reset插件配置修改IDEA创建项目的默认目录IDEA配置gitIDEA翻译插件translationIDEA断点调试IDEA全局搜索快捷键不能使用代…...

ES6语法详解,面试必会,通俗易懂版
目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例:使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前,我们存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构&a…...

CTFshow--Web--代码审计
目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 开始一个登录框, 下意识sql尝试一下 发现 1 的时候会到一个 checklogin.php 的路径下, 但啥也没有 好吧, 这是要审计代码的 ,下载好源码, 开始审计 看了一下源码 , 应该就是sql…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...