现象如下:
当我使用maven指定执行testng特定的组时,会报nullpointer。
相应的pom.xml如下:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <groupsTest>loginTest</groupsTest> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.17</version> <configuration> <!--<suiteXmlFiles>--> <!--<suiteXmlFile>testNg.xml</suiteXmlFile>--> <!--</suiteXmlFiles>--> <groups>${groupsTest}</groups> </configuration> </plugin> </plugins> </build>报错的地方的相应代码是这样的:
public abstract class TestBase { protected WebDriver driver = null; protected String browser; protected Logger log = Logger.getLogger(getClass()); @BeforeMethod public void beforeMethod() throws MalformedURLException { //PropertyConfigurator.configure(System.getProperty("user.dir")+"\\config\\log4j.properties"); driver = DriverManage.getDriver(browser); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.manage().window().maximize(); } @AfterMethod public void afterMethod(){ driver.quit(); } @Parameters({"driverType"}) @BeforeClass public void beforeClass(@Optional("4") String driverType){ browser = driverType; }
详细查看代码,没有发现任何问题,后来经过Google查阅资料发现下面一个类似问题:
https://stackoverflow.com/questions/23471424/can-not-run-a-specific-testng-group-via-maven
于是乎上手验证,修改代码如下
再次执行maven的test,问题解决!!!
猜测问题发生原因,是因为maven指定组时,beforemethod 和 beforeclass不会默认执行,必须指定alwaysRun = true才可以