Java TestNG before\after方法应如何与组一起工作

Java TestNG before\after方法应如何与组一起工作,java,maven,testng,Java,Maven,Testng,我有带测试的java项目和Maven来构建它 测试结构: QuickTest(TestBase的子级) LongTest(TestBase的子级) TestBase(QuickTest和LongTest的父级) TestBase仅包含三种方法: @BeforeClass-运行浏览器 @beforethod-打开主页面 @AfterSuite-关闭浏览器 QuickTest包含4种带有@test注释和(groups={“quick”}) LongTest包含一个@DataProvider和

我有带测试的java项目和Maven来构建它

测试结构:

  • QuickTest(TestBase的子级)
  • LongTest(TestBase的子级)
  • TestBase(QuickTest和LongTest的父级)
TestBase仅包含三种方法:

  • @BeforeClass
    -运行浏览器
  • @beforethod
    -打开主页面
  • @AfterSuite
    -关闭浏览器
QuickTest包含4种带有
@test
注释和
(groups={“quick”})
LongTest包含一个
@DataProvider
和一个
@Test
来使用它,其中
(groups={“long”})

在Maven中,我有一些配置文件可以启动不同的浏览器。我的目标是使用:

mvn测试-p ie9-Dgroups=quick

只运行快速测试,但我的
TestBase
类有问题。我总是添加
@BeforeClass
@beforethod
以及
(alwaysRun=true)
,这很好

但是我的
@AfterSuite
方法不起作用。当我向其添加
(alwaysRun=true)
时,此方法将始终记录错误并失败

对于快速组,我需要测试顺序:

BeforeClass->BeforeMethod->TestMethod1->BeforeMethod->TestMethodX->AfterSuite

对于long group,我需要订购:

BeforeClass->BeforeMethod->TestMethodWithData1->BeforeMethod->TestMethodWithDataX->AfterSuite


我应该使用什么批注,我的testng.xml应该是什么样子?

如果您的批注是
@BeforeClass
打开浏览器,为什么不使用
@AfterClass
关闭浏览器?这似乎更有道理。@MrTi感谢您的建议。我将“@AfterSuite”改为“@AfterClass”。现在,如果我只运行一个测试类,它的工作非常好。但是如果我想一次运行多个类,那么只运行第一个类,第二个类将跳过。新的测试顺序是:BeforeClass->BeforeMethod->TestX->AfterClass->BeforeMethod。课前考试不会在每堂课前开始,只会在第一堂课前开始,其他所有的考试方法都会被跳过。我不明白你在说什么
@BeforeClass
将在类中所有方法之前运行,
@AfterClass
将在类中所有方法之后运行。如果您正在运行另一个类,那么它将需要一个
@前
/
@后
作为well@MrTi是的,我知道。但是我的所有before\after方法对于我的所有测试都是相同的。我将它们存储在父类TestBase中,其他测试只是扩展TestBase的一个类。我想你的测试在页面上做了些什么,这就是为什么你为它们制作了一个超级类。可以使用BeforeStory/AfterStory注释打开/关闭浏览器。你应该写故事文件,步骤和步骤有顺序,这样你就可以登录,然后注销等等。