Yandex坦克工具
tanktools的Python项目详细描述
Yandex Tank在负载测试后准备带有统计信息的文件。 tanktools模块有助于分析此类文件并转换为dataframe。 您可以在手动模式下使用pandas模块来处理数据帧 或者使用内置函数
使用pcap2ammo从pcap或har文件生成yandex坦克弹药 或是纸条完全提取HTTP请求 有头部和身体。
所以你可以:
- 计算分位数
- 获取有关计时、延迟、状态代码的信息
- 按时间戳、标记和其他列提取请求
- 分组并分析特定数据,如总/部分RPS, 平均请求/响应大小
- 计算统计指标
- 将PCAP文件转换为弹药
- 将har文件转换为弹药
- 过滤并修改弹药生成请求
安装
pipinstalltanktools
示例
按时间戳选择数据帧
可以按时间和总计数分析一部分统计信息
fromtanktoolsimportphoutflags={'from_date':'2018-01-18 20:09:50.123','to_date':'2018-01-18 20:10:00.456','limit':100}data=phout.parse_phout('phout.log',flags)print("Total count: %d"%phout.size(data))
Total count: 100
打印百分比
data=phout.parse_phout('phout.log')phout.print_quantiles(data,'receive_time')
Percentiles for 150030 requests from 2018-01-18 20:09:42.983 to 2018-01-18 20:10:55.108: quantile (%) receive_time (mks) 10.0 9 20.0 9 30.0 10 40.0 10 50.0 10 60.0 10 70.0 11 80.0 12 90.0 13 95.0 14 98.0 16 99.0 17 100.0 716
注意
注意,计时是以微秒计算的。
打印延迟中值
data=phout.parse_phout('phout.log')# Convert and print timing in millisecondsprint("\n\nLatency median: %d ms"%int(data.latency.median()/1000))
Latency median: 30 ms
获取RPS
data=phout.parse_phout('phout.log')rps=phout.get_rps(data)
打印http响应统计信息
data=phout.parse_phout('phout.log')phout.print_http_reponses(data)
HTTP code count percent (%) 500 83429 56.38 200 61558 41.60 502 2944 1.99 0 41 0.03
选择200个OK响应并打印延迟中值
data=phout.parse_phout('phout.log')selected_http_responses=data[data.proto_code==200]print("Latency median for 200 OK: %d"%selected_http_responses.latency.median())
Latency median for 200 OK: 3539
打印平均请求/响应大小
print("Avg. Request / Response: %d / %d bytes"%(data.size_in.astype(float).mean(),data.size_out.astype(float).mean()))
Avg. Request / Response: 364 / 26697 bytes
注意
注意需要将数据转换为float,以便正确处理mean函数
第n次请求时打印RPS
print("RPS at request:")chunk_size=int(phout.size(data)/2)forstartinrange(0,phout.size(data),chunk_size):data_subset=phout.subset(data,start,chunk_size)print("\t%s: %.2f"%(start+chunk_size,phout.get_rps(data_subset)))
RPS at request: 73986: 2062.50 147972: 2530.56
pcap2ammo
将PCAP文件转换为yandex坦克弹药
pcap2ammo file.pcap
73 GET https://rambler.ru/ HTTP/1.1\r\n Host: rambler.ru\r\n Content-Length: 0\r\n\r\n
有关http请求的计数统计信息
pcap2ammo -S file.pcap Stats: total: 1 complete: 1 incorrect: 0 incomplete: 0
打印到文件
pcap2ammo -o out.ammo file.pcap
添加或删除标题
应用于包含指定标题的所有请求
pcap2ammo --add-header 'Referer: http://domain.com' --add-header 'X-Ip: 1.1.1.1' file.pcap
pcap2ammo --delete-header 'Content-Length' file.pcap pcap2ammo --delete-header 'Connection' --add-header 'Connection: keep-alive' file.pcap
过滤TCP/IP数据包
pcap2ammo -f 'ip.src==10.10.10.10 and tcp.dport==8080' file.pcap
过滤HTTP数据包
pcap2ammo -F '"rambler.ru" in http.uri' file.pcap
您可以在筛选器中使用逻辑表达式
pcap2ammo -F '"keep-alive" in http.headers["connection"] or "Keep-alive" in http.headers["connection"]' file.pcap
http头上的字符串函数
pcap2ammo -F '"keep-alive" in http.headers["connection"].lower()' file.pcap
也可使用排除过滤器
pcap2ammo -F '"rambler.ru" != http.headers["host"]' file.pcap
har2ammo
将pcap文件转换为Yandex坦克弹药
har2ammo file.har
73 GET https://rambler.ru/ HTTP/1.1\r\n Host: rambler.ru\r\n Content-Length: 0\r\n\r\n
有关HTTP请求的计数统计信息
har2ammo -S file.har Stats: total: 1 complete: 1 incorrect: 0 incomplete: 0
打印到文件
har2ammo -o out.ammo file.har
添加或删除标题
适用于所有请求,包含指定的标题
har2ammo --add-header 'Referer: http://domain.com' --add-header 'X-Ip: 1.1.1.1' file.har
har2ammo --delete-header 'Content-Length' file.har har2ammo --delete-header 'Connection' --add-header 'Connection: keep-alive' file.har
过滤http数据包
har2ammo -F '"rambler.ru" in http.uri' file.har
您可以在过滤器中使用逻辑表达式和python函数
har2ammo -F '"keep-alive" in http.headers["connection"] or "Keep-alive" in http.headers["connection"]' file.har har2ammo -F '"keep-alive" not in http.headers["connection"].lower()' file.har
请参阅pcaper包描述中有关筛选器的详细信息。