postman及charles学习笔记01
一、接口简介
接口:前端和后端通过接口交互(因为前端和后端的语言不一致),接口会返回一种通用的数据类型JSON(所有的语言都认识)。
前端:负责页面展示。
Web开发语言:html(页面),js(页面动画效果),css(页面上色)
ios开发语言:object-c,swift
Android开发语言:Android
后端:负责主要逻辑,操作各种数据库。
开发语言:Java,python,php,go等
二、接口测试
必须有接口文档(请求url,请求方式,参数,返回参数说明)
postman工具测接口:
get请求:(params传参数)
post请求: 入参是key-value类型(Body→form-date传参数)
入参是JSON类型(Body→raw传参数,还需选择JSON)
传cookie(Headers→填cookie值)
上传文件(Body→form-date传参数,选择File→上传文件)
form-date和x-www-form-urlencoded区别:
form-date:传参是key-value类型,可以上传多媒体文件(图片,文件,视频等)
x-www-form-urlencoded:传参是key-value类型,不可以上传多媒体文件
raw:Json形式,一般请求参数多用json
Binary:传二进制文件
传参是key-value类型和JSON类型:根据接口文档使用,一般参数较多,习惯用JSON
get请求和post请求区别:get请求没有请求体,它的数据是在url里面放的
get请求:用来向服务器获取数据
post请求:用来向服务器发送数据
HTTP请求包括:1)请求行:由三部分组成:请求方法 (GET/POST/DELETE/PUT/HEAD)
请求资源的URI路径
HTTP的版本号 eg:GET /index.html HTTP/1.1
2)请求头:存放一些额外信息(用的什么浏览器)
User-Agent:用户代理,它是一个HTTP头的名字,用来标识应用程序,通常是浏览器,它呈现的是用户和服务器的交互
Referer:当前页面关联的页面
cookie:名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围
3)请求体:请求体是客户端发给服务端的请求数据,这部分数据并丌是每个请求必须的
HTTP状态码含义:
200 #2 请求成功
404 #4 代表客户端发出去的请求有问题
500 #5服务端有问题
1、get请求
注意:get请求接口测试不需要借助任何工具,可以直接在浏览器调接口
例子1:get请求
方法一:直接在浏览器中测get请求接口(传多个参数):URL?参数名1=值1&参数名2=值 2&参数名3=值3
注意:
问题1:粘贴上图中浏览器的url:http://xxx.cn/api/user/stu_info?stu_name=%E5%B0%8F%E9%BB%91&age=18 后,其中 stu_name=小黑 变成 stu_name=%E5%B0%8F%E9%BB%91,是什么原因?
原因:请求接口,发送http请求到服务端,服务端拿到数据(数据库存储),把数据传输到后端,http协议传输过程中不可以有特殊符号或中文,中文要进行url编码。
方法二:借助postman工具测get请求接口:
返回结果如下图:
2、post请求
get请求以外的请求需要借助工具postman。
例子2:post请求,入参是key-value类型
借助postman工具测post请求(key-value类型)接口:
返回结果如下图:返回sign值
注意:
登录一次后,一段时间之内不需要登录,上图的 "sign": "5ea45f2087225fa7419124086f84b5ee" 起的作用 。
因为登录后,输入账号和密码,通过登录接口发送到服务端,验证密码(输入的账号密码与数据库存储账号密码对上),通过后,返回凭证,服务端存了一份sessionid,客户端在cookie里存了一份sessionid。客户端再次发请求时,把cookie里面的“键值对”一并发送给服务端,和服务端的“键值对”对上后,说明登录过了。
原理:cookie:存在客户端的一个键值对(客户端cookie不存在的情况:删除客户端的cookie)
session:存在服务端的一个键值对(服务端session不存在情况:服务端失效时间;退出登录)
例子3:post请求,入参是json类型
借助postman工具测post请求(json类型)接口:
返回结果如下图:操作成功
例子4:post请求,需要添加cookie
借助postman工具测post请求(需要cookie)接口:
下图查看stu_id的值
上图报错“未登录”,所以先登录再充值(1.从登陆接口获取sessionid。2.再把sessionid传给金币充值的接口),在header里面传cookie
方法一:把登录的sign值加到充值金币的header里面
返回结果如下图:操作成功
方法二:使用全局变量的方法,获取登录的sign值加到全局变量里
返回结果如下图:操作成功
例子5:请求购物车列表接口(需要先登录,才能进购物车列表)
用postman请求购物车列表接口如下图:报 请登录
登录接口传的token和购物车列表中的X-Litemall-Token值一致:
postman中Headers添加token:
返回结果如下图:
例子6:上传文件
使用postman工具:
返回结果如下图:操作成功
postman工具的基础操作:
(1)保存接口
点击Save 按钮,输入接口名称,选择分类,可以新建分类 点击Create Collection
(2)IP定义变量
点击设置,选择Globals,定义变量,IP用定义后的变量替换
三、 postman接口自动化测试
1.postman批量运行数据
例子7:
文件内容如下图:
返回结果如下图:
2.添加检查点校验接口是否通过
(1)检查点的内容是常量
从返回结果中取常量(包含的字符串),当做检查点
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});
例子8:
返回结果如下图:
(2)检查点的内容是变量
从文件中获取变量(包含的字符串),当做检查点
用pm.variables.get("variable_key")替换
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});
里的"string_you_want_to_search"
例子9:
返回结果如下图:
(3)检查点的内容是精确匹配
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.value).to.eql(100);});
例子9:
取上图接口返回结果的stu_info数组中的第3个,写成stu_info[2].id
返回结果如下图:
3. 接口测试用例模板
四、抓包
1.浏览器抓包
没有接口文档时可以用浏览器抓包
检查→Network
XHR:过滤,调后端接口请求
2.抓包工具
Charles(跨平台)、fildder、wireshark
通过抓包,可以拦截请求,修改数据
(1)Charles--PC端抓包--HTTP请求抓包
1)proxyà勾选windows proxy,如下图:
过滤url,如下图:
例子10:charles抓包pc端
(2)Charles--手机端--HTTP请求抓包
1)设置手机HTTP代理
保证手机和你的电脑在同一个局域网: Help→Local Ip Addresses→查看电脑IP地址 。
设置→无线局域网→连接的WiFi,设置HTTP代理,选择“手动”,填写“服务器”为电脑IP地址和“端口”为8888)。
点击“Allow”允许,手机上打开某个App或者浏览器,charles出现手机的HTTP请求列表。
注意:不抓包请关闭手机HTTP代理,否则断开与电脑连接后,手机会连不上网
(3)Charles--手机端--HTTPS请求抓包
1)配置http代理
Proxy →Proxy Settings,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying”
2)配置SSL代理
Proxy→SSL Proxy Settings
弹出的对话框中点击add,添加需要监视的域名。域名支持 *号通配符,如:抓取所有的https请求,可以填写 *:443
如果想要抓取qq.com的域名,可以填写 *.qq.com
3)安装SSL证书到手机设备
Help→SSL Proxying→Install Charles Root Certificate on a Mobile Device,出现弹窗得到地址: chls.pro/ssl
以IOS为例,在手机Safari浏览器输入地址: chls.pro/ssl ,下载文件。
设置→描述文件管理,安装描述文件,根据安装提示操作。
设置→通用→关于本机→证书信任设置 , 安装的证书信任开关打开。
注意:如果不能下载,检查手机是否正确设置了代理,电脑上Charles是否已经打开并配置正确。
配置完成后:试试抓取手机头条得https请求
(4)charles拦截请求
客户端发送请求给服务端,发送请求时通过charles拦截,返回请求时通过charles拦截,修改请求参数和返回结果。
如果首页要求只能展示3张优惠卷,如果有5张优惠卷是否只展示3张优惠卷,造数据太麻烦,可以用charles拦截请求,修改请求5张优惠卷
在Charles选中要拦截的接口→右键→勾选breakpoints(断点),如下图:
批量取消断点:Proxy→Breakpoint settings,如下图:
例子11:刷新界面,先打断点
刷新界面,拦截请求,修改请求参数后,放行,如下图:
或 刷新界面,放行请求参数,拦截返回结果,修改返回值,如下图:
(5) charles弱网测试
Proxy→Throttle Settings