Здравствуйте, интересует такой вопрос. Есть несколько классов с JUnit тестами с Appium. Как запускать эти тесты на разных девайсах (параллельно или последовательно)? Насколько я понимаю, для каждого девайса указываются свои Capabilities (deviceName, CapabilityType.VERSION и тд), но где все это хранить и какой инструмент использовать, чтобы эти же тесты прогнались для каждого набора Capabilities? Надеюсь, понятно объяснил вопрос. Спасибо за помощь!
Например можно параметризовать тесты. Насчёт параллельности нужно чуть больше подумать. В 5.3 версии добавили: https://stackoverflow.com/questions/50586201/parallel-test-case-execution-with-junit-5, в 4-й версии через surefire maven plugin запускали в параллель.
Простой пример на JUnit5 набросал:
Тестовый класс:
package com.github.bratuhin.example;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT;
@Execution(CONCURRENT)
class ParallelTest {
@DisplayName("Параметризированный тест")
@ParameterizedTest(name = "Test № {index}, value = {arguments}")
@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0})
void testMethod(int val, TestInfo info) throws InterruptedException {
System.out.println("This is Jupiter test! Name = " + info.getDisplayName() + ", value = " + val);
Thread.sleep(1000);
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.bratuhin</groupId>
<artifactId>junit-parallel-example</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<junit.jupiter.version>5.5.1</junit.jupiter.version>
<junit.platform.version>1.5.1</junit.platform.version>
<maven.surefire.version>2.22.2</maven.surefire.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<properties>
<configurationParameters>
junit.jupiter.conditions.deactivate = *
junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
</configurationParameters>
</properties>
</configuration>
</plugin>
</plugins>
</build>
</project>
В IDE всё равно будет запускать последовательно, а вот из мавена через плагин или консоль (mvn clean test
) уже запуститься в параллели и выполнится в 10 раз быстрее:
В вашем случае только нужно параметризовать через MethodSource и в нем сделать что-то типа фабричного метода, который вернет список или массив объектов (драйверы appium’а или что-то более абстрактное типа TestSource внутри которого есть драйвер).