• 不同环境的性能测试计划


    不同环境下的 JMeter 性能测试,设置基本一致,只是地址,账户等信息不同,本文利用 Shell 脚本和 JMeter 变量进行统一处理

    安装 JMeter

    wget https://mirror.cogentco.com/pub/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz
    tar -zxvf apache-jmeter-5.4.1.tgz -C /opt

    把执行目录加入 PATH

    export PATH="$PATH:/opt/apache-jmeter-5.4.1/bin"
    
    • 这样就可以从任何地方执行 jmeter 命令了

    设置测试计划

    运行 JMeter GUI

    jmeter

    常规设置

    1. 右键单击 Test Plan,把鼠标移至 Add,再移至 Threads(User),点击 Thread Group,设置合适的 Number of Threads (users) 值
    2. 右键单击 Test Plan 下新增的 Thread Group,把鼠标移至 Add,再移至 Config Element,点击 HTTP Request Default,设置 Server Name or IP 为 ${__P(HOST)},Port Number 为 ${__P(PORT)}
    3. 右键单击 Thread Group,把鼠标移至 Add,再移至 Sample,点击 HTTP Request,设置 Name 为 Frontend,Path 为 /
    4. 右键单击 Thread Group,把鼠标移至 Add,再移至 Sample,点击 HTTP Request,设置 Name 为 Backend,Path 为 /api/currentUser
    5. 右键单击 Thread Group,把鼠标移至 Add,再移至 Assertion,点击 Response Assertion,设置 Field to Test 为 Response Code,Patten Matching Rules 为 Equals,点击下方的 Add,输入 200
    • __P 为 JMeter 获取命令行参数的函数

    权限处理

    以上的后端接口是需要先登录才能有权限访问的,权限认证方式为 cookies 或 Authorization Header 中的 token,所以需要先获取这个 token, 并在每次访问时带上

    1. 右键单击 Test Plan,把鼠标移至 Add,再移至 Threads(User),点击 setUp Thread Group
    2. 右键单击 Test Plan 下新增的 setUp Thread Group,把鼠标移至 Add,再移至 Sample,点击 HTTP Request,设置 Name 为 Login,Server Name or IP 为 ${__P(HOST)},Port Number 为 ${__P(PORT)},HTTP Request 的方法为 POST,Path 为 /api/login/account,点击 下方的 Add,分别增加 Name 为 username 和 password,Value 为 ${__P(USERNAME)}${__P(PASSWORD)}
    3. 右键单击 setUp Thread Group,把鼠标移至 Add,再移至 Post Processors,点击 Regular Expression Extractor,设置 Name of created variable 为 token,Regular Expression 为 "token":"(.+?)",Template 为 $1$
    4. 右键单击 setUp Thread Group,把鼠标移至 Add,再移至 Sample,点击 BeanShellSampler,设置 Name 为 Token,Script 为 ${__setProperty(token, ${token})}
    5. 右键单击 Thread Group,把鼠标移至 Add,再移至 Config Element,点击 HTTP Cookie Manager,点击下方的 Add,设置 Name 为 token,Value 为 ${__property(token)},Domain 为 ${__P(HOST)}:${__P(PORT)},Path 为 /
    • "token":"(.+?)" 将返回结果中的 token 的值捕捉为 $1$
    • __setProperty 为 JMeter 设置全局变量的函数
    • __property 为 JMeter 获取置全局变量的函数

    运行测试计划

    直接运行

    以上的计划设置,把地址和账户信息都作为变量,可以在命令行传递,形如:

    mkdir report
    HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
    jmeter -n -t test.jmx
    -J HOST=127.0.0.1
    -J PORT=80
    -J USERNAME=USERNAME
    -J PASSWORD=PASSWORD
    -l log/local-20210620095700.txt
    -e -o report/local-20210620095700

    • report 文件夹必须存在,才能写入报告目录,所以首次需用 mkdir 新建
    • 以上命令使用了 jmeter 的命令选项 -n-t-J-l-e-o
    • local-20210620095700 里面的 html 格式的测试报告,包括表格数据和可视化图表,如下图所示

    脚本处理

    以上命令相对繁琐,而且不同环境需要重新设置每个参数,所以通过 Shell 脚本简化

    设置变量

    export LOCAL_HOST=127.0.0.1
    export LOCAL_PORT=80
    export LOCAL_USERNAME=USERNAME
    export LOCAL_PASSWORD=PASSWORD
    export TESTING_HOST=192.168.1.10
    export TESTING_PORT=80
    export TESTING_USERNAME=USERNAME
    export TESTING_PASSWORD=PASSWORD
    export PRODUCT_HOST=192.168.1.100
    export PRODUCT_PORT=80
    export PRODUCT_USERNAME=USERNAME
    export PRODUCT_PASSWORD=PASSWORD
    

    调用变量

    #!/bin/sh
    
    time=$(date "+%Y%m%d%H%M%S")
    server=${1:-"local"}
    prefix=$(echo $server | tr 'a-z' 'A-Z')_
    HOST=${prefix}HOST
    PORT=${prefix}PORT
    USERNAME=${prefix}USERNAME
    PASSWORD=${prefix}PASSWORD
    
    if ! [ -d "report" ]
    then
    mkdir report
    fi
    
    HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
    jmeter -n -t test.jmx 
      -J HOST=${!HOST} 
      -J PORT=${!PORT} 
      -J USERNAME=${!USERNAME} 
      -J PASSWORD=${!PASSWORD} 
      -l log/$server-$time.txt 
      -e -o report/$server-$time
    
    • $(echo $VAR | tr 'a-z' 'A-Z') 表示全部大写,等效于版本 4.0 以上的 Bash 的 ${VAR^^}
    • 如果 report 文件夹存在就不同再重新创建,所以先通过 -d 判断
    • ${!HOST} 表示 $HOST 的值为另一变量的名称,最后解析出来的是这另一个变量的值

    运行脚本

    本地环境

    ./test.sh

    测试环境

    ./test.sh testing

    正式环境

    ./test.sh product

    • 在不设环境的时候,${1:-"local"} 把默认环境设置为 local

    总结

    以上计划和脚本可以在此 GitHub 仓库 下载,主要实现了:

    • JMeter 通过接收命令行输入的参数进行动态设置测试计划
    • 通过启动线程组进行登录处理,并将 token 设置为全局变量
    • 通过 Shell 脚本简化命令并进行不同环境的统一处理
  • 相关阅读:
    【BZOJ3105】【CQOI2013】新Nim游戏
    【BZOJ3884】上帝与集合的正确用法
    【BZOJ3518】点组计数
    【BZOJ4804】欧拉心算
    【BZOJ4059】Non-boring sequences
    【BZOJ 4016】 [FJOI2014]最短路径树问题
    【BZOJ 2744】【HEOI2012】朋友圈
    【BZOJ4417】: [Shoi2013]超级跳马
    【BZOJ 2713】[Violet 2]愚蠢的副官&&【BZOJ1183】[Croatian2008]Umnozak——【数位DP】
    【BZOJ】1969: [Ahoi2005]LANE 航线规划
  • 原文地址:https://www.cnblogs.com/chanvin/p/performance-test-plan-for-different-environment.html
Copyright © 2020-2023  润新知