Selenium webdriver 如果安装方法中发生错误,则Allure报告中缺少规范

Selenium webdriver 如果安装方法中发生错误,则Allure报告中缺少规范,selenium-webdriver,spock,geb,allure,autotest,Selenium Webdriver,Spock,Geb,Allure,Autotest,在我的GEB+Selenium Webdriver测试中,在setupSpec()方法中有一些UI操作(我相信是常见情况)。问题是,如果在这些步骤中出现异常,则最终报告中会完全缺少整个规范,但是在报告中查看标记为忽略的规范测试是合乎逻辑的 这是一个真正的问题,因为构建可以以100%的成功率通过,尽管有一些测试没有启动 未为该规范生成\build\allure results \-result.json文件。 以下是重现问题的示例: 规范#1(例外情况除外,预计显示为忽略): 逐步地 @特写(“工

在我的GEB+Selenium Webdriver测试中,在
setupSpec()
方法中有一些UI操作(我相信是常见情况)。问题是,如果在这些步骤中出现异常,则最终报告中会完全缺少整个规范,但是在报告中查看标记为忽略的规范测试是合乎逻辑的

这是一个真正的问题,因为构建可以以100%的成功率通过,尽管有一些测试没有启动

未为该规范生成
\build\allure results \-result.json
文件。 以下是重现问题的示例:

规范#1(例外情况除外,预计显示为忽略):

逐步地 @特写(“工作”) @故事(“设置中有异常的规范”) 类SetupExceptionTest扩展了GebreReportingSpec{ def setupSpec(){ “在安装规范中”打印 抛出新的ElementNotInteractiableException('某些错误') } def“测试1”(){ 设置: println'在测试1中' 期望: 2 == 2 } def“测试2”(){ 设置: println'在测试2中' 期望: 2 == 3 } def cleanupSpec(){} } 规格2(设置中无例外):

逐步地 @特写(“工作”) @故事(“设置中没有例外的规范”) 类SetupTest扩展了GebReportingSpec{ def setupSpec(){ “在安装规范中”打印 } def“测试1”(){ 设置: println'在测试1中' 期望: 2 == 2 } def“测试2”(){ 设置: println'在测试2中' 期望: 2 == 3 } def cleanupSpec(){} } 启动命令:
gradlew clean test-PignoreTestFailures=true
生成以下报告:

因此,在任何报告部分中都没有
SetupExceptionTest
spec。 是否有任何设置可以更改此行为?或者是已知的解决办法

使用了以下版本:

testCompile组:'org.spockframework',名称:'spock core',版本:'1.2-groovy-2.4'
testCompile组:“io.qameta.allure”,名称:“allure spock”,版本:“2.7.0”

我以前从未使用过Allure reports,在我的Maven项目中,我使用了最新版本Allure spock 2.12.1和spock 1.3-groovy-2.5,对它进行了快速测试。Maven测试运行失败,因为似乎缺少依赖项,但当我从IDE运行这两个测试时,至少会执行测试

正如您所说,我还看到正在为
SetupTest
生成[UUID]-result.json文件,但没有为
SetupExceptionTest
生成。因此,如果Allure在测试设置错误的情况下不创建这些文件,那么也不能生成漂亮的HTML报告。这对我来说似乎是一个诱惑问题,无论是在诱惑核心还是在Spock集成中

JUnit测试会发生什么?他们的行为相同还是不同


在任何情况下,如果我注释掉测试中的诱惑注释并使用Maven Surefire运行它们,就会为
SetupExceptionTest
生成一个报告,这意味着Spock和Maven都不是问题所在。我想你应该看看Allure,因为通过删除它,它是工具链中唯一剩下的组件。

我以前从未使用过Allure reports,在我的Maven项目中使用了最新版本Allure spock 2.12.1和spock 1.3-groovy-2.5,让它快速运行。Maven测试运行失败,因为似乎缺少依赖项,但当我从IDE运行这两个测试时,至少会执行测试

正如您所说,我还看到正在为
SetupTest
生成[UUID]-result.json文件,但没有为
SetupExceptionTest
生成。因此,如果Allure在测试设置错误的情况下不创建这些文件,那么也不能生成漂亮的HTML报告。这对我来说似乎是一个诱惑问题,无论是在诱惑核心还是在Spock集成中

JUnit测试会发生什么?他们的行为相同还是不同


在任何情况下,如果我注释掉测试中的诱惑注释并使用Maven Surefire运行它们,就会为
SetupExceptionTest
生成一个报告,这意味着Spock和Maven都不是问题所在。我想你应该看看诱惑,因为通过消除它,它是工具链中唯一剩下的组件。

下面是我使用的解决方法

在基类中:

@Shared
protected Throwable setupSpecThrowable

def setup() {
    if (setupSpecThrowable) {
        throw setupSpecThrowable
    }
}

def cleanupSpec() {
    setupSpecThrowable = null
}

protected def withSetupErrorCatch(Closure closure) {
    try {
        closure()
    } catch (Throwable t) {
        setupSpecThrowable = t
    }
}
在每个测试类别中:

def setupSpec() {
    def data = getSetupSpecData()
   
    withSetupErrorCatch {

        //actions that can throw something
        
    }
}

这将捕获
setupSpec()
中的任何异常,并将其抛出
setup()
,以便allure可以查看并记录测试。

下面是我使用的解决方法

在基类中:

@Shared
protected Throwable setupSpecThrowable

def setup() {
    if (setupSpecThrowable) {
        throw setupSpecThrowable
    }
}

def cleanupSpec() {
    setupSpecThrowable = null
}

protected def withSetupErrorCatch(Closure closure) {
    try {
        closure()
    } catch (Throwable t) {
        setupSpecThrowable = t
    }
}
在每个测试类别中:

def setupSpec() {
    def data = getSetupSpecData()
   
    withSetupErrorCatch {

        //actions that can throw something
        
    }
}
这将捕获
setupSpec()
中的任何异常,并将其抛出
setup()
中,以便allure可以查看和记录测试