我正在尝试通过testng + selenium进行自动测试,但现在我已经卡住了。
我有一个接口,一个基类和一个测试类。当我运行testng它不起作用,因为没有调用@ beforeXXX和@afterXXX方法而且NPE是thow。控制台也不包含我的输出txt,只是很多错误信息。
您可以通过修改我的testng.xml或添加一些帮助类来帮助我解决这个问题吗?
这是我的界面
public interface PrepareTestNG {
@BeforeSuite
public abstract void beforeSuit();
@AfterSuite
public abstract void afterSuit();
@BeforeTest
public abstract void beforeTest();
@AfterTest
public abstract void afterTest();
@BeforeGroups
public abstract void beforeGroups();
@AfterGroups
public abstract void afterGroups();
@BeforeClass
public abstract void beforeClass();
@AfterClass
public abstract void afterClass();
@BeforeMethod
public abstract void beforeMethod();
@AfterMethod
public abstract void afterMethod();
}
这是我的基类
public abstract class BasicTest implements PrepareTestNG {
protected WebDriver driver;
public void beforeSuit() {
System.out.println(">> suit ");
}
public void afterSuit() {
System.out.println("<< suit");
}
public final void beforeTest() {
driver = new HtmlUnitDriver(true);
System.out.println(">> test");
}
public final void afterTest() {
if (driver != null) {
driver.quit();
}
driver = null;
System.out.println("<< test");
}
@Test
public abstract void verifyUserName();
}
这是我的测试类
public class HomePageTest extends BasicTest {
private Home homePage;
@Test
public void verifyTitle() {
Assert.assertEquals("商城首页", homePage.getTitle());
Assert.assertEquals(Url.HOME_PAGE, homePage.getUrl());
}
@Override
public void beforeGroups() {
System.out.println(">> group");
}
@Override
public void afterGroups() {
System.out.println("<< group");
}
@Override
public void beforeClass() {
driver.get(Url.HOME_PAGE);
homePage = new Home(driver);
System.out.println(">> class");
}
@Override
public void afterClass() {
homePage = null;
System.out.println("<< class");
}
@Override
public void beforeMethod() {
System.out.println(">> method");
}
@Override
public void afterMethod() {
System.out.println("<< method");
}
@Override
public void verifyUserName() {
Assert.assertEquals("nobody", homePage.getUserName());
}
}
testng.xml的配置如下:
<suite name="suite">
<test name="test" verbose="5">
<packages>
<package name="base">
<exclude name="LoginPageTest" />
</package>
</packages>
</test>
</suite>
并且consolo输出是:
[PackageUtils] Looking for test classes in the directory: G:\MyEclipse 2015 CI\PcMall\target\test-classes\base
[PackageUtils] Found class BasicTest, seeing it if it's included or excluded
[PackageUtils] ... Including class BasicTest
[PackageUtils] Found class HomePageTest, seeing it if it's included or excluded
[PackageUtils] ... Including class HomePageTest
[PackageUtils] Found class LoginPageTest, seeing it if it's included or excluded
[PackageUtils] ... Including class LoginPageTest
[PackageUtils] Found class PrepareTestNG, seeing it if it's included or excluded
[PackageUtils] ... Including class PrepareTestNG
[TestRunner] Running the tests in 'test' with parallel mode:false
[RunInfo] Adding method selector: org.testng.internal.XmlMethodSelector@97e111 priority: 10
[TestClass] Creating TestClass for [ClassImpl class=base.HomePageTest]
[TestClass] Adding method HomePageTest.verifyTitle()[pri:0, instance:null] on TestClass class base.HomePageTest
[TestClass] Adding method BasicTest.verifyUserName()[pri:0, instance:null] on TestClass class base.HomePageTest
[TestClass] Creating TestClass for [ClassImpl class=base.LoginPageTest]
[TestClass] Adding method LoginPageTest.verifyTitle()[pri:0, instance:null] on TestClass class base.LoginPageTest
[TestClass] Adding method BasicTest.verifyUserName()[pri:0, instance:null] on TestClass class base.LoginPageTest
[XmlMethodSelector] Including method base.verifyTitle()
[XmlMethodSelector] Including method base.verifyUserName()
[TestNG] Running:
G:\MyEclipse 2015 CI\PcMall\testng.xml
[SuiteRunner] Created 1 TestRunners
[TestRunner] Running test test on 2 classes, included groups:[] excluded groups:[]
===== Test class
base.HomePageTest
@Test HomePageTest.verifyTitle()[pri:0, instance:base.HomePageTest@dc4414]
@Test BasicTest.verifyUserName()[pri:0, instance:base.HomePageTest@dc4414]
======
===== Test class
base.LoginPageTest
@Test LoginPageTest.verifyTitle()[pri:0, instance:base.LoginPageTest@1e07d3e]
@Test BasicTest.verifyUserName()[pri:0, instance:base.LoginPageTest@1e07d3e]
======
[Invoker 21296251] Invoking base.BasicTest.verifyUserName
[Invoker 21296251] Invoking base.HomePageTest.verifyTitle
[Invoker 21296251] Invoking base.BasicTest.verifyUserName
[Invoker 21296251] Invoking base.LoginPageTest.verifyTitle
===== Invoked methods
BasicTest.verifyUserName()[pri:0, instance:base.HomePageTest@dc4414] 14435348
HomePageTest.verifyTitle()[pri:0, instance:base.HomePageTest@dc4414] 14435348
BasicTest.verifyUserName()[pri:0, instance:base.LoginPageTest@1e07d3e] 31489342
LoginPageTest.verifyTitle()[pri:0, instance:base.LoginPageTest@1e07d3e] 31489342
=====
Creating G:\MyEclipse 2015 CI\PcMall\test-output\suite\test.html
Creating G:\MyEclipse 2015 CI\PcMall\test-output\suite\test.xml
PASSED: verifyUserName
FAILED: verifyUserName
答案 0 :(得分:0)
如果没有来自接口的@Inherited元注释,Java不会继承注释,可以找到相关的问题here
因此,如果您想获得继承注释,您可以编写自定义注释,授予@beforeXXX或@afterXXX注释的功能,这些注释也具有@Inherited注释