接口测试该怎么做?持证上岗的Charles,可以帮你做什么?

简介: 上篇文章,我们感受到tcpdump与wireshark的组合之美,原来工具与工具之前不只竞争,还有合作,你是否还记得上篇文章中有一个伏笔,那就是代理工具:charles。本文章针对charles进行讲解,带你继续体验接口测试之旅。charles是一个优雅的名子,你可以称呼它:查尔斯先生。它是一个网络的管理员,你的任何http/https网络消息,都要经过查尔斯先生审核,如果你和查尔斯先生关系好

上篇文章,我们感受到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:“Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。而浏览网页时的代理服务器通常是http代理呦!”
  • 小明:“哈哈,我懂了,那我能浏览网页,不等于我一定可以通过Socks访问Internet对吗”
  • charles:“对的,socks要比http宽松的多!”
  • 小明:“既然charles先生管理网络,那么您一定有方法存储这些网络请求信息吧?”
  • charles:“当然,我最重要的绝活就是记录,所有的请求和响应都会记录到session中,供大家稍后检查和 分析。你打开菜单栏中的File,在这里可以管理您的session,包括新建,打开,清空等等。”
  • 小明害羞的问:“我可不可以关闭记录呢,等我需要的时候再打开,这样我就能偷偷做一些不为人知的事!”
  • charles会意的笑了笑:“如果关闭记录,Charles会正常通过所有请求,但它们不会记录在session中,你可以点击下面来关闭记录。”
  • 小明:“charles先生,我发现在主界面,有两个选择'Structure'和'Sequence',它们两个有什么区别呢?”
  • charles:“哈哈哈,这可是我的双面镜!我提供了两种显示方式,你可以在view->structure/sequence中切换,也可以在界面中直接切换”
  • charles喝了口茶:“最大的区别是,结构视图提供树图显示,而顺序视图则是以时间顺序展示”
  • 小明:“原来是这样,我看视图下有很多类似链接的东西,都看花眼了,快把您的老花镜借我用用”
  • charles急忙藏好老花镜:“这可不行,不过,我可以教你一个筛选它们办法,这些类似链接的东西是host名,如果你右键host名,会出现一系列对应的操作,比如保存和对焦,这个对焦(focus)的意思是只关注我们想要的信息。”
  • charles:“对焦操作可以让过滤掉没用的信息,比如我只想关注baidu,我可以对百度host进行focus,这样那些非百度的host就会被折叠,就会出现下面这样”
  • 小明放下偷来的老花镜:“哇,太好了,老花镜还您!”
  • charles:“哇呀呀,偷我东西,气死我了!”
  • 小明盯着屏幕看了很久:“这些蓝条好漂亮!”
  • charles昂首挺胸:“那当然,这是chart,我最美丽的地方,chart主要记录了一个资源的生命周期:从请求到等待到响应请求,不仅如此,它还将相关资源分组,比如下面的4张图片是一组。”
  • 小明:“利用chart,就能知道请求在哪花费时间长了,不会傻傻的等待了!”
  • 小明:“既然charles先生这么厉害,可以肆无忌惮的抓取网络请求,那您会不会被警察叔叔抓起来呢?”
  • charles丝毫不紧张:“咱们做的都是合法操作,我有自己的证书,称之为:Charles Root Certificate,在抓取数据时,你很可能会收到关于证书的警告,那很正常,你只需要信任它即可,如果你想一劳永逸,永久信任Charles Root Certificate的话,你可以按照下面的链接来操作”

信任Charles Root Certificate:https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

  • 小明:“这样啊,那证书和SSL有什么关系呢”
  • charles:“你其实在问SSL的工作原理,其实我是中间人,替浏览器查看服务器的证书并签名,但同时会把自己的证书发给浏览器,因此会出现警告,你需要添加到信任序列才能正常使用,下面的一张图清晰明了”
  • 小明:“哈哈,charles老爷爷是一个小能手”
  • charles:“胡说,怎么能叫爷爷呢,人家分明不到30岁”
  • 小明:“这样叫,比较亲切”
  • 小明:“今天好累呀,我要重复发送请求给同学,他好像睡着了,一直没回我消息!”
  • charles:“哎呀,小明,你怎么能一条一条的手动发送呢,我可是有超级工具:负载测试,你右键host名->Advanced Repeat,打开它!”
  • charles:“这个工具有几个难懂的参数,Iterations很容易理解,就是你要发送的次数,Concurrency是并发等级,表示访问该站点的用户数量,以及迭代次数。”
  • 小明:“那我设置发送10次,并发等级为1,发送!”

charles此时会打开一个新的sesscion,并且发送了10次,每次都有对应的详细消息!

  • 小明:“我写的软件好奇怪,在网络好的时候没问题,但信号差的时候明显卡顿,看来我只能一直蹲在卫生间(信号差)调bug了”
  • charles:“哈哈哈,傻孩子,我就自带弱网工具呀,在Proxy->Throttle Settings下,使用前要记得勾选Enable Throttling。”
  • charles顿了顿:“如果你想指定网站,可以勾选下图中的 Only for selected hosts,然后在对话框的下半部分设置中增加指定的hosts项。”
  • 小明有点晕了:“这些参数,好多,好复杂!”
  • charles笑着摸摸小明的头:“小明,人就是这么成长的,总不可能一帆风顺,慢慢用心听,你可以在Throttle Preset下选择网络类型,比如选择56 kbps modem便可以降低网速,而选项的含义,我会在下面列出来”

Throttle Settings 视图中的选项含义如下:
1.Bandwidth:带宽
2.Utilistation:利用百分比
3.Round-trip:往返延迟
4.MTU:字节

  • 小明:“charles爷爷,我用过的很多IDE都自带断点调试功能,您这里有吗?”
  • charles:“断点可是非常重要的工具,怎能没有!你打开Proxy->Breakpoints Settings,勾选 Enable Breakpoints就可以启用断点模式,选择Add,然后填入需要监控的Scheme、Procotol、Host和Port等信息,这样就达到了设置断点的目的。或者可以在某个想要设置断点的请求网址上右击选择Breakpoints来设置断点。”
  • 小明皱了皱眉:“但是这样好麻烦呀,每次都要设置Scheme、Procotol、Host 和 Port 吗”
  • charles:“当然不是,你也可以通过右键host名,选择断点”
  • 小明拍了拍手:“哇,好棒,我一定要多试试这个断点功能”
  • charles:“其实我不仅仅是个代理工具,也可以做到反向代理”
  • 小明困惑的看着charles:“什么是反向代理呀”
  • charles:“反向代理就是客户端想访问服务器,他会优先访问代理服务器,当proxy关口拿到用户请求的时候会转发到代理服务器中的随机某一台。而在用户看来,他只是访问了Proxy服务器而已”。
  • 小明:“那就是说,反向代理就是服务器的代理,客户端根本不知道服务器的存在,只知道代理服务器的存在啦!”
  • charles:“是这样的,你可以在Proxy→Reverse Proxies Settings找到这个功能,这可是很常用的,特别是对于本地开发且需要域名的情况下”。
  • charles:“这个截图的意思是 将本地57689端口映射到www.baidu.com域名的80端口“
  • 小明坏笑:“好困扰,我手机中有很多网络游戏,我可不可以让charles爷爷帮我看看网络游戏有什么数据包呢,我能不能改一改?”
  • charles:“又在打什么坏注意了,我其实可以抓手机上的数据,但电脑和手机需要在同一个wifi网络”
  • 小明兴奋的看着charles:“真的吗,我该怎么做,快教教我”
  • charles无奈的摇了摇头:“你要打开Proxy->Proxy Settings,填入代理端口8888,并勾上 “Enable transparent HTTP proxying” 即完成了代理”
  • charles:“然后,你需要在手机wifi网络中添加代理,输入电脑IP和charles的端口号:8888,就可以抓手机上的网络数据了!”
  • 小明:“太好了,我要去试一试”

10分钟后...

  • 小明:“charles,我抓到数据,但为什么是unknown呢”
  • charles:“明明是你没听我讲完,就自己动手做,你这个是http数据,如果想要抓取http包,你需要下面这样做”

重点来了,我们久违的https终于出场了,charles靠一张证书就解决了加密问题,具体怎么做呢?如果使用的是电脑,按照下面这样安装证书:

选择后,就会出现证书下载,下载成功后会电脑”钥匙串访问“中看见(这里我已经安装并信任过了),然后双击下载的证书,勾选信任即可。
如果使用的是手机:

在SSL Proxying中勾选Install ...Mobile Device 会弹出一个框,用手机(处于代理状态下)登陆指定的url下载证书即可。

这时候你抓https的时候还是发现不行,乱码加unknown(如下图)

这时候我们还需要一步操作,就是将想要抓的https加入到SSL代理中,这样才能被Charles识别并解析。

  • 小明:“哇,是我太心急了,现在不出现乱码了”。

Charles 的重定向功能分 Map Remote 和 Map Local 两种,顾名思义,Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件,下面用一个例子具体说明一下。
5.先保存接口返回数据(右键单击某接口保存为html格式,如下图)

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.再次申请百度

  • fake:表示造一个假的,但可以work。比如用hashmap算法替代数据库,一样可以查询/修改数据。charles利用了map remote实现fake操作。

图片来源网络,侵权即删

  • stub:对有限的行为作预定义回复,咏春拳的木人桩就是stub,无论怎么打,木桩都是雷打不动。比如无论请求什么,返回都是ok,这是一个十足的骗子,charles利用maplocal实现stub操作。
  • mock:可以理解为更高级的stub,可自定义行为,charles利用rewrite实现mock操作。
  • proxy:代理。charles利用反向代理实现proxy操作。

以上便是对fake,stub,mock,proxy的介绍,你可以理解为坑蒙拐骗,所以charles并没有我们想象的那样善良。
不过,他也有自己的好兄弟:requests。由于文章字数有限,下一篇我将介绍requests,并向您展示charles与requests的完美组合。
cahrles是一位称职的网络管理员,本文章从界面到重要功能,系统的介绍了charles工具的使用。
使用charles,你不仅可以在电脑端收发网络数据,甚至可以在手机端收发网络数据。每个学习者都是小明,对新软件充满了好奇,但现实中是没有charles先生的,所有的疑问需要自己探索,自己学习,只有自己动手得到的,才是自己的。

相关文章
|
10天前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
52 11
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
65 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
80 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
270 7
Jmeter实现WebSocket协议的接口测试方法
|
3月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
287 3
快速上手|HTTP 接口功能自动化测试
|
3月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
58 5
|
2月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
49 0
|
4月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
5月前
|
存储
Postman 接口测试配置 Pre-request Script
Postman 接口测试配置 Pre-request Script
239 5
Postman 接口测试配置 Pre-request Script
|
4月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~