性能测试-虚拟机环境安装以及wrk性能测试工具

1、VMware安装

安装方法:http://t.zoukankan.com/tanghaorong-p-13210470.html

注意不要勾选升级

2、打开ova文件、启动虚拟机,登录后用xshell操作

如下图打开ova文件:

 

 

修改虚拟机的存储路径:

 

 导入报错,重试就可以:

 

 

导入后再虚拟机配置后再启动虚拟机,网络选择NAT模式,因为是centos系统,该模式好配置

 

登录成功后,ifconfig获取服务器IP,再用XSHELL操作linux系统,这样比直接再VMware上输入命令要方便很多

3、裸机安装依赖包-git vim gcc wget unzip 

# 安装依赖包,全空系统,初始化安装的一些软件
yum install git vim gcc wget unzip -y

4、wrk

4.1 wrk简介

wrk 是一个开源的支持HTTP协议的基准测试工具,它的特点是高并发低损耗,安装部署简单,但是,不适合做多协议及复杂场景的性能测试。

wrk 可以指定持续压测的时间(例如:持续打压30分钟)并且支持 lua 脚本的执行,支持多个URL的压测

4.2 wrk安装

# 使用git下载wrk的源码
git clone https://gitee.com/mirrors/wrk.git
# 安装make  防止系统没有make这个命令,make命令进行编译
yum install make -y
# 进入wrk目录进行编译
cd wrk
# 编译wrk
make

# 验证 wrk是否安装成功,查看版本
./wrk -v
# 获取wrk的帮助信息
./wrk --help

4.3 wrk参数说明

  • -c, 后面跟数字,代表http连接数
  • -d, 后面跟数字,代表持续运行时长
  • -t, 后面跟数字,代表启动多少个线程
  • -s, 后面跟脚本名称,脚本用lua编写
  • -H, 后面跟消息头
  • --latency 代表输出响应的详细信息
  • --timeout 后面跟设置的超时时长
  • -v, 版本信息

4.4 wrk使用、查看对应的线程数-top -H |grep wrk

与连接数netstat -anp |grep '网站ip' |grep ESTABLISHED |wc -l

#参数说明:使用4个线程100个连接,对百度页面进行30s的压测,并要求再压测接口中输入响应延时消息
./wrk -t4 -c100 -d60s --latency https://baidu.com/
# 结果跑完输入到文件中
./wrk -t4 -c100 -d60s --latency https://baidu.com/ >nginx.txt 2>&1 &

参数说明:使用4个线程100个连接,对百度页面进行30s的压测,并要求再压测接口中输入响应延时消息

# 查看线程数
top -H |grep wrk

# 查看连接数
netstat -anp |grep '网站ip' |grep ESTABLISHED |wc -l

执行结果如下:

 

 4.5 LUA脚本

# post.lua
wrk.method = "POST"
wrk.body   = "login=***&password=***"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

wrk -t2 -c6 -d5s -s post.lua https://www.baidu.com

注: 线程数跟 ulimit 有关,centos 默认 ulimit=1024 最大不超过1024个线程,如需更多线程,可以调整 ulimit 值。

4.6 编写脚本批量压测接口(多个接口同时压测)

--以下来自知乎 https://zhuanlan.zhihu.com/p/322365277

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

request = function()
    local headers = { }
    headers['Content-Type'] = "application/json"
    body = '{"uin":"123","lang":"en"}'
    return wrk.format('POST', nil, headers, body)
end

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

#!/bin/sh
# 性能测试结果保存路径设置
RESULT_DIR="/data/home/yawenxu/wrkTestResult/"
# 假如脚本执行传入文件名,则执行
luaFileArr="ff0e_00.lua ff0e_02.lua ff0e_05.lua ff0e_06.lua ff0e_07.lua ff0e_08.lua ff0e_10.lua ff0e_11.lua" # 每个接口post需要的json参数的lua文件 concurrency=${1-1} #开启线程数,用于控制速度 count=${2-1} #保持连接数 continueTime=${3-1} # 持续时间 input_file_name=$4 # 非必填,传入文件名,则执行多个接口
# 下面两个函数,先跳过,看if执行,一个函数为单个接口执行,一个为多个循环执行
exec_single_wrk(){ if [ -f $1 ];then # 第一个参数是脚本名,通过下面多借口调用该函数可知 ./wrk -t $2 -c $3 -d $continueTime --script=$1 --latency --timeout 10 "http://$4" >$RESULT_DIR$1$3"_nginx.txt" 2>&1 & else echo $1" is not exists" fi } exec_loop_wrk(){ for item_name in $luaFileArr # 分别读取LUA脚本 do exec_single_wrk $item_name $concurrency $count "http://api.com/xxx" & # 参数 LUA脚本 线程数 连接数 done } if [ -f $input_file_name ];then #如果sh test.sh 12 5000 10 脚本名称 exec_single_wrk $input_file_name $concurrency $count & else exec_loop_wrk & fi

这个脚本保证了多个接口同时压测,同时将每个接口的压测报告保存到文件里,便于分析。执行命令sh test.sh 12 5000 10 会一次性生成所有接口的压测报告文件

 

posted @ 2022-08-21 01:24  依羽杉  阅读(651)  评论(0)    收藏  举报