如果冒烟测试失败则停止测试执行

问题描述 投票:0回答:2

我有 2 个 testng.xml 文件,分别称为 testng_smoke.xml 和 testng_regression.xml。我已如下配置 pom.xml 来运行这些 testng 文件。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/testng_smoke.xml</suiteXmlFile>
                    <suiteXmlFile>src/test/resources/testng_regression.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>

在这里它执行两个 testng 文件并在最后给出构建的状态(成功或失败)。

但我的要求是首先运行冒烟测试套件(testng_smoke.xml),如果冒烟测试套件中存在任何测试失败,则使构建失败,而不移至回归测试套件(testng_regression.xml)。有没有可能达到这个要求。

maven testng pom.xml
2个回答
0
投票

据我所知,testng 中没有现成的方法可以做到这一点。

如果您使用 Jenkins 或某些 CI,那么最好创建两个作业或管道,以便第二个任务依赖于第一个任务的结果。

如果没有,并且您想使用单个文件,那么可能的解决方案之一可能是将变量维护为文件或环境变量,该变量的值可以在 suiteListener afterSuite 方法中设置。然后,beforeSuite 方法可以抛出 SkipException 以根据变量值忽略套件。


0
投票

您可以轻松地自己实现这样的行为:

  1. 创建新的注释类
    Smoke
    将Test标记为烟雾
  2. 创建新的监听器并重写
    onTestFailure
    方法 2.1) 检查结果类注释是否包含“Smoke”并将全局变量
    smokeFailure
    设置为
    true
  3. 在测试的基类中,在
    BeforeClass
    方法中添加 SkipException 抛出,如果 SmokeFailure 设置为
    true

这是 Kotlin 代码示例:

class SmokeTestListener : ITestListener {
    override fun onTestFailure(result: ITestResult) {
        result.testClass.realClass.kotlin.findAnnotation<Smoke>()?.let {
            smokeTestFailure = true
        }
    }

    override fun onTestSkipped(p0: ITestResult?) {
    }

    override fun onTestFailedButWithinSuccessPercentage(p0: ITestResult?) {
    }

    override fun onStart(p0: ITestContext?) {
    }

    override fun onFinish(p0: ITestContext?) {
    }

    override fun onTestStart(p0: ITestResult?) {
    }

    override fun onTestSuccess(p0: ITestResult?) {
    }

    companion object {
        var smokeTestFailure = false
    }
}

@Listeners(SmokeTestListener::class)
open class BaseTestCase {

    @BeforeClass
    fun checkSmokeTests() {
        if(SmokeTestListener.smokeTestFailure) {
            throw SkipException("Smoke tests fails")
        }
    }
}

@Smoke
class SmokeTest : BaseTestCase() {
    @Test
    fun checkServiceAlive() {
        //implementation of smoke test
    }
}

class SomeOtherTest : BaseTestCase() {
    @Test
    fun checkSomthingElse() {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.