如何对 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
参考文献:
在正常项目中,它由 Gitflow and Continuous Integration
完成
- 您在 branch
中进行更改
- 当你完成并想看看它是否仍然有效时,你可以创建一个 pull request 到主分支
- 在此阶段,Continuous Integration server 运行您的 JMeter 测试
- 如果通过,您将从持续集成服务器获得某种形式的
+1
响应,并且它将能够将您的更改提交到 master 分支,并确信一切仍会像以前一样工作
- 如果失败,您将收到通知并且无法提交您的更改
它还允许您跟踪更改历史记录、added/removed/edited这条线或那条线的人员姓名等
我有许多 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
参考文献:
在正常项目中,它由 Gitflow and Continuous Integration
完成- 您在 branch 中进行更改
- 当你完成并想看看它是否仍然有效时,你可以创建一个 pull request 到主分支
- 在此阶段,Continuous Integration server 运行您的 JMeter 测试
- 如果通过,您将从持续集成服务器获得某种形式的
+1
响应,并且它将能够将您的更改提交到 master 分支,并确信一切仍会像以前一样工作 - 如果失败,您将收到通知并且无法提交您的更改
它还允许您跟踪更改历史记录、added/removed/edited这条线或那条线的人员姓名等