2019-08-05

appium 自动化  

1appium 的特点: 开源,跨平台(1测试脚本的跨平台  支持在如: mac linux windows     运行平台 ios Android  windows   firefoxos) 多语言支持 移动应用 自动化工具

测试对象: 原生app  混合(hybrid)app  移动web app   所谓原生app ,就是专门针对某一类移动设备(比如苹果、安卓)而开发的,所有界面和代码都是专门为平台设计的。而混合app主要是指它的一部分是原生界面和代码,而另一部分是内嵌web app 。这个大家应该有体会,可以打开网页浏览的app都是混合app,比如微信、支付宝、美团、移动营业厅、开发者头条等。比如微信的sms界面是原生,原生代码实现的。 而打开某个朋友圈,或者别人发来的的链接部分则是 web部分,内嵌了一个浏览器内核,由浏览器内核实现的。

测试对象App运行平台包括:

测试对象App运行平台包括:

iOS (就是苹果手机、平板、甚至iWatch等移动设备上运行的app)

Android(就是安卓手机、平板、等移动设备上运行的app)

]Windows (就是Widnows手机、平板等移动设备上运行的app,但是这种平台使用人数目前太少,少到基本可以忽略不计了,)

FirefoxOS (更少,更加可以忽略不计了)

测试对象App运行环境:

真实设备

模拟器

真实设备大家都知道,就是苹果安卓的手机、平板等移动设备

而模拟器则是通过在PC或者Mac电脑上的软件虚拟的  苹果安卓的手机、平板等移动设备。主要是方便我们测试用的。

测试程序语言:

appium支持多种程序语言开发测试程序,基本上Selenium支持的开发语言,appium都支持。

Python、java、Ruby、js、php、c#

自动化原理

Appium自动化架构和Selenium有很大的相似之处

包含了3个主体部分  

Test script(我们的测试程序,是测试逻辑的实现部分。就像以前我们的Selenium自动化脚本。

而且和Selenium一样,可以使用多种语言,Appium 客户端库也支持多种语言。

一般运行在pc、上,或者苹果笔记本、台式机) 

Appium Server :这是一个用 javascript代码实现的程序。是运行在Node.js里面的。

被测试app:运行在真实设备或者模拟器中

这个测试系统,运行起来,交互关系是这样的

首先:

我们开发的的自动化程序(Testscript)运行各种测试脚本 

告诉Appium Server,我们要做什么操作

Appium Server接收到测试程序的命令后,又是怎么真正的控制移动设备上的app的呢?  

原来appium是自己开发一个自动化模块(或者叫应用),安装在移动设备中的。

就行一个木马

appium开发的木马,通过使用 各个移动APP开发平台 自带的 自动化框架来实现的

appium在移动设备上会注入测试模块,测试模块会调用这些自动化框架提供库,从而控制设备和操作app。






node.js 是js程序的一个解释器  苹果 uiautomation/xctest   安卓 uiautomator


android 底层自动化工具                          ios   底层自动化工具 

2.3-4.1  selendroid                                  ios 9.3 之前uiautomation

4.2+ uiautomator                                       9.3+ xcuitest

6+ uiautomator 2

安装appium  python clinet 包      

pip install appium-python-client       pip install -u appium-python-client  (自动更新依赖包)

安装

安装Appium Python Client包

根据原理图,我们知道测试程序需要调用客户端的库AppiumPython Client包来和Appium Server进行通信

所以先安装AppiumPython Client包。

https://github.com/appium/python-client

pip install Appium-Python-Client

从安装的信息可以发现,Appium Client底层是依赖Selenium的,它需要Selenium库的代码才能实现和 AppiumServer进行通信

Appium Server 

更省事的方法是下载安装AppiumDesktop的安装包,

这个里面包含了Node.js和AppiumServer 的代码


下载地址 https://github.com/appium/appium-desktop/releases/latest


它是个windows的安装程序,只需要下载,安装就可以了,没有什么难度。

安装 Android sdk


对于安卓app的自动化,Appium Server依赖 Android SDK。

因为要用到里面的一些工具,

典型的,最常用的,比如adb,要执行命令设置手机,传送文件,安装应用。

我们怎么安装Android sdk包?


谷歌是提供了方法:不去安装 android studio ,就只安装sdk包的


打开 https://developer.android.google.cn/studio/


建议先创建一个类似这样的目录


d:\android\sdk



下载后,选择解压到当前目录


 会生成一个 tools目录


然后

sdkmanager "platform-tools" "platforms;android-28" "build-tools;28.0.3"



设置 sdk相关环境变量

配置一下ANDROID_HOME环境变量的值为 d:\tools\Android\sdk



将adb所在路径设置到 path环境变量中  

Android\sdk\platform-tools\







安装JDK 

有些安卓sdk中的工具(比如查看安卓app界面元素的uiautomatorviewer)需要有JDK才能运行。

  比较简单,


但是大家要注意的是,一定要安装jdk8.x的版本, 

1.7 ,1.6 1.9等版本都碰到过这样那样的问题。


jdk是oracle的,到官网下载


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



下载安装就可以


有时还需要环境变量中设置一下(有人的环境上需要,建议大家都添加一下)


JAVA_HOME   d:\tools\java\jdk1.8.0_121






连接真实设备(15 min)



用usb线(有的淘宝线只能充电)连接到电脑,一头连手机,一头连电脑

2, [endif]进入手机设置,关于手机(),不断点击版本号(7次以上),

注意一定是版本号,不是其他号。


3, 退出到上级菜单,在开发者模式中,启动usb调试 ,这样appium才能驱动手机





4, [endif]在电脑上执行adb命令(这个adb在sdk\platform-tools\请大家设置路径在path环境变量中)

adb devices -l

List of devices attached

4d0035dc767a50bb        device product:t03gxx model:GT_N7100 device:t03g


现在有的电脑安装了win10的,有的手机能够自动被系统识别,就会显示上面的信息,

有的电脑系统,比如win7 ,手机不能自动识别,因为还没有安装手机的usb驱动,需要我们去安装。


到哪里下载驱动呢?可以通过官方windows手机管理软件, 比如华为手机(安装华为手机助手)





快速开始

我们以一个开发者头条的app,为例,演示一下自动化的过程


准备一些事情

即使安装好上述软件后。要自动化,还要准备一些事情。


首先当然需要有被测试的app应用了。

这里我用的app是从应用市场上下载下来。

在虚拟手机上没有应用市场,可以直接到官网下载app

https://toutiao.io/


当然实际项目中app是有开发团队发布给我们测试用的。

放在一个合适的目录中,这里我放在 d:\apk\


usb线连接手机

进入头条apk所在目录,

执行命令安装一下

d:\apk> adb install -r toutiao.apk

toutiao.apk: 1 file pushed. 4.5 MB/s (15351740 bytes in 3.268s)

        pkg: /data/local/tmp/toutiao.apk

Success






范例代码


from appium import webdriverimport time,traceback# 这里定义的 desired_capabilities作为下面 webdriver.Remote# 初始化一个webdriver的参数。# 这些键值对告诉appium server 测试程序希望进行的是什么什么样的测试# 比如下面 platformName   platformVersion 两个配置项desired_caps = {}desired_caps['platformName'] = 'Android'  #测试平台,不能写错desired_caps['platformVersion'] = '6.0'   #平台版本,不能写错#设备名称,其实没有太大的用处,只是给测试程序使用的,苹果手机一定要有desired_caps['deviceName'] = 'test'#apk 文件路径名,如果设备还没有此应用,则会安装。什么是apk文件?

# android application package安卓移动App安装包desired_caps['app'] = r'd:\apk\toutiao.apk'#app package名,一定要有,是开发者给app取的名字,可以唯一标识这个app # 安卓上运行某个app,不是根据它的路径而是appid ,也就是这package name# 怎么获取?后面会讲desired_caps['appPackage'] = 'io.manong.developerdaily'# app默认Activity,也是必须的参数。Activity 的概念后面会讲述,# 目前我们就理解为一个用户操作界面就可以了# 怎么获取?后面会讲desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity'# 一定要有该参数,否则测试过程中无法输入中文#加上这个参数会新加一种unicode输入法desired_caps['unicodeKeyboard']  = True# 保证了app 测试前不会清除应用数据,缺省是会清除数据的,desired_caps['noReset'] = True# appiumserver认为和客户端之间无响应最大时间超过这个时间就会停止服务desired_caps['newCommandTimeout'] = 6000# appiumserver在这个URI上接收 客户端发送的rest API请求driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 下面的操作是自动化一个用户登录的过程,大家课后自己尝试的时候,需要先注册用户# 怎么注册演示给大家看看,怎么登录也演示给大家看看,# 最后别忘了要退出登录,一遍自动化可以执行try:    # Selenium含义一样,问问大家还记得吗?    driver.implicitly_wait(10)    # 根据id找到元素,并点击,id html 元素的id不同,

#和appiumserver设备之间的消息流程类似于selenium,和     driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()    time.sleep(1)    driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()    time.sleep(1)    # 输入用户名、密码    ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")    ele.send_keys('jcyrss@163.com')    ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")    ele.send_keys('sdfsdf')    time.sleep(2)    # 点击登录    driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()    passexcept:    print (traceback.format_exc())input('**** Press to quit..')driver.quit()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容