安卓自动化测试QA

安卓自动化测试入门:用手机跑通你的第一个 UI 测试用例

安卓自动化测试完全指南,用真实的安卓手机代替人工执行回归测试、对比传统 Appium 方案的优势、手把手教你写第一个自动化测试脚本。

约 6 分钟

三种测试方式怎么选

每周发一个版本时,登录、搜索、下单、支付、个人中心这些步骤会反复手点。点错一步,整套流程要重来。自动化测试把这些固定步骤写成脚本,让真机重复执行,同一份脚本也可以拿去回归、对比和兼容性验证。

模拟器 真机单机 真机集群
硬件成本 零 ¥1000~3000/台 ¥N×1000
行为真实性 中(与真实设备有差异) 高 高
多机型覆盖 低(需装多个模拟器) 有限 大量并行
适合场景 开发阶段验证 日常回归 兼容性和压力测试

开发阶段用模拟器先看问题。测试阶段用真机跑回归。发布前如果有多台真机,可以并行再跑一遍。模拟器和真机的差异,表里已经列了。

动手:录脚本、备模板、挑工具

拿电商购买流程举例。步骤是:打开 App,搜索「手机壳」,点第一个结果,选黑色,加入购物车,去购物车,结算,填地址,提交订单,看到「下单成功」。

以 EasyClick 为例,连上手机后切到录制模式,在手机上按流程走一遍。每点一个按钮、输入一段文字,编辑器里会出现对应代码。录完后类似这样:

launchApp("com.example.shop");       // 打开 App
sleep(2000);
swipe(500, 1500, 500, 800, 500);    // 向上滑
findAndTap("搜索", 3000);           // 找搜索框
typeText("手机壳");                    // 输入关键词
clickByText("搜索");                  // 点搜索
scrollToByText("iPhone 13 透明壳");   // 滚动找商品
tapByIndex(0);                       // 点第一个
selectColor("黑色");                 // 选颜色
addToCart();                         // 加购物车
checkout();                          // 结算
fillAddress("北京市朝阳区...");        // 填地址
submitOrder();                       // 提交
waitForResult("下单成功");            // 等成功页

跑完流程之后还要判断结果。断言写在步骤后面:

test("电商购买流程", () => {
    
    launchApp("com.example.shop");
    assert(title().contains("首页"));  // 确认进入正确页面
    
    search("手机壳");
    sleep(2000);
    var results = getSearchResults();
    assert(results.length > 0, "搜索结果不应为空");  // 有结果
    
    clickOnProduct(0);
    selectColor("黑色");
    addToCart();
    
    navigateToCart();
    var cartItems = getCartItems();
    assert(cartItems.length === 1);      // 只有一件商品
    assert(cartItems[0].color === "黑色"); // 颜色对
    
    checkout();
    fillAddress(address);
    submitOrder();
    
    waitForPage("success-page", 10000);
    assert(currentUrl().includes("order-success"));
    
    print("购买流程测试通过!");
});

这份脚本既跑流程,也判断对错。别的场景可以按同样结构改。登录测试里,正确密码进首页,错误密码要看到「密码错误」:

test("用户登录", () => {
    enterCredentials("user@example.com", "password123");
    clickButton("登录");
    waitForPage("home");
    assert(findText("欢迎回来"));
    
    backToLogin();
    enterCredentials("user@example.com", "wrong_password");
    clickButton("登录");
    assert(findText("密码错误"));
});

注册流程先清缓存,再用随机手机号和生成的密码:

test("新用户注册", () => {
    clearCache();
    visitRegistrationPage();
    fillForm({
        phone: getRandomPhone(),
        password: generateStrongPassword(),
    });
    clickButton("注册");
    assert(findText("注册成功") || findText("验证邮箱"));
});

多机型兼容性可以循环连接不同机型,跑核心流程,再拿截图对基线:

var devices = ["Samsung-Galaxy-S21", "Xiaomi-13", "Huawei-P60"];

devices.forEach(device => {
    connectDevice(device);
    test(`兼容测试: ${device}`, () => {
        runCoreFlows();
        assertScreenshot("baseline.png");
    });
});

EasyClick 和 Appium 按现有环境选。小团队或一个人做,EasyClick 不用先配 JDK、SDK 和 Appium Server,装 APK 就能在真机上跑。公司已经有 Java 或 Kotlin 的测试基础设施,继续用 Appium 即可。

先挑发版时重复最多的那一条手工流程写成脚本,跑通后再往上加断言。

更多参考

安卓自动化脚本入门,理解底层机制 第一个工程教程,从零开始 无障碍服务原理详解,技术底层的运作方式

============================

iEasyClick 官网 ieasyclick.net · 专注于安卓/苹果/鸿蒙全平台手机自动化

============================

想要真实跑起来?

本文介绍的方案均可基于 EasyClick 能力在 iEasyClick 落地。官网提供完整文档、开发工具与自动化产品,免费体验。

访问 iEasyClick 官网 →