Class TestNG 测试的执行顺序

Class execution order of TestNG tests

我在这里阅读了很多关于这个主题的文章,但还没有找到能解决我的问题的文章。

目标:

  1. 获取在testng.xml文件中定义的测试classes按顺序执行 列在文件中。
  2. 每个 class 触发中定义的所有方法都按顺序列出 (这个有效)
  3. 在任何给定时间只打开一个浏览器 window(否 并行执行)

每个测试 class 都有一个初始化浏览器的 init 方法,所以我明白为什么我会立即打开 n 个浏览器 windows,每个测试一个 class.

我希望发生的是...

开始测试ClassA 运行 测试中的所有方法 Class A 在 Test Class A 中通过 @AfterTest 方法关闭浏览器 继续测试 Class B ...

我希望有一些方法可以让 TestNG 做到这一点。此外,我正在使用 'mvn test -Dbrowser=chrome' 和调用我定义的 TestNG.xml 文件的 surefire 插件从 maven 命令行开始测试。

当前TestNG.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <listeners>
        <listener class-name="com.infdig.qa.Listeners" />
        <listener class-name="com.infdig.qa.resources.ExtentReporterNG" />
    </listeners>
    <test name="Regression"  >
        <classes>
            <class name="com.infdig.qa.BasicSiteNavigationTests">
                <methods>
                    <include name="openedToDashboard" />
                    <include name="navigateToActiveReleasePreset" />
                    <include name="navigateToReleasePresets" />
                    <include name="navigateToComponentSelections" />
                    <include name="navigateToOrderSlices" />
                    <include name="navigateToAbout" />
                </methods>
            </class>
            <class name="com.infdig.qa.AboutPageTests">
                <methods>
                    <include name="validateAboutPageDescriptionText" />
                    <include name="validateAboutPageLegalText" />
                    <include name="validateAboutPageHelpText" />
                    <include name="validateHelpLinkToInfinityPortal" />
                </methods>
            </class>
            <class name="com.infdig.qa.ReleasePresetTests">
                <methods>
                    <include name="deleteAllExistingPresets" />
                    <include name="createInitialPresets" />
                    <include name="changeActivePreset" />
                    <include name="addNewReleasePreset" />
                    <include name="deletePreset" />
                    <include name="addMultiplePresets" />
                    <include name="searchForPresetByName" />
                    <include name="deleteMultiplePresetsAtOnce" />
                    <include name="validateHelpTextIsAccurate" />
                </methods>
            </class>
            <class name="com.infdig.qa.OrderSliceTests">
                <methods>
                    <include name="deleteAllSlices" />
                    <include name="createNewOrderSlice" />
                    <include name="editExistingOrderSlice" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

您的 TestNG xml 运行ner 文件没有重要参数

  • preserve-order="true",按顺序 运行。 Here 你可以找到更多 详情。

我认为你混淆了 AfterTest 方法和 AfterClass 方法,after test 方法将关闭你的浏览器一次,为什么? 因为在 xml 文件中你只有 1 个测试标签,AfterTest 方法是 运行ning 相应地测试标签。正如你写的,我知道你想 运行 测试 class A 然后 class B 的方法,为此你必须将每个 class 标签放在测试标签中,这意味着你有 4 个 class 标签,因此您需要 4 个测试标签。

您可以像上面那样保留 xml 但您必须将 AfterTest 方法更改为 AfterClass。

注释差异如下:

  • @AfterTest: 注释的方法在全部测试后会是运行 属于标签内 classes 的方法有 运行。

  • @AfterClass:当前class中的所有测试方法都运行.

    [后,注解的方法就会运行 =35=]
  • @AfterMethod: 每次测试后注解的方法会运行 方法.