python自动化接口测试(一)

第 1 章 Fiddler

1.1 抓 firefox 上 https 请求

fiddler 是一个很好的抓包工具,默认是抓 http 请求的,对于 pc 上的 https 请求,会提示
网页不安全,这时候需要在浏览器上安装证书。

1.1.1 fiddler 设置

1.打开菜单栏:Tools>Fiddler Options>HTTPS
2.勾选 Decrypt HTTPS traffic,里面的两个子菜单也一起勾选了
在这里插入图片描述
PS:fidder这里就不多说了直接上干货吧

1.2 查看 get 和 post 请求

1.2.1 get 请求
1.打开 fiddler 工具,然后浏览器输入博客首页地址:
http://www.cnblogs.com/yoyoketang/
2.点开右侧 Inspectors 下的 Headers 区域,查看 Request Headers
3.Request Headers 区域里面的就是请求头信息,可以看到打开博客园首页的是 get 请求
1.4.2 post 请求
1.打开登录首页:https://passport.cnblogs.com/user/signin
2.输入账号和密码登录成功后,查看 fiddler 抓包的请求头信息,可以看出是 post 请求
在这里插入图片描述
1.2.3 get 和 post 请求参数区别
1.关于 get 和 post 的功能上区别就不说了,大家自己查资料,这里主要从 fiddler 抓包的
层面查看请求参数上的区别
2.get 请求的 Raw 参数查看,主要分三部分:
–第 1 部分是请求 url 地址
–第 2 部分是 host 地址
–第 3 部分是请求头部信息 header
在这里插入图片描述
3.再查看博客登录请求的 Raw 信息,post 的信息分四部分。
–前面 3 块内容都一样,第 3 部分和第 4 部分中间会空一行
–第 4 部分内容就是 post 请求的请求 body(get 请求是没 body 的)
在这里插入图片描述
1.2.4 Request 和 Response
1.Request 是客户端发出去的数据,Response 是服务端返回过来的数据,这两块区域功能差不多
在这里插入图片描述
2.headers:请求头,这里包含 client、cookies、transport 等
3.webfroms:请求参数信息表格展示,更直观。可以直接该区域的参数
4.Auth:授权相关,如果现实如下两行,说明不需要授权
No Proxy-Authorization Header is present.
No Authorization Header is present.
5.cookies:查看 cookie 详情
6.raw:查看一个完整请求的内容,可以直接复制
7.json:查看 json 数据
8.xml:查看 xml 文件的信息
1.2.5 decode 解码
1.如果 response 的 TextView 区域出现乱码情况,可以直接点下方黄色区域解码
在这里插入图片描述
2.也可以选中上方快捷菜单 decode,这样后面的请求都会自动解码了
在这里插入图片描述
**

1.6 接口测试 Composer

Fiddler 最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler 做接口
测试也是非常方便的。
对应没有接口测试文档的时候,可以直接抓完包后,copy 请求参数,修改下就可以了。

**1.6.1 Composer 简介
点开右侧 Composer 区域,可以看到如下界面,就是测试接口的界面了
在这里插入图片描述
1.请求方式:点开可以勾选请求协议是 get、post 等
2.url 地址栏:输入请求的 url 地址
3.请求头:第三块区域可以输入请求头信息
4.请求 body:post 请求在此区域输入 body 信息
5.执行:Execute 按钮点击后就可以执行请求了
6.http 版本:可以勾选 http 版本
7.请求历史:执行完成后会在右侧 History 区域生成历史记录
1.6.2 模拟 get 请求(类似于postman)
1.在 Composer 区域地址栏输入博客首页:http://www.cnblogs.com/yoyoketang/
2.选择 get 请求,点 Execute 执行,请求就可以发送成功啦
3.请求发送成功后,左边会话框会生成一个会话记录,可以查看抓包详情
4.右侧 history 区域会多一个历史请求记录
在这里插入图片描述
5.会话框选中该记录,查看测试结果:
–选中该会话,点开 Inspectors
–response 区域点开 Raw 区域
–Raw 查看的是 HTML 源码的数据
–也可以点 WebView,查看返回的 web 页面数据
在这里插入图片描述
1.6.3 Json 数据
1.有些 post 的请求参数和返回参数是 Json 格式的,如博客园的登录请求:
https://passport.cnblogs.com/user/signin
2.查看 json 数据如下图
在这里插入图片描述
1.6.4 模拟 post 请求
1.请求类型勾选 post
2.url 地址栏输入对应的请求地址
3.body 区域写登录的 json 参数
4.header 请求头区域,可以把前面抓包的数据 copy 过来
(注意,有些请求如果请求头为空的话,会请求失败的)
在这里插入图片描述
5.执行成功后查看测试结果:
–执行成功如第三所示的图,显示 success=True
–执行失败如下图所示,显示
message=Invalid length for a Base-64 char array or string.
success=False
在这里插入图片描述
**

1.7 get 请求

**上一篇介绍了 Composer 的功能,可以模拟 get 和 post 请求,get 请求有些是不带参数的,
这种比较容易,直接放到 url 地址栏就行。有些 get 请求会带有参数,本篇详细介绍 url
地址格式。
1.7.1 url 详解
1.url 就是我们平常打开百度在地址栏输入的:https:www.baidu.com,如下图,这个是最简
单的 url 地址,打开的是百度的主页
2.再看一个稍微复杂一点的 url,在百度输入框输入:上海悠悠博客园
在这里插入图片描述
3.查看 url 地址栏,对比之前的百度首页 url 地址,后面多了很多参数。当然最主要的参数
是:wd=上海悠悠博客园(后面的一大串可以暂时忽略)。
4.那么问题来了,这些参数有什么作用呢?
可以做个简单的对比,在地址栏分别输入:
https:www.baidu.com
https://www.baidu.com/s?wd=上海悠悠博客园
对比打开的页面有什么不一样,现在知道作用了吧,也就是说这个多的"/s?wd=上海悠悠博
客园"就是搜索的结果页面
1.7.2 url 解析
以抓取的上面的Url为例子

一个完整的url地址基本格式如下
https://host:prot/path?xxx=aaa&ooo=bbb
–http/https:这个是协议类型
–host:服务器的 IP 地址或者域名
–port:HTTP 服务器的默认端口是 80,这种情况下端口号可以省略。
如果使用了别的端口,必须指明,例如:192.168.3.111:8080,这里的 8080 就是端口
–path:访问资源的路径,
–?:url 里面的?这个符号是个分割线,用来区分问号前面的是 path,问号后面的是参数
–url-params:问号后面的是请求参数,格式:xxx=aaa,
–&:多个参数用&符号连接
1.7.3 请求参数(params)
1.在 url 里面请求参数一般叫 params,但是我们在 fiddler 抓包工具看到的参数是:
QueryString
2.QueryString 是像服务端提交的参数,其实跟 params 是一个意思,每个参数对应的都有
name 和 value 值
3.多个参数情况如下
在这里插入图片描述

1.7.1 UrlEncode 编码

1.如果 url 地址的参数带有中文的,一般在 url 里面会是这样的,如第二点里的
wd=%E4%B8%8A%E6%B5%B7%E6%…
像看到%E4 这种编码的就是经过 url 编码过的,需要解码就能看到是什么中文了
2.用 urlencode 在线编码/解码工具,地址:
http://tool.chinaz.com/tools/urlencode.aspx

1.8 post 请求(body)

前言上一篇讲过get 请求的参数都在url里,post 的请求相对于get请求多了个 body部分,
本篇就详细讲解下 body 部分参数的几种形式。

1.8.1 body 数据类型

常见的 post 提交数据类型有四种:
1.第一种:application/json:这是最常见的 json 格式,也是非常友好的深受小伙伴喜欢
的一种,如下
{“input1”:“xxx”,“input2”:“ooo”,“remember”:false}
2.第二种:application/x-www-form-urlencoded:浏览器的原生 form 表单,如果不设置
enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数
input1=xxx&input2=ooo&remember=fals
3.第三种:multipart/form-data:这一种是表单格式的,数据类型如下
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name=“text”
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name=“file”; filename=“chrome.png”
Content-Type: image/png
PNG … content of chrome.png …
------WebKitFormBoundaryrGKCBY7qhFd3TrwA–
4.第四种:text/xml:这种直接传的 xml 格式

examples.getStateName 41

1.8.2 json 格式

1.打开博客的登录页面,输入账号密码后抓包,查看 post 提交数据,点开 Raw 查看整个请求的原始数据
在这里插入图片描述
2.前面讲过 post 的请求多一个 body部分,上图红色区域就是博客园登录接口的 body 部分,
很明显这种格式是前面讲到的第一种 json 格式
3.查看 json 格式的树状结构,更友好,可以点开 JSON 菜单项
在这里插入图片描述
4.查看这里的 json 数据,很明显传了三个参数:
–input1:这个是登录的账号参数(加密过)
–input2:这个是登录的秘密参数(加密过)
–remember:这个是登录页面的勾选是否记住密码的选项,False 是不记住,True 是记住

1.8.3 x-www-form-urlencoded

1.登录博客园后,打开新随笔,随便写一个标题和一个正文后保存,抓包数据如下
在这里插入图片描述
2.如上图的这种格式,很明显就属于第二种了,这种类型的数据查看,在 WebFrom 里面查看

1.9 打断点 bpu

1.9.1 断点

1.为什么要打断点呢?
比如一个购买的金额输入框,输入框前端做了限制 100-1000,那么我们测试的时候,需要
测试小于 100 的情况下。很显然前端只能输入大于 100 的。这是我们可以先抓到接口,修改
请求参数,绕过前端,传一个小于 100 的数,检查服务端的功能是否 OK。
也就是说接口测试其实是不需要管前端的,主要测后端的功能。Fiddler 作为代理服务器的
作用其实就相当于上面故事里面的小王,传纸条的作用,Fiddler(小王)修改了请求参数(小
纸条),是为了验证服务端功能(女神 C)。
2.Fiddler 可以修改以下请求
–Fiddler 设置断点,可以修改 HTTP 请求头信息,如修改 Cookie,User-Agent 等
–可以修改请求数据,突破表单限制,提交任意数字,如充值最大 100,可以修改成 10000
–拦截响应数据,修改响应体,如修改服务端返回的页面数据
2.Fiddler 可以修改以下请求
–Fiddler 设置断点,可以修改 HTTP 请求头信息,如修改 Cookie,User-Agent 等
–可以修改请求数据,突破表单限制,提交任意数字,如充值最大 100,可以修改成 10000
–拦截响应数据,修改响应体,如修改服务端返回的页面数据

1.9.2 断点的两种方式

1.before response:这个是打在 request 请求的时候,未到达服务器之前
–屌丝 A 传给小王的时候,小王在这个时候拦截了小纸条,未传给女神 C
2.after response:也就是服务器响应之后,在 Fiddler 将响应传回给客户端之前。
–女神 C 回了小纸条,小王拿到后拦截了,未传给屌丝 A

1.9.3 全局断点

1.全局断点就是中断 fiddler 捕获的所有请求,先设置下,点击 rules-> automatic
breakpoint ->before requests
在这里插入图片描述
2.选中before requests选项后,打开博客园首页:http://www.cnblogs.com
看到如下 T 的标识,说明断点成功
在这里插入图片描述
3.打完断点后,会发现所有的请求都无法发出去了,这时候,点下 Go 按钮,就能走下一步
4.找到需要修改的请求后,选中该条会话,右侧打开 WebFroms,这时候里面的参数都是可以修改的了

1.9.4 单个断点

已经知道了某个接口的请求地址,这时候只需要针对这一条请求打断点调试,在命令行中输
入指令就可以
请求前断点(before response): bpu

  1. 论坛登录接口:https://passport.cnblogs.com/user/signin
  2. 命令行输入:bpu https://passport.cnblogs.com/user/signin 回车
    在这里插入图片描述
    3.请求登录接口的时候,就会只拦截登录这个接口了,此时可以修改任意请求参数
    4.取消断点,在命令行输入: bpu 回车就可以了
    响应后断点(after requests): bpafter
  3. 论坛登录接口:https://passport.cnblogs.com/user/signin
  4. 在命令行输入:bpafter https://passport.cnblogs.com/user/signin 回车
    3.登录博客园,会发现已经拦截到登录后服务器返回的数据了,此时可以修改任意返回数据
    4.取消断点,在命令行输入: bpafter 回车就可以了

1.9.5 拦截来自某个网站所有请求

1.在命令行输入:bpu www.cnblogs.com
2.打开博客园任意网页,发现都被拦截到了
3.打开博客园其他网站,其它网站可以正常请求
4.说明只拦截了来自部落论坛(www.cnblogs.com)的请求
5.清除输入 bpu 回车即可

1.9.6 命令行其它相关指令

Bpafter, Bps, bpv, bpm, bpu
这几个命令主要用于批量设置断点
Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应
Bpv xxx: 中断指定请求方式的全部 session 响应
Bpm xxx: 中断指定请求方式的全部 session 响应 、、同于 bpv xxx
Bpu xxx:与 bpafter 类似
当这些命令没有加参数时,会清空所有设置了断点的 HTTP 请求。
更多的其他命令可以参考 Fiddler 官网手册

1.12 http 协议简介

1.12.1 什么是 http

1.HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从
万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
2.HTTP(HyperText Transfer Protocol)协议是基于 TCP 的应用层协议,它不关心
数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传
输 HTML 页面的内容。默认端口是 80
3.http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议

1.12.2 请求报文

1.HTTP 请求报文主要由请求行、请求头部、空一行、请求正文 4 部分组成
(当然,如果不算空的一行,那就是 3 个部分)
2.下图是 fiddler 工具抓的 post 请求报文(工具使用看 fiddler 篇),可以对照上图,
更清楚的理解 http 的请求报文内容。
在这里插入图片描述

1.12.3 响应报文

2.下图就是一个请求的响应内容,用 fiddler 抓包工具可以查看
在这里插入图片描述

1.12.4 完整的 http 内容

1.一个完整的 http 协议其实就两块内容,一个是发的请求,一个服务端给的响应。
2.以下是请求 https://github.com/timeline.json 这个地址后,用 fiddler 抓包导出
为文本,查看完整的 http 请求内容。(具体操作查看《fiddler 1.10 会话保存》)
在这里插入图片描述

1.13.1 8 种请求方法

1.请求行有三个主要参数:请求方法、url、协议版本。
2.请求方法包含:

  1. get
    请求指定的页面信息,并返回实体主体
  2. post
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
    POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  3. HEAD
    类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
  4. OPTIONS
    返回服务器针对特定资源所支持的 HTTP 请求方法,也可以利用向 web 服务器发送‘*’的请
    求来测试服务器的功能性
  5. PUT
    向指定资源位置上传其最新内容
  6. DELETE
    请求服务器删除 Request-URL 所标识的资源
  7. TRACE
    回显服务器收到的请求,主要用于测试或诊断
    8) CONNECT
    HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    注意:
    1)方法名称是区分大小写的。
    2)最常见的的就是通常说的 get 和 post 方法。

1.13.2 url 详解

1.打开百度,在搜索框输入任意文字,搜索后,复制地址栏的 url 地址:
https://www.baidu.com/s?wd=%E4%B8%8A%E6%B5%B7%E6%82%A0%E6%82%A0%E5%8D%9A%E5%AE%
A2&rsv_spt=1&rsv_iqid=0x91baaabd00070ba2&issp=1&f=8&rsv_bp=1&rsv_idx=2
2.那么一个完整的 url 地址,基本格式如下:
https://host:port/path?xxx=aaa&ooo=bbb
–http/https:这个是协议类型,如图中 1 所示
–host:服务器的 IP 地址或者域名,如图中 2 所示
–port:HTTP 服务器的默认端口是 80,这种情况下端口号可以省略。
如果使用了别的端口,必须指明,例如:192.168.3.111:8080,这里的 8080 就是端口
–path:访问资源的路径,如图中 3 所示/s (图中 3 是把 path 和请求参数放一起了)
–?:url 里面的?这个符号是个分割线,用来区分问号前面的是 path,问号后面的是参数
–url-params:问号后面的是请求参数,格式:xxx=aaa,如图 4 区域就是请求参数
–&:多个参数用&符号连接

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值