如果需要分别在Chrome、Firefox、IE等浏览器的各个不同版本中对同一个web应用进行UI测试,怎么做呢?
pipeline {
agent any
stages {
stage('Build')
{
steps {
echo 'Building..'
-
}
-
}
stage('Test on Chrome')
{
steps {
echo 'Testing..'
-
}
-
}
stage('Test on Firfox')
{
steps {
echo 'Testing..'
-
}
-
}
-
}
}
不论是将UI分别放在不同的阶段还是步骤中,这种按顺序执行的测试都太慢了,慢到执行一次完整的UI测试要一小时以上。
通过仔细分析你会发现,这些测试是可以并行执行的。就像原来只有一个测试人员,要测试4个浏览器,他只能测试完一个浏览器,再测试另一个浏览器,但是现在有4个测试人员,他们就可以同时进行测试。这样测试耗时就降到了原来的1/4。
很明显,Jenkins pipeline插件支持这种并行构建,并且使用起来也非常简单。
pipeline {
agent none
stages {
stage('Run Tests')
{
failFast true
parallel {
stage('Test On Chrome')
{
agent { label "chrome"
}
steps {
echo "Chrome UI测试"
-
}
-
}
stage("Test On Firefox")
{
agent { label "firefox"
}
steps {
echo "Firefox UI测试"
-
}
-
}
stage("Test On IE")
{
agent { label "ie"
}
steps {
echo "IE UI测试"
-
}
-
}
-
}
-
}
-
}
}
在stages部分包含一个Run Tests阶段,在这个阶段下包含一个parallel块,在parallel块下又包含了多个阶段。位于parallel块下的阶段都并行执行,而且并行阶段还可以被分到不同的Jenkins agent上执行。
因为parallel本身不包含任何步骤,所以在parallel块下本身不允许包含agent和tools。
在默认情况下,pipeline要等待parallel块下所有的阶段都执行完成,才能确定结果。如果希望所有并行阶段中的某个阶段失败后,就让其他正在执行的阶段都中止,那么只需要在与parallel块同级的位置加入failFast true就可以了。