Selenium grid - test不是并行运行,而是在每个模拟器上运行两次



我正在尝试使用硒网格在appium上运行并行测试。奇怪的是,它在每个设备上运行两次。

我有2个设备和2个测试用例,它在每个设备上运行2个测试用例。总共运行了4个测试用例。

我一直在想到底是哪里出了问题,但我不确定是什么原因造成的。

DriverManager类:

package com.universalapp.utility;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.ios.IOSDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.IInvokedMethodListener;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import java.io.IOException;
import java.net.URL;
public class DriverManager {
private static final ThreadLocal<AppiumDriver<MobileElement>> appiumDriver = new ThreadLocal<>();
private final CapabilityFactory capabilityFactory = new CapabilityFactory();
public static synchronized AppiumDriver<MobileElement> getAppiumDriver() {
return appiumDriver.get();
}
public static synchronized void setAppiumDriver(AppiumDriver<MobileElement> driver) {
appiumDriver.set(driver);
}

@BeforeMethod
@Parameters({"platformVersion", "udid"})
public void setup(String platform, String udid) throws IOException {
String[] platformInfo = platform.split(" ");
DesiredCapabilities caps = this.capabilityFactory.getCapabilities(platform, udid);
if (platformInfo[0].equalsIgnoreCase("ANDROID")) {
setAppiumDriver(new AndroidDriver<>(new URL(UniversalAppConstants.COMMON_APP_DETAILS.HUB_URL), caps));
} else {
setAppiumDriver(new IOSDriver<>(new URL(UniversalAppConstants.COMMON_APP_DETAILS.HUB_URL), caps));
}
System.out.println("Thread id = " + Thread.currentThread().getName());
System.out.println("Hashcode of web driver instance = " + getAppiumDriver().hashCode());
}
@AfterMethod
public void teardown() {
getAppiumDriver().quit();
}
}

跑类:

package com.universalapp.runner;
import com.universalapp.utility.DriverManager;
import io.cucumber.testng.CucumberOptions;
import io.cucumber.testng.FeatureWrapper;
import io.cucumber.testng.PickleWrapper;
import io.cucumber.testng.TestNGCucumberRunner;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@CucumberOptions(
plugin = {"pretty", "json:target/json/output.json", "html:target/html/", "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"},
features = "src/main/feature/",
glue = "com.universalapp.stepDefinition",
tags = "@Test",
monochrome = true
)
public class RunnerTest extends DriverManager {
private TestNGCucumberRunner testNGCucumberRunner;
@BeforeClass(alwaysRun = true)
public void setup() {
this.testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
@Test(dataProvider = "feature")
public void features(PickleWrapper eventWrapper, FeatureWrapper cucumberFeature) {
this.testNGCucumberRunner.runScenario(eventWrapper.getPickle());
}
@DataProvider
public Object[][] feature() {
return this.testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() {
this.testNGCucumberRunner.finish();
}
}

TestNg xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="2">
<test name="emulator-5554">
<parameter name="platformVersion" value="Android 8.0"/>
<parameter name="udid" value="emulator-5554"/>
<classes>
<class name="com.universalapp.runner.RunnerTest"/>
</classes>
</test>
<test name="emulator-5556">
<parameter name="platformVersion" value="Android 10.0"/>
<parameter name="udid" value="emulator-5556"/>
<classes>
<class name="com.universalapp.runner.RunnerTest"/>
</classes>
</test>
</suite>

检查您的第二个模拟器是否处于活动状态并在adb devices下显示。默认情况下,每个第一个模拟器都有id : emulator-5554

最新更新