本文档将详细介绍如何搭建 Appium 的运行环境,以及如何编写一个简单的 UI 自动化测试用例。其中,也会穿插讲解一些 Appium 的基本知识。关于 Appium 的更多信息,大家可以查看官方文档。
注意事项:
本文档是在 macOS 系统的基础上讲解相关操作
编程语言选择了:Python 2.7
Appium 是跨平台的 UI 自动化测试框架,支持 Android、iOS 等系统,本次只介绍基于 Android 的自动化测试
安装 AppiumAppium 的安装有两种方式:
1、下载 Appium Desktop,这个是 Appium 的客户端软件,包含了运行 Appium 所需要的一切,下载后安装即可,支持 Mac、Windows、Linux 三大系统。因为安装过程实在是太简单了,所以不做详细说明。
2、通过命令行的方式进行安装,这个比较复杂,需要依次下载安装多种配置/依赖来满足 Appium 的运行条件。着重介绍此种安装方式。
以下命令都是在终端(Terminal)上运行的
1、安装包管理工具 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2、安装 Node.js
brew install node3、安装 Appium 服务端
npm install -g appium4、安装 appium-doctor
npm install -g appium-doctor5、运行 appium-doctor,检查 Appium 需要的所有依赖是否都满足
appium-doctor --android其中有几个依赖项是必须要满足的:
Node.js
ANDROID_HOME
JAVA_HOME
adb
android
emulator
$JAVA_HOME/bin
大家可根据这个命令运行结束后的提示信息去完成相应的依赖添加:
6、安装 Appium 客户端
pip install Appium-Python-Client7、最后,因为需要使用 Python 语言编写自动化测试用例,建议安装 Python 语言的 IDE:PyCharm
脚本编写 脚本编写前的准备工作1、启动 Appium
(1)如果安装了 Appium Desktop,可直接打开软件点击 "Start" 启动 Appium 服务
(2)如果是通过命令行方式安装的 Appium,则在终端(Terminal)输入:
appium2、启动模拟器/测试设备连接至电脑
#启动模拟器 emulator @<emulator_name> #测试设备连接至电脑 (1)Settings-Developer options-USB debugging //打开usb调试模式 (2)adb devices //查看手机是否成功连接至电脑3、安装待测应用到模拟器/测试设备中
adb install <path_to_apk>本次讲解计算器应用 iClever Calculator Lite 为例,可自行到 Google Play 上下载该应用,包名为:weightloss.constellation.education.tools
创建脚本在完成以上三步后,打开 Pycharm 或者其他 IDE,新建一个 py 文件,完成自动化测试脚本基础代码的编写。
1、新建 calculator_test.py 文件
2、导入类库和包
3、创建一个类 CalculatorTest,继承自 Python 的测试类 unittest.TestCase
class CalculatorTest(unittest.TestCase): passunittest 是 Python 的一个单元测试框架,包含了四个部分:
TestFixture
setUp
TestCase
TearDown
TestCase
TestSuite
TestRunner
关于各部分的概念和应用,在下面章节里说明(参见代码注释)。
4、在类中创建三个方法:setUP()、tearDown()、test_case_1(),然后在类外面创建一个程序入口
class CalculatorTest(unittest.TestCase): # pass #SetUP,case运行前的环境初始化 def setUp(self): pass #TearDown,case运行后的环境恢复 def tearDown(self): pass #TestCase,测试用例1 def test_case_1(self): pass #程序入口 if __name__ == '__main__': #TestSuite,将所有测试用例载入suite suite = unittest.TestLoader().loadTestsFromTestCase(CalculatorTest) #TestRunner,运行测试用例 unittest.TextTestRunner(verbosity=2).run(suite)5、在 setUP() 中添加字典变量 desired_caps,初始化配置,提供建立 Session 所需要的信息
#SetUP,case运行前的环境初始化 def setUp(self): # pass #字典变量,初始化配置,提供建立session的所有必要信息: desired_caps = {} #被测应用平台:iOS/Android desired_caps['platformName'] = 'Android' #被测应用平台版本:adb shell getprop ro.build.version.release desired_caps['platformVersion'] = '8.0.0' #测试设备名:adb devices desired_caps['deviceName'] = 'CB512FCM14' #被测应用包名 desired_caps['appPackage'] = 'weightloss.constellation.education.tools' #被测应用启动时的活动名 desired_caps['appActivity'] = 'com.weightloss.constellation.education.tools.SplashActivityAlias' #服务端等待客户端发送消息的超时时间 desired_caps['newCommandTimeout'] = 150 #在一个session开始前不重置被测程序的状态 desired_caps['noReset'] = True #是否支持uicode的键盘(输入中文需设置) desired_caps['unicodeKeyboard'] = True #以desired_caps作为参数初始化WebDriver连接 #Appium服务器的IP: #端口号:4723 self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) sleep(10)