zoukankan      html  css  js  c++  java
  • 吐血Eclipse Maven Selenium TestNG的各种坑

    刚入坑不久,有些是自己知识储备不够造成的,有些...那就是坑

    在eclipse里面新建maven项目,然后添加testgn依赖,不多说,这个简单。

    第一个坑:

    然后在src/test/java这个文件夹里面写selenium的Java测试脚本。写完脚本,用eclipse点击run as testng test运行,毫无问题完美。

    那么问题在哪?坑在哪?

    在于:如果我要把写的java脚本打包成jar文件放到别的电脑上用Java命令:java -jar yourjava.jar这种方式来运行就会出现问题。

    解决方案:把测试脚本放到src/main/java里面,不要放到src/test/java里面。

    so easy。

    第二个坑:

    哪有那么简单的事儿。如果这么简单的话就不会吐血了

    我们不是把java脚本打包成jar了嘛,别忘了我们的用的是testNG,testNG是不需要main()函数的。

    问题来了:运行jar文件,没有main函数会报错,好吧,我添加一个main函数还不行吗。

    可是这个main函数是随便添加的吗?添加的main函数能调用testng的注解标注的各种@Test吗?

    不能!不能!不能!得按照testng相关的方法来添加main函数,代码如下:

    Google说还有其它办法,但是没试过,所以就记录清测有效的方法

    package com.qa.test;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.testng.TestListenerAdapter;
    import org.testng.TestNG;
    
    public class StartNG {
        @SuppressWarnings("deprecation")
        public static void main(String[] args) {
            
            System.out.println("=============This is main()===========");
            System.out.println("=============Start NG===========");
    
            TestListenerAdapter tla = new TestListenerAdapter();
            TestNG testng = new TestNG();
            List<String> suites=new ArrayList<String>();
            suites.add("C:\eclipse-workspace\SeleniumFrameworkV3DD\testng.xml");//path to xml.//注意,这里是绝对路径,这里需要改进。
            testng.setTestSuites(suites);
            testng.run();
        
        
        }
    }

    好,这个坑已经解决,这是自己对maven和testng不熟悉的原因。

    第三个坑:

    想想啊,我要执行selenium+tetsng的测试,肯定要把这些依赖的包也打包进jar文件不,不然怎么运行呢。

    于是就用了这个maven-assembly-plugin.把这段加进maven项目的POM.XML文件里。

            <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.1.1</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <mainClass>com.qa.test.StartNG</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>

    然后打包成jar,在运行jar,就会出现下面的问题。

    根据提示:no main manifest attribute.这是什么鬼意思。

    根据大量Google结果,意思是在生成的jar包里面少了个MANIFEST.MF文件,这个文件的路径:META-INF/MANIFEST.MF

    这个文件是在生成的jar包里,不是eclipse的项目文件夹里面那个。

    好吧,我去打开jar包看看有没有这个文件。

    一看就来气了,这个文件是存在的。

    继续Google,又又一些老外说是MANIFEST.MF少了个main class参数啊。

    这就郁闷了,前面添加maven-assembly-plugin的时候明明加了main class的,为何main class死活不在MANIFEST.MF这个文件里呢。

    在这要吐槽eclipse,这是由于我打包是用的eclipse->run as->maven install

    老子用Eclipse run as->Maven Install打包有嘛错啊,真气人。

    继续 Google吧,stack上面点击率最高的就是这个了。

    那么多老外点赞这恶鬼解决方案为啥在我这儿还是行不通呢, main class为啥还是没有加到那个破文件里面去呢?

    继续google吧,这一来而去不知不觉就特么花了两个小时。

    突然在google上搜到,要打开maven命令行去运行上面截图里的代码。

    好吧,怀着试一试的心情,敲命令吧。

    Oh LA,命令管用了,能在破文件里找到main class了。那还不赶快java -jar去看看。

    好吧,运行正常,问题解决。

    附上外国友人的链接:

    点赞很多的是这个。

    How can I create an executable JAR with dependencies using Maven?
    https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven?rq=1

    下面这些也很有帮助。

    Maven Assembly Plugin is not setting the MainClass manifest setting
    https://stackoverflow.com/questions/7785456/maven-assembly-plugin-is-not-setting-the-mainclass-manifest-setting

    Can't execute jar- file: “no main manifest attribute”
    https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute

    How to run TestNG tests from main() in an executable jar?
    https://stackoverflow.com/questions/16465695/how-to-run-testng-tests-from-main-in-an-executable-jar?rq=1

    how to call testng.xml from java main method?
    https://stackoverflow.com/questions/23272861/how-to-call-testng-xml-from-java-main-method?noredirect=1&lq=1

    这个对maven打包的几种plugin做了比较详细的解释

    https://www.baeldung.com/executable-jar-with-maven

    这说明啥?Google出来类似问题一大堆,这说明maven打包在遇上testNG和eclipse那这是坑了无数开发和测试啊。

    这是在main方法里面加了invoke testng @Test之后的结果, test case 1,2,3在另外一个java文件里,跟main方法不在同一个文件。

    墙裂推荐

    How can I create an executable JAR with dependencies using Maven?

    https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven

  • 相关阅读:
    用webservice实现的一个天气预报程序
    让VS.net2005手机模拟器上网
    EVC4.0 PPC2003 Emulator 转中文版
    BSTR转CString
    在pocket pc 2003上播放声音
    VC++.net 2005 SmartDevice 屏幕转向
    c#.net2005 调用evc4.0生成的dll文件
    Json
    adb 命令模拟按键事件
    bat 截取字符
  • 原文地址:https://www.cnblogs.com/majestyking/p/10421463.html
Copyright © 2011-2022 走看看