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

蓝莓酱 · July 07, 2017 · Last by thefifthman replied at August 10, 2018 · 22648 hits

背景

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

丑话说前头

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前面有一个反斜杠

5Floor has been deleted

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

pip install Appium_Python_Client

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up