Java 无法仅在未调用Before、After和Test Methods函数之前和之后执行套件之前和之后使用dockerFile运行测试文件

Java 无法仅在未调用Before、After和Test Methods函数之前和之后执行套件之前和之后使用dockerFile运行测试文件,java,docker,selenium-webdriver,dockerfile,testng,Java,Docker,Selenium Webdriver,Dockerfile,Testng,DockerFile 来自openjdk:8-jre-slim WORKDIR/usr/share/tag 添加目标/selenium-docker.jar selenium-docker.jar addtarget/selenium-docker-tests.jar selenium-docker-tests.jar 添加目标/libs libs 添加src/test/resources/TestSuite/dev_env/testng.xml testng.xml entrypointjav

DockerFile

来自openjdk:8-jre-slim

WORKDIR/usr/share/tag

添加目标/selenium-docker.jar selenium-docker.jar

addtarget/selenium-docker-tests.jar selenium-docker-tests.jar

添加目标/libs libs

添加src/test/resources/TestSuite/dev_env/testng.xml testng.xml

entrypointjava-cp selenium-docker.jar:selenium-docker-tests.jar:libs/*org.testng.testng-testng.xml

testng.xml

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" parallel="tests" thread-count="2">
    <parameter name="env" value="dev_env"/>
    <parameter name="system" value="local"/>
    <listeners>
        <listener class-name="com.testlisteners.TestListeners"/>       
    </listeners>
    <test name="FireFoxTests">
        <parameter name="browser" value="firefox"/>
        <classes>
            <class
                    name="com.tests.HomePageTest">
                <methods>
                    <include name= "testMultiSelectDropdown"/>
                </methods>
            </class>
        </classes>
    </test>
    <test name="ChromeTests">
        <parameter name="browser" value="chrome"/>
        <classes>
            <class name="com.tests.HomePageTest">
                <methods>
                    <include name= "testMultiSelectDropdown"/>
                </methods>
           </class>           
       </classes>
    </test>
</suite>
我使用maven将所有依赖项复制到libs包中,并且我已经验证了我为main和test编译的所有类都存在于selenium-docker.jar和selenium-docker-tests.jar中

我为创建selenium-docker.jar和selenium-docker-tests.jar运行的命令:
mvn清洁包-DskipTests

用于创建Docker映像的命令:
docker构建-t selenium\u docker:1.0.

运行测试的命令:
docker运行selenium\u docker:1.0

输出

@BeforeSuite
    @Parameters({"env", "system"})
    public void preSetup(String env, String system) throws IOException {
        this.env = env;
        this.system = system;
        logger.info("Before Suite is called...");
        oneInstance.add(KEYS.ENVIRONMENT, env);
        oneInstance.add(KEYS.SYSTEM, system);
    }



@BeforeMethod(alwaysRun = true)
    @Parameters({"browser"})
    public void setup(String browser, Method method) throws IOException {
        logger.info("Before Method is called..");
        String toLowercaseBrowser = browser.toLowerCase();
        this.browser = toLowercaseBrowser;
        logger.info(toLowercaseBrowser + " browser will be launched.");
        ExtentTestManager.startTest(method.getName(), method.getName() + " - " + browser.toUpperCase());

        if (oneInstance.getAsString(KEYS.SYSTEM.name()).equalsIgnoreCase("local")) {
            switch (toLowercaseBrowser) {
                case "chrome":
                    WebDriverManager.chromedriver().setup();
                    driver.set(new ChromeDriver(setChromeOptions()));
                    getDriver().manage().window().fullscreen();
                    getDriver().get(setAppURL());
                    break;
                case "firefox":
                    WebDriverManager.firefoxdriver().setup();
                    driver.set(new FirefoxDriver());
                    getDriver().manage().window().fullscreen();
                    getDriver().get(setAppURL());
                    break;
                default:
                    throw new InvalidArgumentException("browser : " + browser + " is invalid.");
            }
        } else {
                instantiateRemoteWebDriver(toLowercaseBrowser);
                getDriver().manage().window().fullscreen();
                getDriver().get(setAppURL());
        }

    }
[调试]2020-01-24 16:50:48.989[主]OneInstance-OneInstance正在运行 空初始化它

[信息]2020-01-24 16:50:49.123[主]基本测试-在套件启动之前 叫

[信息]2020-01-24 16:50:49.129[测试NG-tests-2]测试监听器-我是 启动方法中的色度测试

[信息]2020-01-24 16:50:49.131[测试]测试监听器-我是 在onStart方法FireFoxTests中

[信息]2020-01-24 16:50:49.134[主]基本测试-驾驶员内部 清理

=============================================== 套房1

运行的测试总数:0,通过率:0,失败率:0,跳过率:0
在输出中,我们可以看到调用套件之前的但是调用方法之前的丢失了我通过更正项目中的文件路径解决了问题。在本地运行时,我使用了基于windows的路径,但由于我的测试是在unix系统中运行的,所以出现了一个异常,在更正这些路径后,测试无法工作,所以工作正常。我将(\替换为/),这样它在windows和Unix系统中都能工作。

我尝试使用TestNG
7.1.0
复制此问题,但无法复制。我可以在调用方法之前看到
。请您将docker排除在等式之外,并尝试使用TestNG的最新发布版本(
7.1.0
截至今天)复制此问题@KrishnanMahadevan感谢您的关注。我使用的是TestNG
7.0.0
,使用maven时效果很好。根据你的建议,我尝试了
7.1.0
,而maven的效果太好了。只有在使用DockerFile运行myproject时,我才面临上述问题,否则它工作得非常顺利。您能否在GitHub上创建一个简单的项目以及docker文件,并共享问题中的项目链接?让我看看是否可以试试看到底发生了什么。@KrishnanMahadevan这里是我项目的链接。我还没有更新自述。一些信息:所有xml都在test/resources/TestSuite中运行项目:mvn test-DsuiteXmlFile=dev_env/testng.xml。如果需要更多细节,请告诉我。