slow_cooker

长周期负载测试工具
授权协议 Apache 2.0
开发语言 Google Go
所属分类 开发工具、 性能测试和优化
软件类型 开源软件
地区 不详
投 递 者 唐元凯
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

slow_cooker 是一个服务器长周期负载测试工具,与其他大压力测试工具不同的是,slow_cooker 可以在很长一段时间内用可预测的负载和并发级别来测试服务器。而且会定期报告 qps 和延迟。

运行

go build; ./slow_cooker <url> 或 go run main.go <url>

测试

go test ./...

标签表

标签 默认值 描述
-qps 1 发送到每个请求线程后端的 QPS
-concurrency 1 要运行指定的 QPS 级别的 goroutine 的数量,总 QPS 测量为qps * concurrency
-iterations 0 实验的迭代次数。之后优雅退出iterations * interval(默认为 0,表示无限)。
-compress <unset> 如果设置此项,则要求压缩响应。
-data <none> 在请求中包含指定的正文数据。如果数据以“@“开头,则剩余值将被视为读取正文数据的文件路径,或者如果数据值为“@-”,则将从标准输入读取正文数据。
-hashSampleRate 0.0 用于检查请求正文哈希的采样率。[0.0, 1.0] 范围内的区间
-hashValue <none> fnv-1a 哈希值用于检查请求正文
-header <none> 为每个请求添加额外的标头。可以多次指定,格式为key: value.
-host <none> 覆盖每个请求上设置的默认主机 header 值。.
-interval 10s 往标准输出报告信息的频率。
-latencyUnit ms 延迟单位 [ms
-method GET 确定发出请求时使用哪个 HTTP 方法。
-metric-addr <none> 为 Prometheus-/metrics 端点提供服务时使用的地址。如果未设置,则不会提供任何指标。格式为 host:port 或 :port。
-noLatencySummary <unset> 如果设置此项,则最终不会打印延迟的柱状图
-noreuse <unset> 默认自动重连,如果设置此项则不会自动重连
-reportLatenciesCSV <none> 文件名写入 CSV 延迟值,CSV 格式为毫秒桶(每个桶中的请求数)
-timeout 10s 请求超时
-totalRequests <none> 发送请求后退出
-help <unset> 打印所有可用的标志并退出

使用 URL 文件

如果<url>参数以@开头,则参数将被视为文件路径,以读取要发送请求的 URL 列表(用换行符分隔开)。

如果值为@-,则将从标准输入中读取 url 列表。

示例 url 文件内容:

http://localhost:4140/foo
http://localhost:4140/bar
http://localhost:4140/baz

从文件中读取 url 列表:

$ slow_cooker -qps 100 @urllist

标准输入读取 url

$ url_generator | slow_cooker -qps 100 @-

列表文件中的 url 将按顺序处理。

示例用法

$ ./slow_cooker -qps 100 -concurrency 10 http://slow_server

2016-05-16T20:45:05Z 0   7102/0/0 10000 71% 10s 0 [ 12  26  37  91 ] 91
2016-05-16T20:45:16Z 1   7120/0/0 10000 71% 10s 1 [ 11  27  37  53 ] 53
2016-05-16T20:45:26Z 2   7158/0/0 10000 71% 10s 0 [ 11  27  37  74 ] 74
2016-05-16T20:45:36Z 3   7169/0/0 10000 71% 10s 1 [ 11  27  36  52 ] 52
2016-05-16T20:45:46Z 4   7273/0/0 10000 72% 10s 0 [ 11  27  36  58 ] 58
2016-05-16T20:45:56Z 5   7087/0/0 10000 70% 10s 1 [ 11  28  37  61 ] 61
2016-05-16T20:46:07Z 6   7231/0/0 10000 72% 10s 0 [ 11  26  35  71 ] 71
2016-05-16T20:46:17Z 7   7257/0/0 10000 72% 10s 0 [ 11  27  36  57 ] 57
2016-05-16T20:46:27Z 8   7205/0/0 10000 72% 10s 0 [ 11  27  36  64 ] 64
2016-05-16T20:46:37Z 9   7256/0/0 10000 72% 10s 0 [ 11  27  36  62 ] 62
2016-05-16T20:46:47Z 10  7164/0/0 10000 71% 10s 0 [ 11  27  38  74 ] 74
2016-05-16T20:46:58Z 11  7232/0/0 10000 72% 10s 0 [ 11  26  35  63 ] 63

在这个例子中,我们看到服务器太慢而无法跟上我们请求的负载,这种缓慢是通过吞吐量百分比来表示的。

日志格式

在输出中使用垂直对齐来帮助发现异常和发现减速。如果您正在运行很多个小时的测试,建议将报告间隔提高到 60 秒(60s1m)。

$timestamp $good/$bad/$failed $trafficGoal $percentGoal $interval $min [$p50 $p95 $p99 $p999] $max $bhash

bad表示 500 范围内的状态代码。failed表示连接失败。

bhash是正文内容的失败哈希数,大于 0 的值表示存在实际问题。

 相关资料
  • 主要内容:1. 项目依赖文件配置,2. @Test(invocationCount =?),3. @Test(invocationCount = ? threadPoolSize = ?),4. 负载测试示例在本教程中,我们将演示如何使用属性和在网站上执行负载测试或压力测试。 使用的工具 : TestNG 6.8.7 Selenium 2.39.0 Maven 3 我们使用库自动化浏览器来访问网站。创建一个用于测试的Maven项目:TestngSelenium 。 1. 项目依赖文件配置 获取T

  • 我的客户机正在使用EventHub的HTTPendpoint发布事件,这实际上意味着当客户机希望发布事件时,它会向一个特殊的URL发送HTTPS POST请求,例如: 我可以很容易地从本地机器上加载测试这个服务(例如,使用Apache JMeter),但不幸的是,本地机器的资源有限,所以我不能生成很大的负载来测试我的服务。 我说大负荷是什么意思? 如果没有,我如何加载测试我的基于EventHub的

  • 使用 Apache Ant 和 Apache JMeter 频繁进行负载测试 负载测试通常在开发周期的后期执行,但是并不一定要这样。在 让开发自动化的这一期,自动化专家 Paul Duvall 将向您描述如何创建一个运行 JMeter 测试的预订集成构建,发现和修复开发周期中出现的问题。 您的软件系统可供多少用户同时访问?在不引起性能下降的前提下可以加载多少数据?您的系统有多大的吞吐量需求?间隔多

  • 我们目前对应用程序的负载测试是使用jMeter完成的,到目前为止运行良好。我们有三个不同的线程组,可以通过命令行标志分别启用和配置。还可以从命令行配置线程数和目标吞吐量。 我正在寻找的是为每个线程组编程负载场景的可能性。通常jMeter启动所有线程,然后尝试达到其目标吞吐量速率。我想要实现的如下:我配置目标吞吐量速率为每秒500个请求,启动速率为20,增量为20,持续时间为5分钟。jMeter应该

  • 问题内容: 我已经构建了一个对资源需求(即http访问次数)做出反应的应用程序。为了测试它,我想使用ApacheJMeter以编程方式生成http GET请求。不幸的是,我找不到在测试用例的预定义段期间生成不同数量的http GET的任何可能性。例如,测试应如下所示: 希望有可能,谢谢。 问题答案: 吞吐量整形计时器插件允许以不同的速率设置多个流量段 https://jmeter-plugins.

  • 假设我需要编写一个gatling负载测试脚本,它需要调用两个api A1和A2。它首先需要调用A1,A1将返回一个JSON负载,它需要在JSON负载中提取一个字段,并在调用第二个API时使用该字段值。有人能告诉我怎么做吗?此脚本用于负载测试通过HTTP的服务器restful API。

  • 嗨,由于我不知道负载测试,我在学习时有疑问。希望如果它是一个无效的也请让我帮助。 在jmeter中,我们可以简单地记录并正确地进行负载测试。如果是这样的话,如果我从我的客户端加载一些未知的应用程序,可能会导致服务器崩溃。然后,如果未知人员负载测试的服务器崩溃,他们该怎么办。 有没有什么具体的事情要做负载测试,或者只是我们可以在任何网站上做负载测试。请让我知道这件事,即使我的查询也不是有效的……提前

  • 分布式负载测试 该教程描述如何在Kubernetes中进行分布式负载均衡测试,包括一个web应用、docker镜像和Kubernetes controllers/services。关于分布式负载测试的更多资料请查看Distributed Load Testing Using Kubernetes 。 准备 不需要GCE及其他组件,你只需要有一个kubernetes集群即可。 如果你还没有kuber