Selenium webdriver 如果安装方法中发生错误,则Allure报告中缺少规范
在我的GEB+Selenium Webdriver测试中,在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(例外情况除外,预计显示为忽略): 逐步地 @特写(“工
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可以查看和记录测试