霍格沃兹出品 《测试开发实战进阶》课程,资深测试架构师、开源项目作者亲授 BAT 大厂前沿最佳实践。4 个月 20+ 项目实战强化训练,带你一站式掌握 BAT 测试开发工程师必备核心技能(对标阿里P6+,年薪50W+)!学员直推 BAT 名企测试经理,普遍涨薪 50%+!
上篇文章,我们感受到tcpdump与wireshark的组合之美,原来工具与工具之前不只竞争,还有合作,你是否还记得上篇文章中有一个伏笔,那就是代理工具:charles。本文章针对charles进行讲解,带你继续体验接口测试之旅。
charles是一个优雅的名子,你可以称呼它:查尔斯先生。它是一个网络的管理员,你的任何http/https网络消息,都要经过查尔斯先生审核,如果你和查尔斯先生关系好,你会得到这些消息,甚至可以篡改和收发。对,你没看错,charles可以处理https协议消息!上篇文章我们对https协议闻风丧胆,因为https是htttp的加密版,tcpdump和wireshak对这种加密手段束手无策,但charles鹤立鸡群,他强大到可以处理https协议下的消息。
如果代理配置正确您会看到charles先生的全貌,上边是菜单栏,左边记录您访问的每个网站/主机,右侧显示信息细节。它非常强大,只要您学会使用它,就可以看到网络上传输的所有事情。
为了让所有浏览器(或者网络应用)的数据送达到charles手中,您必须设置charles为代理服务器,但每次开启或关闭charles后,都要重新配置,如果您想偷点懒,可以在Proxy->Proxy Settings弹出的对话框中配置行为。
小明:“选项中有两个代理,请问charles先生,他们有什么区别呢?”
小明:“既然charles先生管理网络,那么您一定有方法存储这些网络请求信息吧?”
小明害羞的问:“我可不可以关闭记录呢,等我需要的时候再打开,这样我就能偷偷做一些不为人知的事!”
小明:“charles先生,我发现在主界面,有两个选择’Structure’和’Sequence’,它们两个有什么区别呢?”
小明:“原来是这样,我看视图下有很多类似链接的东西,都看花眼了,快把您的老花镜借我用用”
charles:“对焦操作可以让过滤掉没用的信息,比如我只想关注baidu,我可以对百度host进行focus,这样那些非百度的host就会被折叠,就会出现下面这样”
小明放下偷来的老花镜:“哇,太好了,老花镜还您!”
小明盯着屏幕看了很久:“这些蓝条好漂亮!”
小明:“利用chart,就能知道请求在哪花费时间长了,不会傻傻的等待了!”
小明:“既然charles先生这么厉害,可以肆无忌惮的抓取网络请求,那您会不会被警察叔叔抓起来呢?”
信任Charles Root Certificate:https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
小明:“哈哈,charles老爷爷是一个小能手”
小明:“今天好累呀,我要重复发送请求给同学,他好像睡着了,一直没回我消息!”
charles:“这个工具有几个难懂的参数,Iterations很容易理解,就是你要发送的次数,Concurrency是并发等级,表示访问该站点的用户数量,以及迭代次数。”
charles此时会打开一个新的sesscion,并且发送了10次,每次都有对应的详细消息!
小明:“我写的软件好奇怪,在网络好的时候没问题,但信号差的时候明显卡顿,看来我只能一直蹲在卫生间(信号差)调bug了”
小明有点晕了:“这些参数,好多,好复杂!”
Throttle Settings 视图中的选项含义如下:
1.Bandwidth:带宽
2.Utilistation:利用百分比
3.Round-trip:往返延迟
4.MTU:字节
小明:“charles爷爷,我用过的很多IDE都自带断点调试功能,您这里有吗?”
小明皱了皱眉:“但是这样好麻烦呀,每次都要设置Scheme、Procotol、Host 和 Port 吗”
小明拍了拍手:“哇,好棒,我一定要多试试这个断点功能”
charles:“其实我不仅仅是个代理工具,也可以做到反向代理”
小明:“那就是说,反向代理就是服务器的代理,客户端根本不知道服务器的存在,只知道代理服务器的存在啦!”
charles:“这个截图的意思是 将本地57689端口映射到www.baidu.com域名的80端口“
小明坏笑:“好困扰,我手机中有很多网络游戏,我可不可以让charles爷爷帮我看看网络游戏有什么数据包呢,我能不能改一改?”
charles:“然后,你需要在手机wifi网络中添加代理,输入电脑IP和charles的端口号:8888,就可以抓手机上的网络数据了!”
10分钟后…
charles:“明明是你没听我讲完,就自己动手做,你这个是http数据,如果想要抓取http包,你需要下面这样做”
重点来了,我们久违的https终于出场了,charles靠一张证书就解决了加密问题,具体怎么做呢?如果使用的是电脑,按照下面这样安装证书:
选择后,就会出现证书下载,下载成功后会电脑”钥匙串访问“中看见(这里我已经安装并信任过了),然后双击下载的证书,勾选信任即可。
如果使用的是手机:
在SSL Proxying中勾选Install …Mobile Device 会弹出一个框,用手机(处于代理状态下)登陆指定的url下载证书即可。
这时候你抓https的时候还是发现不行,乱码加unknown(如下图)
这时候我们还需要一步操作,就是将想要抓的https加入到SSL代理中,这样才能被Charles识别并解析。
6.对本地的html进行修改
7.设置charles进行map local
8.此时再次请求百度
在 Charles 的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。
9.设置参数Toos->Map Remote
10.查看访问结果,你会发现,www.baidu.com会被重定向到www.sougou.com
Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。
11.打开Tools->Rewrite,对内容进行替换,下面把页面中“我的关注”替换为霍格沃兹
12.再次申请百度
往期精彩好文:
工具在接口测试中发挥什么样的作用?
测试开发必备技能之 Dubbo 接口测试技术
更多技术文章分享
题图引用自 Real Python
接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。
在发起请求后,我们使用一个变量 r 存储响应的内容,也就是 Response 对象。
Response 对象有很多功能强大的方法可以调用,比如直接获取响应头,获取 Unicode 编码后的响应内容,获取二进制的响应内容,获取原始的响应内容等等。
获得响应头
获得编码后的响应值:
还可以使用 r.raw 获得原始响应内容,r.content 获得二进制的响应内容,另外还有编码为 JSON 格式的响应内容,会在后面的章节进行详述。
安装 JSON 库:
响应状态码断言:
assert 是 Python 的内置函数,用来判断表达式,当表达式条件为 False 的时候就会触发异常。
r.status_code 是 Response 对象内的一个方法,用于获得返回值的状态码。
assert r.status_code==200 就是在判断状态码是否等于200,如果不等于200则会抛出异常。
反例:响应状态码断言,判断响应状态码是否为400
从上个例子可以知道,这个响应状态码应该是 200,因为与 400 不相等,所以抛出了异常。
在测试过程中,大部分接口的返回值都为 JSON 格式。所以,掌握如何对 JSON 响应值进行断言这一技能,可以更轻松的完善接口自动化测试用例。
r.json() 对于响应值 r 先进行 JSON 编码:
对于字典格式,可以通过 dict[“key”] 的方式拿到 value 值.
对于列表格式,可以通过 list[index] 拿到对应索引的 value 值。
在 JSON 的断言之中,主要应用的就是字典和列表自带的查找方法。如果碰到混合或者嵌套的情况,只需要一层一层拨开,直到找到需要进行断言的字段即可。
字典格式断言,判断 headers 中的 Host 为 httpbin.org
1.第一层是 key 值为 “header” 的 value
2.第二层是 key 值为 “Host” 的 value
3.判断 key 值为 “Host” 的 value 值是否与 “httpbin.org” 相等
字典混合列表格式断言,判断 hogwarts 对应的列表的第一位是 ‘a’
4.第一层是 key 值为 ‘form’ 的 value
5.第二层是 key 值为 ‘hogwarts’ 的 value
6.第三层是索引为 0 的 value
7.判断上一步索引为 0 的 value 是否等于 “a”
更多内容,我们在后续章节详细解读。
原文链接
更多技术文章分享
15 期热招中,入群获取完整大纲
Python 测试开发实战进阶,挑战阿里P6+,年薪50W+!
接口测试框架实战(五) | 测试数据的数据驱动
接口测试框架实战(四) | 通用 API 封装实战
接口测试框架实战(三) | APIObject 模式、原则与应用
接口测试框架实战(二) | 搞定多环境下的接口测试
接口测试框架实战(一) | 流程封装与基于加密接口的测试用例设计
干货 | 一文搞定 pytest 自动化测试框架(一)
干货 | 一文搞定 pytest 自动化测试框架(二)
Python 自动化测试(三): pytest 参数化测试用例构建
Python 自动化测试(四):数据驱动
Python 自动化测试(五): Pytest 结合 Allure 生成测试报告
干货 | 一文搞定 Linux 常用高频命令
原文链接
更多技术文章分享