接口测试—知识速查(Postman)

文章目录

  • 接口测试
    • 1. 概念
    • 2. 原理
    • 3. 测试流程
    • 4. HTTP协议
      • 4.1 URL的介绍
      • 4.2 HTTP请求
        • 4.2.1 请求行
        • 4.2.2 请求头
        • 4.2.3 请求体
        • 4.2.4 完整的HTTP请求示例
      • 4.3 HTTP响应
        • 4.3.1 状态行
        • 4.3.2 响应头
        • 4.3.3 响应体
        • 4.3.4 完整的HTTP请求示例
    • 5. RESTful接口规范
    • 6. 测试用例的设计思路
      • 6.1 单接口测试
      • 6.2 多接口测试
    • 7 自动化框架的设计思路
    • 7.测试工具(Postman)
      • 7.1 Postman 断言
        • 7.1.1 响应状态码断言
        • 7.1.2 包含指定字符串断言
        • 7.1.3 JSON数据断言
        • 7.1.4 请求头断言
      • 7.2 Postman 环境变量
        • 7.2.1 全局变量/公有变量
        • 7.2.2 局部变量/私有变量
      • 7.2 Postman 关联
      • 7.3 Postman 请求前置脚本
      • 7.3 Postman 参数化
      • 7.4 Postman 报告(Newman)
        • 7.4.1 安装步骤
        • 7.4.2 运行步骤
      • 7.5 Tips小提示
        • 7.5.1 使中文可以正常显示提供的方法
    • 面试题
      • Cookie,Session,Token的区别


接口测试

1. 概念

接口可以分为软件接口和硬件接口 。

硬件接口:是指同一计算机不同功能层之间的通信规则称为接口。可以理解为负责连接外部设备的入 口,传输数据的端口,比如usb接口。

软件接口:就是指程序中具体负责在不同模块之间传输或接受数据并做处理的类或者函数。(数据交互的通道)

2. 原理

模拟客户端向服务器发送请求,服务器接收请求后进行相应的业务处理,并向客户端返回响应数据,检查响应数据是否符合预期。

  • 请求:是否正确,默认请求成功是200(GET),如果请求错误也能返回404、500等。
  • 检查:返回数据的正确性与完整性
  • 安全性:接口一般不会暴露在网上任意被调用,需要做一些限制,比如次数限制

3. 测试流程

1、需求分析:主要依据需求文档

2、接口文档解析:一般是由开发人员编写接口文档(API文档)

3、设计测试用例

4、执行测试:使用接口测试工具实现通过编写代码实现

5、接口缺陷管理与跟踪

6、生成测试报告

7、接口自动化持续集成

4. HTTP协议

  • HTTP:(HyperText Transfer Protocol)超文本传输协议,是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。

4.1 URL的介绍

  • Uniform Resource Locator 统一资源定位符,是互联网上标准资源的地址。HTTP使用URL来建立连接和传输数据。

https://www.baidu.com/s?wd=软件&测试

1、协议部分:“https”,常见的协议有HTTP,HTTPS、FTP等

2、域名部分:“www.baidu.com”,也可以使用IP地址作为域名使用

3、端口部分:“8080”,端口可以省略,默认端口(HTTP:80,HTTPS:443,FTP:21)

4、资源路径部分:“/s”

5、查询参数部分:“?wd=软件&测试”,可以允许有多个参数,多个之间用“&”作为分隔符

4.2 HTTP请求

  • http请求由三部分组成,分别是:请求行请求头请求体

4.2.1 请求行

  • 请求行包含请求方法请求目标HTTP协议版本

  • 常用请求方法:

    GET:从服务器获取资源(一项或多项)。

    POST:在服务器新建一个资源。

    PUT:在服务器更新资源(客户端提供改变后的完整资源) 。

    DELETE:从服务器删除资源。

  • 示例:

    GET /index.html HTTP/1.1

4.2.2 请求头

  • 请求头包含了关于请求的附加信息,如请求的主机内容类型认证信息等。

  • 常见的请求头:Host、Content-Type、Authorization等。

  • Content-Type:请求体数据类型

    text/html:HTML格式

    image/jpeg:jpg图片格式

    application/json:JSON数据格式

    application/x-www-form-urlencoded: 表单默认的提交数据格式

    multipart/form-data:在表单中进行文件上传时使用

  • 示例:

    Host: www.example.com
    Content-Type: application/json
    Authorization: Bearer token

4.2.3 请求体

  • 请求体是可选的,通常在使用POST或PUT方法时使用,用于向服务器发送数据。请求体可以包含表单数据JSON数据等。

  • 示例:

    {
    “name”: “John”,
    “age”: 25
    }

4.2.4 完整的HTTP请求示例

GET /index.html HTTP/1.1

Host: www.example.com

Content-Type: application/json

Content-Length: 34

Authorization: Bearer token

{
“name”: “John”,
“age”: 25
}

4.3 HTTP响应

  • http响应由三部分组成:状态行响应头响应体

4.3.1 状态行

  • 状态行包含协议版本号状态码状态消息三部分。

  • 状态码有三位数字组成,第一个数字定义了响应的类别。

  • 状态码含义:

    1xx 信息性响应,一般是告诉客户端,请求已经收到了,正在处理,别急…

    2xx 处理成功响应,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.

    3xx 重定向响应,它让客户端再发起一个请求以完成整个处理。

    4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。

    5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。

  • 常见响应状态码:

状态码状态消息说明
200OK服务器成功返回用户请求的数据
201CREATED用户新建或修改数据成功
204NO CONTENT用户删除数据成功
301Moved Permanently被请求的资源已永久移动到新位置
302Move Temporarily被请求的资源临时性移动到新位置
400Bad Request客户端请求有语法错误,不能被服务器所理解
401Unauthorized未授权的(未登录)
403Forbidden表示用户得到授权,但是访问是被禁止的
404Not Found请求资源不存在
500INTERNAL SERVER ERROR服务器发生错误,用户将无法判断发出的请求是否成功
503Server Unavailable服务器当前不能处理客户端的请求,一段时间后可能恢复正常
  • 示例:

    HTTP/1.1 200 OK

4.3.2 响应头

  • 响应头包含服务器的基本信息数据的描述(内容长度(Content-Length)、内容类型(Content-Type)、连接状态(Connection)、编码方式(charset)等等)。

  • 示例:

    Server: Apache/2.2.14 (Win32)

    Content-Length: 88

    Content-Type: text/html

    Connection: Closed

4.3.3 响应体

  • 响应的消息体,数据包含普通文本XMLJSONHTML源码等等。

  • 示例:

    ​ Hello World!

4.3.4 完整的HTTP请求示例

HTTP/1.1 200 OK

Date: Mon, 27 Jul 2009 12:28:53 GMT

Server: Apache/2.2.14 (Win32)

Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT

Content-Length: 88

Content-Type: text/html

Connection: Closed

​ Hello World!

5. RESTful接口规范

  • RESTful :一种网络应用程序的设计风格和开发方式,提供了一组设计原则和约束条件。
  • 示例:
操作请求方式URL成功状态码
查询某个用户GEThttp://127.0.0.1:8080/myweb/users/1200
查询所有用户GEThttp://127.0.0.1:8080/myweb/users200
添加用户POSThttp://127.0.0.1:8080/myweb/users201
修改用户PUThttp://127.0.0.1:8080/myweb/users/1201
删除用户DELETE查询某个用户http://127.0.0.1:8080/myweb/users/1204
  • 特点:
    • 请求 API 的 URL 用来定位资源
    • 通过标准HTTP方法对资源进行增删改查操作
    • 利用HTTP状态码返回状态信息

6. 测试用例的设计思路

  • 接口功能测试:验证接口功能是否按照接口文档实现(输入+处理+输出)

6.1 单接口测试

  • 正向功能:(通过性测试) 必填参数(p2),全部参数(p2),组合参数。

  • 反向测试:(异常测试)

    • 参数异常:多参、少参、无参、错误参数
    • 数据异常:数据为空(p3)、长度不符(p3)、类型不符(p3)、错误数据、过期数据
    • 业务数据异常:结合业务功能考虑输出的各种异常返回情况(业务数据不合理)(p3)

6.2 多接口测试

  • 业务场景功能测试(站在用户角度考虑常用的使用场景)接口之间数据依赖

7 自动化框架的设计思路

  1. 搭建基础框架——整理项目目录。
  2. 通用功能类封装——封装通用功能,如数据库工具类等。
  3. 接口对象封装与调用——封装接口AOI对象,用pytest编写脚本调用。
  4. 测试数据参数化——测试数据json文件设计,参数化实现。
  5. 用例组织执行——执行测试用例,生成测试报告。

7.测试工具(Postman)

7.1 Postman 断言

  • 作用:让Postman工具代替人工自动判定预期结果和实际结果是否一致。

7.1.1 响应状态码断言

  • 模板名称:Status code: Code is 200
  • 模板内容
// 判断响应状态码是否等于200
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});// 解释说明:
pm.test(参数1:字符串-测试断言名称,参数2:回调函数-具体断言语句)
pm.response.to.have.status(code:Number);	判断是否含有指定状态码

7.1.2 包含指定字符串断言

  • 模板名称:Response body: Contains string
  • 模板内容
// 判断响应结果是否包含指定字符串
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});// 解释说明:
pm.expect()			// 接受实际结果
.to					// 连接符,用于连接断言与判断
.include()			// 用于指定断言方式和预期结果
pm.response.text()	// 获取响应结果的文本

7.1.3 JSON数据断言

  • 模板名称: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.response.json()	// 获取响应结果的JSON数据
pm.expect(json对象的属性)			// 接受实际结果
.to.eql()			// 用于指定断言方式和预期结果

7.1.4 请求头断言

  • 模板名称:response headers:content type header check
  • 模板内容
// 校验请求头的属性
pm.test("Content-Type is present", function () {pm.response.to.have.header("Content-Type");
});pm.response()				// 获取响应对象
.to.have.header(请求头属性)	// 用于指定断言方式和预期结果

7.2 Postman 环境变量

  • 一套环境中,变量不能重复,各个环境变量之间,变量名可以重复,只对选择了对应环境的测试集生效。

  • 环境的分类:开发环境、测试环境、生产/线上环境

  • 应用场景

    1. url地址

    2. header

    3. body

    注意:别忘了添加引号包裹,postman的特殊语法

  • 调用:{{变量名}}

7.2.1 全局变量/公有变量

  • 作用范围:针对postman下面所有测试集均生效
  • Globals
  • 代码获取全局变量
# 获取全局变量
pm.globals.get("全局变量");
# 设置全局变量
pm.globals.set("全局变量", "变量值")

7.2.2 局部变量/私有变量

  • 作用范围:针对某个环境下面所有测试集
  • Variable
  • 代码获取私有变量
# 获取私有变量
pm.environment.get("私有变量");
# 设置私有变量
pm.environment.set("私有变量", "变量值")

注意:如果私有变量名与全局变量名相同,优先执行私有变量

7.2 Postman 关联

  • 后一个接口的请求需要依赖前一个接口的响应数据,一般通过全局变量或者环境变量来进行参数在接口之间的传递。
  • 流程图

在这里插入图片描述

7.3 Postman 请求前置脚本

  • 在Pre-request Script页签编写,在请求发送之前被执行。
// 生成随机数 0到1之间的小数
var ran = Math.random()// 把刚刚的随机数放入到全局变量中
pm.globals.set("ran_key", ran);

7.3 Postman 参数化

  • 场景:测试脚本中仅测试数据不一样,使用参数化提高脚本复用。

  • 步骤

    1. 测试数据保存在数据文件单独维护

    2. 引用数据文件实现脚本循环调用

  • 准备数据文件

# CSV文件
username,admin
username,
# json文件
[{"username":"admin"},{"username":""}
]
  • 引用数据文件数据:

    1. 请求参数中获取:

    引用相关对象的keyeg:{{username}}

    1. 代码中获取:

    Postman内置data对象引用key
    eg. data.status

7.4 Postman 报告(Newman)

7.4.1 安装步骤

  1. 先下载Node.js

    https://nodejs.org/en/

  2. 安装NodeJs

    打开cmd, 输入node, 如果没有报错, 说明node安装成功。

  3. 安装newman

    打开cmd, 输入npm install -g newman

  4. 通过查看newman版本测试安装是否成功

    打开cmd, 输入newman -v, 出现版本信息即安装成功

  5. 安装newman-reporter-html

    打开cmd,输入:npm install -g newman-reporter-html

7.4.2 运行步骤

  1. 保存的文件目录(包含数据文件、测试集、局部变量、全局变量),cmd进入命令行黑窗口

    注意:文件名不要有中文,空格等。

  2. 运行测试文件

    格式

    newman run 测试脚本文件 -e 环境变量文件 -g 全局变量文件 -d 测试数据文件 -r html --reporter-html-export contract/contract.html

    命令

    newman run postman_collection.json -e postman_environment.json -g postman_globals.json -d data.json -r html --reporter-html-export contract/contract.html

    解释

    run 测试脚本文件:表示要执行的postman脚本,及导出的测试集

    -e 环境变量文件:指定脚本中依赖的环境变量文件的路径

    -g 全局变量文件:指定脚本中依赖的全局变量文件的路径

    -d 测试数据文件:指定脚本中依赖的测试数据文件的路径

    –reporter-html-export haha/hehe.html:代表生成的位置和名字

7.5 Tips小提示

7.5.1 使中文可以正常显示提供的方法

var UTFTranslate = {
ReChange:function(pValue){
return unescape(pValue.replace(/&#x/g,'%u').replace(/\\u/g,'%u').replace(/;/g,''));
}
};
const $ = cheerio.load(responseBody);  // 把响应结果保存 
var mydata =  $("title").html();
mydata = UTFTranslate.ReChange(mydata); // 调用一开始的翻译函数

面试题

Cookie,Session,Token的区别

  • Cookie:是一种在服务器产生在客户端保存数据的机制,通常用于记录用户登录状态、购物车信息等。Cookie可以设置过期时间,也可以设置为只在特定域名下有效。
  • Session:是一种在服务器产生在服务器端保存数据的机制,通常用于记录用户登录状态、购物车信息等。Session可以在多个请求之间共享数据,但是需要通过加密等方式保证安全性。
  • Token:是一种在服务器产生在客户端保存数据,用于身份验证的机制,通常用于API接口的身份验证。Token可以通过加密等方式保证安全性,并且可以在多个请求之间共享数据。

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

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

相关文章

uniapp 微信小程序 分包

1、manifest.json内添加如图所示: "optimization" : {"subPackages" : true },2、在与pages同级上创建各个分包的文件夹 把需要分包的文件对应移入分包文件夹内 3、page.json内修改分包文件的路径 比如: {"path" : &qu…

微信云托管(本地调试)⑥:nginx、vue刷新404问题

一、nginx默认路径 1.1、默认配置文件路径:/etc/nginx/nginx.conf 1.2、默认资源路径:/usr/share/nginx/html/index.html 二、修改nginx.conf配置 (注意配置中的:include /etc/nginx/conf.d/*.conf; 里面包了一个server配置文件…

Unity制作护盾——1、闪电护盾

Unity引擎制作闪电护盾效果 大家好,我是阿赵。   这期做一个闪电护盾的效果。 一、效果说明 可以改变闪电的颜色 可以改变范围 改变贴图的平铺次数,也可以做出各种不同感觉的护盾。 二、原理 这个效果看着很复杂,其实只是用了一张N…

【excel密码】excel数据加密,如何设置?

Excel数据完成制作之后,想要保护工作表数据不被修改,我们可以对excel数据设置保护,确保数据的准确性。今天分享两种方法设置数据保护。 方法一:工作表/工作簿保护 这里的限制编辑被分为了两种方式,分别是保护工作表、…

Rpc原理

dubbo原理 1、RPC原理 一次完整的RPC调用流程(同步调用,异步另说)如下: 1)服务消费方(client)调用以本地调用方式调用服务; 2)client stub接收到调用后负责将方法、参数…

【快应用】list组件属性的运用指导

【关键词】 list、瀑布流、刷新、页面布局 【问题背景】 1、 页面部分内容需要瀑布流格式展示,在使用lsit列表组件设置columns进行多列渲染时,此时在里面加入刷新动画时,动画只占了list组件的一列,并没有完全占据一行宽度&…

科技感响应式管理系统后台登录页ui设计html模板

做了一个科技感的后台管理系统登录页设计,并且尝试用响应式布局把前端html写了出来,发现并没有现象中的那么容易,chrome等标准浏览器都显示的挺好,但IE11下面却出现了很多错位,兼容起来还是挺费劲的,真心不…

Linux下QtCreator勾选Use root user后出现error while loading shared libraries的问题

文章目录 背景解决办法其他解决办法 背景 在linux下调试程序时,有时候需要取得root权限才能连接操作某些设备。 之前我是通过脚本方式 [在QtCreator中先执行自定义命令再执行程序]来进行的。也就是在脚本中取得权限,脚本内容类似这样: echo…

如何维护你的电脑:打造IT人的重要武器

文章目录 方向一:介绍我的电脑方向二:介绍我的日常维护措施1. 定期清理和优化2. 保持良好的上网习惯和安全防护3. 合理安排软件和硬件的使用4. 数据备份和系统还原 方向三:推荐的维护技巧1. 数据分区和多系统安装2. 内部清洁和散热优化3. 安全…

鉴源论坛·观擎丨浅谈操作系统的适航符合性(下)

作者 | 蔡喁 上海控安可信软件创新研究院副院长 版块 | 鉴源论坛 观擎 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 在浅谈操作系统的适航符合性(上)中,详细介绍了民用飞机操作系统的研制现状及其适航要求&#xff…

服装行业多模态算法个性化产品定制方案 | 京东云技术团队

一、项目背景 AI赋能服装设计师,设计好看、好穿、好卖的服装 传统服装行业痛点 • 设计师无法准确捕捉市场趋势,抓住中国潮流 • 上新周期长,高库存滞销风险大 • 基本款居多,难以满足消费者个性化需求 解决方案 • GPT数据…

RunnerGo配置场景时接口模式该怎么选

在进行性能测试时,测试场景的正确配置非常关键。首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试。 在JMeter中,用户需要自己组织测试场景,…

加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性

​ (图片来源:网络) D-Wave是量子计算系统、软件和服务的领导者,也是量子计算机的第一家供应商。近期,D-Wave宣布与滑铁卢大学量子计算研究所(IQC)达成两项新合作。他们为量子计算系统建立了关键…

Redis性能瓶颈揭秘:如何优化大key问题?

1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。 到底多大的数据量才算是大key? 没有固定的判别标准,通常认为字符串类型的k…

服务器中了malox勒索病毒后怎么办怎么解决,malox勒索病毒解密数据恢复

服务器遭受Malox勒索病毒攻击后,快速解密并恢复数据至关重要,以便减少更大的经济损失。近期,新的一波malox勒索病毒正在肆虐,我们收到很多企业的求助,企业的服务器数据库遭到了malox勒索病毒攻击,导致系统内…

Vue常见的事件修饰符

1.prevent:阻止默认事件(常用) 2. stop:阻止事件冒泡(常用) 3. once:事件只触发一次(常用) 4.captrue:使用事件的捕捉模式(不常用) 5.self:只有event.target是当前操作的元素时才触发事件(不常用) 6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕(不常用…

CI/CD持续集成持续发布(jenkins)

1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…

YOLOv5改进系列(19)——替换主干网络之Swin TransformerV1(参数量更小的ViT模型)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

Stable Diffusion教程(6) - 扩展安装

打开stable diffusion webUI界面 加载插件列表 依次点击扩展->可用->加载自 搜索插件 首先在搜索框输入你要安装的插件,然后点击插件后面的安装按钮 如果你需要的插件这里面没有找到,可通过通网址安装的方式安装。 在git仓库网址输入框输入的你插件…

el-table那些事

el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑,需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量,并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…