Как упростить передачу параметров в файл testng XML? - PullRequest
1 голос
/ 04 февраля 2020

У меня есть файл testng XML, который выполняет тесты Selenium в группах, как показано ниже. Я хочу пройти через всю информацию браузера, установленную в именах параметров и значениях из JSON или файла другого типа, поэтому мне не нужно копировать и вставлять их если я добавлю конфиг для другого теста - значит, кода меньше. это возможно с файлом testng XML?

Спасибо за любую помощь.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="2" name="test.java" annotations="JDK" parallel="tests">
    <test name="Test - Chrome Vienna">
        <parameter name="browser" value="chrome"/>
        <parameter name="browserVersion" value="78.0"/>
        <parameter name="os" value="OS X"/>
        <parameter name="osVersion" value="Mojave"/>
        <parameter name="resolution" value="1024x768"/>
        <groups>
            <run>
                <include name="vienna" />
            </run>
        </groups>
        <classes>
            <class name="com.bookinggo.ticketed.uiendtoend.TicketedSingleJourneyTest"/>
        </classes>
    </test>

1 Ответ

0 голосов
/ 04 февраля 2020

Вы можете использовать провайдер данных. В вашем тестовом классе аннотируйте тест:

@Test(dataProvider="SearchProvider")

И вот как должен выглядеть ваш провайдер данных:

@DataProvider(name="SearchProvider")
    public Object[][] getDataFromDataprovider(){
    return new Object[][] 
        {
            { "browser", "chrome" },
            { "browserVersion", "78.0" },
            { "os", "OS X" }
        };

    }

В качестве альтернативы, вы можете создать отдельный класс для провайдера данных и прочитать json содержание, используя следующее:

@DataProvider
public Object[][] getSearchProvider() throws FileNotFoundException {
    JsonElement jsonData = new JsonParser().parse(new FileReader("<json path>"));
    JsonElement dataSet = jsonData.getAsJsonObject().get("dataSet");
    List<TestData> testData = new Gson().fromJson(dataSet, new TypeToken<List<TestData>>() {
    }.getType());
    Object[][] returnVal = new Object[testData.size()][1];
    int i = 0;
    for (Object[] each : returnVal) {
        each[0] = testData.get(i++);
    }
    return returnVal;
}
...