Как заполнить тестовую базу данных для использования в Appium? - PullRequest
3 голосов
/ 30 октября 2019

Я использую Nativescript 6.x с Angular 8.x и Ruby on Rails 5.x на серверной части. Я делаю свои тесты «от конца до конца» с Appium + Мокко + Чай. Я хотел бы заполнить тестовую базу данных для использования в моих сквозных тестах.

Вот код, который я пытаюсь смоделировать

login() {
    console.log("Login called")

    this.http.get("https://example.com/resource")
        .pipe(
            map(res =>{
                console.log(res);
            })
        )
        .subscribe(res => {
            this.router.navigate(["/home"]);
        });

}

Когда я запускаю свои сквозные тестыwith;

npm run e2e -- --runType device.samsung

Некоторые из моих тестов требуют, чтобы данные уже были в базе данных, такие как тест deleteItem. Есть ли способ в Appium заполнить локальную тестовую базу данных данными, которые мне нужны для теста нативного скрипта Appium?

В настоящее время я делаю это вручную в сквозных тестах, то есть: я создаюЭлемент, а затем удалить его до конца теста. Проблема в том, что это делает мои тесты длинными и перекрывающимися.

1 Ответ

0 голосов
/ 12 ноября 2019

Это может быть возможно, но это не простой способ. Я могу объяснить, как нечто подобное было сделано в нашем случае. Но это будет не так просто, как просто передать String параметр внутри Appium.

1) Для начала, Appium строится вокруг WebDriver API. Который включает в себя множество функций для работы с устройством. Тем не менее, макетирование и настройка базы данных для приложения - это что-то из другой кухни , которой внутри у нас явно нет. Более того, он очень специфичен для устройства, приложения и реализации. Чтобы настроить базу данных, вам необходимо внести некоторые изменения в клиенте, чтобы сделать возможным сборку определенного типа.

class WorkingDBHelper {
    private lateinit var db: DataBase

    fun createDb() {
        val context = ApplicationProvider
                 .getApplicationContext<Context>()

        if (Build.QA_REGRESSION) {
        db = Room.databaseBuilder(context, 
               TestDatabase.class, "dev/tests/database/*.db")
        } else {
         // ......
        }
    }

// .....
}

Эти изменения могут быть очень простыми и настроены для определенных типов сборки. Скажите типы регрессии QA, как вы видите выше. Это изменение безопасно (потому что для конкретной сборки) и теперь дает возможность прошивать БД внутри приложения. Примечание . Приведенный выше пример использования Room в качестве решения ORM для клиента. Но это может быть согласовано с каждой БД.

2) Как только ваш клиент теперь может работать с внедренными внутри файлами БД. Все, что вам нужно, это реализовать функцию с толканием вашей конкретной БД. Это можно сделать очень легко (например, с Python и Appium или даже с командами adb перед тестированием). И вы должны иметь предварительно созданные базы данных для каждого теста.

self.active_driver.push_file(
         "dev/tests/database/*.db", self.get_database_remove_test())
...