当前位置: 首页 > 知识库问答 >
问题:

如何在Maven中运行不同配置的UI测试

欧阳洲
2023-03-14

我是自动化UI测试的新手,我正在使用Cucumber和Selenium研究UI自动化。

所以在我的项目中,我创建了一个钩子类来设置web驱动程序进行测试。类似这样的事情:

System.setProperty("webdriver.chrome.driver", "driver path");
driver = new chrome driver;

但是如果我想用不同的浏览器和不同的环境运行相同的测试。例如,我想用chrome和环境A运行测试,用firefox和环境B运行相同的测试。我计划为不同的环境创建两个属性文件

env=qa
baseURl = http://qa......
username = test
password = test
env=dev
baseURl = http://dev......
username = test1
password = test1
mvn clean test broswer=chrome env=qa

共有1个答案

苏伟志
2023-03-14

使用属性是个好主意。你走对了。

为了加载不同的属性,基于环境,可以为属性文件创建多个文件夹。

假设您将属性文件存储在src/main/java/dev/properties.properties

src/main/java/qa
src/main/java/dev
src/main/java/prod
</dependencies>
    <profiles>
        <profile>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <id>dev</id>
            <properties>
                <configuration.path>src/main/dev</configuration.path>
            </properties>
        </profile>
        <profile>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <id>prod</id>
            <properties>
                <configuration.path>src/main/prod</configuration.path>
            </properties>
        </profile>
    </profiles>
</project>

就在

如您所见,我创建了2个配置文件。它们的ID是devprod。这两个配置文件都有一个指向.properties文件的configuration.path属性。要使用maven Creadment运行配置文件,只需输入-pprofileid-pdev例如

我希望您使用maven-surefire-plugin,因为这就是我将在示例中展示的内容。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <configuration.path>${configuration.path}</configuration.path>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
public class Properties {
    private static java.util.Properties props;

    static {
        props = new java.util.Properties();

        String pathWithPropertiesFiles = System.getProperty("configuration.path");
        String[] paths = pathWithPropertiesFiles.split("[;]");

        Arrays.asList(paths).forEach(propertyPath -> Arrays.asList(Objects.requireNonNull(new File(propertyPath).listFiles())).forEach(propertyFile -> {
            InputStream input;
            try {
                input = new FileInputStream(propertyFile);
                props.load(input);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }));
    }

    public static String getValue(String key) {
        String envProperty = System.getenv(key);
        if (envProperty != null && !envProperty.equals("null")) {
            return envProperty;
        }

        String systemProperty = System.getProperty(key);
        if (systemProperty != null && !systemProperty.equals("null")) {
            return systemProperty;
        }

        return props.getProperty(key);
    }
}

如果要打开正确的URL,只需使用properties.getValue(“baseUrl”);它将根据您选择的配置文件从正确的路径获取URL。

现在,除了浏览器之外,您也可以做类似的事情。我强烈建议阅读关于BrowserFactoryFactory设计模式的内容。我只能为您提供如何这样做的提示,因为我的解决方案可能不会像您想要的那样工作。

创建附加的概要文件(您可以在maven中使用多个概要文件),但只针对浏览器。

<profile>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <id>chrome</id>
            <properties>
                <browser.type>chrome</browser.type>
            </properties>
        </profile>

调用:-pchrome

记得将其添加到surefire-plugin:

<configuration>
                    <systemPropertyVariables>
                        <configuration.path>${configuration.path}</configuration.path>
                        <browser.type>${browser.type}</browser.type>
                    </systemPropertyVariables>
                </configuration>

现在你要做的就是想想,你在哪里实例化你的浏览器。

public class Browser {

    public static WebDriver getDriver() {
        String browserType = Properties.getValue("browser.type"); //it will get the `chrome` for profile `chrome`
        switch(browserType) {
            case "chrome": return new ChromeDriver();
        }
    }
}
 类似资料:
  • 我想在同一个项目中运行spock和junit5测试。因此,我制作了一个示例项目,在src/main下没有任何内容,但在src/test/java/a/package/下有两个测试。其中一个测试是junit5,另一个是spock测试。 但是在发出之后,只执行JUnit测试,而不执行spock测试。它们通过“运行所有测试”在Intellij中很好地一起运行,所以显然有一些我找不到的配置问题。 下面是我

  • db-config-test.xml Maven插件: StackError:

  • 我有maven surefire插件pom.xml: 现在我希望maven只在部署目标上执行测试,因此: 当执行mvn部署测试应该运行 当执行mvn包或mvn安装时,测试不应该运行,因为目标在部署之前

  • 我在eclipse中设置了一个“Maven项目”(简单项目),并为其添加了类和单元测试。测试运行良好。 但是,当我在“src/main/java”中添加“module info.java”时,单元测试未能启动: 信息:“workspace2”是我工作区的名称,“unittest”是项目名称。 如果我通过控制台运行maven(相同的maven和java版本),它运行良好。 设置: -eclipse:

  • 我已经配置了一个配置文件来只运行集成测试,但它仍然在运行所有测试。这是配置: 我试过正则表达式,就像在http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html但我发现这不管用。我怎样才能让测试以IT.java结束?

  • 我使用这个命令运行我的spring应用程序-java-jar,但是当从IDE运行应用程序时,我需要添加运行配置,下面是显示我所添加内容的屏幕截图,但是它对我不起作用。