Создание общих тестовых данных для нескольких файлов объектов - PullRequest
1 голос
/ 18 апреля 2019

Мое требование следующее:

  1. У меня есть пара файлов .feature. Я хочу создать тестовые данные, которые будут общими для всех этих файлов функций. После создания тестовых данных сценарии будут запускаться из файлов объектов.

  2. Я также хочу получить некоторую информацию после создания тестовых данных. например, идентификаторы данных, которые я создал. Так что я могу использовать эту информацию для вызова API, добавить полезную нагрузку в моих сценариях.

Я думаю, мы могли бы сделать это: 1. Создание Java-файла junit. Я определяю статический метод с @BeforeClass там и использую runner () Карате () для запуска моего файла create-test-data.feature (я могу использовать Карате, чтобы поразить API приложения для создания некоторых данных). Я определяю свойство в своем Java-классе типа Object и устанавливаю его с результатом Runner.runFeature ().

  1. Затем я создаю отдельный файл функции test-data-details.feature. Я определяю свой код Java Interop здесь. например,

    • def test_data = «»» var JavaOutput = Java.type ('com.mycompany.JavaFile'); var testData = JavaOutput.propertyName; "" "
  2. Теперь, когда у меня есть объект тестовых данных в моем файле test-data-details.feature. Я называю этот файл .feature (callonce) в разделе «Фон» моих файлов объектов, в которых есть сценарии тестирования. Поэтому я могу повторить данные тестовых данных, такие как id, name. и т. д., которые я могу затем использовать в путях запросов и полезных нагрузках API.

Я не уверен, что вышеприведенный дизайн - верный путь. Я попытался, но получил некоторые проблемы в моем Java-файле, где getClass () ниже жалуется, что его нельзя использовать в статическом методе.

@RunWith(Karate.class)

открытый класс AccountRunner {

public static Object job = null;

@BeforeClass
public static void create_job(){
    Map<String, Object> result = Runner.runFeature(getClass(), "test-data.feature", null, true);
    job = result.get("job");
}

}

Теперь все вышеперечисленное может быть совершенно неверным. Нужна помощь о том, как решить этот сценарий в каратэ.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

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

Этого также можно добиться в karate-config.js , используя karate.callSingle ()

В вашем karate-config.js

config["testdata"] = karate.callSingle("test-data.feature")

Ваш test-data.feature будет выполнен один раз перед всеми тестами и сохранит ответ в testdata, вы можете использовать эту переменную непосредственно в вашей функции.

0 голосов
/ 01 мая 2019

Итак, я реализовал следующий дизайн:

Я создал два метода, один с BeforeClass, а другой с аннотацией AfterClass в моем файле TestRunner.java.В этих методах я могу вызывать специфические файлы создания и очистки данных и передавать аргументы как объект Json.

@RunWith(Karate.class)
@KarateOptions(tags = {"~@ignore"})
public class AccountRunner {

    public static Map<String, Object> result = null;

    @BeforeClass
    public static void create_job() throws IOException, ParseException {

        Class clazz = AccountRunner.class;
        URL file_loc = clazz.getResource("create-test-data-1.json");

        File file = new File(file_loc.getFile());

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(new FileReader(file));
        JSONObject jsonObject = (JSONObject) obj;

        Map<String, Object> args = new HashMap();
        args.put("payload", jsonObject);

        result = Runner.runFeature(CommonFeatures.class, "create-data.feature", args, true);

    }


    @AfterClass
    public static void delete_investigation() {

        Map<String, Object> args = new HashMap();
        args.put("payload", result);

        Runner.runFeature(CommonFeatures.class, "delete-job.feature", args, true);
    }


}

Чтобы выполнить эти тесты через командную строку с помощью команды "mvn test", я сделал следующие изменения в pom.xml.

           `<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <includes>
                        <include>**/*Runner.java</include>
                    </includes>
                </configuration>
            </plugin>`

С этим решением я смог запустить свойтестирует в IDE, выполняя бегуна непосредственно или из командной строки.Однако я не нашел способа выполнить все свои тесты, следуя предложенному подходу каратэ, где у меня есть файл * Test.java на уровне набора тестов, и я использую конфигурацию maven по умолчанию с «mvn test».Функции не запускаются, так как файл .feature вызывается до запуска файла Runner, в котором есть метод создания тестовых данных для тестов.

Может быть, кто-то может подсказать, что еще я мог бы сделать, чтобы использовать подход карате в бегеФайл * Test.java вместо каждого файла * Runner.java.

...