Appium2 总结(一)环境搭建以及简单脚本测试

Appium 是一个开源项目和相关软件的生态系统。 软件,旨在促进许多应用程序平台的 UI 自动化,包括移动平台(iOS、 Android、Tizen)、浏览器(Chrome、Firefox、Safari)、桌面(macOS、Windows)、电视(Roku、tvOS、 Android TV、三星)等,它还旨在支持用不同语言(JS、Java、Python 等)编写的自动化代码。

优点:

  • 开源
  • 支持 Native App(原生应用)、 Web App(移动浏览器应用) 、Hybird App(混合应用)三种 App 类型
  • 支持 iOS、 Android、Tizen
  • Server 也跨平台,支持 Mac OS、Windows、Linux
  • Appium 自动化侧睡不需要重新编译 App
  • 支持多语言编写测试脚本,Java、Python、JavaScript 等

1.Appium 环境搭建

(0) Node 安装

已安装,这里不做赘述。

(1) 安装 JDK

由于 jdk 已安装,这里不做赘述。

(2) 安装 Android SDK

Android 开发专用的 IDE 是 Android Studio,在下载安装 Android Studio 的过程中,会自行下载sdk,sdk 中会包含adb环境,所以这里我们先下载一个 Android Studio,然后找到 sdk 位置 ,配置环境变量。

1️⃣使用 brew --cask 安装 android-studio

1
brew install --cask android-studio

2️⃣打开 Android Studio(一路下一步后)→More Actions→Android SDK Location,找到 sdk 位置

image-20240729140933220

image-20240729141129521

image-20240729141255901

3️⃣配置环境变量

1
vi ~/.zshrc

.zshrc 中插入

1
2
3
export ANDROID_HOME=/Users/xxxxx/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools/
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:${PATH}

保存退出后,刷新配置文件

1
source ~/.zshrc

4️⃣验证是否安装成功

1
adb --version

(3) 安装 Appium

Appium 有界面的版本安装:(这个版本是 Appium1 已经不维护了,最新版的都是基于无界面版本的,若要使用则需要降低 Appium 版本)

1
brew install --cask appium

Appium 命令版本安装:(版本是 Appium v2.11.2)

1
brew install appium

Appium 安装后,安装安卓 uiautomator2 驱动(版本是 uiautomator2@3.7.4

1
appium driver install uiautomator2

安装 ios xcuitest 驱动(版本是 xcuitest@7.24.3

1
appium driver install xcuitest

(4) 安装模拟器

常用的除了 Android Studio 自带的原生安卓外(有点慢),夜神、mumu 等模拟器也可以。

2.ADB 常见命令(顺手复习总结一下)

ADB 全名是 Android Debug Bridge,是一个手机调试工具。

  • Client 端:运行在开发机器中,用来发送 adb 命令。

  • Server 端:运行在开发机器中,用来管理 Client 端和手机的 Daemon 之前的通信。

  • Daemon 守护进程:运行在调试设备中,手机或模拟器,用来接受并执行 adb 命令。

image-20240730095308085

常用命令

1️⃣获取包名和界面名

  • 包名(package):决定程序的唯一性(不是应用的名字)
  • 界面名(activity):目前可以理解,一个界面名,对应着一个界面

例如:

首先进入所需要获取的信息的界面,如我们打开计算器:

1
2
3
# mac/linux,包名为:com.huawei.calculator 界面名[启动名]:.Calculator
➜ ~ adb shell dumpsys window | grep mFocusedApp
mFocusedApp=ActivityRecord{xxxx u0 com.huawei.calculator/.Calculator t97617}
1
2
# window:
adb shell dumpsys window | findstr mFocusedApp

2️⃣文件传输

  • 上传文件
1
2
3
4
# adb push 电脑的文件路径 手机的文件路径

➜ ~ adb push /Users/user1/Pictures/guidao.png /data/
/Users/user1/Pictures/guidao.png: 1 file pushed, 0 skipped. 103.9 MB/s (8064911 bytes in 0.074s)
  • 下载文件
1
2
3
4
# adb pull 手机的文件路径 电脑的文件路径

➜ ~ adb pull /data/guidao.png /Users/user1/Downloads
/data/guidao.png: 1 file pulled, 0 skipped. 89.2 MB/s (8064911 bytes in 0.086s)

3️⃣app 启动时间

测试人员对于 App 的启动速度必须进行测试,测试标准如下:

  • 需求有明确的启动时间指标
  • 参考同类软件,启动时间不能大于竞争对手的启动时间
1
2
3
4
5
6
7
8
9
# adb shell am start -W 包名/界面名[启动名](先不用启动~)

➜ ~ adb shell am start -W com.android.browser/.BrowserActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.browser/.BrowserActivity }
Status: ok
Activity: com.android.browser/.BrowserActivity
TotalTime: 727
WaitTime: 730
Complete

4️⃣获取手机日志

当测试过程中发现问题后想获取错误日志信息:

  • 打开被测应用程序,进入到出发缺陷的位置
  • 使用查看日志命令:adb logcat
  • 触发缺陷
  • 获取日志信息
  • 停止 ctrl+c
1
adb logcat

其他指令

No 命令 说明
1 adb connect ip: 端口号 连接手机 / 模拟器,ip 为模拟器的 ip 地址
2 adb disconnect ip: 端口号 断开连接手机 / 模拟器
3 adb devices 获取当前电脑已经连接设备和对应的设备号
4 adb shell 进入到安卓手机内部的 Linux 系统命令行中
5 adb start-server 启动 adb 服务端,出 bug 时使用可以重启服务器,先关闭在启动
6 adb kill-server 停止 adb 服务端,出 bug 时使用可以重启服务器,先关闭在启动
7 adb –help 查看 adb 帮助,命令记不清楚时有用
8 adb install 路径 /xxx.apk 安装 app 到手机
9 adb uninstall 包名 卸载手机上的 app,需要指定包名
10 adb shell ps 是显示当前控制台下属于当前用户的进程
11 adb root 有时报错权限不足时使用
12 adb remount 将 /system 部分置于可写入的模式,报错是
13 adb reboot 重启 Android 设备

3. 第一个测试 python 测试程序

1️⃣在 pycharm 上新建一个项目

2️⃣在 pycharm 上安装 Appium-Python-Client

Appium Python Client 是官方的 Appium Python 客户端,可通过 pypi 里包名为 Appium-Python-Client 进行安装。 它继承自 Selenium Python Binding, 因此安装 Appium Python 客户端时会包含 selenium 绑定。

1
(.venv) ➜  StudyAppium pip install Appium-Python-Client

3️⃣在 pycharm 上新建一个文件 test_appium.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy

capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='192.168.XX.XXX:5555', # 雷神模拟器
appPackage='com.android.settings',
appActivity='.Settings',
language='en',
locale='US'
)

appium_server_url = 'http://localhost:4723'

class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))

def tearDown(self) -> None:
if self.driver:
self.driver.quit()

def test_find_battery(self) -> None:
el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
el.click()

if __name__ == '__main__':
unittest.main()

4️⃣在终端连接安装模拟器

1
2
3
4
5
6
7
➜  ~ adb connect 192.168.XX.XX:5555
connected to 192.168.XX.XX:5555

# 验证一下
➜ ~ adb devices
List of devices attached
192.168.XX.XX:5555 device

5️⃣在终端启动 Appium

1
2
3
4
5
6
➜  ~ appium
[Appium] Welcome to Appium v2.11.2
[Appium] The autodetected Appium home path: /Users/user1/.appium
[Appium] Attempting to load driver uiautomator2...
[Appium] Attempting to load driver xcuitest...
.........

6️⃣在 pycharm 上运行 test_appium.py,测试通过。

image-20240730193606283

4. 相关参考