一、Selenium

一个web的自动化测试工具,相比QTP而言支持多种语言,QTP只支持VBS,支持多平台,支持分布式测试用例的执行。selenium主要使用的工具是WebDriver。

WebDriver有三个角色:工程师写的自动化测试代码;浏览器的驱动;浏览器。

从技术层面解释:

WebDriver API(基于Java、Python、C#)等语言,对于python来说就是from selenium import webdriver;浏览器的驱动(browser driver):每个浏览器都有自己的驱动,均已exe文件形式存在,比如谷歌的chromedriver.exe、火狐的geckodriver.exe;浏览器本身:即软件本身。

一条selenium脚本执行时后端发生的事情:

对于每一条selenium脚本,一个http请求会被创建并且发送给浏览器的驱动;浏览器驱动中包含了一个HTTP Server,用来接受这些http请求;HTTP Server接收到请求后根据请求来具体操控对应的浏览器;浏览器执行具体的测试步骤;浏览器将步骤执行结果返回给HTTP Server;HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

为什么使用HTTP协议:因为HTTP协议是一个浏览器和Web服务器之间通信的标准协议,几乎每一种变成语言都提供了丰富的http libraries,这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应response,WebDriver的结构中就是典型的C/S结构,WebDriver API相当于是客户端,而小小的浏览器驱动才是服务器端。

WebDriver基于的协议:JSON Wire Protocol,这个协议在http协议基础上,对http请求及响应的body部分的数据进一步规范。http中的body都是以JSON的形式存在并进行传送的,这样的话在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,同一个浏览器的驱动既可以处理Java语言的脚本,也可以处理Python语言的脚本。

每个浏览器都有自己自动化测试接口,如打开网页、点击等;每个浏览器自己的webdriver实现,如chromedriver都封装了这些自动化测试接口,然后把这些操作以一个标准web restfull api暴露出来。

二、Appium

Appium:一个开源的,适用于原生或混合移动应用(hybrid mobile apps)的自动化测试工具,Appium应用WebDriver:JSON wire protocol驱动安卓和IOS移动应用。

支持多平台(Android、IOS等)。

支持多语言(python、java、ruby、js、c#等),appium选择了Client/Server的设计模式,只要client能够发送http请求给server,那么client用什么语言来实现都是可以的,这就是支持多语言的原因。

跨平台的,可以在OSX、windows和linux上运行。

appium扩展了WebDriver的协议。

Appium启动时会创建一个http请求,针对4723端口,脚本会告诉服务器我要做什么,服务端再去跟设备打交道,服务端和脚本可以不在一起,只要能访问到127.0.0.1:4723这个地址就可以。服务端和设备默认使用4724端口进行通讯,底层调用uiautomator工具,在测试的时候服务端会给设备扔一个jar包就是appiumbootstrap.jar,会启动这个包,启动之后会在手机上创建一个socket服务,暴露的就是4724的端口,相对于socket服务来说,appium服务端又是一个客户端。服务端的4724端口可以修改,设备上的不可以,服务端收到脚本传递过来的命令之后,通过电脑上的2724端口,向设备上的4724端口发送指令,appiumbootstrap.jar收到指令后回去完成点击、滑动等操作,完成之后再通过服务给服务端一个回应,服务端收到之后再返回给响应脚本。

Bootstrap.jar,监听appium发送过来的相关请求,并将请求转换成UiAutomator可以识别的命令发给UiAutomator进行处理。

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

appium工作流程:脚本请求==》4723端口appium server==》解析参数给PC端4724端口==》发送给设备4724端口==》通过设备4724端口发给bootstrap.jar==》Bootstrap.jar把命令发给uiautomator。

三、uiautomator

uiautomator是谷歌在Android4.1版本发布时推出的一款用java编写的ui测试框架,基于accessibility服务,最大的特点是可以跨进程操作,可以使用uiautomator框架提供的一些方便的api来对安卓应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。

uiautomator是在手机上运行了一个http rpc服务,将uiautomator中的功能开放出来,然后再将这些http接口封装成python库,python脚本执行每个操作都会转换成一个对http rpc服务的请求,http rpc服务接受这些请求,并调用原生uiautomator的api实现在手机上的操作。

 

android SDK4.3中提供了如下工具来支持UI自动化测试,uiautomatorviewer:一个图形界面工具来扫描和分析应用的ui控件。uiautomator:一个测试的java库,包含了创建UI测试的各种APi和执行自动化测试的引擎。

uiautomator1有两个缺点:测试脚本只能使用Java语言;测试脚本必须每次被上传到设备上运行。

uiautomator2诞生的背景:希望测试能够用更脚本化的语言,如python,每次所见即所得地修改测试、运行测试或者说能够在电脑上运行就能控制手机。

uiautomator2初期是在手机上运行一个http rpc服务,将uiautomator中的功能开放出来,然后再将这些http接口封装成python库。

uiautomator2后期加强版:设备和开发机可以脱离数据线,通过wifi互联,代码重构和精简,扩充了toast,继承了openstf/minicap达到实时屏幕投屏,以及实时截图;集成了openstf/minitouch达到精确实时控制设备。

python-uiautomator2封装了谷歌自带的uiautomator2测试框架,提供便利的python接口,允许测试人员直接在PC上编写python的测试代码。

python-uiautomator2分为两个部分,python客户端,移动设备。

python端:运行脚本,并向移动设备发送HTTP请求。

移动设备:移动设备上运行了封装了uiautomator2的http服务,解析收到的请求,并转化成uiautomator2的代码。

 整个过程:

在移动设备上安装atx-agent(守护进程),随后atx-agent启动UIautomator服务(默认7912端口)进行监听;在PC上编写测试脚本并执行(相当于发送http请求到移动设备的server端);移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行指定的操作。                       

 以下是我整理的一些学习资料,需要的朋友可以进群讨论!

 

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: