menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

自动化APP测试框架Appium的快速搭建

作者:Chancel Yang, 创建:2021-08-25, 字数:4417, 已阅:858, 最后更新:2024-03-10

1. 背景

Appium是一个开源的自动化测试框架,支持IOS/Android等移动端APP的自动化脚本测试,本文主要总结一下如何快速搭建Appium的测试环境

2. 搭建

2.1. 环境准备

此次Appium与Android虚拟机主要搭建在Windows10上,使用Python脚本进行自动化操作

BlueStacks可以直接安装,Appium下载完成后解压到指定文件夹,我这里暂定为

  • C:\Programs\Appium-desktop

到这里我们需要的框架与虚拟机均以搭建完成,但此时还无法运行Appium,因为缺少了Android开发环境

2.2. Java环境安装

我这里选择JDK16进行下载安装,请根据自己的系统选择对应的版本

我下载的是压缩包,解压压缩包至新文件夹

  • C:\Programs\jdk-16.0.2

接着创建2个系统环境变量,JAVA_HOMECLASSPATH,其值如下

  • JAVA_HOME:C:\Programs\jdk-16.0.2
  • CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

然后编辑系统环境变量 Path,添加我们的java环境变量

  • %JAVA_HOME%\jre\bin
  • %JAVA_HOME%\bin

添加完成后,打开CMD,检验安装已完成

Batchfile
C:\Users\chancel>java --version
java 16.0.2 2021-07-20
Java(TM) SE Runtime Environment (build 16.0.2+7-67)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)

2.3. Android环境安装

Appium的运行需要ANDROID_HOME与ANDROID_SDK_HOME两个系统环境

首先下载commandlinetools-win,commandlinetools-win的下载地址:developer.android.com/studio

下载后进行解压,右键该文件夹,选择使用Powershell命令行,这里假设我打算安装Android SDK的路径为:C:\Programs\android-sdk\

Batchfile
sdkmanager.bat --sdk_root=C:\Programs\android-sdk\ "cmdline-tools;latest"

注:安装完成后可删除下载的commandlinetools-win与其解压出来的文件夹,后面不再需要

我们切换路径到 C:\Programs\android-sdk\cmdline-tools\latest\bin,继续右键该文件夹并选择使用Powershell命令行

我这里打算安装emulator/platform-tools/build-tools这三个常用的SDK工具,命令如下

Batchfile
cd C:\Programs\android-sdk\cmdline-tools\latest\bin
sdkmanager.bat --install "emulator"
sdkmanager.bat --install "platform-tools"
sdkmanager.bat --install "build-tools"

安装完成之后就可以配置系统环境,创建以下几个系统环境变量

  • ANDROID_SDK_ROOT:C:\Programs\android-sdk
  • ANDROID_SDK_HOME:C:\Programs\android-sdk.android
  • ANDROID_AVD_HOME:C:\Programs\android-sdk.android\avd

然后修改系统环境变量Path的值,添加如下几个值

  • %ANDROID_SDK_ROOT%\cmdline-tools\latest\bin
  • %ANDROID_SDK_ROOT%\emulator
  • %ANDROID_SDK_ROOT%\platform-tools
  • %ANDROID_SDK_ROOT%\build-tools\31.0

最后,打开CMD,检查配置成功与否

Batchfile
C:\Users\chancel>sdkmanager --version
5.0

此时Appium已经可用,运行Appium并选择Start开始运行服务

2.4. BlueStacks虚拟机安装(可选)

BlueStacks 运行之后按照默认提示创建一个虚拟机,然后在设置中打开adb调试,如下图

之后在CMD中检验是否连接是否正常(如果输出中devices列表为空,可使用 adb kill-server 重启adb服务,一般就会看到虚拟机设备)

Batchfile
Microsoft Windows [版本10.0.17763.2114]
(c) 2018 Microsoft Corporation。保留所有权利

C:\Users\chancel>adb devices
List of devices attached
emulator-5554   device

可以看到我的虚拟机名称为 emulator-5554

2.5. BlueStacks root

通常安装虚拟机有一个好处可以随意root,不用担心数据安全,BlueStacks的root权限获取不算复杂,使用tweaker来获取root权限

BlueStacks Tweaker 6

官网的视频讲的非常清晰,如果您懒得观看视频,则基本步骤如下

  1. 下载对应BlueStacks版本的tweaker
  2. 关闭BlueStacks的虚拟机,然后打开tweaker选择对应的虚拟机,在root选项卡中选择unlock
  3. 开启BlueStacks虚拟机,在root选项卡中选择"Install SuperSu",然后选择“Update Su binary”

2.6. BlueStacks网络代理设置

BlueStacks系统并没有提供代理功能,如果需要使用BlueStacks进行网络代理的访问(抓包),需要借助一些第三方工具的协助,如

  • sstap
  • Proxifer

3. 自动化测试

这里使用Python做一个简单的自动化操作,我们初始化一个项目,具体信息如下

  • 版本:Python3.7.2
  • 系统:Ubuntu1804
  • 路径:~/codes/python/appium-hello-world

初始化项目环境(可选),使用pyenv指定项目使用的Python版本并创建激活虚拟环境

Bash
cd ~/codes/python/appium-hello-world
pyenv local 3.7.2
python -m venv .env
source .env/bin/activate

安装必要的第三方pip包

Bash
pip install appium-python-client

下载一个官方用于测试Appium的APK,下载地址:selendroid/selendroid - github.com

接着我们创建一个main.py文件,输入如下代码

Python
from appium import webdriver

desired_caps = dict(
    platformName='Android',
    platformVersion='7.1.1', # 取决您的BlueStacks虚拟机Android版本
    automationName='uiautomator2',
    deviceName='emulator-5554', # 这里是从上面2.4小节中使用adb获取到的device name
    app=PATH('C:\\Users\\chancel\\Downloads\\selendroid-test-app.apk)')
)
# 下面是刚才部署的Windows10+Appium机器的IP,如果是本机则输入localhost即可
self.driver = webdriver.Remote('http://172.16.1.100:4723/wd/hub', desired_caps)
el = self.driver.find_element_by_accessibility_id('item')
el.click()

运行这个文件,您应该可以观察到虚拟机明显的自动化操作过程

Bash
python main.py

4. 结束

Appium + BlueStacks除了可以应用在自动化测试方面,还可以应用在许许多多的用途上,如自动化爬虫、定时签到等等

考虑稳定性,最好的组合应该是手动使用npm安装Appium + Ubuntu + Genymotion的稳定性会强上不少

开发阶段则可以采用这种方案快捷方便,无需安装完整的Android Studio


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]