前阵子在命令行使用TestNG跑测试脚本时发现一个奇怪的问题,即同样的代码在eclipse环境下可以正常运行,而在命令行的情况下缺无法执行;
具体场景如下:
1、每个测试单元执行后发一个单元的测试报告
2、多线程执行多个单元,每个单元的测试时间不定
3、eclipse下单线程执行可以发邮件
4、命令行下发邮件提示异常【单线程、多线程都有问题】
解决方式:
1、排除多线程原因导致,即程序本身的问题【使用单线程、多线程2种方式分别启动】
2、排查eclipse与命令行运行的环境差异【命令参数、jar包的版本】
最终问题在第二步解决:
1、使用processExplorer工具查看在eclipse环境下调用testNG的命令行格式
"C:\Program Files\Java\jre7\bin\javaw.exe" -ea -Dfile.encoding=UTF-8 -classpath "/D:/Program Files/eclipse/plugins/org.testng.eclipse_6.8.6.20130607_0745/lib/testng.jar;D:\workspace\myjava\bin;D:\Program Files\eclipse\plugins\org.testng.eclipse_6.8.6.20130607_0745\lib\testng.jar;C:\Program Files\Java\jdk1.6.0_10\lib\ext\selenium-server.jar;D:\ddap\trunk\platform\WebRoot\WEB-INF\lib\ant.jar;D:\checkoutapi\lib\sqljdbc4.jar;D:\checkoutapi\lib\sunjce_provider.jar;D:\checkoutapi\lib\classes12.jar;D:\checkoutapi\lib\commons-codec-1.9.jar;D:\checkoutapi\lib\commons-logging-1.1.3.jar;D:\checkoutapi\lib\json-lib.jar;D:\checkoutapi\lib\mysql-connector-java-3.1.10-bin.jar;D:\checkoutapi\lib\org.apache.httpcomponents.httpclient_4.3.2.jar;D:\checkoutapi\bin;D:\checkoutapi\lib\java-mail-1.4.4.jar;D:\checkoutapi\lib\commons-lang3-3.3.2.jar;D:\workspace\myjava\lib\hadoop-core-1.2.1.jar;D:\workspace\myjava\lib\commons-cli-1.2.jar" org.testng.remote.RemoteTestNG -serport 4257 -d D:\workspace\myjava\test-output C:\DOCUME~1\CHENXI~1\LOCALS~1\Temp\testng-eclipse-1892840512\testng-customsuite.xml
可简化为:
javaw.exe -ea -Dfile.encoding=UTF-8 -classpath "*.jar" org.testng.remote.RemoteTestNG -serport 4257 -d test-output testng.xml
2、分析与命令行启动的参数中不一致的部分【-ea, -Dfile.encoding, RemoteTestNG, -serport】
3、得出缺少部分参数【-ea】
4、补充参数后再次运行,即可成功