Appium自动化测试框架的原理、安装以及使用

Appium自动化测试框架的原理、安装以及使用,第1张

appium是一个开源的移动端自动化测试框架,可以测试原生的、混合的以及移动端的web项目,appium是跨平台的,可以运行在osx、windows以及linux桌面系统上,用来测试ios、android应用

Selenium

2004年,Thoughtworks的员工Jason Huggins编写了一个名为JavaScriptTestRunner的测试工具

后来多人修改架构为独立服务模式,开发并推出了Selenium RC和Selenium-IDE

Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在 *** 作一样

这个工具的主要功能包括:

测试与浏览器的兼容性

测试你的应用程序看是否能够很好的工作在不同浏览器和 *** 作系统之上

测试系统功能

创建回归测试检验软件功能和用户需求

框架底层使用JavaScript模拟真实用户对浏览器进行 *** 作

1.x版本的Selenium需要启动一个Server,将 *** 作Web元素的API调用转化为一段段Javascript,然后在浏览器中注入这段Javascript

但是这样会有缺点

速度慢依赖于浏览器对注入的Javascript的正确解释

于是有了2.x版本的Selenium版本

2.x版本的Selenium整合了webdriver和原来的Selenium,把多个浏览器原生的API封装成一套更加面向对象的Selenium webdriver API

这样做的好处是速度提高,且调用的稳定性交给了浏览器

2.x的Selenium也可以叫Webdriver

Appium

为什么讲appium前,提到selenium呢?

Appium是基于webdriver协议添加了对移动设备自动化api扩展而成的,这样做的好处是避免重复造轮子

appium的框架是什么样的?

appium使用client-server架构,appium-client以脚本的形式,支持多种语言

appium-server需要安装appium-server程序,用来监听端口上来自appium-client的命令

appium-server已经很久没更新过版本了,目前可以用appium-desktop代替

UiAutomator是谷歌推出的一款用Java编写的UI测试框架,可以使用UiAutomator框架提供的API来对安卓系统进行一系列的自动化测试 *** 作

Bootstrap是Appium在初始化的时推送到Android手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理

工作原理

appium-server启动并监听在某个端口,接收测试脚本发来的命令请求,再将请求发送给中间件Bootstrap.jar,中间件Bootstrap.jar会把appium的命令转换成UiAutomator的命令,发送给UiAutomator,UiAutomator对android系统进行 *** 作

安装 安装Node.js

什么是Node.js

Node.js是一个JavaScript运行环境,它让JavaScript能够运行在服务端的开发平台

为什么需要安装Node.js

appium是用Node.js实现的,Node.js对于appium来说是解释器

官网下载Node.js安装包,安装软件

安装完成后,需要把目录加到系统环境变量中

安装appium server

用appium desktop代替

链接

安装JDK8

默认路径安装即可

安装完成后,设置Java的环境变量

然后把如下的三个环境变量加入Path中

在cmd下输入java -version,如果显示版本信息,则说明环境变量配置正确

安装Android SDK

链接:https://www.androiddevtools.cn/

安装成功后,打开Android SDK Manager,其中如下四项必须勾选后安装,其他取消勾选(我发现其他勾选后我无法安装)

添加环境变量

同时把两个环境变量添加到Path中

在终端输入adb version,显示版本信息,说明配置成功

安装appium client

如果你的appium client是用python写的脚本,就需要用到三方库Appium-Python-Client

通过在cmd里输入下面的命令安装

pip install Appium-Python-Client

元素定位

如果想通过appium对android系统进行模拟测试,比如说点击Setting图标,你首先需要获取这个图标元素

如何定位系统里的各个元素就成了关键

还记得上面安装的android sdk吗?里面有一个工具uiautomatorviewer.bat,可以获取到android系统里的页面元素

双击打开后,点击按钮,获取连接的android设备的界面

但是在获取页面前首先要做的是

android设备通过USB线连接到电脑确保驱动安装成功确保android设备处于开发者模式且USB调试打开

如何确保android设备处于开发者模式?

我们以华为android手机为例

在系统的设置选项里,找到系统-关于手机-版本号,连续点击,直到提示“您正处于开发者模式”,在系统中,可以发现开发人员选项

如何打开USB调试功能

在开发人员选项中,把USB调试打开

接下来用USB线连接电脑,在终端下输入adb devices,显示设备名称,说明adb连接成功,就可以用uiautomatorviewer获取设备页面了

有时adb devices没有显示设备名称,说明adb连接失败,可以多插拔几次USB线,或USB调试选项开关几次,直到手机侧d出认证窗口,点击确定即可

在使用uiautomatorviewer工具时,发现点击设备截屏的按钮后,d出adb无法连接的提示,经过分析,发现是我很久之前安装过adb工具platform-tools,我在安装android sdk时又安装了一个platform-tools,uiautomatorviewer工具想用的是android sdk里的adb工具platform-tools,但是电脑系统里配置的是前一个platform-tools

所以我们要把系统用的adb工具platform-tools的路径设置到uiautomatorviewer里

首先在cmd窗口里输入adb,查看正在使用的adb工具的路径

以notepad的形式打开uiautomatorviewer, 找到最后一行的的%prog_dir%,把上面的路径替换进去

然后重新打开uiautomatorviewer

如果在使用uiautomatorviewer时d出如下错误

这表示你的android设备的系统是android 9.0以上版本(包括9.0),对于9.0以上版本的android系统,uiautomatorviewer工具无法直接获取页面内容

此时可以通过adb命令把页面截图和页面元素属性保存下来,然后导入uiautomatorviewer中

把android设备切换到想要的画面

截取uix资源文件

cmd下输入

adb shell uiautomator dump /sdcard/screen.uix //获取uix保存在android系统的/sdcard目录下
adb pull /sdcard/screen.uix E:\screen //把android系统中的uix文件pull到电脑中  
截取图片

cmd下输入

adb shell screencap -p /sdcard/screen.png //获取图片保存在android系统的/sdcard目录下  
adb pull /sdcard/screen.png E:\screen //把android系统中的图片pull到电脑中  
把uix文件和png图片导入uiautomatorviewer中

就可以获取到这个页面的元素了

模拟执行

在appium-client给appium-server发送命令前,客户端和服务端需要建立一个session,客户端首先会发送一个叫“Desired Capabilities”的JSON对象给服务端,服务端收到后会创建一个session并将session id返回给客户端,客户端用这个id发送命令

Desired Capabilities是一组键值对集合,主要用来告诉appium服务端想要的平台和应用程序

所有的Capabilities参数可以在官方文档中查找

常用的参数有

可以直接在appium-server上配置Capabilities,创建与android设备应用的session

启动appium server

创建New Session

有两种方式:File -> New Session Window,或者是点击右侧的搜索图标

稍微等一会,才会出现下面的画面

配置Desired Capabilities

配置完以后,点击Start Session

左侧获取到android设备的界面,右侧是界面里的元素,上面还提供了一些 *** 作图标,可以对android设备做back,tap等 *** 作

第一次启动会话时,appium-server会给android设备推送一个uiautomator apk,需要在android侧安装

在appium-server上配置Capabilities的目的是为了验证可以使用,或者可以像uiautomatorviewer那样定位元素,最终还是要在appium-client上配置Capabilities发给appium-server

在python脚本中,实现appium-client的功能

这里有个问题需要注意

不能把python脚本的名称设置为appium.py,这样会造成它和appium的三方库的名称相同,导致在from appium import webdriver时报错

python代码如下

from appium import webdriver
import unittest
import time

class TestCalculator(unittest.TestCase):

    def setUp(self):
        desired_caps = {}
        desired_caps["deviceName"] = "HUAWEI Mate9 ZZQ"
        desired_caps["platformName"] = "Android"
        desired_caps["platformVersion"] = "9"
        desired_caps["appPackage"] = "com.android.calculator2"
        desired_caps["appActivity"] = ".Calculator"
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

    def testCalculate(self):
        time.sleep(2)
        self.driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
        self.driver.find_element_by_id("com.android.calculator2:id/op_sub").click()
        self.driver.find_element_by_id("com.android.calculator2:id/digit_6").click()
        self.driver.find_element_by_id("com.android.calculator2:id/eq").click()

    def tearDown(self):
        time.sleep(2)
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()  

在执行脚本之前,需要先把appium-server启动起来

然后执行脚本,呈现的效果如下

脚本分析

上面的python脚本只是举例,我们来分析下完整的脚本编写思路

用appium模拟执行android系统的流程,一般都是:

打开app对app上的元素进行 *** 作退出app重复上面的步骤

这样的结构是不是和python中的unittest很像,所以可以用unittest类进行编写

在模拟执行前需要打开app,把打开app的 *** 作放在setUp()里

需要生成Desired Capabilities,然后发给appium-sever端,Desired Capabilities是一组键值对组合,就是dict字典类型

其中有五个是必须的

deviceName

设备名称,可以在系统的设置里查找到用户设置的设备名称

platformName

*** 作系统名称,一般都是iOS、Android或FirefoxOS

platformVersion

*** 作系统版本,一般系统设置里可以查找到

appPackage

app应用包名称,可以用uiautomatorviewer工具查看

appActivity

打开app后,在cmd终端下输入

adb shell dumpsys window w | findstr mCurrent  //linux或mac用grep,windows系统用findstr

可以发现,appPackage.appActivity

生成Desired Capabilities后,需要用webdriver.Remote()把appium-server的host:port和Desired Capabilities作为参数传给appium-server

*** 作app中的元素就很简单了,找到元素然后调用click等方法

有几种方法找元素

通过xpath、id或name等属性,用find_element_by的方法

以上就是appium的介绍


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1321432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存