我正在运行一个非常不稳定的端到端测试套件,我想要一种方法来确定哪些测试是最不稳定的。最简单的方法似乎是运行测试数百次并返回成功百分比值。
我的问题当然是我不熟悉 bash。
这就是我所在的地方:
numTotal=2
numError=0
x=1
function runTests() {
local output=$(SPEC=desktop/homepage npm test)
local exitCode=$?
echo "$exitCode"
}
function runTestsMany() {
while [ $x -le $numTotal ]
do
local exitCode=$(runTests)
if [ 1 -eq "$exitCode" ]
then
numError=$(( $numError + 1 ))
echo "Error"
else
echo "Success"
fi
x=$(( $x + 1 ))
done
numSuccess=$(($numTotal - $numError))
echo "$numSuccess / $numTotal succeeded."
}
trap runTestsMany EXIT
它接近我想要的,但它迫使我静默测试的所有输出,这使得运行后对故障的调查变得更加笨拙。
在捕获退出代码时如何仍然从测试中输出?
提前致谢!
最佳迈克尔
编辑:另外,我如何传入分配给的脚本output
?每当我尝试将其放入变量中时,我都会得到SPEC=desktop/homepage: No such file or directory
,所以我做错了。
答案1
太棒了; 1)输出重定向; 2)不要trap
。
完整答案:
在您的函数中
runTests
,您可以将输出重定向到某些单个或多个日志文件。不必创建局部变量output
并且从不使用它,只需运行SPEC=desktop/homepage npm test > uniqe_log_$x
或SPEC=desktop/homepage npm test > combined_log
。为此,我偷偷借用了x
您在脚本顶部声明的变量并增加每个测试。此外,在您的函数中
runTests
,无需定义变量exitCode
或执行echo
;只需执行即可return $?
。我称你的脚本接近你想要的为BS,因为在你的函数中
runTestsMany
,你runTests
在你的函数之外调用函数while
,所以变量exitcode
对于所有迭代总是相同的1..numtotal
。你假设它
exitcode
只能是 1 或 0,所以不需要对它进行任何测试,只需将它添加到你的变量中numerror
,即。 numError=$(($numError + $exitcode))。我不认为执行 individual
echo
的成功或错误有什么意义,因为它不会添加有用的信息,只会使您的输出变得混乱。声明的final变量
numsuccess
也是不必要的;只需放入$(($numTotal - $numError))
后续echo
语句即可。声明是怎么回事
trap
?丢失/删除它。