Java TestNG类在包中失败并自行成功
我的包裹里有三个测试班。 第一个配置:Java TestNG类在包中失败并自行成功,java,selenium,selenium-webdriver,testng,testng-dataprovider,Java,Selenium,Selenium Webdriver,Testng,Testng Dataprovider,我的包裹里有三个测试班。 第一个配置: public class PageVisibilityConfig { WebDriver driver; @BeforeSuite public void beforeSuite() { DOMConfigurator.configure("log4j.xml"); Log.startTestCase("Page Visibility Suite"); Log.info(Thread.currentThread().getSta
public class PageVisibilityConfig {
WebDriver driver;
@BeforeSuite
public void beforeSuite() {
DOMConfigurator.configure("log4j.xml");
Log.startTestCase("Page Visibility Suite");
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
driver = BrowserFactory.getBrowser("Firefox");
}
@AfterSuite(enabled = true)
public void afterSuite() {
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
BrowserFactory.closeAllDriver();
Log.endTestCase("Page Visibility Suite");
}
@AfterGroups(groups = { "admin", "user" })
public void afterGroupLogOut() {
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
UserMenu usermenu = PageFactory.initElements(driver, UserMenu.class);
usermenu.activeteUserMenu();
usermenu.logout();
}
}
第一个真正的测试类:
public class PageVisibilityAdmin {
WebDriver driver;
@BeforeClass(groups = { "admin" }, enabled = true)
public void beforeClassLogin() {
driver = BrowserFactory.getBrowser("Firefox");
Log.startTestCase("Page Visibility Admin test cases");
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
LogIn login = PageFactory.initElements(driver, LogIn.class);
login.signupLogin();
login.loginViaCredentials();
UserMenu usermenu = PageFactory.initElements(driver, UserMenu.class);
usermenu.activeteUserMenu();
Assert.assertTrue(usermenu.isAdmin());
}
@DataProvider(name = "visibility_admin")
public static String[][] providedData() {
return com.resources.SQLConForDataProvider
.executeQuery("SELECT url FROM cdb_1cc755a513.visibility where admin='1' limit 1");
}
@Test(dataProvider = "visibility_admin", groups = { "admin" }, enabled = true)
public void adminRun(String url) {
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
Log.info("Try " + Util.SUT + url);
driver.get(Util.SUT + url);
Log.info("Actual page " + driver.getCurrentUrl());
Assert.assertEquals(driver.getCurrentUrl(), Util.SUT + url);
Assert.assertFalse(driver.getTitle().toLowerCase().contains("not found"));
Assert.assertFalse(driver.getTitle().toLowerCase().contains("login"));
Assert.assertFalse(driver.getTitle().toLowerCase().contains("error"));
}
}
第三个问题是:
public class PageVisibilityUser {
WebDriver driver;
@BeforeClass(groups = { "user" }, enabled = true)
public void beforeGroupsLogin() {
driver = BrowserFactory.getBrowser("Firefox");
Log.startTestCase("Page Visibility User test cases");
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
LogIn login = PageFactory.initElements(driver, LogIn.class);
login.signupLogin();
login.loginViaFacebook();
UserMenu usermenu = PageFactory.initElements(driver, UserMenu.class);
usermenu.activeteUserMenu();
Assert.assertFalse(usermenu.isAdmin());
}
@DataProvider(name = "visibility_user")
public static String[][] providedData() {
return com.resources.SQLConForDataProvider
.executeQuery("SELECT url FROM cdb_1cc755a513.visibility where not_added_user='1' limit 1");
}
@Test(dataProvider = "visibility_user", groups = { "user" }, enabled = true)
public void userRun(String url) {
Log.info(Thread.currentThread().getStackTrace()[1].getMethodName());
Log.info("Try " + Util.SUT + url);
driver.get(Util.SUT + url);
Log.info("Actual page " + driver.getCurrentUrl());
Assert.assertEquals(driver.getCurrentUrl(), Util.SUT + url);
Assert.assertFalse(driver.getTitle().toLowerCase().contains("not found"));
Assert.assertFalse(driver.getTitle().toLowerCase().contains("login"));
Assert.assertFalse(driver.getTitle().toLowerCase().contains("error"));
}
}
基本上,我是在检查url是否可用于不同的角色。
我的问题是:
如果我将这些类作为套件或包运行,那么最后一个类将失败,sql结果集中会出现一个“额外的行”(空)。
如果我只运行config类和它运行的最后一个类,并且没有错误。
还有一个例外(这很奇怪):
运行TestSuite java.sql.SQLException:在
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)位于
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)位于
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)位于
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)位于
com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:787)位于
com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5244)
位于com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5167)
在
com.resources.SQLConForDataProvider.executeQuery(SQLConForDataProvider.java:47)
在
提供的数据(PageVisibilityUser.java:39)
位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
invoke(NativeMethodAccessorImpl.java:57)
基本上,第二个测试类中的dataprovider在resultset中返回一个额外的null。基本上,第二个测试类中的dataprovider在resultset中返回一个额外的null。