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代理

                    保证手机和你的电脑在同一个局域网:  HelpLocal 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代理

                    ProxySSL Proxy Settings

                    弹出的对话框中点击add,添加需要监视的域名。域名支持 *号通配符,如:抓取所有的https请求,可以填写 *:443

                    如果想要抓取qq.com的域名,可以填写 *.qq.com

                  

                  

          3)安装SSL证书到手机设备

                    HelpSSL ProxyingInstall 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(断点),如下图:

批量取消断点:ProxyBreakpoint settings,如下图:

                   

例子11:刷新界面,先打断点

刷新界面,拦截请求,修改请求参数后,放行,如下图:

或    刷新界面,放行请求参数,拦截返回结果,修改返回值,如下图:

(5) charles弱网测试

                    Proxy→Throttle Settings