前言:

为什么需要获取网络请求?获取网络请求就能够得到HTTP协议的组成部分

怎么获取网络请求?、使用浏览器的调试模式中的network就可以获取;、charles/fildder工具来获取网络请求

API测试有必要吗?有必要。两个维度:金字塔模型、客户端与服务端之间传输

一、Charles实战

Charles是⼀个抓包工具,使用它可以获取到WEB请求以及APP请求。我们首先需要安装它,它的下载地址为:https://www.charlesproxy.com/

1、Charles安装步骤:

step1:将下载好Charles解压到电脑D:\test\tools\charlesproxy,运行charles-proxy-3.11.2-win64.msi,一路next即可,将其路径放到D:\Program Files下;

step2:破解找到应用程序--->charles.jar --->打开D:\Program Files\Charles\lib---->将charles.jar进行替换即可,此时打开Charles,出现这样的界面:

Charles抓取ios charles抓取api_Charles抓取ios

此时,Charles安装成功!

2、Charles的基本配置:

2-1:安装证书

step1:需要把证书安装到可信任的安全列表中

Charles抓取ios charles抓取api_状态码_02

step2:会弹出如下的框:选择安装证书 --->确定即可。

Charles抓取ios charles抓取api_Charles抓取ios_03

step3:会弹出如下的框:选择本地计算机 --->下一步即可。

Charles抓取ios charles抓取api_状态码_04

step4:按照如下箭头指引的操作即可。

Charles抓取ios charles抓取api_服务器_05

step5:打开网站,以百度为例,会发现已经可以正常访问了。

2-2:配置443的端口信息

step1:选择Proxy

Charles抓取ios charles抓取api_状态码_06

step2:选择之后,按照如下的步骤进行操作。

注意:我们在不使用Charles时,请取消勾选,Enable SSL Proxying,否则有可能会出现断网情况。

默认端口:http:80、https:443、email:25、ssh:22、tomcat:8080、mysql:3306、nginx:80

Charles抓取ios charles抓取api_Charles抓取ios_07

将以上配置完成后,打开网站,以百度为例,会发现已经可以正常访问了。

3、Charles进行弱网测试

弱网络的测试目的是测试不同网络类型来验证程序的响应时间是否是用户可以接受的时间范围内。

3-1、使用Charles等工具来模拟弱网络的情况

步骤如下:

step1:打开Charles工具,选择如下操作:

Charles抓取ios charles抓取api_服务器_08

step2:进行上述的选择之后,会弹出如下的框,勾选Enable Throtting,进行不同网络类型的选择。

Charles抓取ios charles抓取api_状态码_09

以淘宝为例,进行弱网测试:

请求响应时间:就是一个完整的HTTP请求流程的时间之和。

选择4G网:

Charles抓取ios charles抓取api_客户端_10

选择3G网:

Charles抓取ios charles抓取api_客户端_11

3-2、使用浏览器的调试模式来模拟弱网络的情况

在之前的移动端测试(一)里已经讲述了。

4、使用Charles工具来模拟高并发(同一时刻客户端向服务端发送大量的网络请求)

步骤如下:以淘宝为例

step1:打开Charles工具,选择如下操作:

Charles抓取ios charles抓取api_Charles抓取ios_12

step2:进行上述的选择之后,会弹出如下的框,假设并发量为20:

Charles抓取ios charles抓取api_Charles抓取ios_13

step3:会看到如下内容:

Charles抓取ios charles抓取api_状态码_14

此时,模拟高并发成功!

5、一个API测试通过的标准是:、协议状态码、响应数据、业务状态吗(可能有,也可能没有)

二、PostMan实战

下载好PostMan客户端接口测试工具,在服务支持 | WEB服务、网站、数据库的解决方案和技术支持 - WEBXML网址里,可以寻找各种想要的请求。

1、PostMan常用状态码(Status Code)

在HTTP的协议中,客户端发送请求给服务端,服务端响应回复给客户端的同时,还会带上HTTP协议的状态码。

2XX系列:代表请求已成功被服务器接收、理解、并接受。这系列中最常见的有200、201、204状态码。

200状态码:是请求成功,也就是客户端发送请求给服务端,服务端响应回复给客户端这个过程是成功的。

201状态码:是用于创建服务器对象的请求,表示请求成功并且服务器创建了新的资源,且其 URL 已经随Location头信息返回。假如需要的资源无法及时建立的话,应当返回 ‘202 Accepted’

204状态码:一般是删除成功。

3XX系列:代表需要客户端采取进一步的操作才能完成请求,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location域中指明。这系列中最常见的有301、302状态码。

301状态码:被请求的资源已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

例如:建设一个网站后,将网站的url变换了,重新申请一个域名,但是希望之前的用户访问之前url仍然可以访问到,就可以做一个重定向新的url下面。比如京东最早域名www.360buy.com名重定向到现在www.jd.com

302状态码:临时性重定向

例如:用户在未登录时访问个人中心页面,这时可以临时重定向到登录的url。

4XX系列:表示请求错误。代表了客户端可能发生了错误,妨碍了服务器的处理。常见有:401、404状态码。

400状态码:Bad Request 客户端请求错误 :a、请求头不对 b、请求参数不对

401状态码:请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应,柔和一些。

403状态码:服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交,粗暴一些。

404状态码: 请求失败,请求所希望得到的资源未被在服务器上发现。请求的资源不存在,比如网址输入不正确。

405状态码:请求方法不正确。get/post/delect/put。

415状态码:请求头错误。

5xx系列:代表了服务器在处理请求的过程中有错误或者有异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。常见有500、504状态码。

500状态码:服务器内部错误,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现,建议把这些信息反馈给后台的程序员去定位具体的错误原因。

504状态码:ApiGateWay TimeOut (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

401、403状态码的处理

401 Unauthorized 无权限访问该系统

打开postman工具,输入:get:http://101.43.158.84:5000/v1/api/books,运行它,会报出401认证。

此时解决思路是:

step1:在浏览器里打开该网址,此时,可以看到弹出框,取消的同时进行,进行network扑获,可以看到:

Charles抓取ios charles抓取api_客户端_15

 

Charles抓取ios charles抓取api_服务器_16

是BASIC认证,也就是基本认证。

step2:再次返回刚刚postman页面,进行如下操作:

Charles抓取ios charles抓取api_Charles抓取ios_17

会发现此时的Header(6)

step3:输入相应的用户名和密码

Charles抓取ios charles抓取api_Charles抓取ios_18

会发现此时的Header(7),多了一个Authorization

Charles抓取ios charles抓取api_服务器_19

step4:执行该程序:会出现200

Charles抓取ios charles抓取api_客户端_20

本次鉴权成功!

403 Forbidden 有权限但是禁止访问

打开postman工具,输入:get:http://101.43.158.84:5000/v1/api/books,运行它,会报出403认证。

Charles抓取ios charles抓取api_状态码_21

此时解决思路是:

step1:在浏览器里打开该网址,此时进行network扑获,可以看到和401一样的内容,接下来的解决思维和上述解决401问题一样。

2、PostMan常用请求

2-1、PostMan发送GET的请求

以获得国内手机号码归属地省份、地区和手机卡类型信息为例:

打开该网址:MobileCodeWS Web 服务 (webxml.com.cn)找到如下内容:

Charles抓取ios charles抓取api_Charles抓取ios_22

GET请求方法:URL:http://+域名+资源的详细地址

即:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?

打开PostMan工具:

Charles抓取ios charles抓取api_客户端_23

GET请求方法:GET请求方法是在Query Params里面填写的,也就是说填写后,在URL?后是它的格式是:key1=value1&key2=value2所以,GET方法的请求参数又称为路径参数。

这里:mobileCode = 字符串(手机号码,最少前7位数字)(key1=value1),userID = 字符串(商业用户ID) (key2=value2)

2-2、PostMan常用请求

常用的几种数据格式:a、XML的格式、b、表单数据格式、c、JSON数据格式

a、XML的格式

以获得国内手机号码归属地省份、地区和手机卡类型信息为例:

打开该网址:MobileCodeWS Web 服务 (webxml.com.cn)找到如下内容:

Charles抓取ios charles抓取api_Charles抓取ios_24

POST请求方法:URL:http://+域名+资源的详细地址

即:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?

打开PostMan工具:

step1:在Headers里添加,Content-Type:Text/xml

Charles抓取ios charles抓取api_Charles抓取ios_25

step2:将上图SOAP 1.1里最大红框里的内容复制到body里

Charles抓取ios charles抓取api_服务器_26

在上图最底下我们可以看到运行成功!

b、表单数据格式

以获得国内手机号码归属地省份、地区和手机卡类型信息为例:

打开该网址:MobileCodeWS Web 服务 (webxml.com.cn)找到如下内容:

Charles抓取ios charles抓取api_客户端_27

打开PostMan工具:

step1:在Headers里添加,Content-Type:multipart/form-data

Charles抓取ios charles抓取api_客户端_28

step2:在body里选择表单的形式:x-www-form-urlencoded

Charles抓取ios charles抓取api_状态码_29

在上图最底下我们可以看到运行成功!

c、JSON数据格式

以用户登录注册为例:

打开该网址:http://101.43.158.84/#/login,并鼠标右键“检查”,勾选“Preserve log”和“Disable cache”

输入账户:13484545195

输入密码:add888

在打开检查里的“network”同时,点击“登录”,找到如下内容并一一复制到postman里:

Charles抓取ios charles抓取api_状态码_30

Charles抓取ios charles抓取api_客户端_31

Charles抓取ios charles抓取api_Charles抓取ios_32

打开PostMan工具:

step1:在Headers里添加:

Content-Type:Application/Json

Referer:http://101.43.158.84/

User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

Charles抓取ios charles抓取api_状态码_33

step2:在body里选择raw和的形式:x-www-form-urlencoded,并将浏览器里的内容复制过来

Charles抓取ios charles抓取api_状态码_34

在上图最底下我们可以看到运行成功!

3、PostMan断言处理

断言(assert):在postman里面,写assert的地方是Tests

Tests里面可以编写js的代码

3-1:以风暴平台为例:

步骤如下:

step1:打开该网址:http://101.43.158.84/#/login

输入账户:13484545195

输入密码:add888

step2:用network扑获

step3:在PostMan,”Headers“里输入如下:

Charles抓取ios charles抓取api_服务器_35

step4:在PostMan,”Body“里输入如下:

Charles抓取ios charles抓取api_Charles抓取ios_36

运行结果如上图所示。

验证协议状态码

选择Tests,根据如下的指示进行操作即可。

其中:模板里的内容可以进行相应的替换。

在PostMan里,注释的操作和Python里一样。

Charles抓取ios charles抓取api_服务器_37

通过Test Results,可以看到运行成功!

获取相应数据并输出到调试模式

//获取相应数据并输出到调试模式
console.log(JSON.parse(responseBody))

运行结果如下:

Charles抓取ios charles抓取api_服务器_38

定义一个变量来获取响应数据

//定义一个变量来获取响应数据
var jsonData=JSON.parse(responseBody)

运行结果如下:

Charles抓取ios charles抓取api_Charles抓取ios_39

进行登录页面的断言验证

//先定义变量
var jsonData=JSON.parse(responseBody)
//验证用户名的正确性
tests["验证用户名的正确性"]=jsonData.user.username==="无涯"
//验证电话号码的正确性
tests["验证电话号码的正确性"]=jsonData.user.telephone==="13484545195"
//验证is_active的正确性
tests["验证is_active的正确性"]=jsonData.user.is_active===true

对照Body下的Pretty来进行断言

Charles抓取ios charles抓取api_Charles抓取ios_40

运行结果如下:

Charles抓取ios charles抓取api_服务器_41

数据层级类型--变量={"a":"b","c":{"d":"f"}}

var data={"username":"Mike","age":18,"address":{"city":"Beijing"}}

console.log(data.username,data.age,data.address.city)

运行结果如下:

Charles抓取ios charles抓取api_客户端_42

数据层级类型--变量={"a":[{"d":"f"},{"b":"c"}]}

var list={"school":[{"name":"西交大"},{"name":"长安大学"}]}
console.log(list.school[0].name)
console.log(list.school[1].name)

运行结果如下:

Charles抓取ios charles抓取api_客户端_43

3-2:以boss直聘平台为例:

步骤如下:

step1:在PostMan里输入网址:https://www.zhipin.com/wapi/zpCommon/data/position.json

step2:运行结果如下图所示:

Charles抓取ios charles抓取api_Charles抓取ios_44

分别提取:“后端开发”和“Java”

//先定义变量
var jsonData=JSON.parse(responseBody)
// 验证职位名称是"后端开发"的正确性
tests["验证职位名称是‘后端开发’的正确性"]=jsonData.zpData[0].subLevelModelList[0].name==="后端开发"
// 验证职位名称是"Java"的正确性
tests["验证职位名称是‘Java’的正确性"]=jsonData.zpData[0].subLevelModelList[0].subLevelModelList[0].name==="Java"

运行结果如下:

Charles抓取ios charles抓取api_客户端_45