WalkTour安卓参数有哪些关键配置?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 参数 正文

walktour 的核心是一个基于 UI Automator 的录制回放框架,它的参数配置主要分为两大类:

  1. 命令行参数:在执行 adb shell am instrument 命令时传入,用于控制测试任务的启动、停止、日志输出等。
  2. 配置文件参数:在测试脚本(通常是 .json 文件)中定义,用于描述具体的测试步骤、元素定位、操作逻辑等。

下面我将分别对这两类参数进行详细说明。


命令行参数

这些参数是在你的电脑上通过 adb 命令行直接调用的,它们是 walktour 测试任务的“总开关”和“全局配置”。

基本命令结构

adb shell am instrument -r -w -e <key1> <value1> -e <key2> <value2> com.walktour.test/androidx.test.runner.AndroidJUnitRunner
  • adb shell am instrument: 执行 Android Instrumentation 测试的命令。
  • -r: 打印原始输出,包含日志信息。
  • -w: 等待测试完成。这个参数非常重要,它确保你的脚本会等待整个测试流程执行完毕后再返回。
  • -e <key> <value>: 传递键值对参数给测试程序,这是传递 walktour 特有参数的方式。
  • com.walktour.test/androidx.test.runner.AndroidJUnitRunner: 这是 walktour 的测试运行器路径。请注意com.walktour.test 这个包名可能会根据你使用的 walktour 版本或自定义包名而有所不同,需要根据实际情况修改。

常用命令行参数

参数 描述 示例
testPath (核心参数) 指定要执行的测试脚本(.json 文件)的路径,这个路径是设备上的路径。 -e testPath /sdcard/walktour/testcases/login.json
logLevel 设置日志输出的级别,可选值: DEBUG, INFO, WARN, ERROR,级别越高,输出的日志越少。 -e logLevel DEBUG
retry 设置当测试步骤失败时的重试次数。 -e retry 3
timeout 设置每个测试步骤的超时时间(单位:毫秒)。 -e timeout 15000
reportPath 指定测试报告生成的路径。 -e reportPath /sdcard/walktour/reports/
startType 设置启动方式。0 表示冷启动(杀死应用后重新启动),1 表示热启动(不杀死应用)。 -e startType 0
clearData 测试开始前是否清除应用数据。truefalse -e clearData true
packageName 指定被测试应用的包名,如果脚本中没有指定,则使用此处的包名。 -e packageName com.example.myapp

综合示例

假设我们要执行 /sdcard/walktour/testcases/ 目录下的 order_flow.json 脚本,设置日志级别为 DEBUG,步骤超时时间为 20 秒,并允许失败后重试 2 次。

adb shell am instrument -r -w -e testPath /sdcard/walktour/testcases/order_flow.json -e logLevel DEBUG -e timeout 20000 -e retry 2 com.walktour.test/androidx.test.runner.AndroidJUnitRunner

配置文件参数 (JSON 格式)

这些参数定义在 .json 测试脚本文件中,是 walktour 的“灵魂”,描述了“做什么”和“怎么做”。

一个典型的 walktour JSON 文件结构如下:

{
  "before": [ ... ], // 可选:测试开始前执行的步骤
  "after": [ ... ],  // 可选:测试结束后执行的步骤
  "steps": [         // 核心部分:测试步骤列表
    { ... },
    { ... }
  ]
}

核心步骤对象 (steps 数组中的元素)

每个步骤都是一个对象,包含以下关键字段:

参数 类型 描述 示例
type String (必填) 步骤的类型,如 click, input, swipe, sleep 等。 "type": "click"
target Object (必填) 目标元素的定位信息。 "target": {"id": "btn_login"}
desc String 步骤的描述,用于日志和报告,方便阅读。 "desc": "点击登录按钮"
params Object 步骤的额外参数,根据 type 不同而不同。 "params": {"text": "test123"}

元素定位 (target 对象)

walktour 支持多种 UI Automator 定位方式,非常灵活:

定位方式 参数 描述
ID id 通过元素的 resource-id 定位,最常用、最稳定。
文本 text 通过元素的文本内容定位。
描述 desc 通过元素的 content-desc 属性定位。
类名 className 通过元素的完整类名定位。
组合定位 id, text, className 可以组合多个条件进行精确匹配。
坐标 x, y 直接点击屏幕上的绝对坐标。不推荐,因为不具可移植性。
索引 index 在多个相同元素中,通过其在列表中的位置(从0开始)定位。

常用步骤类型 (type) 及其参数

click - 点击

  • target: 定位要点击的元素。
  • 示例:
    {
      "type": "click",
      "target": {"id": "com.example.app:id/btn_login"},
      "desc": "点击登录按钮"
    }

input - 输入文本

  • target: 定位要输入文本的输入框。
  • params.text: 要输入的字符串。
  • 示例:
    {
      "type": "input",
      "target": {"id": "com.example.app:id/et_username"},
      "desc": "输入用户名",
      "params": {
        "text": "testuser"
      }
    }

swipe - 滑动

  • params.direction: 滑动方向,可选值: up, down, left, right
  • params.percent: 滑动距离(百分比,0.1 ~ 1.0)。5 表示从屏幕中间滑动到边缘。
  • 示例:
    {
      "type": "swipe",
      "desc": "向上滑动屏幕",
      "params": {
        "direction": "up",
        "percent": 0.8
      }
    }

sleep / wait - 等待

  • params.time: 等待的时间,单位是毫秒。
  • 示例:
    {
      "type": "sleep",
      "desc": "等待3秒",
      "params": {
        "time": 3000
      }
    }

assert - 断言(检查点)

断言用于验证某个条件是否满足,如果不满足,测试会失败。

  • target: 定位要检查的元素。
  • params.checkType: 检查类型,常用值:
    • exist: 检查元素是否存在。
    • not_exist: 检查元素是否不存在。
    • text_equal: 检查元素的文本是否等于指定值。
    • text_contain: 检查元素的文本是否包含指定值。
  • params.text: 当 checkTypetext_equaltext_contain 时,提供期望的文本。
  • 示例:
    // 检查登录成功后,某个欢迎文本是否存在
    {
      "type": "assert",
      "target": {"id": "com.example.app:id/tv_welcome"},
      "desc": "断言欢迎文本存在",
      "params": {
        "checkType": "exist"
      }
    }
    // 检查Toast提示
    {
      "type": "assert",
      "target": {"className": "android.widget.Toast"},
      "desc": "断言Toast提示为'登录成功'",
      "params": {
        "checkType": "text_equal",
        "text": "登录成功"
      }
    }

startApp - 启动应用

  • params.packageName: 要启动的应用的包名。
  • 示例:
    {
      "type": "startApp",
      "desc": "启动被测应用",
      "params": {
        "packageName": "com.example.myapp"
      }
    }

stopApp - 停止应用

  • params.packageName: 要停止的应用的包名。
  • 示例:
    {
      "type": "stopApp",
      "desc": "停止被测应用",
      "params": {
        "packageName": "com.example.myapp"
      }
    }

总结与最佳实践

  1. 分层管理:

    • 命令行参数 用于控制整个测试任务的执行环境(如脚本路径、超时、重试策略)。
    • JSON配置参数 用于定义测试的具体业务逻辑(操作步骤、断言检查)。
  2. 定位优先级:

    • 优先使用 id (resource-id),因为它最稳定,受版本影响最小。
    • textdesc
    • 避免使用绝对坐标,除非万不得已(如原生广告)。
  3. 健壮性:

    • 在关键操作后加入 assert 步骤,确保操作结果符合预期。
    • 合理使用 sleep,但不要滥用。sleep 是硬等待,会增加测试时间,优先使用 assert 来等待元素出现,这更智能。
    • before 步骤中启动应用,在 after 步骤中关闭应用,保证测试的独立性。
  4. 日志与报告:

    • 命令行中使用 -e logLevel DEBUG 获取详细日志,方便调试。
    • 使用 -e reportPath 指定报告路径,方便后续分析。

通过灵活组合这两类参数,你就可以构建出强大、稳定、可维护的安卓自动化测试脚本。

-- 展开阅读全文 --
头像
X1 Yoga 2025拆机,内部升级还是挤牙膏?
« 上一篇 今天
mac pro ma356拆机内部结构有何变化?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]