生活札记
Fiddler抓包、JMeter性能测试、Postman接口调试工具之自动化测试(一)
一、抓包
抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。
本篇讲的是Fiddler抓包,Charles也是一个很好的抓包工具:Charles安装及使用教程
原理:通过Proxy代理来抓取http、https的请求、响应数据。
二、安装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提供的证书,需要信任才行。
cmd查看ip:ipconfig
通过ip访问:http://192.168.31.130:8888/,默认的端口是8888
2)、配置手机端代理:
fiddler手机抓包配置代理后没有网络:https://blog.51cto.com/u_7605937/2450261
手机能连上电脑(手机和电脑需要在同一个局域网 )
手机和电脑连接同一一个wiFi
电脑通过网线连接到无线路由,手机连接这个无线路由的wiFi
电脑开三个热点,手机连接这个热点
配置手机wifi代理
通过ip访问:http://192.168.31.130:8888/,默认的端口是8888
同时可下载页面提供的证书,安装证书,如果能访问到说明配置成功。
3)、通过抓包工具获取接口、使用python抓取数据:
查询IP:
通过Fiddler查询接口信息:
通过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()
运行结果:
三、网络(局域网、广域网、互联网)、IP、HTTP协议
局域网:连接在同一个交换机或者路由器上面的计算机组
IP范围:255.255.255.255
特点: 192/127开头,192.168.0.1:路由器本身
四、抓包工具
1)、F12开发调试工具:
接口302跳转:Failed to load response data: No resource with given identifierfound,无法使用F12工具抓到返回数据,但是可以通过其他工具,如:Fiddler抓到信息
2)、接口测试应用、过滤断点、网络劫持、弱网测试:
接口测试:
过滤断点:设置规则,过滤抓包数据
网络劫持:
弱网测试: 设置请求、响应延迟
编辑配置:Rules >> Customize Rules
重启配置:Rules >> Performance >> Simulate Modem Speeds
五、JMeter性能测试:
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。
JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。
配置Java环境:
下载: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 # 编码
配置环境变量:
启动:查看版本:jmeter -v,启动:jmeter
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代理服务器中所设置的端口。
3、抓包手写:要求有三点
熟悉协议
熟悉抓包工具
熟悉接口测试工具
Jmeter的组件:jmete的脚本是由不同的组件构成的同一种类型的组件的图标是相同的。
jmeter中的组件有:
测试计划:自带组件,jmeter所有的其他类型组件都是必须位于该组件下
线程组:必选组件,jmeter是通过该组件来控制线程的数量(执行脚本的线程)、循环次数等
逻辑控制器:可选组件,是用来控制脚本的一些执行逻辑
取样器:Sampler,即请求,属于必加组件。我们要去实现接口测试,则需要根据接口类型选择合适的取样器
其它组件:配置元件、定时器、前置处理器、后置处理器、断言、监听器这六大类组件都是辅助组件都是用来服务于取样器组件的
配置元件:是用来完成一些基础配置工作
http信息头管理器:是用来添加http的信息头
http cookie管理器:是用来实现cookie管理功能
定时器:和时间控制有关的组件
前置处理器:运行在请求之前的一些组件
后置处理器:运行在请求之后的组件
断言:是用来实现检查点、断言的组件
监听器:日志组件,用来管理日志
作用域:作用域是值在jmeter中六大辅助组件对于取样器组件的生效,规则定义:辅助组件对于其父级组件、所有同级组件、所有同级组件的子组件有效,定时器、前置处理器是运行在作用域内的每一个请求之前,和组件的先后无关,运行次数等于请求的次数。后置处理器、断言是运行在作用域内的每一个请求之后,和组件的先后无关,运行次数等于请求的次数
六、Postman接口调试工具:
Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。
环境变量:环境变量分为全局变量、局部变量,如果环境变量名称相同,已经选中环境则环境变量覆盖全局变量
处理请求、响应断言验证:Pre-request Script是请求之前处理数据、Tests是请求响应结果处理数据,使用JavaScript脚本
执行接口集合:Run collection是运行接口集合,可以设置执行次数,也可以选中文件方式(json、cvs),需要保证utf-8编码(用编辑器、或者txt另存为),必须保证环境变量名称与文件中的变量参数名称一致,Tests中的参数通过data.变量名称获取对应变量。
Postman Cli:通过postman cli也可生成测试结果。
postman collection run F:\Postman测试接口.postman_collection.json -e F:\天气.postman_environment.json -n 1
配置Cookie:在headers头部设置cookie参数或在Cookies全局配置当前域名下的cookie。
Token配置:大部分需要登录的接口都是按照token的方式来登录,为了不在每个接口都写同一个token参数,可以将token设置成为全局参数或者是在登录接口返回token之后,设置一个变量,然后在其他的接口就可以直接调用变量即可。
proxy代理抓包:可以用postman的代理服务器来抓包,首先需要安装postman下https证书信任。
生成代码、文档:可以方便得生成文档与代码。
文明上网理性发言!
已完结!