Yandex坦克工具

tanktools的Python项目详细描述


https://travis-ci.org/travis-ci/travis-web.svg?branch=masterhttps://codecov.io/gh/gaainf/tanktools/branch/master/graph/badge.svghttps://img.shields.io/badge/python-2.7-blue.svghttps://img.shields.io/badge/python-3.5-blue.svghttps://img.shields.io/badge/python-3.6-blue.svghttps://img.shields.io/pypi/l/tanktools.svg

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

获取RPS

data=phout.parse_phout('phout.log')rps=phout.get_rps(data)

选择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

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 --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包描述中有关筛选器的详细信息。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用Scala对Java进行单元测试?   java无法将应用程序部署到Tomcat   java如何在IntelliJ IDEA中创建补丁?   java如何在安卓中编程设置列表视图高度   java如何使用charAt检查字符串是否以AZ或AZ开头?   java在SQL查询中使用非限制值   java函数在不同的Android版本中返回不同的datetime值   java方法应该在实现动作的类中,还是在实现的类中?   java从另一个线程的类访问线程类的公共静态arrayList   java是否像重新引发相同的异常?   java如何从localhost访问本地文件   javaurl。openStream非常慢   java数组越界和空指针异常   java我只是在某种程度上破坏了Netbeans,我不知道如何修复它   java是否可以延迟类的加载,而这些类可能在以后动态加载?   java断开外壳输出到文件   从blob服务回调时出现java Google应用程序引擎错误   java将SparseArray存储在JSON中并使用它   使用IText for Java进行pdf文本定位   java如何更改SearchView的样式?