目录
接口测试day_1
1.接口概念
客户端: 和用户交互
服务端: 提供数据,业务逻辑
request: 请求---客户端
response: 响应---服务端
接口是连接客户端和服务端之间的桥梁,规定了客户端和服务端之间数据交换的格式.
接口就是一个规范
谁来统一规范:项目架构师或项目经理
张三:<username:xxx>
<password:123456>
李四:
{username:xxxx,password:123456}.
{user:xxx,pwd:123456}
成功,success,code:1
2.接口文档
接口文档是接口规范的表现形式;
接口测试最重要的依据是接口文档
接口测试依据(重要):
-
接口文档----开发出的
-
需求文档
-
原型图
接口文档组成部分:
-
接口名称 ----说明接口功能
-
接口描述 ----对接口功能详述
-
接口地址 ----接口请求地址
-
请求方式 ----针对接口使用协议
-
传入参数 ----请求所需要的数据
-
返回值 ----服务器响应的数据
-
状态码 ----断言请求参数对应返回值是否正确
-
说明 ----接口其他内容
接口三要素(重要):
-
请求地址+请求方式
-
请求参数
-
返回值
3.接口测试
3.1接口测试特点
-
无界面
-
无交互
-
不是手工测试
-
基于协议
-
任何协议都由两部分组成
-
协议头 ---headers
-
协议体 ---body
-
-
-
数据校验
-
验证业务逻辑
-
-
格式验证
-
请求参数
-
返回值
-
3.2接口测试概念
-
接口测试就是代替前端验证后台程序是否正确
3.3接口测试原理(步骤)
-
模拟客户端向服务器发送请求
-
服务器收到请求并经过处理返回数据
-
客户端对返回数据的正确性做验证
3.4 接口测试分类
web接口:
-
服务器接口:由公司程序员开发的项目接口(工作重点)
-
第三方接口:其他公司序员开发的项目接口
模块接口:
3.5接口测试意义
-
更早发现问题
-
接口测试是在手工测试之前执行
-
-
缩短项目周期
-
发现更底层的问题
-
检测服务端的容错能力
测试轮次(补充)
-
冒烟测试(不在轮次中)
-
第一轮测试(筛选用例)
-
所有业务流程--正向流程
-
-
第二轮测试
-
回归第一轮bug
-
所有测试范围的所有用例
-
-
第三轮测试
-
回归前两轮bug
-
再执行一次正向流程用例
-
对老功能测试(迭代项目)
-
-
验收测试(开发不再更新代码)
-
验收测试环境(UAT)
-
UAT环境----接近线上环境
-
-
-
线上验证
-
测试人员不再线上环境产生数据
-
不产生交易
-
-
3.6接口测试用例设计
-
功能
-
是否是按照接口文档实现的
-
-
业务逻辑
-
关联接口测试
-
-
异常
-
请求参数
-
参数异常
-
参数名称异常
-
-
数据异常
-
请求参数对应的值
-
-
eid = 001 # 发布会id
name = 小米 # 发布会标题
limit # 限制人数
status # 状态
address # 地址
start_time # 发布会时间
-
安全
-
认证 ---我是谁
-
登录
-
-
授权 ---我能干什么
-
垂直权限---上下级
-
水平权限---同一级
-
-
接口测试用例模板
-
用例编号
-
用例标题
-
优先级
-
所属模块
-
描述
-
前置条件
-
请求方式
-
请求参数(参数对应数据类型)
-
操作步骤
-
预期结果(返回值)
4.协议(HTTP)
4.1HTTP请求
-
请求行
-
请求方式(get,post)
-
请求地址
-
协议版本---HTTP版本1.1
-
-
请求头---header
-
useragent:发送请求的设备信息(浏览器内核版本,系统版本)
-
contentType:请求内容的数据类型
-
form_data
-
json
-
x_www_form_urlencoded
-
binary
-
-
cookie
-
-
空行
-
请求体
-
请求参数的具体内容
-
4.2HTTP响应
-
状态行
-
响应状态码
-
-
响应头
-
与请求头类似
-
-
空行
-
响应体
-
响应内容
-
4.3状态码
-
2xx
-
200 表示服务器成功处理了请求,但是返回数据不一定是你想要的
-
-
3xx
-
301 永久重定向
-
-
4xx
-
404 表示访问的资源不存在
-
403 拒绝访问
-
401 没有权限
-
-
5xx
-
503 表示服务器现在拒绝请求,将来可能恢复
-
4.4请求方式
-
get 向服务器请求资源
-
请求参数(parmas)
-
写在url地址后
-
url?参数名=参数值&参数名2=参数值2
-
-
-
post 向服务器新增资源
-
请求参数(body)
-
1.form_data
-
2.x_www_form_urlencoded
-
3.raw
-
json
-
xml
-
-
4.binary 上传文件
-
-
其中1和2是按照表单格式来体现
-
键值对---Python中的字典
-
-
3中的json---json字符串
-
-
put 向服务器更新资源,表现形式和post相同
-
delete 向服务器删除资源,表现形式和get相同
5.接口测试顺序(思路)
5.1测试环境的准备
在项目所在路径下打开cmd命令行
-
安装
-
pip install -r requirements.txt
-
-
启动
-
Python run_server.py
-
5.2 接口测试工具
-
postman
-
Python--requests
5.3 接口测试执行顺序
-
测试单接口
-
接口调试---开发配合
-
达到效果
-
接口在正常数据下可以请求成功
-
-
-
单接口测试(一个接口)
-
执行接口测试用例
-
-
-
测试关联接口(多接口组合测试)
-
根据业务逻辑中需要用到的接口
-
将这些接口串联起来进行测试
-
接口之间的交互
-
A接口B接口
-
A接口的返回值作为B接口的请求参数
-
-
5.4接口测试的关键
针对接口三要素来做
6.fiddler使用
6.1fiddler是干什么的
-
fiddler是抓包工具 charles 在Mac系统上 HTTPwatch是和IE浏览器 wareshark (http,tcp,ip)
-
在什么情况下使用
-
辅助手工测试
-
定位bug 区分一个bug是前端的还是服务端的 (面试题)
-
对于web端 定位bug使用的是浏览器的f12---network
-
对于app应用 定位bug 需要借助抓包工具
-
-
6.2使用fiddler抓浏览器的包
-
抓包工具默认抓HTTP协议
-
抓https协议
-
1.打开fiddler--->tools选项---->options
-
2.选择HTTPS栏
-
勾选decrypt HTTPS traffic
-
点击Actions 选择 export root certificate to desktop
-
点击OK
-
-
3.设置浏览器(谷歌浏览器为例)
-
设置---->高级---->证书管理
-
导入---->选择fiddler证书---->确定
-
-
4.重启fiddler
-
7.postman使用
7.1postman页面介绍
-
接口测试中三要素---->接口文档中提取
-
接口的返回数据---->系统数据库中得到
7.2postman中使用get请求
-
不带参数的get请求
-
将请求地址复制到地址栏中即可
-
点击send
-
-
带参数的get请求
-
将请求地址复制到地址栏中
-
填写参数
-
可以直接在请求地址后进行添加
-
请求地址?参数1=参数值1&参数2=参数值2
-
-
在postman--->parmas选项
-
按照键值对格式填写请求参数
-
模糊查询在参数处添加 blur=1(为开启模糊查询参数1为开启)
-
-
-
7.3postman环境(局部)变量
-
添加环境(局部)变量
-
postman--->设置---->Add添加环境(局部)变量
-
环境(局部)变量名称
-
添加具体变量
-
-
-
引用变量
-
在postman右上角下拉菜单中选择需要的局部变量
-
引用具体的一个变量格式:{{变量名}}
-
7.4postman发送post请求
-
post请求的区别主要在于请求参数类型的不同
-
请求参数类型----form-data格式
-
键值对格式
-
contentType:multipart/form-data; boundary= 边界
-
自带的边界boundary,是post中form-data请求参数格式的特点
-
-
请求参数类型----x-www-form-urlencoded格式(比较常见的一种)
-
键值对格式
-
contentType:application/x-www-form-urlencoded
-
-
请求参数类型----json格式(最为常见)
-
json字符串
-
contentType:application/json
-
-
请求参数类型为---binary格式上传文件
-
7.5postman之tests
-
作用
-
断言
-
获取接口返回值
-
-
断言
-
断言状态码
-
status Code: code is 200
-
pm.test("请求成功", function () { pm.response.to.have.status(200); //断言接口响应的具体状态码,并不局限于200 });
-
断言返回值
-
response body: JSON value check 适用于接口返回值格式为json
-
-
pm.test("请求成功", function () {
pm.response.to.have.status(200); //断言接口响应的具体状态码,并不局限于200
});
//获取返回值
jsonData.下一级(字典格式)
jsonData.下一级[索引值](列表格式)
-
获取返回值
-
set an environment variable
-
var jsonData = pm.response.json(); //表示获取所有返回值,保存为jsonData
var dep_name = jsonData.create_success.results[0].dep_name; //获取到返回值中的dep_name
pm.environment.set("dep_name", dep_name);//第一个参数是保存在postman中的变量名,第二个参数是变量值
7.6postman参数化
-
1.新建一个csv格式的文件,并且在notepad++将csv文件进行转码 UTF-8
-
2.文件中表头,一般情况下是接口参数名称
-
3.在postman中将对应接口做修改
-
将请求参数的值写成csv文件表头的对应变量名
-
修改完成后记得保存
-
-
4.在collection中点击批量执行
-
5.选择需要执行的接口
-
6.添加csv文件到postman中
-
Data select file按键
-
-
7.如果没有自动识别文件中的条数,手动修改iterations值
-
8.点击Run
-
注意:
-
pass+fail=在接口中设置断言的个数
-
7.7postman其他操作
-
导出
-
文件夹--->点击...---->点击export---->设置保存路径
-
-
导入
-
postman界面---->点击左上角import---->选择文件
-
-
前置处理器
-
在发送请求之前执行
-
当点击send之后
-
postman会先检测前置处理器中是否有代码
-
-
一般情况下用来生成测试数据
-
-
获取环境变量
-
get an environment variable
pm.environment.get("mastername")//mastername指的是环境变量中的变量名称
-