Appium 命令行接口(CLI)权威指南:`server`、`driver`、`plugin` 与 `setup` 子命令全解析
2026/9/13 9:29:59 网站建设 项目流程

Appium 命令行接口(CLI)权威指南:serverdriverpluginsetup子命令全解析

【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium

Appium 以 W3C WebDriver 协议为核心,为 Web、移动端及桌面应用提供了跨平台自动化能力,而其命令行可执行文件appium则是配置与启动服务器、管理驱动(drivers)与插件(plugins)等全部扩展的第一入口。本文以仓库内 CLI 参考文档 为主线,完整梳理四大子命令serverdriverpluginsetup的用法、全部参数与实战示例,并结合 parser.ts、args.ts、setup-command.ts 等源码,讲清命令背后的解析与执行链路。读完本文,你将能够熟练地用命令行启动并调优 Appium 服务器、按需安装/升级/卸载驱动与插件、一键配置移动/桌面/浏览器测试环境,并理解环境变量与不安全特性(insecure features)的安全语义。

一、总览:appium可执行文件与四大子命令

Appium 提供一个名为appium的命令行可执行文件,它既能用于配置和启动 Appium 服务器,也能用于管理 Appium 扩展(driver 与 plugin)。该可执行文件包含四个主要子命令:

子命令用途详细参考
appium server(或直接appium启动一个 Appium 服务器server.md
appium driver管理单个 driverextensions.md
appium plugin管理单个 pluginextensions.md
appium setup批量管理多个 driver/pluginsetup.md

所有子命令(以及子子命令)都可以通过--help/-h选项查看使用说明。这一点在源码中也有体现:ArgParser基于argparse构建,每个子解析器都开启了add_help: true,并为所有子命令挂载了带说明的 help 信息(见 parser.ts)。

除了上述命令,Appium 服务器还识别若干环境变量与不安全特性名称;driver 和 plugin 也可以定义属于自己的环境变量与特性。

二、appium server:启动并调优 Appium 服务器

appium server用于启动 Appium 服务器:

appium server

也可以省略server子命令直接运行:

appium

这个省略行为是解析器的显式设计:当第一个参数不属于setupdriverpluginserver-h/--help-v/--version集合时,parser.ts 会自动向参数列表头部注入server子命令(见 parser.ts 中的NON_SERVER_ARGS判断)。

2.1 服务器选项(Options)

以下所有选项都可以通过配置文件设置;命令行上设置的选项会覆盖配置文件中的对应值。

参数说明类型默认值
--address,-a监听的 IPv4/IPv6 地址string0.0.0.0
--allow-cors允许来自任意主机的浏览器 Web 连接booleanfalse
--allow-insecure允许在本服务器会话中启用的不安全特性列表;单个特性可用--deny-insecure覆盖;与--relaxed-security同时使用时不生效array<string>[]
--allow-unknown-args服务器收到无法识别的命令行参数时不退出,而是忽略它们;适合 Appium CLI 被外部工具包装并追加额外参数的情形booleanfalse
--base-path,-pa用作服务器上所有 webdriver 路由前缀的基础路径string""
--callback-address,-ca回调 IP 地址string0.0.0.0
--callback-port,-cp回调端口integer4723
--configAppium 配置文件 JSON 的路径string
--debug-log-spacing在日志中增加夸张的间距,便于目视检查booleanfalse
--default-capabilities,-dc每次会话都会使用的能力(除非被收到的 capabilities 覆盖)object
--deny-insecure在本服务器会话中禁用的不安全特性列表;由于所有不安全特性默认即禁用,该参数在未配合--allow-insecure--relaxed-security时没有效果,且它在这两者之后生效array<string>[]
--driverdriver 专属配置;键应对应 driver 包名object
--drivers-import-chunk-size服务器启动时并行导入 driver 的最大数量number3
--keep-alive-timeout,-ka所有客户端请求的 keep-alive 超时与连接超时(秒);设为0表示禁用integer600
--request-timeout等待接收客户端完整 HTTP 请求的超时时间(秒);设为0表示禁用;超时的请求将以HTTP 408拒绝integer3600
--local-timezone日志时间戳使用本地时区booleanfalse
--log,-g服务器日志输出到的文件路径;不影响控制台输出string
--log-filters日志过滤规则列表,详见日志过滤指南array
--log-level服务器日志级别,支持debuginfowarnerror;用冒号组合两个值(如warn:debug)可分别设置控制台与文件输出的日志级别stringdebug
--log-format服务器日志格式,支持textjsonpretty_json;设为json会禁用颜色stringtext
--log-no-colors禁用服务器日志颜色booleanfalse
--log-timestamp在服务器日志中显示时间戳booleanfalse
--long-stacktrace在日志条目中附加长堆栈跟踪;仅建议调试时使用booleanfalse
--max-ipc-data-sizeIPC 消息对象的最大字节数integer1048576(1MB)
--max-ipc-topics每个会话的 IPC 主题最大数量integer1000
--no-perms-check跳过服务器启动时的各种权限检查booleanfalse
--nodeconfig将 Appium 注册为 Selenium Grid 3 节点的 JSON 配置object
--pluginplugin 专属配置;键应对应 plugin 包名object
--plugins-import-chunk-size服务器启动时并行导入 plugin 的最大数量number7
--port,-p监听端口integer4723
--relaxed-security允许所有不安全特性;仅在所有客户端都处于可信网络、不可能突破会话沙箱时使用;可用--deny-insecure覆盖个别特性booleanfalse
--session-override启用会话覆盖(clobbering)booleanfalse
--shutdown-timeout关闭服务器时等待所有活动连接关闭的超时时间(毫秒)number5000
--ssl-cert-path使用 TLS 时的.cert文件绝对路径;必须与--ssl-key-path同时提供,详见 SSL/TLS/SPDY 支持指南string
--ssl-key-path使用 TLS 时的.key文件绝对路径;必须与--ssl-cert-path同时提供,详见 SSL/TLS/SPDY 支持指南string
--strict-caps阻止创建使用了不支持 capabilities 的新客户端会话booleanfalse
--tmp用于临时文件的目录绝对路径stringos.tmpdir()
--use-drivers要激活的 driver 列表;默认激活所有已安装 driverarray<string>[]
--use-plugins要激活的 plugin 列表;默认不激活任何 plugin;设为["all"]激活所有已安装 pluginarray<string>[]
--webhook,-G服务器日志输出到的 HTTP 监听 URL;不影响控制台输出;也接受裸host:port,它会通过明文 HTTP 把日志发送到根路径;既无 scheme 也无端口的值回退到127.0.0.1:9003string

从源码看,这些参数并非硬编码在解析器里,而是由 schema 驱动生成的:getServerArgs()toParserArgs()(由配置 schema 转换而来)与少量仅限 CLI、不允许出现在配置文件中的参数(如--shell--show-build-info--config等,见 args.ts)合并后注册到解析器,确保命令行与配置文件共享同一套参数定义。

2.2 信息类选项(Info Options)

以下选项仅用于查询参考或调试信息。它们只支持基础的appium命令(而非appium server,并且不会启动服务器:

参数说明
--show-build-info打印 Appium 服务器版本的详细信息
--show-config打印当前 Appium 服务器配置详情
--show-debug-info打印当前环境信息:操作系统、Node.js 以及 Appium 本身的详情
--version,-v打印 Appium 服务器版本

例如快速查看版本与环境信息:

appium --version appium --show-config appium --show-debug-info

这些参数同样定义在 args.ts 的serverArgsDisallowedInConfig中,因此它们永远不会出现在配置文件里,只能作为命令行开关使用。

三、appium driver/appium plugin:扩展的完整生命周期管理

appium driverappium plugin为特定的扩展(driver 或 plugin)提供管理选项,两者支持的选项完全一致,共包含六个子子命令:doctorinstalllistrunupdateuninstall

从实现上看,两者共用同一套参数定义生成函数:getExtensionArgs()在 args.ts 中为driverplugin两种类型批量构建参数表,并在 parser.ts 中统一注册,因此两个命令的行为天然保持一致。另外,list子命令还提供了别名ls(见 parser.ts 及 parser.ts 中的别名归一化处理)。

3.1doctor:环境前置条件体检

对已安装的扩展运行 doctor 检查,用于验证该扩展的前置条件是否配置正确。注意:并非所有扩展都包含 doctor 检查。

appium {driver|plugin} doctor <extension-name>
参数说明
extension-name已安装扩展的短名称

选项:

参数说明类型
--json以 JSON 格式返回结果boolean

示例——对 UiAutomator2 driver 运行 doctor 检查:

appium driver doctor uiautomator2

如果你维护自己的 Appium 扩展并希望加入 Appium Doctor 支持,可参考仓库中 fake-driver 的 doctor 实现(fake1.ts、fake2.ts),它演示了扩展如何为 Appium Doctor 提供检查项。

3.2install:安装扩展

appium {driver|plugin} install <install-spec>
参数说明
install-spec官方扩展的短名称,可带npm版本或 tag 修饰符;若使用--source选项,该参数的期望格式会变化(见下方对照表)

选项:

参数说明类型
--json以 JSON 格式返回结果boolean
--package扩展的 Node.js 包名;当--sourcegitgithub时必填string
--sourceAppium 查找给定扩展的位置;支持gitgithublocalnpm;会改变install-spec的期望格式string

--sourceinstall-spec的对应关系(该枚举在 extension-config.ts 的INSTALL_TYPES中定义):

source<install-spec>的格式
官方扩展的短名称,可带npm install支持的修饰符(如版本或 tag)
git扩展的 Git URL
github扩展的 GitHub 仓库 URL
local包含扩展package.json文件的本地路径
npmnpm包名,可带npm install支持的修饰符(如版本或 tag)

安装示例:

# 安装最新的 XCUITest driver appium driver install xcuitest # 安装指定版本 9.0.0 的 XCUITest driver appium driver install xcuitest@9.0.0 # 从 npm 安装 beta 版的 @appium/fake-driver appium driver install @appium/fake-driver@beta --source=npm # 安装本地开发的 plugin appium plugin install /path/to/my/plugin --source=local # 从 GitHub 安装 XCUITest driver appium driver install https://github.com/appium/appium-xcuitest-driver --source=github --package=appium-xcuitest-driver # 使用 Git URL 安装 XCUITest driver appium driver install git://github.com/appium/appium-xcuitest-driver.git --source=git --package=appium-xcuitest-driver # 使用 Git URL 安装 XCUITest driver 仓库的某个分支 appium driver install git://github.com/appium/appium-xcuitest-driver.git#specific-branch --source=git --package=appium-xcuitest-driver

仓库自带的示例扩展(如 fake-driver、images-plugin、execute-driver-plugin)均可在本地通过--source=local安装测试,是验证扩展开发流程的绝佳样例。

3.3list:列出扩展

列出所有已安装的扩展,以及所有未安装的官方扩展。

appium {driver|plugin} list

选项:

参数说明类型
--installed只列出已安装的扩展boolean
--json以 JSON 格式返回结果boolean
--updates列出所有扩展并附带是否有更新版本的信息;仅对通过npm安装的扩展生效boolean
--verbose显示每个扩展的额外详情boolean

示例——列出所有已安装 driver 并检查是否有新版本可用:

appium driver list --installed --updates

3.4run:运行扩展脚本

运行扩展的脚本,可用于辅助设置或执行其他任务。注意:并非所有扩展都包含脚本。

appium {driver|plugin} run <extension-name> [<script-name> [<script-args>]]
参数说明
extension-name已安装扩展的短名称
script-name要运行的脚本名称;不提供时返回该扩展可用脚本的列表
script-args传给脚本的任意附加参数

选项:

参数说明类型
--json以 JSON 格式返回结果boolean

示例:

# 运行 UiAutomator2 driver 自带的 reset 脚本 appium driver run uiautomator2 reset # 列出 XCUITest driver 自带的所有可用脚本 appium driver run xcuitest

从实现细节看,run是唯一会把额外未知参数透传给扩展脚本的子命令:在 parser.ts 中,当driverCommand/pluginCommandrun时,未识别参数会被收集到extraArgs中而不是报错退出,这正对应run用法里的script-args位置参数。

3.5update:升级扩展

更新一个或多个扩展。仅支持通过npm安装的扩展。默认情况下,Appium 只升级 minor 和 patch 版本,以避免引入破坏性变更。

appium {driver|plugin} update <extension-name>
参数说明
extension-name已安装扩展的短名称,或使用installed更新所有已安装扩展

选项:

参数说明类型
--json以 JSON 格式返回结果boolean
--unsafe允许升级 major 版本,可能带来破坏性变更boolean

示例:

# 将 UiAutomator2 driver 升级到最新 major 版本(可能有破坏性变更) appium driver update uiautomator2 --unsafe # 更新所有已安装的 plugin appium plugin update installed

3.6uninstall:卸载扩展

移除已安装的扩展。

appium {driver|plugin} uninstall <extension-name>
参数说明
extension-name已安装扩展的短名称

选项:

参数说明类型
--json以 JSON 格式返回结果boolean

示例——移除imagesplugin:

appium plugin uninstall images

四、appium setup:按预设批量安装/重置扩展

appium setup用于安装指定的一组扩展(driver 与 plugin),或卸载所有扩展。安装预设时,已安装的扩展会原样保留。它支持四个子子命令:browserdesktopmobilereset。相关扩展的生态背景可参考生态文档。

4.1browser:浏览器 WebView 测试预设

安装以下扩展,用于浏览器 WebView 测试:

  • Drivers:safari2geckochromium
  • Plugins:imagesinspector
appium setup browser

4.2desktop:桌面应用测试预设

安装以下扩展,用于桌面应用测试:

  • Drivers:mac22windows1
  • Plugins:imagesinspector
appium setup desktop

4.3mobile:移动端测试预设(默认)

安装以下扩展,用于移动端测试:

  • Drivers:uiautomator2xcuitest2espresso
  • Plugins:imagesinspector
appium setup mobile

也可以省略mobile子子命令直接运行:

appium setup

从源码可以确认,默认预设就是mobile:setup-command.ts 中switchdefault分支会执行移动端 driver 与默认 plugin 的安装;而DEFAULT_PLUGINS = ['images', 'inspector']定义在 setup-command.ts。同时,平台相关的 driver 会被过滤:xcuitestsafarimac2仅在 macOS 上安装,windows仅在 Windows 上安装(见 setup-command.ts 与getPresetDrivers的平台判断逻辑)。安装时若扩展已存在,会打印版本信息并跳过安装(见 setup-command.ts),保证预设安装是幂等的。

4.4reset:重置所有扩展

卸载所有已安装的扩展及其清单(manifest)文件(位于 Appium home 目录)。当服务器启动遇到配置问题时(例如从旧版 Appium 升级失败导致的状态残留),该命令非常有用。

appium setup reset

源码中reset的实现会遍历 driver 与 plugin 配置中所有已安装扩展并逐一卸载,随后删除对应的 manifest 文件;即使某个扩展卸载失败,也会警告后继续删除 manifest,最大程度清理残留状态(见 setup-command.ts)。

五、环境变量:服务器级与扩展级的进阶开关

Appium 服务器的主要配置途径是命令行参数与配置文件。但部分进阶功能需要通过环境变量切换或配置。以下是 Appium 服务器能够识别的环境变量:

变量说明
APPIUM_APPS_CACHE_IGNORE_URL_QUERY设为真值时,将 URL 用作缓存键时去除其 query 部分;适用于 AWS S3 预签名 URL 等场景下的应用缓存问题
APPIUM_APPS_CACHE_MAX_AGE设置缓存应用的最大时长(分钟)。不要设得低于单次会话启动的时长。默认:60 * 24(24 小时)
APPIUM_APPS_CACHE_MAX_ITEMS设置缓存应用的最大数量。不要设得低于所有并行会话中的应用数量。默认:1024
APPIUM_HOME设置 Appium home 目录路径,用于管理扩展。默认:当前用户主目录下的.appium
APPIUM_OMIT_PEER_DEPS设为1时,为 Appium 内部执行的所有 NPM 命令添加--omit=peer。主要供内部使用
APPIUM_RELOAD_EXTENSIONS设为真值时,Appium 在创建新会话时重新 require 扩展。主要用于构建扩展时的热更新场景
APPIUM_TMP_DIR设置临时文件目录路径,与--tmp命令行参数等价

Appium 的 driver 和 plugin 可以定义额外的环境变量。以下是官方 plugin 使用的变量:

变量Plugin说明
APPIUM_STORAGE_KEEP_ALLstorage设为1trueyes时,服务器进程终止后仍保留 storage 中的文件。默认情况下,停止服务器进程会同时删除 storage 中的所有文件
APPIUM_STORAGE_ROOTstorage设置 storage 所用目录路径。若指向一个已存在的文件夹,终止服务器后其中所有文件都会保留(除非用APPIUM_STORAGE_KEEP_ALL另行指定)

这些变量的具体消费逻辑分散在对应模块中,例如APPIUM_HOMEmain.ts导出的resolveAppiumHome(见 main.ts)等初始化路径中生效;APPIUM_RELOAD_EXTENSIONS则与扩展加载生命周期相关。

六、不安全特性(Insecure Features):受控开放的安全机制

Appium 服务器实现了一套安全保护机制,用于管理各种不安全特性。以下特性定义在服务器层面,即使没有任何 driver 也能使用,但只能通过通配符(*)前缀来启用:

特性名说明
session_discovery允许通过GET /appium/sessions获取当前活动服务器会话列表

相应地,Appium 的 driver 和 plugin 也可以自由定义自己的不安全特性。以下是官方 plugin 定义的特性:

特性名Plugin说明
execute_driver_scriptexecute_driver允许发送包含多个 Appium 命令的请求

启用/禁用特性需要结合 server 选项中的--allow-insecure--deny-insecure--relaxed-security一起使用,例如:

# 允许会话发现特性 appium --allow-insecure=session_discovery # 或对受信网络内的所有客户端放开所有不安全特性 appium --relaxed-security # 在放开所有特性的同时,仍单独禁用某几个特性 appium --relaxed-security --deny-insecure=session_discovery

七、深入源码:CLI 的解析与执行链路

如果你想知道命令是如何被处理的,可以沿以下链路阅读源码(入口在 main.ts):

  1. 入口与初始化:main.ts 中的main()先调用init()完成配置 schema 与扩展的初始化,再由AppiumMainRunner决定是启动服务器还是执行子命令。
  2. 解析器构建:parser.ts 的getParser()首先调用finalizeSchema()完成 schema 的最终化,再构建ArgParserArgParserargparse的一层封装,负责处理错误信息、消息与退出行为。
  3. 参数定义来源:server 参数来自 schema(args.ts 的getServerArgs()),扩展命令参数由 args.ts 的getExtensionArgs()按类型统一生成,并使用util.memoize缓存结果(因为解析器设置在整个进程生命周期内是静态的)。
  4. 默认子命令注入:当参数不是setup/driver/plugin/server/--help/--version时,自动注入server(parser.ts)。
  5. 别名归一化ls会被归一化为list,未识别的参数默认报错退出,除非设置了--allow-unknown-args(parser.ts)。
  6. setup的执行:按预设执行批量安装/卸载,平台过滤与幂等跳过逻辑见 setup-command.ts。

仓库还提供了大量 CLI 相关的测试用于验证上述行为,例如 args.e2e.spec.ts、cli-driver.e2e.spec.ts、cli-plugin.e2e.spec.ts 与 parser.spec.ts,可作为理解命令行为与编写扩展的参考。

八、典型工作流:从零搭建一套测试环境

把前面各部分串起来,一个典型的 Appium CLI 工作流如下:

# 1. 查看帮助,熟悉当前版本的命令结构 appium --help appium driver --help appium plugin --help # 2. 一键安装移动端测试预设(uiautomator2 / xcuitest / espresso + images / inspector) appium setup mobile # 3. 体检已安装 driver 的前置环境 appium driver doctor uiautomator2 # 4. 按需安装/升级/卸载单个扩展 appium driver install xcuitest@9.0.0 appium driver list --installed --updates appium driver update uiautomator2 --unsafe appium plugin uninstall images # 5. 以自定义端口与安全选项启动服务器 appium --port 4723 --allow-insecure=session_discovery --use-plugins=all # 6. 查看运行配置与构建信息(不会启动服务器) appium --show-config appium --show-debug-info # 7. 遇到启动问题时,重置所有扩展与 manifest 后再启动 appium setup reset appium

掌握这套命令体系后,你就能独立完成 Appium 服务器的启动调优、扩展的全生命周期管理以及多平台测试环境的一键搭建;如需了解配置文件写法、安全细节或日志过滤等进阶话题,可继续阅读 配置指南、安全指南 与日志过滤指南。


  1. 仅在宿主机运行 Windows 时安装。

  2. 仅在宿主机运行 macOS 时安装。

    ↩ ↩ ↩

【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询