如何播种要在Appium中使用的测试数据库?

时间:2019-10-30 03:04:36

标签: android angular appium nativescript e2e-testing

我在后端使用Angular 8.x和Ruby on Rails 5.x的Nativescript6.x。我正在使用Appium + Mocha + Chai进行端到端测试。我想播种一个测试数据库,以用于端到端测试。

这是我要模拟的代码

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

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

}

当我运行端到端测试时;

npm run e2e -- --runType device.samsung

我的一些测试要求数据已经在数据库中,例如deleteItem测试。 Appium中是否有一种方法可以将我进行Appium本机脚本测试所需的数据植入本地测试数据库?

当前,我在端到端测试中手动执行此操作,即:我正在创建一个项,然后在端到端测试中将其删除。问题在于它会使我的测试变得冗长且重叠。

1 个答案:

答案 0 :(得分:0)

这是可能的,但这不是一个简单的方法。我可以解释一下,在我们的案例中是如何做的。但这不是那么简单,因为仅在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 {
         // ......
        }
    }

// .....
}

此更改可能非常容易,并且可以针对特定的构建类型进行配置。说出上面所说的质量检查回归类型。此更改是安全的(因为特定的构建),现在可以在应用程序内部刷新数据库。 注意。上面的示例使用Room作为客户端的ORM解决方案。但这可以与每个数据库保持一致。

2)现在,您的客户端现在可以使用注入的内部DB文件了。您所需要的只是实现特定数据库的实现功能。这可以非常容易地完成(例如,在测试之前使用Python和Appium甚至adb命令)。并且您应该为每个测试用例预先构建数据库。

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