我在后端使用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本机脚本测试所需的数据植入本地测试数据库?
当前,我在端到端测试中手动执行此操作,即:我正在创建一个项,然后在端到端测试中将其删除。问题在于它会使我的测试变得冗长且重叠。
答案 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())