searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用wrk进行多接口压测实践

2023-11-20 01:52:08
288
0

简介

wrk 是针对  HTTP(HTTPS) 协议的轻量级性能测试工具,wrk的优点是支持多线程,通过多线程和事件模式,对目标机器产生大量的负载。

wrk 的劣势是目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对我们后端开发人员来说,应付日常接口性能验证还是比较友好的。

wrk安装简单、轻量,还可以配合lua脚本定制测试过程,灵活性高。

 

压测术语说明

1. 吞吐率QPS

概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests

2. 并发连接数

概念:某个时刻服务器所接受的请求数目

 

安装wrk

本次测试环境为linux环境,通过github下载wrk安装包很慢,这里下载本地文件再上传进行安装;

解压wrk文件,解压成功后,目录下就会有一个wrk文件夹;进入到该文件夹后make。
编译成功后,目录下会有wrk可执行文件;

$ ./wrk --help

如果编译过程中,出现如下错误:
若报错gcc: Command not found,则需安装gcc,参考wrk编译报错gcc: Command not found
若报错fatal error: openssl/ssl.h: No such file or directory,则需要安装openssl的库。

 

wrk参数说明

-c --conections 保持的连接数(会话数),连接数需要在测试过程中多次调试,找到QPS达到最大临界点的最大并发量;由于服务器有自身的负载极限,也会出现连接数越大QPS越低的情况,这种情况是因为连接数设置的过高,导致待测系统超出自身能承受的负载。

-d --duration 压测持续时间(s)
-t --threads   开启的线程数,用于控制并发请求速度。最大值一般是cpu总核心数的2-4倍
-s --script 加载lua脚本(post请求写一些参数到脚本里)
-H --header 在请求头部添加一些参数
     --latency 压测报告输出请求回包花费时间分布
     --timeout 请求的最大超时时间(s),这个很有用

 

实践两个接口同时压测

1、编写lua脚本,因为接口需要json格式参数,所以首先编写lua脚本,在lua脚本里添加json参数 remain01.lua如下

request = function()
    local path ="/api/report/remain_ip_inner/"
    local headers = { }

    headers['Content-Type'] = "application/json"
    headers["platformId"] = "41f64827f25f468595ffa3a5deb5d15d"
    headers["resourceType"] = "ip"
    return wrk.format('GET', path, headers, nil)
          --根据参数和全局变量wrk生成一个http请求函数签名:
          --wrk.format(method, path, headers, body)
end

remain02.lua如下


request = function()
    local path ="/api/report/remain_ip/"
    local headers = { }

    headers['Content-Type'] = "application/json"
    headers["platformId"] = "41f64827f25f468595ffa3a5deb5d15d"
    headers["resourceType"] = "ip"
    return wrk.format('GET', path, headers, nil)
          --根据参数和全局变量wrk生成一个http请求函数签名:
          --wrk.format(method, path, headers, body)
end

 

2、编写一个简单的批量压测脚本get_remain.sh:

#!/bin/env/sh

resultDir="./wrkResult/"
luaFile="remain01.lua remain02.lua" # 每个接口lua文件
thread=${1-64} #开启线程数默认64
concurrency=${2-64}  #并发连接数默认64
continueTime=${3-10}  # 持续时间默认10秒
exec_single_wrk(){
        if [ -f $1 ];then
                ./wrk -t ${thread} -c ${concurrency} -d ${continueTime} --script=$1 --latency "h t t p ://$4"  > ${resultDir}$1$3".txt" 2>&1 &
        else
                echo $1" is not exists"
        fi
}

exec_loop_wrk(){
        for item_name in $luaFile
        do
                exec_single_wrk ${item_name} ${thread} ${concurrency} "api.com/xxx" &
        done
}

exec_loop_wrk &

 

3、执行命令for i in {64..100} ;do sh get_remain.sh 64 $i 10;done

多个接口同时压测,同时将每个接口的压测报告保存到文件里便于分析。压测结果示例如下:

 

压测时模拟实际情况,对实际有同时请求的很多接口同时压测,并且压测还需要考虑cpu使用率和系统负载情况等多方面因素。

0条评论
0 / 1000
榕树
2文章数
1粉丝数
榕树
2 文章 | 1 粉丝
榕树
2文章数
1粉丝数
榕树
2 文章 | 1 粉丝
原创

使用wrk进行多接口压测实践

2023-11-20 01:52:08
288
0

简介

wrk 是针对  HTTP(HTTPS) 协议的轻量级性能测试工具,wrk的优点是支持多线程,通过多线程和事件模式,对目标机器产生大量的负载。

wrk 的劣势是目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对我们后端开发人员来说,应付日常接口性能验证还是比较友好的。

wrk安装简单、轻量,还可以配合lua脚本定制测试过程,灵活性高。

 

压测术语说明

1. 吞吐率QPS

概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests

2. 并发连接数

概念:某个时刻服务器所接受的请求数目

 

安装wrk

本次测试环境为linux环境,通过github下载wrk安装包很慢,这里下载本地文件再上传进行安装;

解压wrk文件,解压成功后,目录下就会有一个wrk文件夹;进入到该文件夹后make。
编译成功后,目录下会有wrk可执行文件;

$ ./wrk --help

如果编译过程中,出现如下错误:
若报错gcc: Command not found,则需安装gcc,参考wrk编译报错gcc: Command not found
若报错fatal error: openssl/ssl.h: No such file or directory,则需要安装openssl的库。

 

wrk参数说明

-c --conections 保持的连接数(会话数),连接数需要在测试过程中多次调试,找到QPS达到最大临界点的最大并发量;由于服务器有自身的负载极限,也会出现连接数越大QPS越低的情况,这种情况是因为连接数设置的过高,导致待测系统超出自身能承受的负载。

-d --duration 压测持续时间(s)
-t --threads   开启的线程数,用于控制并发请求速度。最大值一般是cpu总核心数的2-4倍
-s --script 加载lua脚本(post请求写一些参数到脚本里)
-H --header 在请求头部添加一些参数
     --latency 压测报告输出请求回包花费时间分布
     --timeout 请求的最大超时时间(s),这个很有用

 

实践两个接口同时压测

1、编写lua脚本,因为接口需要json格式参数,所以首先编写lua脚本,在lua脚本里添加json参数 remain01.lua如下

request = function()
    local path ="/api/report/remain_ip_inner/"
    local headers = { }

    headers['Content-Type'] = "application/json"
    headers["platformId"] = "41f64827f25f468595ffa3a5deb5d15d"
    headers["resourceType"] = "ip"
    return wrk.format('GET', path, headers, nil)
          --根据参数和全局变量wrk生成一个http请求函数签名:
          --wrk.format(method, path, headers, body)
end

remain02.lua如下


request = function()
    local path ="/api/report/remain_ip/"
    local headers = { }

    headers['Content-Type'] = "application/json"
    headers["platformId"] = "41f64827f25f468595ffa3a5deb5d15d"
    headers["resourceType"] = "ip"
    return wrk.format('GET', path, headers, nil)
          --根据参数和全局变量wrk生成一个http请求函数签名:
          --wrk.format(method, path, headers, body)
end

 

2、编写一个简单的批量压测脚本get_remain.sh:

#!/bin/env/sh

resultDir="./wrkResult/"
luaFile="remain01.lua remain02.lua" # 每个接口lua文件
thread=${1-64} #开启线程数默认64
concurrency=${2-64}  #并发连接数默认64
continueTime=${3-10}  # 持续时间默认10秒
exec_single_wrk(){
        if [ -f $1 ];then
                ./wrk -t ${thread} -c ${concurrency} -d ${continueTime} --script=$1 --latency "h t t p ://$4"  > ${resultDir}$1$3".txt" 2>&1 &
        else
                echo $1" is not exists"
        fi
}

exec_loop_wrk(){
        for item_name in $luaFile
        do
                exec_single_wrk ${item_name} ${thread} ${concurrency} "api.com/xxx" &
        done
}

exec_loop_wrk &

 

3、执行命令for i in {64..100} ;do sh get_remain.sh 64 $i 10;done

多个接口同时压测,同时将每个接口的压测报告保存到文件里便于分析。压测结果示例如下:

 

压测时模拟实际情况,对实际有同时请求的很多接口同时压测,并且压测还需要考虑cpu使用率和系统负载情况等多方面因素。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0