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

Unable to run Test file using dockerFile only Before and After Suites are executed Before, After and Test Methods functions are not getting invoked

Docker文件

FROM openjdk:8-jre-slim

WORKDIR /usr/share/tag

ADD target/selenium-docker.jar selenium-docker.jar

ADD target/selenium-docker-tests.jar selenium-docker-tests.jar

ADD target/libs libs

ADD src/test/resources/TestSuite/dev_env/testng.xml testng.xml

ENTRYPOINT java -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>

基础测试

@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());
        }

    }

我使用 maven 将我所有的依赖项复制到 libs 包中,而且我已经验证了我所有编译的 类 for main 和 test 都存在于 selenium-docker.jar 和 selenium 中-docker-tests.jar

用于创建 selenium-docker.jar 和 selenium-docker-tests.jar 的命令 I 运行: mvn clean package -DskipTests

我用来创建 Docker 图片的命令: docker build -t selenium_docker:1.0 .

用于 运行ning 测试的命令: docker run selenium_docker:1.0

输出

[DEBUG] 2020-01-24 16:50:48.989 [main] OneInstance - OneInstance is null intialize it....

[INFO ] 2020-01-24 16:50:49.123 [main] BaseTest - Before Suite is called...

[INFO ] 2020-01-24 16:50:49.129 [TestNG-tests-2] TestListeners - I am in onStart method ChromeTests

[INFO ] 2020-01-24 16:50:49.131 [TestNG-tests-1] TestListeners - I am in onStart method FireFoxTests

[INFO ] 2020-01-24 16:50:49.134 [main] BaseTest - Inside driver cleanUp

============================================= == 套件 1

总测试 运行:0,通过:0,失败:0,跳过:0

在输出中我们可以看到 Suite 被调用之前... 但是 Method 被调用之前.. 丢失了

我通过更正项目中的文件路径解决了问题。虽然 运行 在本地我使用了基于 windows 的路径,但由于我的测试是在 unix 系统中的 运行 存在异常,因为在更正这些路径后测试无法正常工作,它工作正常。我将 (\ 替换为 /) 因此它可以在 windows 和 Unix 系统中使用。