java代码
@Test public class TestLala { @Parameters({"appPackage","appActivity"}) public void parameter(String appPackage,String appActivity) { System.out.println("应用包名="+appPackage); System.out.println("应用启动页面="+appActivity); } }
testng.xml代码(其中parameter可以写在suite里面,也可以写在Test里面)
<suite name="TestWeChat" parallel="tests" thread-count="1"> <parameter name="appPackage" value="com.tencent.mm"/> <parameter name="appActivity" value="com.tencent.mm.ui.LauncherUI"/> <test name="WeChat"> <classes> <class name="com.tencent.mm.test.TestLala"/> </classes> </test> </suite>
这里主要记录一下我遇到的一个问题。上面代码都写好后,我无论怎么运行都无法将参数正常传递,java里面的parameter方法根本无法执行。但是如果我在类里面再加一个方法,例如:
@Test public class TestLala { public void test() { System.out.println("看这里"); } @Parameters({"appPackage","appActivity"}) public void parameter(String appPackage,String appActivity) { System.out.println("应用包名="+appPackage); System.out.println("应用启动页面="+appActivity); } }
test方法内的“看这里”是可以输出的,我就很奇怪了,为什么parameter方法无法成功传值,找了很,很,很久发现,pom文件里面需要加这样一段代码:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.17</version> <configuration> <suiteXmlFiles> <!--<suiteXmlFile>./src/test/resources/testng.xml</suiteXmlFile>--> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin> </plugins> </build>
这个是指定执行哪个xml文件的,如果你的xml文件在根目录,那 <suiteXmlFile>testng.xml</suiteXmlFile> 这样写就ok;如果你的xml文件在其他目录,那就将目录列出来,类似于这样 <suiteXmlFile>./src/test/resources/testng.xml</suiteXmlFile> 。
不过我没搞懂为什么其他的方法都可以执行,只有parameter不行,没有找到具体原因。