接口测试知识点汇总

定义

系统之间(外部系统与内部系统、内部系统与内部系统)数据交互的通道

作用:校验接口响应数据与预期数据是否一致

目的

  • 测试页面测试发现不了的问题
  • 能够提早发现 bug,符合质量控制前移的理念
  • 低成本高效益,因为接口测试可以自动化并且是持续集成的

实现方式

  • 代码

Python + requests +unittest
Java + httpclient

  • 工具

postman
jmeter

Http 协议

超文本传输协议,基于请求与响应的应用层协议

特点:

客户端/服务器模式
简单快速
灵活
无连接
无状态

URL格式

协议://IP地址:端口号/资源路径?查询参数

  • 协议:http、https
  • IP地址:也就是域名

作用:在网络环境中,唯一定位一台主机

  • 端口号:可以省略,如果省略,跟随协议(http:-80,https:-443)

作用:在主机上,唯一定义一个应用程序

  • 资源路径:可以省略,如果省略,资源路径为“/”
  • 查询参数:可以省略,如果省略,没有?分隔符 |

作用:给资源传递参数

可以有多组,每组 k = v 格式,各组之间用“&”隔开

Http请求

  • 请求行:请求方法、URL和协议版本
  • 请求方法

get:查询——没有请求体
post:添加——用于注册和登录
delete:删除——没有请求体
put:修改

  • 请求头(content-Type):指定请求体的数据类型

application/json:请求体的数据类型为 json
application/x-www-form-urlencoded:请求体的数据类型为 表单类型

  • 空行:代表请求头结束
  • 请求体:发送给服务器请求时,携带的数据

Http响应

  • 响应行:协议版本、状态码、状态码描述
  • 响应头:K:V格式数据
  • 空行:代表响应头结束
  • 响应体:服务会发给客户端的数据

所有的 响应协议 都有 响应体
响应体中 包含的数据 是接口测试过程中的 所要使用的 实际结果

Postman

接口测试流程

  • 需求分析
  • 接口文档解析
  • 设计测试用例
  • 脚本开发

postman 工具生成脚本
Python 代码编写脚本
Python + request +unittest

  • 执行及缺陷跟踪
  • 生成测试报告
  • 接口自动化持续集成

解析接口文档

  • 请求报文关键数据

请求方法
URL
请求数据(请求头和请求体)

  • 响应报文关键数据

响应状态码
响应数据(响应体)

Postman 断言

让postman工具代替人工自动判断预期结果和实际结果是否一致

断言响应代码(200)

status code:code is 200
在这里插入图片描述

1、pm表示postman的实例
2、test()表示postman实例的测试方法,这个方法有2个参数
参数①:“status code is 200”:这个参数可以任意修改,不影响断言。作用是在断言结束后,显示给用户的,断言结果的提示文字
参数②:是一个 匿名函数 的调用

断言响应体包含指定字符串

response body:contains string
在这里插入图片描述

1、pm表示postman实例
2、test()表示postman实例的测试方法,这个方法有2个参数
参数①:“Body matches string”:这个参数可以任意修改,不影响断言。作用是在断言结果后,显示给用户的,断言结果的提示文字
参数②:是一个 匿名函数 的调用
3、pm.expect(pm.response.text()).to.include("string_you_want_to_search"); 的意思是:postman期望响应文本中,应该包含“你想搜索的字符串”(即预期结果)

断言JSON数据

response body :JSON value check
在这里插入图片描述

1、pm表示postman实例
2、test()表示postman实例的测试方法,这个方法有2个参数
参数①:“Your test name”:这个参数可以任意修改,不影响断言。作用是在断言结果后,显示给用户的,断言结果的提示文字
参数②:是一个 匿名函数 的调用
3、var jsonData = pm.response.json(); #例子 :var abc = 20 。将整个 json 响应体 赋值到 变量中
4、pm.expect(jsonData.value).to.eql(100); #即postman 期望 json 结果中 指定 key 的值 为 xxx
*** value 能取值:success、code、message ***

Postman关联

接口与接口之间,有依赖关系时,需接住postman关联技术 来实现

实现步骤

假设 接口b 产生的数据被接口a 依赖
①发送 接口b 请求,获取响应数据
②将响应数据放入公共容器(全局变量、环境变量)中
③接口a 从公共容器中提取数据发送请求

核心代码

①获取响应数据,转为 JSON 格式,保存到变量JSONData中

var json = pm.response.json();

②使用全局变量做容器

pm.global.set("全局变量名",全局变量值);

使用环境变量做容器

pm.environment.set("环境变量名",环境变量值);

③从postman界面中(url、请求头headers、请求体body)提取 环境/全局 变量 数据

{{全局变量名}}/{{环境变量名}}

Postman参数化

将 测试数据 组织到 数据文件 中,通过脚本的反复迭代,使用不同的数据,达到测试不同用例的目标

应用场景:一般在测试同一个接口的不同 测试点 时,只有 测试数据 不同,考虑使用参数化

数据文件简介

CSV

优点:数据组织格式简单
缺点:
①不能测试bool(布尔类型),因为postman读取CSV后,将所有非数值类型数据自动添加双引号“”变为字符串
②不能存储复杂数据类型(元组、列表和字典)
③不能实现 参数测试

应用场景:数据量较大,数据组织格式简单的

使用位置:
①请求参数(请求行、请求头、请求体)中,使用数据文件中的数据

CSV文件:{{字段名}};JSON文件:{{键名}}

②代码(Tests)中,使用 数据文件 中的数据,使用postman内置的 关键字 data,索引字段名或键名

CSV文件:data.字段名;json文件:data.键名

JSON

优点:
①可以测试 bool 类型
②能使用复杂数据类型
③可以实现参数测试
缺点:相同数据量,json文件远大于CSV文件

应用场景:数据量较小,数据组织复杂的,需要进行参数测试的

Postman生成测试报告

  • 导出测试用例集:在测试用例集中选择 “export”
  • 导入测试用例集:在 home 中点击 “import” ,在 file 中点击“Upload files”导入
  • newman生成测试报告命令

newman run 测试集文件 -e 环境变量文件 -d 测试数据文件.json/csv -r htmlextra --report-htmlextra-export report.html
命令说明:
①run xxx.json:执行测试集文件
②-e source:环境变量文件
③-d source:测试数据文件
④-r htmlextra:生成测试报告类型
⑤–report-htmlextra-export report.html:存储报告的路径
注: -e 和 -d是非必须的
如果没有使用 环境,不需要指定 -e
如果没有使用 数据文件(做参数化),不需要指定 -d

接口测试点

功能测试点

单接口功能

一个单独的业务对应一个独立的接口,如登录业务,对应登录接口

  • 正向测试

必填参数组合
必填 + 非必填组合
全部参数组合

  • 反向测试
  • 功能异常
    覆盖反向需求
    数据格式正确,不能履行接口功能
  • 数据异常
    空、类型不符合、长度不符合
  • 参数异常
    多参、少参、无参或者错误参数
业务场景功能

多个即可欧被连接调用(模拟用户的实际使用场景)

性能测试

  • 响应时长

从发送请求到接收到服务器回发响应包所经历的时间

  • 错误率

服务器云顶出错的概率

  • 吞吐量

服务器 单位时间内 处理请求的数量

  • 服务器资源使用率

CPU、内存、网络、磁盘等 硬件资源的占用率

安全测试

  • 敏感数据是否加密
  • SQL注入

Request

实现接口测试

http请求语法

resp = requests . 请求方法(url = ‘URL地址’,params = (k:v),headers = (k:v),data = (k:v),json = (k:v),cookies = ‘cookie数据’(如:令牌))
  • 请求方法:
    get请求——get()
    post请求——post()
    put请求——put()
    delete请求——delete()
  • url:待请求的url——string类型
  • params:查询参数——字典
  • headers:请求头——字典
  • data:表单格式 的请求体——字典
  • json:JSON格式的 请求体——字典
  • cookies:cookie数据——string类型
  • resp:响应结果

cookie

简介:工程师针对http协议是无连接、无状态特性,设计的一种技术,可以在浏览器端 存储用户的信息

特性:

  • 用于存储用户临时的不敏感信息
  • 位于浏览器(客户端)端,默认大小4k(可以调整)
  • 数据可以随意被访问,没有安全性可言
  • 存储的数据类型,受浏览器限制

session

简介:也叫会话,通常出现在网络通信中,从 客户端 借助访问 终端 登录上服务器,直到退出 登录所产生的 通信数据,保存在 会话中

特性:

  • 用于存储用户的信息
  • 位于服务端,直接使用服务器存储空间
  • 数据不可以随意被访问,安全性较高
  • 存储的数据类型,受服务器影响,几乎能支持所有的数据类型

cookie中的数据,都是session传递的,因此session可以直接 自动管理cookie

获取响应数据

  • 获取url:resp.url
  • 获取响应状态码:resp.status_code
  • 获取cookie:resp.cookies
  • 获取响应头:resp.headers
  • 获取响应体:

文本格式:resp.text
json格式:resp.json()

PyMySQL

操作数据库

事务

是关系型数据库特有的概念
事务可以看做是一个虚拟的容器,在容器中存放一系列的数据库操作,看做一个整体,内部所有的操作,要么一次性全部成功,如果有一个失败,则全部失败

数据库操作实现

  • 导包:import pymysql
  • 创建数据库连接:conn = pymysql.connect(host = "locathost",user = "root",password = "root",database = "books")
  • 创建游标对象:cursor = conn.cursor()
  • 执行操作:查询数据库版本信息:cursor.execute("select version()")
  • 获取查询结果:
result = cursor.fetchone()
print("result = ",result)
  • 关闭游标对象:cursor.close()
  • 关闭数据连接:cursor.close()

游标常用方法

  • 游标提取数据时,提取游标所在位置下一行,每提取一行数据,自动向下移动
  • 从结果集中,提取一行:fetchone()
    -从结果集中,提取size行:fetchmany(size)
  • 提取所有结果集:fetchall()
  • 可以设置游标位置:属性rownumber

接口对象封装

核心思想

  • 分层思想:将普通方法实现的分为 接口对象层 和 测试脚本层
  • 接口对象层:对接口进行封装,封装好之后,给测试用例层 调用
  • 测试用例层:调用接口对象层 封装的方法,拿到响应即可欧,断言进行 接口测试
  • 借助 unittest 框架实现

登录接口对象层

  • 将动态变化的数据,设计到方法的参数
  • 将固定不变的,直接写成方法实现
  • 将响应接口,通过返回至传出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值