我是自动化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
使用属性是个好主意。你走对了。
为了加载不同的属性,基于环境,可以为属性文件创建多个文件夹。
假设您将属性文件存储在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是dev
和prod
。这两个配置文件都有一个指向.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。
现在,除了浏览器之外,您也可以做类似的事情。我强烈建议阅读关于BrowserFactory
或Factory
设计模式的内容。我只能为您提供如何这样做的提示,因为我的解决方案可能不会像您想要的那样工作。
创建附加的概要文件(您可以在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运行应用程序时,我需要添加运行配置,下面是显示我所添加内容的屏幕截图,但是它对我不起作用。