在 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 代替。但是,最好在达到您的目的后将其恢复,以便后续命令产生预期结果。

参考:https://superuser.com/questions/1113014/what-would-set-e-and-set-x-commands-do-in-the-context-of-a-shell-script

上面的 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

提示:未经测试的计数通常是隐藏的。它们仅在计数器不为零(大于零)时显示。

你的描述不是这样的

另见: