一、编辑testng_run.sh脚本如下
java -classpath "%classpath%:/Users/ac/lib/testng-6.14.3.jar:/Users/ac/lib/jcommander-1.72.jar:/Users/ac/eclipse-workspace/testng-test/bin" org.testng.TestNG /Users/ac/eclipse-workspace/testng-test/testng.xml
脚本详解:
1、双引号中的命令是将testng-6.14.3.jar 、 jcommander-1.72.jar、测试代码的.class目录加入classpath中;
2、org.testng.TestNG 用TestNG类中的main函数来执行
3、/Users/ac/eclipse-workspace/testng-test/testng.xml 将testng.xml传入TestNG main函数执行
代码结构如图
目录结构图
xml配置
二、其中遇到的问题
2.1 classpath 问题
网上很多文章都是直接通过命令执行 :java org.testng.TestNG testng.xml 然后会提示错误
找不到或无法加载主类 org.testng.TestNG
参照网上提供的方法给TestNG配置配置classpath 依然不行,如下:
export TESTNG_HOME=/Library/TESTNG
export CLASSPATH=$CLASSPATH:$TESTNG_HOME/testng-6.8.jar:
放弃上面这种方式,采用在执行时再指定jar路径,如下:
java -classpath "%classpath%:/Users/ac/lib/testng-6.14.3.jar:/Users/ac/lib/jcommander-1.72.jar:/Users/ac/eclipse-workspace/testng-test/bin"
2.2 缺少 jcommander.jar
错误提示为
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
究其原因是因为缺失了 jcommander.jar ,加入 jcommander.jar 引用后,问题解决。
进入http://mvnrepository.com搜索 jcommander 下载jar包
2.3 找不到testNG class
错误提示为
Cannot find class in classpath: com.NewTest2
Exception in thread "main" java.lang.NullPointerException
at org.testng.TestNG.getStatus(TestNG.java:211)
at org.testng.TestNG.main(TestNG.java:1324)
需要指定class路径,我的路径为/Users/ac/eclipse-workspace/testng-test/bin 所以命令为
java -classpath "/Users/ac/eclipse-workspace/testng-test/bin"
三、打开执行结果html
执行testng_run.sh 脚本后
. testng_run.sh
会在当前目录输出执行结果,生成目录test-output ,该目录中有emailable-report.html,我们可以在testng_run.sh脚本中加入用脚本代码自动打开
open file:///Users/ac/eclipse-workspace/sh/test-output/emailable-report.html
执行结果