Appium appium+Android+selenium+python web 自动化 / 手机自动化 [分享] (windows)

蓝莓酱 · 2017年07月07日 · 最后由 thefifthman 回复于 2018年08月10日 · 8579 次阅读

背景

公司领导说:我们需要手机自动化。
相信很多同学都遇到这样的问题,在没有任何评估的时候,手机自动化被呼之欲出,你能怎样?别多说,说多了都是泪,一个字,干!

丑话说前头

1、不会你得学
2、不会你得查
3、不会你得问
4、记录学习过程重点内容
此贴内容有些来源于网络,非恶意使用,而是自己学习过程汇总。
我目前能力有限,尽力帮助初学。

前期准备

1、windows 操作系统
2、python3.5
3、selenium
4、chrome 浏览器
5、chrome 浏览器驱动
6、pycharm
7、appium
8、JDK
9、SDK
10、安卓模拟器(genymotion)或真机
11、任意 apk
12、使用安卓模拟器 genymotion 需要 virtual box
(个别的会补充,软件版本自己随意)

一、知识补充(1)

Appium 介绍

Appium 是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium 支持 iOS、Android 及 FirefoxOS 平台。Appium 使用 WebDriver 的 json wire 协议,来驱动 Apple 系统的 UIAutomation 库、Android 系统的 UIAutomator 框架。Appium 对 IOS 系统的支持得益于 Dan Cuellar’s 对于 iOS 自动化的研究。Appium 也集成了 Selendroid,来支持老 android 版本。

Appium 进行自动化测试的两个好处

(1) Appium 在不同平台中使用了标准的自动化 APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。这里,跨平台的意思是指可以在不同的系统上用相同的方式编写测试脚本,而不是指用于 Android 系统的测试脚本可以完全不用修改的应用于 iOS 系统上。事实上,Android 和 IOS 应用几乎需要独立的进行编写。
(2) Appium 支持 Selenium WebDriver 支持的所有语言,如 java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者 Perl 语言,更可以使用 Selenium WebDriver 的 Api。Appium 支持任何一种测试框架。如果只使用 Apple 的 UIAutomation,我们只能用 javascript 来编写测试用例,而且只能用 Instruction 来运行测试用例。同样,如果只使用 Google 的 UIAutomation,我们就只能用 java 来编写测试用例。

Appium 的系统需求

Android 自动化测试可以在 Windows、Mac、Linux 上进行,需要安装 Android SDK,node 等工具。而 iOS 的自动化由于需要 Xcode 的支持,只能在 Mac 上运行,需要安装 Xcode,node 等工具。此外,由于 appium ios 自动化的底层使用的是 UI Automation,因此在使用 appium 之前必须搭建 IOS 开发环境。

二、测试环境搭建:

windows7+android+appium+python+selenium(mac 的未涉及,如果以后涉及,可以补充)
我的测试环境搭建时,考虑到 web 自动化测试,所以 selenium 也有。

selenium 自动化环境部署(英文路径)

1、python 的安装:
如果以前是 python2,现在想用 python3,可以卸载 python2,步骤如下:
(1)先卸载电脑上原有的 Python2 的程序,选择控制面板 --- 程序 -- 搜索 py---卸载所有程序
(2)我的电脑 --- 属性 --- 高级系统设置 --- 环境变量 --- 系统变量---path---编辑 --- 删除原有的 Python 环境变量:C://Python2.7;
(3)C 盘中---Python27 文件夹也删除
2、安装新的 Python3.5.2
(1)点击 python-3.5.2-amd64.exe---勾选最下面的 add python3.5 to path---然后一路下一步即可
(2)验证 Python3 安装是否成功:cmd---输入 python,显示 help 则表示成功
(3)继续验证 Python3:去我的电脑 --- 属性 --- 高级系统设置 --- 环境变量 -- 用户变量--Path-编辑 -- 其中显示 Python 的位置即可
3、安装 selenium
(1)方式:一:将 selenium 压缩包解压到 C:\Users\fanqie\AppData\Local\Programs\Python\Python35\Lib\site-packages 下
(2)方式二:在联网的情况下,输入 pip install selenium==2.53.6
(3)验证 selenium 安装是否正确:
开始菜单 -- 打开 Python 的 IDLE 集成环境,输入 from selenium import webdriver ,什么都不显示表示成功
注意:
1.如果上面解压路径找不到 adddata 文件夹,可以在查看 -- 勾选隐藏的项目,将隐藏的文件夹显示出来即可

2.解压文件夹的时候只留一层即可,不能两层
4、安装浏览器 chrome
(1)使用 chrome 浏览器,一路下一步安装
(2)验证:继续在刚才 Python 的 IDLE 集成环境下输入:driver = webdriver.Chrome() ,会弹出谷歌浏览器,表示使用浏览器正确
5、安装浏览器 chrome 驱动
(1)将谷歌的驱动 chromedriver.exe 复制到 Python 的环境变量路径下。(环境变量的位置在我的电脑 -- 属性 -- 高级系统设置 -- 环境变量中寻找)
例如:C:\Users\fanqie\AppData\Local\Programs\Python\Python35
注意:
1.浏览器的驱动要对应浏览器的版本(网上也能查到对应的表格)
2.selenium 要使用的浏览器驱动官网下载地址:http://www.seleniumhq.org/download
6、安装 pycharm
(1)一路下一步后,选择 activation code,输入激活码
(2)pycharm 激活码:请网上搜索
以上是 selenium+python 的环境配置,可以测试 web。
--------------华丽丽的分割线--------------

appium 自动化环境部署(英文路径)

1、appium 安装,appium-installer(1.4.16.1 产品版本号),选择英文,一路下一步。如果提示需要安装.net framework4.0 则安装.net framework4.0;安装完 4.0 如果提示需要安装.net framework4.5 则安装 4.5,然后再次点击 appium.exe,直到进入 appium 页面。

2、JDK 部署,安装 JDK.exe,一路下一步即可。安装完毕后,需要配置环境变量如下:
(1)JAVA_HOME:这个也是 jdk 的安装路径,将路径 C:\Program Files\Java\jdk1.8.0_112 复制,然后右击我的电脑 -- 高级系统设置 --- 环境变量 -- 系统变量 -- 新建,变量名为 JAVA_HOME,变量值粘贴刚才的地址即可。
(2)Path:%JAVA_HOME%\bin
(3)CLASSPATH:做 web 项目才需要配置 classpath 手机可以不用配置(这个不用配置)
3、SDK 配置,解压缩 SDK 压缩包到 D 盘根目录,并且不用新建文件夹,直接给现有文件夹重命名为 adt-bundle-windows-sdk(里面文件包含 3 个,如下图)

这里你也可以按照你的思路安装,我是有现成的压缩包就直接用了。
放好后,进行 SDK 的环境变量配置:(多个环境变量之间用英文的分号隔开)
(1)ANDROID_HOME:也是 SDK 路径,复制 D:\adt-bundle-windows-sdk\sdk 路径,右击我的电脑 --- 高级系统设置 --- 环境变量 -- 系统变量,变量名为 ANDROID_HOME,变量值为复制的路径。
(2)tools:%ANDROID_HOME%\tools;
(3)platform-tools:%ANDROID_HOME%\platform-tools;
将(2)与(3)两个环境变量配置到 Path 下,并且用分号隔开。例如:
C:\ProgramData\Oracle\Java\javapath;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
4、检验是否配置成功:
(1)在 cmd 下输入 adb 命了,有对应的提示输出。
(2)在 cmd 输入 android,调用 SDK manager。
5、appium 环境变量配置
Path:
(1)appium 安装路径:C:\Program Files (x86)\Appium
(2)appium 环境检测:C:\Program Files (x86)\Appium\node_modules.bin(说明这个位置:.bin 前面有一个反斜杠)
(3)appium 环境检测命令:appium-doctor

6、安卓模拟器安装
安卓模拟器有很多,这里使用 genymotion 的搭建。
(1)由于 genymotion 运行环境需要 virtual box,所以需要先安装 virtual box,双击 VirtualBox-5.0.20-106931-Win 一路下一步,始终信任你,进行安装。
(2)genymotion 的安装:一路下一步。
(3)将 Samsung Galaxy S4 - 4.4.4 - API 19 -1080x1920.rar 解压到非中文路径--D:\mobilevm 并双击 Samsung Galaxy S4 - 4.4.4 - API 19 - 1080x1920.vbox(virtualbox 软件只需启动一次),这里的手机系统百度自己下载,我是随便找的。
(4)启动 genymotion,查看列表中含有 api19 的安卓系统,将 virtualbox 关机即可
(5)启动安卓模拟器,选中 api19 的安卓系统,点击 star
(6)登录 genymotion,sign in,用户名和密码。
(7)appium 支持 android 版本,api17 及以上,4.4.2
(8)下载 android 模拟器版本,add---选择相应的模拟器进行下载。
7、python 环境搭建(如果之前在 selenium 下配置过 python 和 pycharm,那移动端这里可以省去步骤)
(1)python3.5.2 安装,一路下一步,配置环境 -- 右击我的电脑 --- 高级系统设置 -- 用户变量--PATH 变量下:C:\Users\fanqie\AppData\Local\Programs\Python\Python35\Scripts\;C:\Users\fanqie\AppData\Local\Programs\Python\Python35\(这是 2 个环境变量,中间用英文的分号隔开了)
以上变量是 2 个,一个是 python 的安装路径,一个是 python 工具包安装 setuptools,只是写在一起了。
8、Appium-Python-Client 安装及配置
https://pypi.python.org/pypi/pip/
下载 pip,并将它放到 python3.5 安装位置。
(1)打开 DOS 命令行,python3.5 安装位置 C:\Users\fanqie\AppData\Local\Programs\Python\Python35\pip-8.1.2,所以我要 cd 进入到这个位置,然后输入:python setup.py install 。
(2)C:\Users\fanqie\AppData\Local\Programs\Python\Python35\Scripts,cd 到这个目录后,输入:pip install Appium-Python-Client 。
安装成功后如下图显示:

9、搭建 app 环境,直接在安卓模拟器上安装一个豌豆荚下载 app 或者找你的项目 app。
10、DOS 命令下输入:appium,调用 appium。
11、appium 设置:点击机器人 icon,选择对应的模拟器版本 API 19,然后点击三角形的 icon,开始运行。

三角符号运行 appium 后,显示如下界面表示成功:

至此,windows+android+python+selenium 自动化测试环境搭建完毕。

三、来个小程序试试我们的环境:

也许你会看不懂,但是不要紧,先照着做,后面会解释给你听。
打开 pycharm,新建一个.py 文件,编写如下安卓自带的计算器自动化脚本:

#coding=utf-8
from appium import webdriver
from time import sleep

desired_caps = {}
desired_caps['platformName'] = 'Android'  
desired_caps['platformVersion'] = '4.4.4'  
desired_caps['deviceName'] = 'Android Emulator'  
desired_caps['appPackage'] = 'com.android.calculator2'  
desired_caps['appActivity'] = '.Calculator'

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_name("1").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("9").click()
driver.find_element_by_name("delete").click()
driver.find_element_by_name("9").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("+").click()
driver.find_element_by_name("6").click()
driver.find_element_by_name("=").click()
driver.quit()

编写后保存,然后右击运行脚本,此时的安卓模拟器应该有运行结果,则表示正确。注意,platformVersion 的值可从 appium 界面上看到。
备注:程序来自从虫师的 cnblogs 博客。

四、知识补充(2)

adb 命令介绍

adb 的全称为 Android Debug Bridge,就是起到调试桥的作用。借助 adb 工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行 shell 命令等等。其实简而言说,adb 就是连接 Android 手机与 PC 端的桥梁,可以让用户在电脑上对手机进行全面的操作。如果你对其很感兴趣, 可以再自己搜索相关内容。

常用 adb 命令

备注:因为想诠释清楚命令的作用,所以格式所迫,会使用截图代替。
首先打开 DOS 命令行:

命令 解释
adb devices 列出当前连接的设备,获取设备的 id 和状态的用的
adb push/pull 用于 PC 端和设备端文件交互的操作

命令 解释
adb install/uninstall 安装或卸载应用。(安装是应用的名称,卸载是 apk 的包名)

五、浅谈之前的小程序

因为我知道你一定着急并好奇刚才的脚本是什么意思,这里先简单的说明下,后续的知识还需要你的自学。

#coding=utf-8   #编码格式
from appium import webdriver  #引入webdriver
from time import sleep  #引入sleep

# 定义初始化的属性信息
desired_caps = {}  
desired_caps['platformName'] = 'Android'  #设备系统
desired_caps['platformVersion'] = '4.4.4'  #设备系统版本
desired_caps['deviceName'] = 'Android Emulator'  #设备名称
desired_caps['appPackage'] = 'com.android.calculator2'  #包名,获得包名的方式有很多
desired_caps['appActivity'] = '.Calculator'  #Activity,获得的方式也很多
desired_caps['unicodeKeyboard'] = True  # 使用unicodeKeyboard的编码方式来发送字符串
desired_caps['resetKeyboard'] = True  # 将键盘给隐藏起来

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  #启动服务器地址,后面跟的是手机信息

driver.find_element_by_name("1").click()  #点击计算器中的1
driver.find_element_by_name("5").click()  #点击计算器中的5
driver.find_element_by_name("9").click()
driver.find_element_by_name("delete").click()  
driver.find_element_by_name("9").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("+").click()
driver.find_element_by_name("6").click()
driver.find_element_by_name("=").click()
driver.quit()  #退出

六、知识补充(3)

元素定位介绍

这里的东西其实很多很细,不详细讲,可网搜。
selenium--web:常用 8 种
driver.find_element_by_name()
driver.find_element_by_id()
driver.find_element_by_class_name()
driver.find_element_by_tag_name()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_xpath()
driver.find_element_by_css_selector()

而手机(appium)则在 web 的 8 种基础上扩展了 3 个:
driver.find_element_by_accessibility_id()
driver.find_element_by_android_uiautomator()
driver.find_element_by_ios_uiautomation()

元素定位工具

具体使用可网搜,如有时间再补充。
web 端:
(1)firefox 浏览器的 firebug 插件
(2)Chrome 开发者工具(F12)
Android 端:
在 DOS 命令行下输入:uiautomatorviewer

七、Appium API 文档

这个文档在 TesterHome 就有,请自行前往。
Appium API 文档链接

八、项目工程的建立

项目结构

这里使用 pycharm。
第一,先建立项目:file---new project,输入项目名字。
第二,点击刚建立的项目名称,右击,new---directory,文件夹名字:data。
第三,点击项目名称,右击,new---directory,文件夹名字:screen。
第四,点击项目名称,右击,new---directory,文件夹名字:report。
第五,点击项目名称,右击,new---python package,文件夹名字:test_case。
第六,点击 test_case,右击,new---python package,文件夹名字:public;或者直接在项目下建立。
以此类推,结构按照自己的习惯建立。

未完待续;适用于初学者,其他不喜勿喷,谢;如果你觉得对你有所帮助,欢迎 “打赏鼓励”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

👏 真需要这么一篇文章。要准备的东西蛮多,准备过程中也会遇到很多坑。

小啄 回复

其实我总结的东西很多,但是我需要时间贴出来,所以给我一些时间哈

小啄 回复

更新啦

appium 环境检测:C:\Program Files (x86)\Appium\node_modules.bin
说明这个位置:.bin 前面有一个反斜杠

5楼 已删除

感觉还需要一个 log 模块,最近也在尝试搭建框架,不知道楼主现在搭建的怎么样了

pip install Appium_Python_Client

楼主有想到要实现多台设备多线程跑测试用例吗?

现在 appium 看不到楼主所说的那一些东西了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册