移动应用测试自动化,从零开始用 JavaScript 玩转

谢思远_码农
2026-05-26 04:01
阅读 705

大家好,我是一名从培训班走出来的前端开发者,现在也带了不少新手学员。很多人在刚接触移动开发时,都会遇到一个“隐形难题”:怎么确保自己的 App 在不同手机上都能正常运行?手动点来点去太累,还容易漏测。于是我就想写这篇教程——用 JavaScript 实现移动应用测试自动化,让刚入门的朋友也能轻松上手。

我自己当初学的时候,一听到“自动化测试”就头大,以为要懂很多后端知识、命令行黑魔法。后来才发现,其实只要会一点 JavaScript,再装几个工具,就能写出自动点击、滑动、验证结果的脚本!今天这篇文章,就是我踩过坑、问过人、翻过文档后总结出的最佳实践路线,全程不用复杂概念,只讲你能马上动手的内容。


为什么要做移动应用测试自动化?

简单说:省时间 + 提质量

想象你做了一个登录页面,要在 iPhone 12、三星 S22、华为 P50 上都测一遍。手动操作:打开 App → 输入账号 → 输入密码 → 点击登录 → 看是否跳转成功。重复三次,手都酸了。如果还要测错误密码、空输入等情况?那更崩溃。

而自动化测试,就是写一段代码,让电脑自动帮你完成这些操作,并告诉你“哪台手机上失败了”。尤其适合回归测试(每次改完代码都要重新测老功能)和兼容性测试(多机型覆盖)。

好消息是:JavaScript 生态里已经有成熟的工具链,不需要你从零造轮子!


环境准备:三步搞定开发环境

我们选用目前最主流的方案:Appium + WebDriverIO + JavaScript。别被名字吓到,它们配合起来非常顺手。

第一步:安装 Node.js

Appium 和 WebDriverIO 都基于 Node.js,所以先装它。

  1. 打开 https://nodejs.org
  2. 下载 LTS 版本(长期支持版,更稳定)
  3. 安装时一路“下一步”,默认配置即可
  4. 安装完成后,打开终端(Mac 用 Terminal,Windows 用 CMD 或 PowerShell),输入:
    node -v
    npm -v
    
    如果看到版本号(比如 v18.17.0),说明装好了。

💡 我当初第一次装 Node.js 时,不小心下了“Current”版,结果某些包不兼容。记住:新手一律选 LTS!

第二步:安装 Appium

Appium 是一个开源的移动端自动化测试框架,支持 iOS 和 Android。

在终端执行:

npm install -g appium

装完后启动试试:

appium

如果看到 Welcome to Appium 和监听端口(通常是 http://localhost:4723),说明成功了!按 Ctrl+C 先退出。

⚠️ 注意:如果你用的是 Mac 并打算测 iOS,还需要额外安装 Xcode 和相关命令行工具。但本文以 Android 为主,iOS 后续可扩展。

第三步:创建项目并安装依赖

新建一个文件夹,比如叫 mobile-auto-test,然后初始化项目:

mkdir mobile-auto-test
cd mobile-auto-test
npm init -y

接着安装核心依赖:

npm install webdriverio appium @wdio/cli --save-dev

最后用 WebDriverIO 的脚手架生成配置文件:

npx wdio config

这时会出现交互式菜单,按以下选择(其他默认回车):

  • Where is your automation backend located? → On my local machine
  • Which framework do you want to use? → Mocha
  • Do you want to run WebdriverIO commands synchronous or asynchronous? → async
  • Do you want to use a compiler? → No!
  • Are you using TypeScript? → No
  • Which reporter do you want to use? → 选 spec(简洁日志)
  • Do you want to add a service to your test setup? → 选 appium
  • What is the base url? → 留空

完成后,项目根目录会多出 wdio.conf.js,这就是你的测试配置文件。


核心概念:搞懂这三个关键词就够了

新手最容易被术语劝退,其实只需要理解以下三点:

1. Driver(驱动):你的“遥控器”

Appium 本质是一个服务器,它接收指令后,通过系统提供的接口(如 Android 的 UIAutomator)去操控真机或模拟器。而 WebDriverIO 就是发送指令的“遥控器”。

你可以把它想象成:WebDriverIO 写命令 → Appium 接收 → 手机执行操作

2. Locator(定位器):找到页面上的按钮/输入框

就像你在网页用 document.getElementById() 找元素一样,移动端也要先“找到”目标控件才能操作。

常用定位方式有:

  • accessibility id(推荐!开发者可提前设置)
  • id(Android 的 resource-id)
  • xpath(万能但慢)

例如:一个登录按钮的 accessibility id 是 loginBtn,你就可以用 $('[accessibility-id="loginBtn"]') 找到它。

3. Capabilities(能力配置):告诉 Appium 测什么设备、什么 App

这是启动测试前的关键配置,比如:

{
  platformName: 'Android',
  deviceName: 'Pixel_4_API_30',
  app: '/path/to/your/app.apk',
  automationName: 'UiAutomator2'
}

意思就是:“我要在 Pixel 4 模拟器上,测试这个 APK 文件,用 UiAutomator2 引擎”。


实战项目:自动测试一个登录流程

下面我们一步步写一个真实的小项目:自动打开 App,输入账号密码,点击登录,并验证是否跳转成功

假设你有一个 Android APK 文件(可以是自己写的 Demo,也可以用公开的测试 App,比如 [https://github.com/cloudgrey-io/the-app](https://github

.github.com/cloudgrey-io/the-app))

步骤 1:准备测试 App

如果你没有现成的 APK,可以用这个公开的测试应用:

wget https://github.com/cloudgrey-io/the-app/releases/download/v1.10.0/TheApp-v1.10.0.apk

下载后放到项目根目录,命名为 TheApp.apk

步骤 2:修改 wdio.conf.js

打开 wdio.conf.js,找到 capabilities 配置,改成:

capabilities: [{
    platformName: 'Android',
    'appium:deviceName': 'emulator-5554', // 这是模拟器默认名称
    'appium:app': './TheApp.apk',
    'appium:automationName': 'UiAutomator2'
}]

🔍 提示:如何知道模拟器名称?启动 Android Studio 的 AVD Manager,运行一个模拟器,然后在终端输入 adb devices,看到的 ID 就是(通常是 emulator-5554)。

同时确保 services 包含 'appium'

services: ['appium'],

步骤 3:编写测试脚本

在项目根目录新建文件夹 test,里面创建 login.test.js

describe('登录功能自动化测试', () => {
    it('应该能成功登录并跳转到主页', async () => {
        // 1. 等待首页加载(找“Login”按钮)
        const loginBtn = await $('[accessibility-id="Login"]');
        await loginBtn.waitForDisplayed({ timeout: 10000 });

        // 2. 点击 Login 按钮
        await loginBtn.click();

        // 3. 输入用户名和密码
        const usernameInput = await $('[accessibility-id="username"]');
        const passwordInput = await $('[accessibility-id="password"]');
        
        await usernameInput.setValue('alice');
        await passwordInput.setValue('mypassword');

        // 4. 点击登录
        const submitBtn = await $('[accessibility-id="loginBtn"]');
        await submitBtn.click();

        // 5. 验证是否跳转成功(检查新页面是否有“Logout”按钮)
        const logoutBtn = await $('[accessibility-id="Logout"]');
        expect(await logoutBtn.isDisplayed()).toBe(true);
    });
});

步骤 4:启动模拟器并运行测试

  1. 打开 Android Studio → AVD Manager → 启动一个模拟器
  2. 回到终端,确保模拟器已连接:adb devices
  3. 运行测试:
    npx wdio run wdio.conf.js
    

如果一切顺利,你会看到模拟器自动打开 App、输入内容、点击按钮,终端输出绿色的 PASS!


新手常见问题与解决方案

❓ 问题 1:adb devices 找不到设备?

  • 确保模拟器已启动
  • Windows 用户可能需要安装 USB 驱动(但模拟器一般不需要)
  • 尝试重启 adb:adb kill-server && adb start-server

❓ 问题 2:元素找不到,报错 element not found

  • 检查 accessibility id 是否正确(可用 Appium Inspector 查看)
  • 加等待时间:await element.waitForDisplayed({ timeout: 10000 })
  • 页面可能还没加载完,别急着找元素

❓ 问题 3:Appium 启动失败,说端口被占用?

Appium 默认用 4723 端口。如果之前没关掉,会冲突。解决方法:

  • 手动杀掉进程:lsof -i :4723(Mac/Linux)或 netstat -ano | findstr :4723(Windows)
  • 或者在 wdio.conf.js 中指定不同端口:
    services: [['appium', { port: 4724 }]]
    

❓ 问题 4:能不能测真机?

可以!只需:

  1. 手机开启“开发者模式”和“USB 调试”
  2. 用 USB 连接电脑
  3. adb devices 能看到设备
  4. capabilitiesdeviceName 改成真机型号(如 SM-G998B

学习建议:下一步该学什么?

恭喜你完成了第一个自动化测试!但这只是起点。接下来我建议:

  1. 学会使用 Appium Inspector
    它能可视化查看 App 的元素结构,极大提升定位效率。安装方式:

    npm install -g appium-inspector
    appium-inspector
    
  2. 封装常用操作
    比如把“输入用户名”写成函数,避免重复代码:

    async function login(username, password) {
        await $('[accessibility-id="username"]').setValue(username);
        await $('[accessibility-id="password"]').setValue(password);
        await $('[accessibility-id="loginBtn"]').click();
    }
    
  3. 加入 CI/CD
    把测试脚本集成到 GitHub Actions 或 Jenkins,每次提交代码自动跑测试。

  4. 尝试测 iOS(Mac 用户)
    配置稍复杂,但原理相同,关键是 Xcode 和 simulator 设置。

  5. 阅读官方文档


最后的话

我当初培训班毕业时,公司让我接手自动化测试,吓得连夜补课。但坚持下来发现:只要拆解步骤、动手实践,再难的技术也能掌握。希望这篇教程能让你少走弯路。

记住:自动化测试不是为了取代人工,而是把人从重复劳动中解放出来,去做更有价值的事——比如设计更好的用户体验。

现在,打开你的终端,新建一个项目,跑通第一个测试吧!你离“高效开发者”又近了一步 🚀

评论 0

最热最新
暂无评论
谢思远_码农Lv.1
0
影响力
0
文章
0
粉丝