Вызовите тот же шаг с другим типом аргумента в BDD - PullRequest
0 голосов
/ 07 июня 2018

Я пишу тестовые случаи с использованием BDD.У меня есть сценарий, в котором я застрял

Я генерирую случайные данные, используя шаг ниже

When generate random data for registration form

Есть класс Бина, у которого есть некоторые поля, такие как fname, lname, email, pass, в то время как я вызываю выше шагон генерирует случайные данные и заполняет этот класс EJB

Теперь он возвращает этот объект класса EJB, и я сохраняю это в formdata переменная

And store into 'formdata'

Теперь я хочу отправить этомое поле имени пользователя, как показано ниже

And enter firstname as '${formdata}'

шаг кода для того же самого:

@QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
public void enterFirstName(Map<String, Object> data) {
    sendKeys(data.get("firstname").toString(), element);
}

Работает нормально, но в некоторых случаях я должен отправить только строку, как показано ниже

And enter firstname as 'Narendra'

Шаг будет:

@QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
public void enterFirstName(String fname) {

    sendKeys(fname, element);

}

Тогда как мне управлять этими двумя кодами как одним методом?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я попробовал следующее решение, которое помогло мне сделать то же самое, что я ожидал:

@QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
public void enterFirstName(Object obj) {

    if (obj instanceof LinkedTreeMap) {
        Map<String, Object> map = (Map<String, Object>) obj;
        sendKeys(map.get("firstname").toString(), "regpage.firstname.textbox");

    } else if (obj instanceof String) {
        sendKeys(obj.toString(), "regpage.firstname.textbox");
    } else if (obj instanceof RandomRegisterDataGenerator) {
        RandomRegisterDataGenerator data = (RandomRegisterDataGenerator) obj;
        sendKeys(data.getFirstname(), "regpage.firstname.textbox");
    }

}
0 голосов
/ 07 июня 2018

У меня была аналогичная потребность в генерации случайных строк для более широкого входного покрытия.Я бы предложил сформировать логику на основе разделителей.

Пример:

public static void main(String[] arg) {
    enterFirstName("iamkenos");
    enterFirstName("${formdata}");
}

public static void enterFirstName(String fname) {
    System.out.println(transformData(fname));
}

public static String transformData(String data) {
    Pattern pattern = Pattern.compile("^\\$\\{.+}$");
    Matcher matcher = pattern.matcher(data);

    if (matcher.matches()) {
        //do some logic on your data;
        data = "my new data 123";
    }

    return data;
}

Однако для этого потребуется:

каждый раз вызывать transformData(arg) придерживаться фиксированного разделителя, например ${}

Выход:

iamkenos
my new data 123
...