我在项目中从命令行运行测试没有什么问题。我使用Java + TesNG + Maven。当我从cmd执行“mvn clean test”时,一切正常,我的所有测试用例都运行良好。当我尝试仅运行一个类或仅运行一个测试方法时出现问题。 “mvn clean test -Dtest = LoginTest”。之后我收到了这个错误:“参数'baseUrl'是@Configuration对方法openUrlBeforeEachTest所必需的,但尚未标记为@Optional或已定义”。看来,当我尝试运行特定的测试时,会忽略testng.xml文件。为什么?我做错了什么?
这是我在pom.xml中的surefire插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<systemPropertyVariables>
<environment>${browser}</environment>
</systemPropertyVariables>
</configuration>
</plugin>
的testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite" verbose="2">
<parameter name="baseUrl" value="https://someurl"></parameter>
<test name="sometest">
<packages>
<package name="test.pages" />
</packages>
</test>
</suite>
特定测试类
public class LoginTest extends AbstractPageTest<LoginTest> {
private LoginPage loginPage;
@BeforeMethod
@Parameters({ "baseUrl" })
public void openUrlBeforeEachTest( String baseUrl) {
Driver().get(baseUrl);
}
@AfterMethod
@Parameters({ "baseUrl" })
public void deleteCookiesAfterAllTests( String baseUrl) {
Driver().manage().deleteAllCookies();
}
@Test(priority = 0)
@Parameters({ "user", "pass" })
public void login(String user, String pass) {
loginPage = new LoginPage(Driver()).get();
loginPage.login(user, pass);
Assert.assertEquals(Driver().getTitle(), "The page title");
}
}