XML与Andriod平台UI自动化的完美结合

目前比较流行的自动化测试框架主要有以下几类:

第一类:数据驱动测试框架(The Data-Driven Testing Framework),从测试脚本中抽离出测试数据,形成数据文件,带动测试的执行,形成测试流;
另一类:关键字驱动测试框架(The Keyword-Driven Testing Framework),从测试脚本中抽离出关键字封装的业务逻辑;
第三类:行为驱动测试框架(The Behavior-Driven Testing Framework),使用几乎近于自然语言的方式描述了软件的行为过程。本文选择行为驱动测试框架,构建基于Python+Behave+XML+Appium 的Andriod平台UI自动化测试框架实现业务自动化测试。
1、Behave是什么? “Behave is BDD framework and a cucumber-clone for Python.”
BDD框架结构如下:
XML与Andriod平台UI自动化的完美结合
文章图片
从结构上可以看出主要有如下的关键字:
Feature(功能)Scenario(情景)Given(给定)
And(和)When(当)Then(则)
以上关键字是与自动化测试工具中的概念相匹配的:
XML与Andriod平台UI自动化的完美结合
文章图片
2、为何选XML对元素定位及元素操作做封装? 我们知道自动化测试的核心就是元素对象的定位和对识别对象进行操作,通常情况下我们会这么写:
self.driver.find_element_by_xpath("").click()
self.driver.find_element_by_id("").send_keys("XXX")
但是我们会发现测试脚本里包含对测试元素对象的定位和操作信息。
然而我们在编写测试框架和测试脚本的时候往往要考虑如下因素:
Tests as Documentation ----可读性:可通过测试脚本理解被测功能
Defect Localization ----缺陷定位:测试脚本能快速定位问题
Tests should be easy to write and maintain ----可维护性:测试脚本是容易维护的
Tests should be easy to improve when product changes----可扩展性:测试脚本随着产品需求变更的可适应性
那么我们需要对此类写法:
self.driver.find_element_by_xpath("").click()
self.driver.find_element_by_id("").send_keys("XXX")
的可维护性以及可扩展性进行改造。
【XML与Andriod平台UI自动化的完美结合】本文选择XML来对元素定位及元素操作做封装,实现测试脚本和元素定位属性以及元素操作的合理分离。
原因如下:
- XML语言因其具有简洁,易扩展等优点,特别适合用于结构化层次的描述;
- XML脚本易于编辑,方便搜索特定的元素内容,使得脚本的维护变得简单化;
- 使用XML语言对于自动化测试工程师来说具有良好的可读性,方便脚本内容的评审。因此选择XML文件作为元素定位和操作的信息载体,这种松耦合的结构大大地方便了对自动化测试脚本进行扩展和升级。
3、大招:“如何将XML和Andriod UI自动化完美结合” 以常用的“登录”页面为例。
a. 现在先来编写“登录”页面的XML文件:
XML与Andriod平台UI自动化的完美结合
文章图片
简单的对上述代码进行解读:
:其中描述关于登录页面的元素和操作;
:描述登录页面包含的元素;
:分别描述单一元素;
:选择定位元素的方式;
:传入参数;
:其中描述关于登录页面的操作;
:操作步骤;
中定义的元素;
:操作动作类型。
在此XML脚本中,我们定义了登录页面的元素层和操作流程,成功的对其进行了封装。
由此可见,XML脚本结构清晰,逻辑性和可读性良好,具有通用性,良好的实现了代码层和页面元素属性及操作的分层设计,提高了测试脚本的可读性和可维护性。
b.编写好了XML文件后我们需要编写可读取XML文件的python脚本代码。
下面提供可读取内容的代码如下:
locator = {}
for node in tree.iter(tag=tagname):
for child in node.getchildren():
element_name = child.get("name")
child_dict = {}
for child in child.getchildren():
child_dict[child.tag] = child.text
locator[element_name] = child_dict
locator_dict[tagname] = locator
return locator_dict
c. 编写用例层文件
使用Behave编写用例层,使得没有代码基础的测试人员也能快速进行测试用例的编写,完成自动化测试。
d. 运行Andriod 模拟器或真机,启动Appium服务,运行.feature文件完成自动化测试。
以上为笔者对于Andriod UI自动化测试的一些拙见,有同僚或者感兴趣的人,欢迎加入共同探讨。


本文作者:郭媛媛(点融黑帮),现任点融网测试开发工程师,关注自动化测试技术,开发测试框架及工具,提高测试效率。

    推荐阅读