如何使用Siege进行压测?
  6HyrTgZXAbVP 2023年11月05日 48 0

Siege是一个HTTP/HTTPS负载测试和基准测试工具,可以模拟多个用户同时访问一个URL。

centos安装Siege

sudo yum install epel-release
sudo yum install siege

使用siege模拟20个并发用户。

siege -c 20 -r 1 http://your_api_endpoint_here/

其中:

-c 20 表示20个并发用户。
-r 1 表示每个用户仅发送1次请求。

请请求内容封装到文本里调用

假设要测试如下请求:

curl --location 'https://api.abcd.org/api/old-style' \
--header 'api-key: quickstart-14dJIGlzIGNvbWluZy4uLi98' \
--form 'text="Draw a cartoon panda"'

要使用siege模拟上述的curl请求并使20个并发用户发起请求,可以使用以下命令:

首先,创建一个名为urls.txt的文件,并将以下内容添加到该文件中:

https://api.abcd.org/api/old-style POST api-key=quickstart-14dJIGlzIGNvbWluZy4uLi98 text=Draw+a+cartoon+panda

然后,使用siege运行测试:

siege -c 20 -r 1 -f urls.txt

其中:

-c 20 表示20个并发用户。
-r 1 表示每个用户只请求一次。
-f urls.txt 指示siege从urls.txt文件中读取要测试的URL。

JSON POST数据测试方式

下面的这个接口请求,转写成可以放到urls.txt里供siege使用的文本:

curl --location --request POST 'https://myendpoint.test.com/system/replace/io' \
--header 'token: bd66fc8b8380483da5bd4d6de96b357d' \
--header 'Content-Type: application/json' \
--data-raw '{
"requestIds": [
"20230709132535568E490BBEAB7AAD1D3F"
]
}'

要在siege中模拟POST请求,需要将请求数据和HTTP方法包含在urls.txt文件中。

请按照以下步骤操作:

创建一个名为post_data.txt的文件,其中包含以下内容:

{
"requestIds": [
"20230709132535568E490BBEAB7AAD1D3F"
]
}

在urls.txt文件中添加以下内容:

https://myendpoint.test.com/system/replace/io POST < post_data.txt

使用siege运行测试:

可以在siege命令行中引用urls.txt文件,并添加所需的HTTP头:

siege -c 20 -r 1 -f urls.txt -H "token: bd66fc8b8380483da5bd4d6de96b357d" -H "Content-Type: application/json"

这应该能够模拟POST请求,并使用提供的JSON数据和HTTP头。

 

如何配置siege通过代理发送请求?

 要使 siege 通过代理服务器发送请求,您需要在其配置文件中设置代理服务器的详细信息。以下是具体步骤:

  1. 找到 siege 的配置文件:
    siege 默认在多个位置查找其配置文件,其中之一是 $HOME/.siegerc(对于用户特定的配置)。
  2. 编辑配置文件:
    使用您喜欢的文本编辑器打开 .siegerc 文件(如果该文件不存在,您可以创建一个)。
  3. 添加代理服务器设置:
    .siegerc 文件中,您可以添加以下两行来指定代理服务器的主机和端口:

    http-proxy-host = proxy_server_host http-proxy-port = proxy_server_port 其中,proxy_server_host 是您的代理服务器的主机名或IP地址,而 proxy_server_port 是代理服务器的端口号。
    例如,如果您的代理服务器位于 192.168.1.100,端口为 8080,则应该添加以下行:

http-proxy-host = 192.168.1.100 http-proxy-port = 8080


  1. 保存并关闭文件:
    保存您对 .siegerc 文件所做的更改,并关闭编辑器。

现在,当您使用 siege 运行测试时,它应该会通过指定的代理服务器发送请求。如果您只是暂时需要使用代理,而不希望修改配置文件,也可以使用环境变量 http_proxy 来指定代理,如:

export http_proxy=http://192.168.1.100:8080 siege -c 10 -r 1 http://www.example.com/

这将导致 siege 使用环境变量中指定的代理服务器,而不是配置文件中的设置。

从 JSON 文件中读取代理服务器的 IP 和端口,然后使用 siege 通过该代理发送请求

 

json数据

{
    "code": "SUCCESS",
    "data": [{
        "proxy_ip": "123.54.55.24",
        "server": "123.54.55.24:59419",
        "area": "河南省商丘市",
        "isp": "电信",
        "deadline": "2023-02-25 15:38:36"
    }],
    "request_id": "83158ebe-be6c-40f7-a158-688741083edc"
}

要从 JSON 文件中读取代理服务器的 IP 和端口,然后使用 siege 通过该代理发送请求,可以使用以下步骤:

  1. 安装 jq: 首先,您需要一个命令行 JSON 解析器。jq 是一个轻量级且强大的命令行 JSON 解析器,可用于从 JSON 文件或字符串中读取数据。
    安装 jq 的方法取决于您的操作系统。例如,在大多数 Linux 发行版上,您可以使用包管理器进行安装:

sudo apt install jq # 对于 Debian/Ubuntu sudo yum install jq # 对于 CentOS


  1. 从 JSON 文件中读取代理服务器的信息:
    使用 jq,您可以从 JSON 文件中读取 server 的值。例如,如果您的 JSON 文件名为 proxy_info.json

PROXY_INFO=$(jq -r '.data[0].server' proxy_info.json)

  1. 这会将代理服务器的 IP 和端口保存到 PROXY_INFO 变量中。
  2. 使用 siege 发送请求:
    有了代理信息后,您可以设置 http_proxy 环境变量并运行 siege

export http_proxy=http://$PROXY_INFO siege -c 10 -r 1 http://www.example.com/


 

 从接口获取 JSON 数据

从一个接口获取 JSON 数据,可以使用 curl 或其他类似的工具获取数据,并结合 jq 从数据中提取所需信息。

以下是一个简单的示例,说明如何从远程接口获取 JSON 数据并提取代理信息,然后使用 siege 通过该代理发送请求:

  1. 获取 JSON 数据:
    使用 curl 调用远程接口并保存输出。例如,如果远程接口的 URL 为 https://api.example.com/getProxyInfo,您可以执行:

JSON_DATA=$(curl -s https://api.example.com/getProxyInfo)

  1. 这会将远程接口的输出保存到 JSON_DATA 变量中。
  2. 从 JSON 数据中提取代理服务器的信息:
    使用 jqJSON_DATA 变量中提取 server 的值:

PROXY_INFO=$(echo $JSON_DATA | jq -r '.data[0].server')

  1. 这会将代理服务器的 IP 和端口保存到 PROXY_INFO 变量中。
  2. 使用 siege 发送请求:
    设置 http_proxy 环境变量并运行 siege

export http_proxy=http://$PROXY_INFO siege -c 10 -r 1 http://www.example.com/


整理成一个脚本

以下是一个简化的 bash 脚本,它从远程接口获取 JSON 数据、提取代理信息并使用 siege 通过该代理发送请求:

#!/bin/bash

# 获取 JSON 数据
JSON_DATA=$(curl -s https://api.example.com/getProxyInfo)

# 从 JSON 数据中提取代理服务器的信息
PROXY_INFO=$(echo $JSON_DATA | jq -r '.data[0].server')

# 设置 http_proxy 环境变量
export http_proxy=http://$PROXY_INFO

# 使用 siege 发送请求
siege -c 10 -r 1 http://www.example.com/

# 如果您不想长时间设置 http_proxy 变量,您可以在脚本结束后取消它
unset http_proxy

为了使用这个脚本:

  1. 将上述内容保存到一个文件中,例如 siege_proxy_test.sh
  2. 为该文件设置执行权限:

chmod +x siege_proxy_test.sh


  1. 运行脚本:

./siege_proxy_test.sh


 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
6HyrTgZXAbVP