三种测试方式怎么选
每周发一个版本时,登录、搜索、下单、支付、个人中心这些步骤会反复手点。点错一步,整套流程要重来。自动化测试把这些固定步骤写成脚本,让真机重复执行,同一份脚本也可以拿去回归、对比和兼容性验证。
| 模拟器 | 真机单机 | 真机集群 | |
|---|---|---|---|
| 硬件成本 | 零 | ¥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 落地。官网提供完整文档、开发工具与自动化产品,免费体验。