生活札记

Fiddler抓包、JMeter性能测试、Postman接口调试工具之自动化测试(一)

copylian    1 评论    10511 浏览    2023.03.19

一、抓包

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获重发编辑转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。

本篇讲的是Fiddler抓包,Charles也是一个很好的抓包工具:Charles安装及使用教程

原理:通过Proxy代理来抓取http、https的请求、响应数据。

947566-f51654e6f0018748.jpg

二、安装Fiddler

Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有的“进出”的数据,Fiddler还包含一个简单却功能强大的基于JScript .NET事件脚本子系统,它可以支持众多的HTTP调试任务。

Fiddler抓包教程:https://www.bilibili.com/video/BV1vM4y1V78M

参考教程:https://www.cnblogs.com/conquerorren/p/8472285.html

Fiddler下载https://www.telerik.com/download/fiddler

1)、Fiddler的http、https代理

设置https:Tools >> Options >> Https,并重启,如果是https可能代理会报https证书错误,因为所有的请求被Fiddler代理之后,使用的证书是Fiddler提供的证书,需要信任才行。

微信图片_20230319201913.png

cmd查看ip:ipconfig

微信图片_20230319202938.png

通过ip访问:http://192.168.31.130:8888/,默认的端口是8888

微信图片_20230319203028.png

2)、配置手机端代理:

fiddler手机抓包配置代理后没有网络:https://blog.51cto.com/u_7605937/2450261

手机能连上电脑(手机和电脑需要在同一个局域网 )

        手机和电脑连接同一一个wiFi

        电脑通过网线连接到无线路由,手机连接这个无线路由的wiFi

        电脑开三个热点,手机连接这个热点

微信图片_20230319203429.png

配置手机wifi代理

微信图片_20230319202812.jpg

通过ip访问:http://192.168.31.130:8888/,默认的端口是8888

微信图片_20230319202815.jpg

同时可下载页面提供的证书,安装证书,如果能访问到说明配置成功。

微信图片_20230319203652.png

3)、通过抓包工具获取接口、使用python抓取数据

查询IP:

微信图片_20230319230823.png

通过Fiddler查询接口信息:

微信图片_20230319230847.png

通过Python抓取数据

        # 测试爬取json

        # import bs4  # 网页解析,获取数据

        import json

        import urllib  # 制定URL,获取网页数据

        import urllib.request

        import urllib.error

        import urllib.parse  # 制定URL,获取网页数据

        import re # 正则表达式

        

        # 模拟请求,头部信息

        headers = {

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

        }

        

        # 定义正则

        re_jquery = re.compile(r'jQuery\((.*?)\)')

        

        # 请求网址

        def askUrl(url):

            # 返回html

            html = ""

        

            # 请求

            request = urllib.request.Request(url, headers=headers)

        

            # 处理错误

            try:

                response = urllib.request.urlopen(request)

                html = response.read().decode("utf-8")

                # print(html)

            except urllib.error.URLError as e:

                if hasattr(e, "code"):

                    print(e.code)

                if hasattr(e, "reason"):

                    print(e.reason)

            # 返回数据

            return html

        

        # 主函数

        def main():

            ips = ["183.253.21.207", "18.253.21.208","38.253.21.207", "58.55.21.207"]

            for ip in ips:

                url = "https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query="+ip+"&co=&resource_id=5809&t=1679234974925&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery&_=1679221383331"

        

                # 访问url

                data = askUrl(url)

        

                # 截取jquery的json

                json_data = re.findall(re_jquery, data)

        

                # 转成json

                rdata = json.loads(json_data[0])

                print(rdata["data"][0]["location"])

        

        # 执行

        if __name__ == '__main__':

            main()


运行结果:

微信图片_20230319231327.png

三、网络(局域网、广域网、互联网)、IP、HTTP协议

局域网:连接在同一个交换机或者路由器上面的计算机组

IP范围:255.255.255.255

特点: 192/127开头,192.168.0.1:路由器本身

24795284-66047ac712c8ce52.png


四、抓包工具

1)、F12开发调试工具:

接口302跳转:Failed to load response data: No resource with given identifierfound,无法使用F12工具抓到返回数据,但是可以通过其他工具,如:Fiddler抓到信息

微信图片_20230320104045.png

微信图片_20230320104027.png

2)、接口测试应用、过滤断点、网络劫持、弱网测试:

接口测试:

微信图片_20230320145725.png

过滤断点:设置规则,过滤抓包数据

微信图片_20230320145852.png

网络劫持:

微信图片_20230320150006.png

弱网测试: 设置请求、响应延迟

        编辑配置:Rules >> Customize Rules

        重启配置:Rules >> Performance >> Simulate Modem Speeds

微信图片_20230320150126.png

五、JMeter性能测试:

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

配置Java环境:

微信图片_20230320162857.png

微信图片_20230320162923.png

微信图片_20230320160354.png


下载:https://jmeter.apache.org/download_jmeter.cgi

解压:D:\apache-jmeter-5.5 # 安装路径不能有空格

修改配置:apache-jmeter-5.5\bin\jmeter.properties

        language=zh_CN # 语言包

        sampleresult.default.encoding=utf-8 # 编码

配置环境变量:

微信图片_20230320164805.png

启动:查看版本:jmeter -v,启动:jmeter

微信图片_20230320164652.png

Jmeter的目录结构:

bin目录:该目录下存放的是jmeter的主jar包、主配置文件、启动脚本等

        ApacheJMeter.jar:就是jmeter的主jar包。jmeter的启动是依赖于该iar包。可以通过下列命令来启动jmeter:java -jar ApacheJMeter.jar

        jmeter.bat/jmeter:是jmeter的启动脚本,我们一般可以通过编辑的方式来修改jmet时的JVM参数,根据需要去调整JVM中的heap的大小。set HEAP=-Xms2g -Xmx2g -XX:MaxMetaspaceSize=256m

        jmeter.properties:是jmeter的主配置文件。jmeter中超过80%以上的需要配置的内容在该文件中来实现

docs目录:该目录下存放的是jmeter的api文档,用于二次开发

extras目录:存放的是Jmeter和其区工具集成所需要的文件

lib目录:该目录是jmeter启动时的默认的classpath。这就意味着在使用jmeter进行测是需要import操作(报错: xx class not found)的类都必须打成jar包放入lib目录,lib目录改变,必须重启jmeter才会生效。lib\ext目录:该目录是用来存放jmeter的组件、组件、插件是指集成了jmeter的GUI框架,在GUI模式可见的部分

printable docs目录:该目录存放的是jmeter的官方帮助文档


Jmeter的脚本生成:

一般来说,对于jmeter而言,它的脚本生成方式有三种:

        1、借助第三方工具录制生成:

                badboy:被淘汰

                blazemeter:国内无法注册帐号

        2、使用自带的http代理服务器方式生成:

                第一步:添加线程--线程组

                第二步:添加配置元件--http cookie管理器

                第三步:添加非测试元件--http代理服务器

                第四步:配置http代理服务器并且启动

                        端口:由用户指定,在jmeter所在机器中未被占用即可,和被测试的服务器的服务端口没有任何关系。

                        目标控制器:是用来指定用于存放脚本的组件。建议选择测试计划--线程组。

                        过滤器:用于过滤不需要的抓包。

        第五步:在客户端进行设置,使得客户端的请求通过代理。internet选项--连接--局域网设置勾选为局域网使用代理服务器

                地址:填写jmeter代理服务器所在机器的IP地址。端口:填写jemter代理服务器中所设置的端口。

微信图片_20230322160115.png

微信图片_20230322160301.png

        3、抓包手写:要求有三点

                熟悉协议

                熟悉抓包工具

                熟悉接口测试工具


Jmeter的组件:jmete的脚本是由不同的组件构成的同一种类型的组件的图标是相同的。

jmeter中的组件有:

        测试计划:自带组件,jmeter所有的其他类型组件都是必须位于该组件下

微信图片_20230323135526.png

        线程组:必选组件,jmeter是通过该组件来控制线程的数量(执行脚本的线程)、循环次数等

微信图片_20230323135502.png

        逻辑控制器:可选组件,是用来控制脚本的一些执行逻辑

微信图片_20230323135335.png

微信图片_20230323135232.png

微信图片_20230323135121.png

        取样器:Sampler,即请求,属于必加组件。我们要去实现接口测试,则需要根据接口类型选择合适的取样器

微信图片_20230323135815.png

        其它组件:配置元件、定时器、前置处理器、后置处理器、断言、监听器这六大类组件都是辅助组件都是用来服务于取样器组件的

                配置元件:是用来完成一些基础配置工作

                        http信息头管理器:是用来添加http的信息头

微信图片_20230323135306.png

                        http cookie管理器:是用来实现cookie管理功能

微信图片_20230323135905.png

                定时器:和时间控制有关的组件

微信图片_20230323135216.png

                前置处理器:运行在请求之前的一些组件

                后置处理器:运行在请求之后的组件

                断言:是用来实现检查点、断言的组件

微信图片_20230323135150.png

                监听器:日志组件,用来管理日志

微信图片_20230323135401.png

微信图片_20230323135421.png

微信图片_20230323135431.png

作用域:作用域是值在jmeter中六大辅助组件对于取样器组件的生效,规则定义:辅助组件对于其父级组件、所有同级组件、所有同级组件的子组件有效,定时器、前置处理器是运行在作用域内的每一个请求之前,和组件的先后无关,运行次数等于请求的次数。后置处理器、断言是运行在作用域内的每一个请求之后,和组件的先后无关,运行次数等于请求的次数


六、Postman接口调试工具:

Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。

环境变量:环境变量分为全局变量、局部变量,如果环境变量名称相同,已经选中环境则环境变量覆盖全局变量

微信图片_20230321153222.png

微信图片_20230321153133.png

微信图片_20230321153542.png

处理请求、响应断言验证:Pre-request Script请求之前处理数据、Tests请求响应结果处理数据,使用JavaScript脚本

微信图片_20230321160253.png

微信图片_20230321160326.png

执行接口集合:Run collection是运行接口集合,可以设置执行次数,也可以选中文件方式(json、cvs),需要保证utf-8编码(用编辑器、或者txt另存为),必须保证环境变量名称文件中的变量参数名称一致,Tests中的参数通过data.变量名称获取对应变量。

微信图片_20230321165036.png

微信图片_20230321165115.png

微信图片_20230321165141.png

微信图片_20230321165158.png

Postman Cli:通过postman cli也可生成测试结果。

微信图片_20230322095622.png

微信图片_20230322095732.png

postman collection run F:\Postman测试接口.postman_collection.json -e F:\天气.postman_environment.json -n 1

微信图片_20230322095859.png

配置Cookie:在headers头部设置cookie参数或在Cookies全局配置当前域名下的cookie。

微信图片_20230321172144.png

微信图片_20230321172251.png

微信图片_20230321172356.png

Token配置:大部分需要登录的接口都是按照token的方式来登录,为了不在每个接口都写同一个token参数,可以将token设置成为全局参数或者是在登录接口返回token之后,设置一个变量,然后在其他的接口就可以直接调用变量即可。

微信图片_20230321174106.png

proxy代理抓包:可以用postman的代理服务器来抓包,首先需要安装postman下https证书信任

微信图片_20230322102308.png

微信图片_20230322102407.png

微信图片_20230322102459.png

生成代码、文档:可以方便得生成文档与代码。

微信图片_20230322103141.png

微信图片_20230322103346.png

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!