0


接口测试-Postman

一、概念

接口:是指系统或组件之间的交互点,通过这些交互点可以实现数据的交互
接口测试:是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系

接口测试分类:
系统之间的接口:多个内部系统之间的交互,内部系统与外部系统之间的交互
程序内部的接口:方法与方法之间,模块与模块之间的交互
接口类型:
按协议划分:HTTP、TCP、IP
按语言划分:C++、Java、PHP…

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

特点:
1、测试可以提前介入,提早发现bug,符合质量控制前移的理念
2、可以发现一些页面操作发现不了的问题
3、接口测试低成本高效益
4、接口测试是从用户的角度对系统进行全面的检测

二、HTTP协议

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

特点:
1、支持客户端/服务器模式
2、简单快速
3、灵活
4、无连接
5、无状态

URL:统一资源定位符,在网络环境中,唯一的定义一个数据资源

2.1 HTTP请求

作用:客户端发送请求给服务器时,使用的协议
规定:发送给服务器的数据传输的语法格式

整体格式:
请求行:http请求第一行,请求方法(空格)URL(空格) 协议版本
请求头:语法格式:k:v,例如:
User-Agent:描述请求发送端的浏览器类型
Content-Type:描述请求体的数据类型
空行:代表http请求头结束
请求体:请求发送时携带的数据
post和put有请求体
get和delete没有请求体

  • HTTP请求方法:
  • GET:查询
  • POST:添加(常用在登录)
  • PUT:修改
  • DELETE:删除

2.2 HTTP响应

作用:服务器端,针对客户端发送的http请求,回发响应数据
规定:回发给客户端的数据组织格式

整体格式:
响应行:协议版本(空格)状态码(空格)状态码描述
响应头:语法格式:k:v,例如:
Content-Type:描述响应体的数据类型
Content-Length:响应体大小,可以不写,浏览器自动求取,一旦写,必须准确
空行:代表响应头结束
响应体:绝大多数不为空(请求成功回发数据,请求失败回发错误信息)

  • 状态码:
  • 1xx:指示信息-表示请求已接收,继续处理
  • 2xx:成功-表示请求已被成功接收、理解、接受
  • 3xx:重定向-要完成请求必须进行更进一步的操作
  • 4xx:客户端错误-请求有语法错误或请求无法实现,404请求不存在,403请求存在但没有权限
  • 5xx:服务器端错误-服务器未能实现合法的请求

三、接口规范

3.1 传统接口风格

在这里插入图片描述

特点:
请求方法,只使用get和post即可
URL不唯一,同一个操作可以对应不同的URL
状态码的使用较单一,200最常见

3.2 RESTful风格

在这里插入图片描述

特点:
在这里插入图片描述

四、接口测试流程

1、需求分析:主要依据需求文档
2、接口文档解析:一般由开发人员编写接口文档(API文档)
3、设计测试用例
4、执行测试:使用接口测试工具或编写代码实现
5、接口缺陷管理与跟踪
6、生成测试报告
7、接口自动化持续集成

接口文档:由开发人员编写,描述接口信息的文档。开发团队按接口文档进行开发工作,并要一直遵守和维护

接口文档的解析本质:从接口文档中,找出http请求所需要的数据信息(请求方法、URL、请求头、请求体、响应状态码、描述)

五、接口用例

为什么要写接口用例?
1、防止测试点漏测,条理清晰
2、方便分配工作,评估工作量和时间

在这里插入图片描述

单接口功能:手工测试中的单个业务模块,一般对应一个接口
业务场景功能:按照用户实际使用场景,梳理接口业务场景,组织业务场景时,一般只需做正向测试即可,一般建议用最少的用例覆盖最多的业务场景

  • 以登录页面为例
  • 接口测试用例设计要点:
  • 1、测试用户名输入框对应的username的值是否正确
  • 2、测试密码输入框对应的password的值是否正确
  • 3、测试验证码输入框对应的verify_code的值是否正确

与手工设计不同之处
1、手工测试测写入到输入框中的数据是否正确,接口测试测参数对应的参数值是否正确
2、接口测试不单单针对参数值进行测试,还可以针对参数本身进行测试
正向参数:必选参数、组合参数、全部参数
反向参数:多参、少参、无参、错误参数

5.1 单接口测试用例

手工测试用例文档八大要素:
用例编号、用例名称、模块名称、优先级、预置条件、测试数据、操作步骤、预期结果

接口测试用例文档要素:
用例编号、用例名称、模块名称、优先级、预置条件、请求方法、URL、请求头、请求体、预期结果

登录模块的接口测试用例测试点:
在这里插入图片描述
在这里插入图片描述

5.2 业务场景测试用例

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

针对“员工管理”分析测试点:
登录->添加员工->查询员工->修改员工->再次查询->删除员工->查询员工列表

在这里插入图片描述在这里插入图片描述

六、Postman

6.1 常用断言

Postman借助JavaScript-js语言编写代码,自动判断预期结果与实际结果是否一致
断言代码写在Tests标签内

断言响应状态码

pm.test("Status code is 200", function () { pm.response.to.have.status(200); });

pm:代表postman的一个实例
**test()**:是pm实例的一个方法,有两个参数
参数1:在断言结束后,给出的文字提示,可以修改"Status code is 200"
参数2:匿名函数
pm.response.to.have.status(200) 表示postman的响应结果中应该包含状态码200

断言响应体是否包含某个字符串

pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); });

pm:代表postman的一个实例
**test()**:是pm实例的一个方法,有两个参数
参数1:在断言结束后,给出的文字提示,可以修改
参数2:匿名函数
pm.expect(pm.response.text()).to.include(“xxx”) 表示postman期望响应文本中,包含XXX字符串,预期结果,可以修改

断言响应体是否等于某个字符串(对象)

pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); });

pm:代表postman的一个实例
**test()**:是pm实例的一个方法,有两个参数
参数1:在断言结束后,给出的文字提示,可以修改
参数2:匿名函数
pm.response.to.have.body(“xxx”) 表示postman响应文本应该有XXX字符串,预期结果,可以修改

断言JSON数据

pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); });

pm:代表postman的一个实例
**test()**:是pm实例的一个方法,有两个参数
参数1:在断言结束后,给出的文字提示,可以修改
参数2:匿名函数
var jsonData 用js语法定义一个变量jsonData就是变量名
pm.response.json() 代表响应的json结果
pm.expect(jsonData.value).to.eql(100) 表示postman预期json结果的key对应的值等于xxx

断言响应头

pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });

pm:代表postman的一个实例
**test()**:是pm实例的一个方法,有两个参数
参数1:在断言结束后,给出的文字提示,可以修改
参数2:匿名函数
pm.response.to.have.header(“xxx”) 表示postman响应头中包含XXX字符串,预期结果,可以修改

6.2 全局变量和环境变量

全局变量:全局变量是全局唯一的,不可重复定义的变量
环境变量

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

设置变量
全局变量

pm.globals.set("var_name",value);

环境变量

pm.environment.set("var_name",value);

获取变量值
全局变量
请求参数中获取:{{vat_name}}
代码中获取:

var value = pm.globals.get("var_name");

环境变量
请求参数中获取:{{vat_name}}
代码中获取:

var value = pm.environment.get("var_name");

6.3 postman请求前置脚本

在send按钮点击后,请求前置脚本代码,第一时间被执行,在postman内部实际http请求之前

// 拿到时间戳数据值var timestamp =newDate().getTime()// 将时间戳设置到全局变量中
pm.globals.set("glb_timestamp",timestamp)

6.4 postman关联

应用于多个http请求之间,有数据关联或依赖关系时

实现步骤:
A接口 依赖B接口 的数据
1、向B接口发送http请求,获取数据
2、将数据设置至全局变量(环境变量)中
3、A接口获取全局变量(环境变量)中数据值,进行使用

请求获取天气接口,提取响应结果中的城市,将城市名给百度搜索接口使用
在这里插入图片描述
在这里插入图片描述

6.5 生成测试报告

使用newman命令,运行导出的测试集脚本,打开cmd输入

newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export report.html
    eg:
        
    run xxx.json:表示要执行的postman脚本,即导出的测试集数据
    -e source:用来指定环境变量文件的路径
    -d source:用来指定测试数据文件的路径

步骤:
1、批量执行测试用例集
2、导出用例集(Export得到xxx.json文件)
3、在终端中执行命令,生成测试报告

6.6 读取外部数据文件

数据文件:
CSV
优点:数据组织形式简单,适用于大量数据的场合
缺点:不支持bool类型数据;不支持多参、少参、无参、错误参数的接口测试;不支持负责数据类型(如嵌套字典、列表等)
JSON
优点:支持bool类型;支持多参、少参、无参、错误参数;支持复杂数据类型
缺点:对于相同数据量,json数据文件大小远大于CSV文件

CSV文件
1、创建xxx.csv文件
2、将数据写入到csv文件中(第一行写入的是数据对应的“字段名”,从第二行向后依次是对应的数值,数据间用英文逗号隔分)
3、在postman中,选中使用数据文件的用例集,导入数据文件

JSON文件
1、创建xxx.json文件
2、在数据文件中,按json语法写入json数据,postman要求,json格式的数据文件,数据内容的最外层,必须是[],内部所有的数据用{}存储
3、在postman中,选中使用数据文件的用例集,导入数据文件

标签: postman 网络 java

本文转载自: https://blog.csdn.net/xiaosongshi/article/details/126974410
版权归原作者 小松狮 所有, 如有侵权,请联系我们删除。

“接口测试-Postman”的评论:

还没有评论