UI 自动化测试
PandaTest 支持的 UI 自动化测试框架
支持的框架
PandaTest 支持多种主流的 UI 自动化测试框架:
| 框架 | 说明 |
|---|---|
| Appium | 跨平台自动化框架,支持 Android 和 iOS |
| Espresso | Android 原生 UI 测试框架,速度快、稳定性高 |
| XCUITest | iOS 原生 UI 测试框架 |
| UiAutomator2 | Android 系统级 UI 自动化框架 |
框架对比
| 特性 | Appium | Espresso | XCUITest |
|---|---|---|---|
| 平台支持 | Android + iOS | Android | iOS |
| 语言支持 | 多语言 | Java/Kotlin | Swift/ObjC |
| 执行速度 | 中等 | 快 | 快 |
| 学习曲线 | 中等 | 低 | 低 |
| 跨应用测试 | 支持 | 有限 | 有限 |
Espresso 测试
项目配置
在 build.gradle 中添加依赖:
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'androidx.test:runner:1.5.2'
androidTestImplementation 'androidx.test:rules:1.5.0'编写测试
@RunWith(AndroidJUnit4::class)
class LoginTest {
@get:Rule
val activityRule = ActivityScenarioRule(LoginActivity::class.java)
@Test
fun testSuccessfulLogin() {
// 输入用户名
onView(withId(R.id.username))
.perform(typeText("testuser"), closeSoftKeyboard())
// 输入密码
onView(withId(R.id.password))
.perform(typeText("password123"), closeSoftKeyboard())
// 点击登录
onView(withId(R.id.login_btn))
.perform(click())
// 验证跳转到主页
onView(withId(R.id.welcome_text))
.check(matches(isDisplayed()))
}
}在 PandaTest 运行
- 构建测试 APK:
./gradlew assembleAndroidTest - 上传应用 APK 和测试 APK 到 PandaTest
- 选择目标设备并执行
UiAutomator2 测试
UiAutomator2 适合系统级 UI 测试,可以跨应用操作。
@RunWith(AndroidJUnit4::class)
class SystemTest {
private lateinit var device: UiDevice
@Before
fun setup() {
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
}
@Test
fun testOpenSettings() {
// 按 Home 键
device.pressHome()
// 打开设置
val settings = device.findObject(UiSelector().text("设置"))
settings.click()
// 验证设置页面打开
val title = device.findObject(UiSelector().text("设置"))
assertTrue(title.exists())
}
}测试报告
所有框架的测试结果都会生成统一格式的报告:
- 执行结果:通过/失败/跳过数量、执行时间统计、成功率趋势
- 失败分析:错误截图、堆栈信息、设备日志
最佳实践
选择合适的框架:
- 需要跨平台?选 Appium
- 只测 Android 且追求速度?选 Espresso
- 需要系统级操作?选 UiAutomator2