Class TestNG 测试的执行顺序
Class execution order of TestNG tests
我在这里阅读了很多关于这个主题的文章,但还没有找到能解决我的问题的文章。
目标:
- 获取在testng.xml文件中定义的测试classes按顺序执行
列在文件中。
- 每个 class 触发中定义的所有方法都按顺序列出
(这个有效)
- 在任何给定时间只打开一个浏览器 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: 每次测试后注解的方法会运行
方法.
我在这里阅读了很多关于这个主题的文章,但还没有找到能解决我的问题的文章。
目标:
- 获取在testng.xml文件中定义的测试classes按顺序执行 列在文件中。
- 每个 class 触发中定义的所有方法都按顺序列出 (这个有效)
- 在任何给定时间只打开一个浏览器 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: 每次测试后注解的方法会运行 方法.