ab基本压测
# ApacheBench(ab)压力测试指南
ApacheBench(ab)是 Apache 提供的一个非常简单的 HTTP 压力测试工具,常用于评估服务器的处理能力、响应时间以及稳定性。在进行 POST 请求 测试时,往往需要提供不同的请求体格式,并带上 Token 或 Cookie 等认证信息来模拟真实请求。
- 支持的 POST 请求格式。
- 如何在请求头中添加 Token 和 Cookie 进行身份验证。
- ApacheBench 的各项常用参数及其作用。
- 返回结果的分析。
# 一、POST 请求常见格式
POST 请求可以有不同的数据格式,以下是几种常见的 POST 数据格式。
# 1. 表单数据(application/x-www-form-urlencoded)
这是最常见的 POST 请求 格式,通常用于传统的 HTML 表单提交。
格式示例:
username=yourusername&password=yourpassword
在 ApacheBench 中,你可以将这个数据写入文件(如 post_data.txt
),然后使用 -p
参数发送 POST 请求。
发送请求命令:
ab -n 100 -c 10 -p post_data.txt -T "application/x-www-form-urlencoded" https://api-test.sx1211.com/sms/ip
# 2. JSON 数据(application/json)
一些现代的 API 采用 JSON 格式来传递请求体数据。这种方式通常用于 RESTful API。
格式示例:
{
"username": "yourusername",
"password": "yourpassword"
}
2
3
4
如果 API 接受 JSON 格式的请求体数据,你可以将其保存到文件(如 post_data.json
)中,并发送请求。
发送请求命令:
ab -n 100 -c 10 -p post_data.json -T "application/json" https://api-test.sx1211.com/sms/ip
# 3. Multipart 数据(multipart/form-data)
这种格式通常用于文件上传或包含二进制数据的请求。
格式示例:
--boundary
Content-Disposition: form-data; name="file"; filename="example.jpg"
Content-Type: image/jpeg
<binary file content>
--boundary--
2
3
4
5
6
这种格式使用较为复杂,ApacheBench 本身不太适合进行 multipart 数据的测试,通常使用其他工具(如 curl
)来进行上传测试。
# 二、请求头中的 Token 和 Cookie
在进行认证请求时,我们通常需要将 Token 或 Cookie 添加到请求头中。以下是如何在 ApacheBench 中实现这一点。
# 1. Bearer Token(令牌认证)
如果 API 使用 Bearer Token 进行身份验证,我们需要在请求头中添加 Authorization
字段。
命令示例:
ab -n 100 -c 10 -H "Authorization: Bearer <your_token>" https://api-test.sx1211.com/sms/ip
# 2. Cookie(会话认证)
如果你的 API 使用 Cookie 进行身份验证(如通过 JSESSIONID
),可以使用 -H
参数添加 Cookie
请求头。
命令示例:
ab -n 100 -c 10 -H "Cookie: JSESSIONID=<your_session_id>" https://api-test.sx1211.com/sms/ip
# 3. 同时使用 Token 和 Cookie
有些情况下,你可能需要在同一个请求头中同时携带 Token 和 Cookie。你可以使用多个 -H
参数来实现这一点。
命令示例:
ab -n 100 -c 10 -H "Authorization: Bearer <your_token>" -H "Cookie: JSESSIONID=<your_session_id>" https://api-test.sx1211.com/sms/ip
# 三、ApacheBench(ab)常用参数及作用
ApacheBench 提供了一些有用的参数,帮助我们在压力测试时进行灵活控制。以下是一些常用的参数及其作用:
# 1. -n
:指定请求的总数
ab -n 100 https://api-test.sx1211.com/sms/ip
- 该参数指定要发送的请求总数。例如,
-n 100
表示发送 100 个请求。
# 2. -c
:指定并发请求数
ab -c 10 https://api-test.sx1211.com/sms/ip
- 该参数指定并发请求数,即同一时刻并发发送的请求数量。例如,
-c 10
表示 10 个请求并发。
# 3. -p
:指定包含请求体数据的文件
ab -p post_data.txt https://api-test.sx1211.com/sms/ip
- 该参数指定包含 POST 数据的文件。通常配合
-T
参数指定数据类型。
# 4. -T
:指定请求体的内容类型
ab -T "application/json" https://api-test.sx1211.com/sms/ip
- 该参数指定请求体的内容类型,例如
application/json
、application/x-www-form-urlencoded
等。
# 5. -H
:指定请求头
ab -H "Authorization: Bearer <your_token>" https://api-test.sx1211.com/sms/ip
- 该参数用于指定自定义的请求头,可以添加 Token、Cookie 等认证信息。
# 6. -v
:设置详细输出
ab -v 2 https://api-test.sx1211.com/sms/ip
- 该参数用于控制输出的详细程度,
-v 2
输出详细的请求和响应信息,便于调试。
# 7. -k
:启用 Keep-Alive
ab -k https://api-test.sx1211.com/sms/ip
- 启用 HTTP Keep-Alive,使得多个请求复用同一个连接,减少连接建立的开销。
# 四、返回结果分析
ApacheBench 的输出包含了多个重要指标,帮助我们分析服务器的性能表现。以下是常见的返回结果字段及其含义:
# 1. Requests per second(每秒请求数)
Requests per second: 37.87 [#/sec] (mean)
- 该字段表示服务器每秒能处理的请求数,反映了服务器的吞吐量。高吞吐量意味着服务器能够在单位时间内处理更多请求。
# 2. Time per request(每请求耗时)
Time per request: 264.075 [ms] (mean)
- 该字段表示每个请求的平均响应时间,单位是毫秒(ms)。响应时间越低,表示服务器的响应越快。
# 3. Total transferred(总传输字节数)
Total transferred: 145800 bytes
- 该字段表示所有请求的总数据传输量,单位是字节。可以用来评估服务器的带宽使用情况。
# 4. Failed requests(失败请求数)
Failed requests: 0
- 该字段表示请求过程中发生的失败请求数量。如果失败请求数大于 0,表示服务器存在问题,可能是由于负载过大或配置问题。
# 5. Connection Times(连接时间)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 49 112 39.5 107 203
2
3
- 该部分显示了连接建立和请求处理的时间,包括:
- Connect:连接服务器所需时间。
- Processing:请求处理的时间。
- Waiting:请求等待服务器处理的时间。
- Total:连接建立和处理的总时间。
# 6. 百分比响应时间
Percentage of the requests served within a certain time (ms)
50% 239
66% 255
75% 268
80% 285
90% 319
95% 343
98% 373
99% 386
100% 386 (longest request)
2
3
4
5
6
7
8
9
10
- 这部分显示了不同百分比的请求响应时间,反映了请求的分布情况。例如,50% 的请求响应时间在 239ms 以下,99% 的请求响应时间在 386ms 以下。
# 总结
本文详细介绍了 ApacheBench 的用法,包括如何发送不同格式的 POST 请求、如何在请求头中带上 Token 和 Cookie 进行身份验证,以及 ApacheBench 的各项参数及返回结果的分析。通过这些测试,你可以评估服务器在不同条件下的表现,优化性能,并确保服务器能够应对大流量的并发请求。