Python+Requests接⼝测试教程(1):Fiddler抓包⼯具
本书涵盖内容:fiddler、http协议、json、requests+unittest+报告、bs4、数据相关(mysql/oracle/logging)等内容。
刚买须知:本书是针对零基础⼊门接⼝测试和python+requests⾃动化的,⾸先本书确实写的⽐较基础,对基础内容也写的很详细,所以⼤神绕道。
为什么要先学fiddler?
学习接⼝测试必学http协议,如果直接先讲协议,我估计⼩伙伴们更懵,为了更好的理解协议,先从抓包开始。
结合抓包⼯具讲http协议更容易学⼀些。
1.1 抓firefox上https请求
⼆、fiddler设置
1.打开菜单栏:Tools>Fiddler Options>HTTPS
sql2008怎么卸载干净
2.勾选Decrypt HTTPS traffic,⾥⾯的两个⼦菜单也⼀起勾选了
三、导出证书
1.点右上⾓Actions按钮
2.选第⼆个选项,导出到桌⾯,此时桌⾯上会多⼀个⽂件:,如图。
四、导⼊到firefox浏览器
1.打开右上⾓浏览器设置》选项》⾼级》证书》查看证书》证书机构》导⼊
2.勾选⽂件导⼊
3.打开⽂件后,会弹出个框,勾选三个选项就完成操作啦。
如果还不能成功,那就重启浏览器,重启电脑了。
1.2 证书导出失败问题
前⾔
在点Actions时候出现Export Failed:The root certificate could not be located.最近有很多⼩伙伴在fiddler导出证书的时候,遇到⽆法导出的问题,收集了⼏种解决办法,供参考。
⼀、证书⽆法导出
1.在点Actions时候出现Export Failed:The root certificate could not be located.
⼆、⽆法导出问题解决⽅案
1.⾸先确保安装的 Fiddler 是较新的版本,先关闭fiddler
2.下载并安装Fiddler证书⽣成器
1.3 只抓APP的请求
前⾔
fiddler在抓⼿机app的请求时候,通常也会抓到来⾃PC的请求,导致会话消息太多,那么如何把来⾃pc的请求过滤掉,只抓来⾃APP的请求
呢?
必备环境:
1.电脑上已装fiddler
2.⼿机和电脑在同⼀局域⽹
⼀、设置
1.fiddler>Tools>Fiddler Options>Connections 勾选Allow remote computers to connect。
2.记住这⾥的端⼝号:8888,后⾯会⽤到。
⼆、查看电脑IP
1.打开cmd,输⼊:ipconfig,记住这个IPv4地址。
>>ipconfig
三、设置代理
1.⼿机设置->WLAN设置->选择该wifi,点右边的箭头(有的⼿机是长按弹出选项框)。
2.选择修改⽹络配置:
配置主机名:与主机电脑IP地址保持⼀致
端⼝号:8888
3.保存后就可以抓到来⾃⼿机的请求了。
四、抓APP上的HTTPS请求
五、设置过滤
1.⼿机上设置代理后,这时候fiddler上抓到的是pc和app所有的请求,如果pc上打开⽹址,会很多,这时候就需要开启过滤功能了。
2.打开fiddler>Tools>Fiddler Options>HTTPS>...from remote clients only,勾选这个选项就可以了
...from all processes :抓所有的请求
...from browsers only :只抓浏览器的请求
...from non-browsers only :只抓⾮浏览器的请求
...from remote clients only:只抓远程客户端请求
(注意:如果⼿机设置代理后,测完之后记得恢复原样,要不然⼿机⽆法正常上⽹。)
1.4 查看get与post请求
2.点开右侧Inspectors下的Headers区域,查看Request Headers
3.Request Headers区域⾥⾯的就是请求头信息,可以看到打开博客园⾸页的是get请求
⼆、post请求
三、如何出需要的请求
1.打开fiddler后,左边会话框区域刷刷刷的很多请求,那么如何有效的出⾃⼰需要的请求呢?
2.⾸先第⼀步:清屏(cls),在左下⾓命令⾏输⼊cls,清空屏幕
(清屏也可以使⽤快捷键Ctrl+X)
4.如上图,红⾊框框这个地⽅就是host地址,红⾊圈圈地⽅就是url的路径(yoyoketang),也就是博客⾸页的地址了,那这个请求就是博客⾸页的请求了。
四、get和post请求参数区别
1.关于get和post的功能上区别就不说了,⼤家⾃⼰查资料,这⾥主要从fiddler抓包的层⾯查看请求参数上的区别
<请求的Raw参数查看,主要分三部分:
--第1部分是请求url地址
--第2部分是host地址
--第3部分是请求头部信息header
3.再查看博客登录请求的Raw信息,post的信息分四部分。
json数组语法--前⾯3块内容都⼀样,第3部分和第4部分中间会空⼀⾏
--第4部分内容就是post请求的请求body(get请求是没body的)
1.5 ⼯具介绍(request和response)
前⾔
本篇简单的介绍下fiddler界⾯的⼏块区域,以及各⾃区域到底是⼲什么⽤的,以便于更好的掌握这个⼯具
⼀、⼯具简介
1.第⼀块区域是设置菜单,这个前⾯3篇都有介绍
2.第⼆块区域是⼀些快捷菜单,可以点下快捷功能键
3.第三块左边是抓捕的请求会话列表,每⼀个请求就是⼀个会话
4.第四块右边上⽅区域是request请求的详细信息,可以查看Headers、Cookies、Raw、JSON等
5.第五块右边下⽅区域就是response信息,可以查看服务端返回的json数据或其它信息
6.第六块区域左下⾓⿊⾊的那块⼩地⽅,虽然很不起眼,容易被忽略掉,这地⽅是命令⾏模式,可以输⼊简单的指令如:cls,执⾏清屏的作⽤等
⼆、会话框
1.会话框主要查看请求的⼀些请求的⼀些基本信息,如# 、result、protocol、host、url、body、 cachi
ng、content-type、process
2、#:会话框列表最左侧,#号这⼀栏是代表这个请求⼤概是什么内容,<>这个符号就是我们⼀般要测试的请求与响应的类型。
--200,请求ok;2xx⼀般是服务器接受成功了并处理
--3xx,重定向相关
--4xx,404最常见的的就是不到服务器,⼀般是请求地址有问题
--5xx,这个⼀般是服务器本⾝的错误
4.protocol:这个是协议类型,如http、https
5.host:主机地址或域名
6.url:请求的路径
7.body:该条请求产⽣的数据⼤⼩
8.caching:缓存相关
10.process:客户端类型
三、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.
6.raw:查看⼀个完整请求的内容,可以直接复制
7.json:查看json数据
四、decode解码
1.如果response的TextView区域出现乱码情况,可以直接点下⽅黄⾊区域解码
网页代码2.也可以选中上⽅快捷菜单decode,这样后⾯的请求都会⾃动解码了
1.6 接⼝测试(Composer)
前⾔
Fiddler最⼤的优势在于抓包,我们⼤部分使⽤的功能也在抓包的功能上,fiddler做接⼝测试也是⾮常⽅便的。对应没有接⼝测试⽂档的时候,可以直接抓完包后,copy请求参数,修改下就可以了。
⼀、Composer简介
点开右侧Composer区域,可以看到如下界⾯,就是测试接⼝的界⾯了
1.请求⽅式:点开可以勾选请求协议是get、post等
2.url地址栏:输⼊请求的url地址
3.请求头:第三块区域可以输⼊请求头信息
5.会话框选中该记录,查看测试结果:
--选中该会话,点开Inspectors
--response区域点开Raw区域
--Raw查看的是HTML源码的数据
--也可以点WebView,查看返回的web页⾯数据
四、模拟post请求
1.请求类型勾选post
2.url地址栏输⼊对应的请求地址
3.body区域写登录的json参数,json参数直接copy上⼀步抓包的数据,如下图红⾊区域
4.header请求头区域,可以把前⾯登录成功后的头部抓包的数据copy过来
(注意,有些请求如果请求头为空的话,会请求失败的)
5.执⾏成功后查看测试结果:
--执⾏成功如第三所⽰的图,显⽰success=True
--执⾏失败如下图所⽰,显⽰
message=Invalid length for a Base-64 char array or string.
success=False
哪种方式不会使线程进入阻塞状态1.7 get请求(url详解)
2.再看⼀个稍微复杂⼀点的url,在百度输⼊框输⼊:上海悠悠博客园
3.查看url地址栏,对⽐之前的百度⾸页url地址,后⾯多了很多参数。当然最主要的参数是:wd=上海悠悠博客园(后⾯的⼀⼤串可以暂时忽略)。
4.那么问题来了,这些参数有什么作⽤呢?
可以做个简单的对⽐,在地址栏分别输⼊:
python入门教程(非常详细)书--host:服务器的IP地址或者域名,如图中2所⽰
--port:HTTP服务器的默认端⼝是80,这种情况下端⼝号可以省略。
如果使⽤了别的端⼝,必须指明,例如:192.168.3.111:8080,这⾥的8080就是端⼝
--path:访问资源的路径,如图中3所⽰/s (图中3是把path和请求参数放⼀起了)
--?:url⾥⾯的?这个符号是个分割线,⽤来区分问号前⾯的是path,问号后⾯的是参数
--url-params:问号后⾯的是请求参数,格式:xxx=aaa,如图4区域就是请求参数
--&:多个参数⽤&符号连接
三、请求参数(params)
1.在url⾥⾯请求参数⼀般叫params,但是我们在fiddler抓包⼯具看到的参数是:QueryString
2.QueryString是像服务端提交的参数,其实跟params是⼀个意思,每个参数对应的都有name和value值
3.多个参数情况如下:
1.8 post请求(body)
前⾔上⼀篇讲过get请求的参数都在url⾥,post的请求相对于get请求多了个body部分,本篇就详细讲解下body部分参数的⼏种形式。
注意:post请求的参数可以放在url,也可以放在body,也可以同时放在url和body,当然post请求也可以不带参数。
只是⼀般来说,post请求的参数习惯放到body部分
⼀、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=false
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格式
<!--?xml version="1.0"?-->
<methodcall>
<methodname&StateName</methodname>
<params>
进制转换方法的口诀小数<param>
<value><i4>41</i4></value>
</params>
</methodcall>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论