Я настроил сетку, как указано в этом сообщении. . Кроме того, у меня настроены тестовые классы, как в этом сообщении.
Поскольку я хотел, чтобы каждый driverInstance
использовал свои собственные someController
и someData
, я изменил BaseTest
следующим образом:
public abstract class BaseTest {
String testFolder;
String testName;
protected String envName;
protected Configuration config;
protected String host;
protected RemoteWebDriver driver;
protected String proxy;
protected SomeData someData;
protected SomeController someController;
public BaseTest() {
}
public BaseTest( String testFolder, String testName)
{
this.testFolder = testFolder;
this.testName = testName;
this.envName = System.getProperty("config");
this.proxy = System.getProperty("proxy");
config = this.envName;
}
@BeforeMethod
public void startTest(Method testMethod) {
try {
this.someData = SomeDataSetup.getSafeSomeData(new SomeData());
this.driver = WebDriverSetup.getDriver();
this.someController = SomeController.getSafeSomeController(new someController(this.driver, this.someData));
driver.navigate().to("https://" + this.host);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException");
}
}
@AfterMethod
public void closeWindow() {
driver.close();
driver.quit();
}
}
Чтобы получить каждый отдельный экземпляр, я создал следующий класс
public class SomeDataSetup {
public static SomeData getSafeSomeData(SomeData someDataSet ) {
ThreadLocal<SomeData> someData = null;
someData = new ThreadLocal<SomeData>();
someData.set(someDataSet);
return someData.get();
}
}
Аналогичная вещь для someController
. Следующие тесты будут использовать собственный экземпляр someData
, someController
и driver
, как показано ниже в TestClass
.
public class Tests extends BaseTest {
//This is used to do some setup in the super class
@Parameters({"testName", "env" })
public Tests( @Optional String testName, @Optional String env ) {
super( null, testName, null, env );
}
@BeforeMethod
public void setup() throws Exception {
try {
SomeData someData;
SomeController someController;
RemoteWebDriver driver;
this.someData = SomeDataSetup.getSafeSomeData(new SomeData());
this.driver = super.driver;
this.someController = SomeControllerSetup
.getSomeController(new SomeController(
this.driver, this.someData));
this.driver.navigate().to("https://" + this.host);
}
public void test1() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
public void test2() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
Это хороший способ получить потокобезопасные экземпляры каждого someData, someController или драйвера, или есть что-то, что можно сделать в самом BaseTest, чтобы вернуть локальный экземпляр каждого из них?