在 Jenkins 的工作中,行为测试在任何失败后停止
In Jenkins job, behave tests stops after any failure
我创建了一个 jenkins "freestyle" 作业,我在其中尝试 运行 多个 BDD 测试过程。以下是我放在 "Jenins/Build/execute shell" 部分的 "commands":
cd ~/FEXT_BETA_BDD
rm -rf allure_reports allure-reports allure-results
pip install behave
pip install selenium
pip install -r features/requirements.txt
# execute features in plan section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/plan/*.feature
# execute features in blueprint section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/blueprint/*.feature
我发现在 Jenkins 中,如果有任何测试用例间歇性失败,控制台输出中会显示这样的消息:
"
...
0 features passed, 1 failed, 0 skipped
0 scenarios passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 1 skipped, 0 undefined
Took 2m48.770s
Build step 'Execute shell' marked build as failure
"
并且跳过剩余的测试用例。但是如果我直接在我的本地主机上使用 运行 behave 命令,我不会得到这种行为。故障将被检测到,其余的测试用例将继续进行,直到所有测试都完成。
那么我该如何在 Jenkins 中解决这个问题呢?
谢谢,
杰克
您可以尝试以下语法:
set +e
# execute features in plan section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/plan/*.feature || echo 'ALERT: Build failed while running the plan section'
# execute features in blueprint section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/blueprint/*.feature || echo 'ALERT: Build failed while running the blueprint section'
# Restoring original configuration
set -e
注:
- set -e 的目标是使 shell 在发生错误时中止。如果您将看到日志输出,您会在执行开始时注意到
sh -xe
,这证实了 Jenkins 中的 Execute Shell
使用了 -e
选项。因此,要禁用它,您可以使用 +e
代替。但是,最好在达到您的目的后将其恢复,以便后续命令产生预期结果。
上面的 SummaryReporter 的 ConsoleOutput 表明您只有一个场景(失败)的一个功能。 Behave 不会在第一个场景失败时停止。
测试的提前流产 运行 只有在发生关键事件时才会发生:
before_all()
挂钩中出现 failure/exception
- 引发严重异常(SystemExit、KeyboardInterrupt)以结束测试运行
- 您的实现告诉 behave 中止测试 运行(当所有其他测试也会失败时,对严重失败有意义;为什么要浪费时间)
但是: 如果测试 运行 提前中止,所有尚未执行的 features/scenarios 将报告为 未测试在 SummaryReporter 中计数。
...
0 features passed, 1 failed, 0 skipped, 2 untested
0 scenarios passed, 1 failed, 0 skipped, 3 untested
0 steps passed, 1 failed, 0 skipped, 0 undefined, 6 untested
提示:未经测试的计数通常是隐藏的。它们仅在计数器不为零(大于零)时显示。
你的描述不是这样的
另见:
我创建了一个 jenkins "freestyle" 作业,我在其中尝试 运行 多个 BDD 测试过程。以下是我放在 "Jenins/Build/execute shell" 部分的 "commands":
cd ~/FEXT_BETA_BDD
rm -rf allure_reports allure-reports allure-results
pip install behave
pip install selenium
pip install -r features/requirements.txt
# execute features in plan section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/plan/*.feature
# execute features in blueprint section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/blueprint/*.feature
我发现在 Jenkins 中,如果有任何测试用例间歇性失败,控制台输出中会显示这样的消息:
"
...
0 features passed, 1 failed, 0 skipped
0 scenarios passed, 1 failed, 0 skipped
3 steps passed, 1 failed, 1 skipped, 0 undefined
Took 2m48.770s
Build step 'Execute shell' marked build as failure
"
并且跳过剩余的测试用例。但是如果我直接在我的本地主机上使用 运行 behave 命令,我不会得到这种行为。故障将被检测到,其余的测试用例将继续进行,直到所有测试都完成。
那么我该如何在 Jenkins 中解决这个问题呢?
谢谢,
杰克
您可以尝试以下语法:
set +e
# execute features in plan section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/plan/*.feature || echo 'ALERT: Build failed while running the plan section'
# execute features in blueprint section
behave -f allure_behave.formatter:AllureFormatter -f pretty -o ./allure-reports
./features/blueprint/*.feature || echo 'ALERT: Build failed while running the blueprint section'
# Restoring original configuration
set -e
注:
- set -e 的目标是使 shell 在发生错误时中止。如果您将看到日志输出,您会在执行开始时注意到
sh -xe
,这证实了 Jenkins 中的Execute Shell
使用了-e
选项。因此,要禁用它,您可以使用+e
代替。但是,最好在达到您的目的后将其恢复,以便后续命令产生预期结果。
上面的 SummaryReporter 的 ConsoleOutput 表明您只有一个场景(失败)的一个功能。 Behave 不会在第一个场景失败时停止。
测试的提前流产 运行 只有在发生关键事件时才会发生:
before_all()
挂钩中出现 failure/exception- 引发严重异常(SystemExit、KeyboardInterrupt)以结束测试运行
- 您的实现告诉 behave 中止测试 运行(当所有其他测试也会失败时,对严重失败有意义;为什么要浪费时间)
但是: 如果测试 运行 提前中止,所有尚未执行的 features/scenarios 将报告为 未测试在 SummaryReporter 中计数。
...
0 features passed, 1 failed, 0 skipped, 2 untested
0 scenarios passed, 1 failed, 0 skipped, 3 untested
0 steps passed, 1 failed, 0 skipped, 0 undefined, 6 untested
提示:未经测试的计数通常是隐藏的。它们仅在计数器不为零(大于零)时显示。
你的描述不是这样的
另见: