主要是因為打包時依賴的jar包沒有打入,網上有很多需要將對應的jar單獨拷貝出來然后通過classpath引用啟動,但是感覺這個就是個無底洞。拷貝了這么多個包最后還是說找不到ObjectId
啟動命令是(需要cd到這個文件夾下面)
java -classpath test.jar;testng-6.9.4.jar;jcommander-1.64.jar;extentreports-3.0.3.jar;freemarker-2.3.23.jar org.testng.TestNG system_pro.xml
執行結果:
C:\Users\admin\Desktop\test>java -classpath test.jar;testng-6.9.4.jar;jcommander-1.64.jar;extentreports-3.0.3.jar;freemarker-2.3.23.jar org.testng.TestNG system_pro.xml [TestNG] Running: C:\Users\admin\Desktop\test\system_pro.xml =============================================== Parallel tests Total tests run: 1, Failures: 1, Skips: 0 =============================================== Exception in thread "main" java.lang.NoClassDefFoundError: org/bson/types/ObjectId at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetPublicMethods(Class.java:2902) at java.lang.Class.getMethods(Class.java:1615) at freemarker.ext.beans.ClassIntrospector.discoverAccessibleMethods(ClassIntrospector.java:464) at freemarker.ext.beans.ClassIntrospector.discoverAccessibleMethods(ClassIntrospector.java:457) at freemarker.ext.beans.ClassIntrospector.createClassIntrospectionData(ClassIntrospector.java:268) at freemarker.ext.beans.ClassIntrospector.get(ClassIntrospector.java:244) at freemarker.ext.beans.BeanModel.<init>(BeanModel.java:114) at freemarker.ext.beans.BeanModel.<init>(BeanModel.java:104) at freemarker.ext.beans.StringModel.<init>(StringModel.java:52) at freemarker.ext.beans.StringModel$1.create(StringModel.java:37) at freemarker.ext.beans.BeansModelCache.create(BeansModelCache.java:71) at freemarker.ext.util.ModelCache.getInstance(ModelCache.java:84) at freemarker.ext.beans.BeansWrapper.wrap(BeansWrapper.java:860) at freemarker.template.DefaultObjectWrapper.handleUnknownType(DefaultObjectWrapper.java:235) at freemarker.template.DefaultObjectWrapper.wrap(DefaultObjectWrapper.java:214) at freemarker.template.WrappingTemplateModel.wrap(WrappingTemplateModel.java:105) at freemarker.template.DefaultListAdapter.get(DefaultListAdapter.java:75) at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:104) at freemarker.core.DynamicKeyName._eval(DynamicKeyName.java:69) at freemarker.core.Expression.eval(Expression.java:78) at freemarker.core.Assignment.accept(Assignment.java:131) at freemarker.core.Environment.visit(Environment.java:324) at freemarker.core.MixedContent.accept(MixedContent.java:54) at freemarker.core.Environment.visitByHiddingParent(Environment.java:345) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48) at freemarker.core.Environment.visit(Environment.java:324) at freemarker.core.MixedContent.accept(MixedContent.java:54) at freemarker.core.Environment.visit(Environment.java:324) at freemarker.core.Environment.process(Environment.java:302) at freemarker.template.Template.process(Template.java:325) at com.aventstack.extentreports.reporter.ExtentHtmlReporter.flush(ExtentHtmlReporter.java:145) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.aventstack.extentreports.Report.notifyReporters(Report.java:210) at com.aventstack.extentreports.Report.flush(Report.java:132) at com.aventstack.extentreports.ExtentReports.flush(ExtentReports.java:261) at com.genergy.util.ExtentTestNGIReporterListener.generateReport(ExtentTestNGIReporterListener.java:104) at org.testng.TestNG.generateReports(TestNG.java:1090) at org.testng.TestNG.run(TestNG.java:1049) at org.testng.TestNG.privateMain(TestNG.java:1339) at org.testng.TestNG.main(TestNG.java:1308) Caused by: java.lang.ClassNotFoundException: org.bson.types.ObjectId at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 42 more
不知道哪里出了問題。。。。
另一種解決方法:
maven使用打包插件將依賴的jar包一起打包,pom.xml添加插件:
<build> <plugins> <plugin> <!-- 指定項目編譯時的java版本和編碼方式 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <target>1.8</target> <source>1.8</source> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.genergy.Excel2Test</mainClass> <!-- 指定入口類路徑 --> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> <!-- jar包后綴,生成的jar包形式為:project-1.0-SNAPSHOT-jar-with-dependencies.jar --> </descriptorRefs> </configuration> <!-- 添加此項后,可直接使用mvn package | mvn install --> <!-- 不添加此項,需直接使用mvn package assembly:single --> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
通過mvn package 打好包之后,將需要執行
這里需要將測試的xml拷貝到和jar包一個路徑
然后執行
java -classpath jar包名 org.testng.TestNG xml名
如:
java -classpath genergy-api-test-1.0-SNAPSHOT-jar-with-dependencies.jar org.testng.TestNG system_pro.xml
最后生成測試報告在: