【软件测试】--接口测试

1. 接口用例设计

接口测试的测试点

image-20240712164234498

功能测试

  • 单接口功能:

    • 手工测试中的单个业务模块,一般对应一个接口
      • 登陆业务 --> 登陆接口
      • 加入购物车业务 --> 加入购物车接口
      • 订单业务 --> 订单接口
      • 支付业务 --> 支付接口
    • 借助工具、代码。绕开前端界面,组织接口所需要的数据,展开接口测试
  • 业务场景功能

    • 按照用户实际使用场景,梳理接口业务场景
    • 组织业务场景时,一般只需做正向测试即可(与手工一致)
    • 一般建议用最少的用例覆盖最多的业务场景

性能测试

  • 响应时长
  • 吞吐量
  • 并发数
  • 服务器资源利用率

安全测试

  • 攻击安全 – 与测试工程师无关
  • 业务安全 – 测试的方向
    • 敏感数据是否加密
    • 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_loginGET POSTformdata = { “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 POSTformdata = { “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 POSTformdata = { “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_login
    GET POSTformdata = {
    “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_login
    GET POSTformdata = { “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_login
    GET POSTformdata = {
    “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_login
    GET POSTformdata = {
    “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_login
    GET POSTformdata = {
    “username”:
    " 18184761327", “password”: “123456”, “verify_code”: 8888 }
    获取到验证码图片 登陆成功

1.3 业务场景测试用例

  • 用户怎么用,怎样设计业务
  • 用最少的测试用例,尽量覆盖最多的接口

分析测试点

针对“员工管理”业务场景

  • 登陆–添加员工–查询员工–修改员工–再次查询–删除员工–查询员工列表

针对每个业务设计单接口用例

​ 登陆

​ 添加员工-

​ 查询员工

​ 修改员工

​ 再次查询

​ 删除员工

​ 查询员工列表

2. postman

2.1 简介和安装

  • 简介
    • postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用
    • 特征
      1. 简单易用的图形用户界面
      2. 可以保存接口请求的历史记录
      3. 使用测试集collection可以更有效的管理组织接口
      4. 可以在团队之间同步接口数据

2.2 collection管理测试用例

步骤:

  1. 创建用例集

image-20240713095556958

  1. add request

image-20240713095730144

image-20240713100035428

2.3 postman断言

2.3.1 postman断言简介

断言:让程序判断预期结果和实际结果是否一致

特点:

  • postman的断言是使用JavaScript语言编写的,卸载’Tests’标签页里
  • Tests中的脚本在发送请求之后执行,会把断言的结果(Pass/Fail)最终在"Test Results"标签页中展示

2.3.2 常用postman断言

  1. Status code :Code is 200
//判断响应状态码是否等于200
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});
pm:postman的一个实例
test():postman实例的一个方法参数1:断言完成后给出的提示信息参数2function(){},匿名函数调用
  1. 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"断言完成后给出的提示信息参数2function(){},匿名函数调用"string_you_want_to_search" :判断是否包含的字符串
  1. 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"断言完成后给出的提示信息参数2function(){},匿名函数调用"response_body_string" :判断响应体是否相同的字符串
  1. 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"断言完成后给出的提示信息参数2function(){},匿名函数调用"response_body_string" :判断响应体是否相同的字符串
  1. Response headers:Content-Type header check
//判断相应头中是否包含指定的头标签
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});

image-20240713112428374

image-20240713113247593

2.4 全局变量与环境变量

2.4.1 概念

  • 全局变量:全局变量是全局唯一的,不可重复定义的变量
  • 环境变量:
    • 一个变量只能属于某个环境,在某一个环境中变量不可重复定义
    • 在环境与环境之间可以定义重复的变量
    • 一个环境可以包含多个环境变量
    • 常见环境分类:开发环境、测试环境、生产环境

2.4.2 设置变量

  • 全局变量
    • 手动测试
    • 代码设置:pm.globals.set(“var_name”,value);
  • 环境变量
    • 手动测试
    • 代码设置:pm.environment.set(“var_name”,value);

2.4.3 获取变量值

  • 全局变量

    1. 请求参数中获取:{{var_name}}
    2. 代码中获取:var value = pm.globals.get(“var_name”);
  • 环境变量

    1. 请求参数中获取:{{var_name}}

    2. 代码中获取:var value = pm.environment.get(“var_name”);

2.5 postman请求前置脚本

假设,这样一种场景:

​ 调某接口时,要输入“时间戳”,如果输入的“时间戳”的绝对值,超过标准时间10分钟。则不允许调用

  • 时间戳:表示当前系统时间。表示方式:从1970年1月1日 00:00:00~现在所经历的秒数

  • 请求前置脚本:

    • 书写在“pre-request Script”标签中
    • Postman 在http请求发送之前,会自动执行,该脚本中的代码!

    案例

    调用百度首页接口,传时间戳给服务器

    步骤:

    1. 创建“请求前置脚本”用例集和http请求页
    2. 指定请求方法GET,URL:http://www.baidu.com
    3. 在Pre-request Script标签页中,写入代码,获取时间戳,写入到全局变量中
    //获取时间戳
    var timestamp = new Date().getTime()//将时间戳保存到全局变量中
    pm.globals.set("glb_timestamp",timestamp)
    
    1. 点击Send按钮,促使Pre-request Script 标签页中被自动执行。点击右上角的“眼睛”图标查看Globals中,多出一个全局变量。

    image-20240713161607183

    1. 在URL中,借助查询参数,使用全局变量{{glb_timestamp}}。点击Send按钮,发送带有时间戳的请求。

    image-20240713161701312

    1. 查看(View-Show Post Console )

    image-20240713161512843

2.6 postman关联

postman的关联,用来解决接口和接口之间调用的依赖关系。需要借助全局变量、环境变量来解决关联问题。

实现步骤:(以A接口返回的数据,供B接口使用为例)

  1. 组织A接口http请求,发送A接口请求
  2. 获取A接口返回的响应数据,写入全局/环境变量中
  3. 组织B接口的请求,从全局/环境变量中获取A返回的数据

案例

请求获取天气接口,提取响应结果中的城市,将城市名,给百度搜索接口使用

实现步骤

  1. 创建用例集和请求页面
  2. 组织天气接口的请求方法、URL,发送http请求
  3. 获取响应结果的json数据,从数据中提取城市名,保存到全局变量中glb_city
//获取响应数据
var jsonData = pm.response.json();
//获取城市名
var city = jsonData.weatherinfo.city
//写入全局变量
pm.globals.set("glb_city",city)

image-20240713170745537

  1. 点击小眼睛查看全局变量是否设置正确

  2. 组织百度搜索接口的请求方法、URL,在查询参数中,指定使用全局变量{{glb_city}}

2.7 批量执行测试用例

步骤

  1. 点击用例集名称,选择“Run”按钮,进入Runner标签页中
  2. 在Runner标签页中,用例集内的所有请求页会被默认自动选中
  3. 点击Run,即可批量执行

image-20240713171442162

运行结果:

image-20240713173005191

image-20240713173412455

image-20240713173911480

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 :用来指定测试文件的路径

生成报告步骤:

  1. 导出用例集
  2. 在用例集所在目录,输入cmd打开终端
  3. 键入命令,生成报告
F:\Four_year\测试\postman> newman run postman关联.postman_collection.json -r html --reporter-html-export postman关联报告.html

image-20240713185358172

点击查看

image-20240713185516023

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

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

相关文章

AI大模型技术的四大核心架构分析

AI大模型技术的四大核心架构演进之路 随着人工智能技术的飞速发展,大模型技术已经成为AI领域的重要分支。 深度剖析四大大模型技术架构:纯粹的Prompt提示词法、Agent Function Calling机制,RAG(检索增强生成)及Fine-…

NSSCTF-Web题目27(Nginx漏洞、php伪协议、php解析绕过)

目录 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 3、思路 [NSSRound#8 Basic]MyDoor 4、题目 5、知识点 6、思路 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 nginx日志漏洞执行系统命令 3、思路 打开题目,出现源码 题目要我们上传一个fi…

web浏览器播放rtsp视频流,海康监控API

概述 这里记录一下如何让前端播放rtsp协议的视频流 ​ 项目中调用海康API,生成的视频流(hls、ws、rtmp等)通过PotPlayer播放器都无法播放,说明视频流有问题,唯独rtsp视频流可以播放。 但是浏览器本身是无法播放rtsp视频的,即使…

C++——异常

前言:本篇文章我们来分享C的一个全新内容——异常。 目录 一.异常概念 二.异常的使用 1.异常的抛出和匹配原则 2.在函数调用链中异常栈展开匹配原则 3.异常的重新抛出 三.异常的优缺点 1.优点 2.缺点 结语 一.异常概念 异常是一种处理错误的方式&#xff…

完成QT上位机(八)

一. 正式开始设计界面 这一章节我们将完成QT上位机的设计,如果有同学对QtCreater的使用不太熟悉的,可以参考下面的链接 Qt 快速入门系列教程 Qt 快速入门系列教程 (gitbooks.io)https://wizardforcel.gitbooks.io/qt-beginning/content/ 二. 数据库处…

自动气象站:高度自动化、智能化和精准化

自动气象站,作为科技进步的产物,以其高度的自动化、智能化和精准化特点,极大地提升了气象观测的效率和准确性。它集成了多种高精度传感器,能够全天候、不间断地监测温度、湿度、气压、风速、风向、降水量等关键气象要素&#xff0…

小试牛刀-Telebot区块链游戏机器人(TS升级)

目录 1.编写目的 2.为什么使用TypeScript实现? 3.实现功能 3.1 AI图片生成 3.2 签到 3.3 邀请 3.4 WalletConnect连接 4.功能实现详解 4.1 AI图片生成 4.2 签到 4.3 邀请 4.4 WalletConnect连接 5.功能截图 ​6.问题整理 Welcome to Code Blocks blog 本篇文章主…

【图解秒杀系列】秒杀场景介绍及其相关技术点

【图解秒杀系列】秒杀场景介绍及其相关技术点 秒杀场景介绍秒杀页面的交互秒杀的整套流程 秒杀系统面临的挑战秒杀涉及的技术点 秒杀场景介绍 电商系统的秒杀是一种营销活动,在特定的时间点,以极低的价格,有限的商品数量,吸引大量…

【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题

目录 📕 单例模式 🌳 饿汉模式 🚩 线程安全 🎍 懒汉模式 🚩 懒汉模式-单线程版 🚩 懒汉模式-多线程版 🎄 指令重排序 📕 单例模式 单例模式是一种经典的设计模式,…

node.js使用NodeMachineID 生成唯一UUID和注意事项

node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法: machineIdSync 此函数同步获取操作系统本机UUID/GUID,默认情况下进行哈…

视频教程 - 自研Vue3 Tree组件高级功能:虚拟滚动新增节点实现自动滚动

感谢小伙伴们对本套自研vue3 tree组件教程的关注,在前一篇媲美Element Plus JuanTree终极实战:虚拟滚动的功能演示中发现了小bug,特地整理了相关录屏来说明怎么一步步解决bug的,来回馈小伙伴们的支持。 Tree组件高级功能&#xff…

redis面试(四)持久化

什么是持久化? 由于redis是基于内存操作的轻量型数据库,所以如果发生宕机重启这种事情,存储的数据就会直接丢失,如果在里面存储了没有备份的数据,那么确实会对我们的业务造成一定影响。 所以我们要通过持久化的手段&a…

C# OpenCvSharp 打开4K高清摄像头

一、前言 整了个1200w像素的usb摄像头,使用 OpenCvSharp读取,读取和设置分辨率代码耗时居然10几秒,查询资料发现,必须对VideoCapture进行设置,使用DSHOW模式打开,并且设置分辨率代码下必须增加 指定MJPG编码…

pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

重新设置一下环境变量。 注意,这里后面没有斜杠 我之前就是因为环境变量中,这两行最后都有斜杠,导致提示pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

红旗E-QM5起火,一汽红旗否认车辆质量问题

近日,据媒体报道,7月31日下午,长春一辆一汽红旗E-QM5发生起火事故。 一汽红旗方面则表示:“现场勘查和初步调查表明,该事件并非因车辆自身质量问题导致自燃。疑似车辆在行驶过程中与路面井盖发生碰撞导致动力电池受损&…

计算机网络-基于PIM-DM+IGMP的组播实验配置

前面我们将IGMP协议和PIM-DM协议理论知识都学完了,现在开始进入实践,毕竟只有完成实践是最好的检验方式。IGMP是用于感知组播组成员,而PIM-DM是用于在域内构建组播分发树的的协议,本次实验使用这两项技术进行分析与实践。 一、拓扑…

upload-labs漏洞靶场~文件上传漏洞

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查…

电脑新加的硬盘如何分区?新加硬盘分区选MBR还是GPT

最近有网友问我,电脑新加的硬盘如何分区?电脑新加的硬盘分区选MBR还是GPT要看引导模式采用uefi还是传统的legacy模式,如果采用的是uefi引导模式,分区类型对应的就是gpt分区(guid),如果引导模式采用的是legacy,对应的分区类型为mb…

Spring Boot集成sse实现chatgpt流式交互

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 什么是sse? SSE可以指代两种不同的概念:一是指“服务器发送事件”(Server-Sent Events),另一种是指英特尔的“因特网数据流单指令序列扩展”(Streaming SIMD Extensions)。…

循环结构(三)——do-while语句

目录 🍁引言 🍁一、语句格式 🚀格式1 🚀格式2 🍁二、语句执行过程 🍁三、实例 🚀【例1】 🚀【例2】 🚀【例3】 🍁总结 🍁备注 &am…