如何对 JMeter 测试套件进行健全性测试以确保测试不被破坏?

How to do sanity test for a JMeter test suite to ensure tests are not broken?

我有许多 JMeter 测试 (JMX),需要确保它们在我更改实用程序 类 和配置更改时不会损坏。

用户计数、循环计数、持续时间等从 JMeter 属性中读取(即 user.properties)。

目前各个线程组中的变量名不同

我正在使用默认线程组和并发线程组以及吞吐量调整计时器。

要求 每个 JMX 应该 运行 具有预定义的迭代次数和用户计数,并生成包含状态的报告。

有没有办法像 Thread Group Validation feature 中那样通过命令行强制验证整个测试计划?

这是我解决问题的方法 这将 运行 具有给定保持目标率和 load_profile 的测试。最后生成测试报告,用浏览器打开。

代码段可通过 Gist

获得


JMETER_HOME=../install/apache-jmeter-5.4.1
TEST_PLAN_HOME=/Users/hansi/Documents/learning/Xap.PerformanceTesting/test_plans/xap/sanity/
TEST_RESULT_HOME=/Users/hansi/Documents/learning/Xap.PerformanceTesting/test_results/sanity/
TEST_REPORTS_HOME=/Users/hansi/Documents/learning/Xap.PerformanceTesting/test_reports/sanity/
TEST_RESULT_FILENAME="test-results-xap-sanity-test"

printf "Starting the sanity test\n"

while :; do
  read -r -p "Please enter hold rate in minutes (1-10) " hold_target_rate_in_min
  hold_target_rate_in_min=${hold_target_rate_in_min:-1}
  [[ $hold_target_rate_in_min =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; }
  if ((hold_target_rate_in_min >= 1 && hold_target_rate_in_min <= 10)); then
    echo "Valid number of hold_target_rate_in_min"
    break
  else
    echo "number $hold_target_rate_in_min is out of range, try again"
  fi
done


mkdir -pv $TEST_RESULT_HOME
mkdir -pv $TEST_REPORTS_HOME
>"$TEST_RESULT_HOME"sucess-sanity-test.log
>"$TEST_RESULT_HOME"error-sanity-test.log


timestamp=$(date +"%y-%b-%d-%H-%M")
TEST_RESULT_FILENAME="$TEST_RESULT_FILENAME$timestamp".csv
TEST_RESULT_FILE_FULL_PATH=$TEST_RESULT_HOME$TEST_RESULT_FILENAME
cd $JMETER_HOME/bin || exit

test -f  "$TEST_RESULT_FILE_FULL_PATH" && rm "$TEST_RESULT_FILE_FULL_PATH"

fileCountSuccess=0
fileCountFailed=0
for testPlan in $TEST_PLAN_HOME/*.jmx; do


    printf "==> Started : %s \a\n\n"  `basename "$testPlan"`
    if ./jmeter.sh -n -t "$testPlan"  \
                -Jhold_target_rate_in_min="$hold_target_rate_in_min" \
                -Jload_profile="line(1,5,1m) const(5,3m) line(5,1,1m) " \
                -l "$TEST_RESULT_FILE_FULL_PATH";
    then
        fileCountSuccess=$((fileCountSuccess+1))
        printf "Test plan %s was completed successfully\n" `basename "$testPlan"` >> "$TEST_RESULT_HOME"sucess-sanity-test.log

    else
        printf "Test plan %s was failed \n" `basename "$testPlan"` >> "$TEST_RESULT_HOME"error-sanity-test.log
        fileCountFailed=$((fileCountFailed+1))
    fi

    printf "==> Completed : %s  \n\n\a" `basename "$testPlan"`
done

if [ -f "$TEST_RESULT_FILE_FULL_PATH" ];then
 ./jmeter.sh -g "$TEST_RESULT_FILE_FULL_PATH" -f -o $TEST_REPORTS_HOME
fi


printf "Process is completed!\n Successful test plans : %s \n Failed Test Plans %s\n" $fileCountSuccess $fileCountFailed
test -f $TEST_REPORTS_HOME/index.html && open $TEST_REPORTS_HOME/index.html

参考文献:

  1. Getting the latest version of the JMX within subfolders
  2. Open a file in the default browser
  3. Adding a timestamp
  4. How to create a symbolic link
  5. Why printf is better than echo
  6. Loop through files in a directory

在正常项目中,它由 Gitflow and Continuous Integration

完成
  1. 您在 branch
  2. 中进行更改
  3. 当你完成并想看看它是否仍然有效时,你可以创建一个 pull request 到主分支
  4. 在此阶段,Continuous Integration server 运行您的 JMeter 测试
  5. 如果通过,您将从持续集成服务器获得某种形式的 +1 响应,并且它将能够将您的更改提交到 master 分支,并确信一切仍会像以前一样工作
  6. 如果失败,您将收到通知并且无法提交您的更改

它还允许您跟踪更改历史记录、added/removed/edited这条线或那条线的人员姓名等