简介
前边介绍的都是通过按钮点击启动按钮来启动appium服务,有的小伙伴或者童鞋们乍一听可能不信,或者会问如何通过命令行启动appium服务呢?且听一一道来。
一睹为快
其实相当的简单,不看不知道,一看吓一跳,直接在docs命令窗口输入命令:appium 就可以运行起appium
这回小伙伴和童鞋们相信了吧,都启动来了。
第一行:欢迎使用Appium,版本 v1.8.1
第二行:Appium启动成功,启动ip为默认的 0.0.0.0,端口为默认的 4723;默认即表示“不指定”的情况下;
默认端口4723。此时小伙伴或者童鞋们又会问,那么如何修改端口了,不要急,听宏哥慢慢地道来。
修改appium启动端口
appium启动默认端口4723,如果要指定端口,通过以下命令:appium -p 端口号,例图修改端口4725
2个端口
指定端口的设备,输入命令:appium -p 端口1 -bp 端口2 设备编号
appium -a 127.0.0.1 -p 4723 --session-override
-a 是指定监听的ip(也可写成 --address),后面“127.0.0.1”可以改为你需要的ip地址;
-p 是指定监听的端口(也可写成 --port),也可以修改为你需要的端口;
--session-override 是指覆盖之前的session;
appium -a 127.0.0.1 -p 4727 -bp 4728 --chromedriver-port 9519 -U xiaomi --session-override
-bp 是连接Android设备bootstrap的端口号,默认是4724(也可写成--bootstrap-port)
--chromedriver-port 是chromedriver运行需要指定的端口号,默认是9515
-U 是连接的设备名称,如"adb devices"获取的设备标识(也可写成--udid)
服务器标志
所有的标志都是可选的,但是有一些标志需要组合在一起才能生效。
标志 | 默认值 | 描述 | 例子 |
---|---|---|---|
--shell | null | 进入 REPL 模式 | |
--localizable-strings-dir | en.lproj | IOS only: 定位 .strings所在目录的相对路径 | --localizable-strings-dir en.lproj |
--app | null | iOS: 基于模拟器编译的 app 的绝对路径或者设备目标的 bundle_id; Android: apk 文件的绝对路径--app /abs/path/to/my.app | |
--ipa | null | (IOS-only) .ipa 文件的绝对路径 | --ipa /abs/path/to/my.ipa |
-U , --udid | null | 连接物理设备的唯一设备标识符 | --udid 1adsf-sdfas-asdf-123sdf |
-a , --address | 0.0.0.0 | 监听的 ip 地址 | --address 0.0.0.0 |
-p , --port | 4723 | 监听的端口 | --port 4723 |
-ca , --callback-address | null | 回调IP地址 (默认: 相同的IP地址) | --callback-address 127.0.0.1 |
-cp , --callback-port | null | 回调端口号 (默认: 相同的端口号) | --callback-port 4723 |
-bp , --bootstrap-port | 4724 | (Android-only) 连接设备的端口号 | --bootstrap-port 4724 |
-k , --keep-artifacts | false | 弃用,无效。trace信息现在保留tmp目录下,每次运行前会清除该目录中的信息。 也可以参考 –trace-dir 。 | |
-r , --backend-retries | 3 | (iOS-only) 遇到 crash 或者 超时,Instrument 重新启动的次数。 | --backend-retries 3 |
--session-override | false | 允许 session 被覆盖 (冲突的话) | |
--full-reset | false | (iOS) 删除整个模拟器目录。 (Android) 通过卸载应用(而不是清除数据)重置应用状态。在 Android 上,session 完成后也会删除应用。 | |
--no-reset | false | session 之间不重置应用状态 (iOS: 不删除应用的 plist 文件; Android: 在创建一个新的 session 前不删除应用。) | |
-l , --pre-launch | false | 在第一个 session 前,预启动应用 (iOS 需要 –app 参数,Android 需要 –app-pkg 和 –app-activity) | |
-lt , --launch-timeout | 90000 | (iOS-only) 等待 Instruments 启动的时间 | |
-g , --log | null | 将日志输出到指定文件 | --log /path/to/appium.log |
--log-level | debug | 日志级别; 默认 (console[:file]): debug[:debug] | --log-level debug |
--log-timestamp | false | 在终端输出里显示时间戳 | |
--local-timezone | false | 使用本地时间戳 | |
--log-no-colors | false | 不在终端输出中显示颜色 | |
-G , --webhook | null | 同时发送日志到 HTTP 监听器 | --webhook localhost:9876 |
--native-instruments-lib | false | (IOS-only) iOS 内建了一个怪异的不可能避免的延迟。我们在 Appium 里修复了它。如果你想用原来的,你可以使用这个参数。 | |
--app-pkg | null | (Android-only) 你要运行的apk的java包。 (例如, com.example.android.myApp) | --app-pkg com.example.android.myApp |
--app-activity | null | (Android-only) 打开应用时,启动的 Activity 的名字(比如, MainActivity) | --app-activity MainActivity |
--app-wait-package | false | (Android-only) 你想等待的 Activity 的包名。(比如, com.example.android.myApp) | --app-wait-package com.example.android.myApp |
--app-wait-activity | false | (Android-only) 你想等待的 Activity 名字(比如, SplashActivity) | --app-wait-activity SplashActivity |
--android-coverage | false | (Android-only) 完全符合条件的 instrumentation 类。 作为命令 adb shell am instrument -e coverage true -w 的 -w 的参数 | --android-coverage com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation |
--avd | null | (Android-only) 要启动的 avd 的名字 | |
--avd-args | null | (Android-only) 添加额外的参数给要启动avd | --avd-args -no-snapshot-load |
--device-ready-timeout | 5 | (Android-only) 等待设备准备好的时间,以秒为单位 | --device-ready-timeout 5 |
--safari | false | (IOS-Only) 使用 Safari 应用 | |
--device-name | null | 待使用的移动设备名字 | --device-name iPhone Retina (4-inch), Android Emulator |
--platform-name | null | 移动平台的名称: iOS, Android, or FirefoxOS | --platform-name iOS |
--platform-version | null | 移动平台的版本 | --platform-version 7.1 |
--automation-name | null | 自动化工具的名称: Appium or Selendroid | --automation-name Appium |
--browser-name | null | 移动浏览器的名称: Safari or Chrome | --browser-name Safari |
--default-device , -dd | false | (IOS-Simulator-only) 使用instruments自己启动的默认模拟器 | |
--force-iphone | false | (IOS-only) 无论应用要用什么模拟器,强制使用 iPhone 模拟器 | |
--force-ipad | false | (IOS-only) 无论应用要用什么模拟器,强制使用 iPad 模拟器 | |
--language | null | iOS / Android 模拟器的语言 | --language en |
--locale | null | Locale for the iOS simulator / Android Emulator | --locale en_US |
--calendar-format | null | (IOS-only) iOS 模拟器的日历格式 | --calendar-format gregorian |
--orientation | null | (IOS-only) 初始化请求时,使用 LANDSCAPE (横屏) 或者 PORTRAIT (竖屏) | --orientation LANDSCAPE |
--tracetemplate | null | (IOS-only) 指定 Instruments 使用的 tracetemplate 文件 | --tracetemplate /Users/me/Automation.tracetemplate |
--show-sim-log | false | (IOS-only) 如果设置了, iOS 模拟器的日志会写到终端上来 | |
--show-ios-log | false | (IOS-only) 如果设置了, iOS 系统的日志会写到终端上来 | |
--nodeconfig | null | 指定 JSON 格式的配置文件 ,用来在 selenium grid 里注册 appiumd | --nodeconfig /abs/path/to/nodeconfig.json |
-ra , --robot-address | 0.0.0.0 | robot 的 ip 地址 | --robot-address 0.0.0.0 |
-rp , --robot-port | -1 | robot 的端口地址 | --robot-port 4242 |
--selendroid-port | 8080 | 用来和 Selendroid 交互的本地端口 | --selendroid-port 8080 |
--chromedriver-port | 9515 | ChromeDriver运行的端口 | --chromedriver-port 9515 |
--chromedriver-executable | null | ChromeDriver 可执行文件的完整路径 | |
--use-keystore | false | (Android-only) 设置签名 apk 的 keystore | |
--keystore-path | (Android-only) keystore 的路径 | ||
--keystore-password | android | (Android-only) keystore 的密码 | |
--key-alias | androiddebugkey | (Android-only) Key 的别名 | |
--key-password | android | (Android-only) Key 的密码 | |
--show-config | false | 打印 Appium 服务器的配置信息,然后退出 | |
--no-perms-check | false | 跳过Appium对是否可以读/写必要文件的检查 | |
--command-timeout | 60 | 默认所有会话的接收命令超时时间 (在超时时间内没有接收到新命令,自动关闭会话)。 会被新的超时时间覆盖 | |
--keep-keychains | false | (iOS) 当 Appium 启动或者关闭的时候,是否保留 keychains (Library/Keychains) | |
--strict-caps | false | 如果所选设备是appium不承认的有效设备,会导致会话失败 | |
--isolate-sim-device | false | Xcode 6存在一个bug,那就是一些平台上如果其他模拟器设备先被删除时某个特定的模拟器只能在没有任何错误的情况下被建立。这个选项导致了Appium不得不删除除了正在使用设备以外其他所有的设备。请注意这是永久性删除,你可以使用simctl或xcode管理被Appium使用的设备类别。 | |
--tmp | null | 可以被Appium用来管理临时文件的目录(绝对路径),比如存放需要移动的内置iOS应用程序。 默认的变量为 APPIUM_TMP_DIR ,在 *nix/Mac 为 /tmp 在windows上使用环境便令 TEMP 设定的目录。 | |
--trace-dir | null | 用于保存iOS instruments trace的 appium 目录,是绝对路径, 默认为 /appium-instruments | |
--intent-action | android.intent.action.MAIN | (Android-only) 用于启动 activity 的intent action | --intent-action android.intent.action.MAIN |
--intent-category | android.intent.category.LAUNCHER | (Android-only) 用于启动 activity 的intent category | --intent-category android.intent.category.APP_CONTACTS |
--intent-flags | 0x10200000 | (Android-only) 启动 activity 的标志 | --intent-flags 0x10200000 |
--intent-args | null | (Android-only) 启动 activity 时附带额外的 intent 参数 | --intent-args 0x10200000 |
--suppress-adb-kill-server | false | (Android-only) 如果被设定,阻止Appium杀掉adb实例。 |
分类: python+Appium
实战
- -a : 默认服务地址 127.0.0.1
- -p: 端口号 4730 (默认4723)
- -U: udid ,android的udid就是adb devices查看到的前面那一串
- --no-reset 不重置app 与desired_caps配置里面的 {"noReset": True,} 一个意思
cmd进入docs命令窗口输入:
appium -a 127.0.0.1 -p 4730 -U emulator-5554 --no-reset
小结
1.遇到的问题就是输入appium报错了,懵逼了,怎么办,不急一步一步解决它。
这个问题是由于安装的Node的版本太高,而你安装的appium版本较低造成,那么解决办法,就是要么将Node的版本降低,要么将appium版本升高即可。反正宏哥是这么解决了,如果你遇到了如果你遇到了,可以试一试我的方法,但是不能打包票哈。
2.好了,关于appium的服务命令行就到这里吧!
【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!