原文出处http://www.toutiao.com/a6268089772108333314/

做过UI自动化测试同学,都会深深体会几个痛点:维护量大、适配量大、编写代码巨大等。基于这些问题,大家都会想到抽象封装通用常用方法,编过程序的同学都知道,如何提高编程速度,那就是有一套自己熟悉和好用的函数库,这样编程很大部分就如搭积木游戏,可以快速搭建程序。基于此我们设计了第一套封装结构模式,如下图所示:

从以上结构,不难发现应用基础库比较凌乱,没有分类。如果是自己写的还记得住,要是移交给别人,就显得很糟糕了,别人不愿意去看去用。那么,急需解决的问题就是如何分类比较合理。

从基于UI测试的测试对象出发,我们测试的对象为一个个的Activity,那我们可以使用Activity来进行分类。首先每个Activity 都有自己的专有方法,如拨号界面,会有输入号码、拨号、删除号码等功能,我们将每个Activity划分为一个单独的类,类里面把这个Activity 涉及的方法都写好提供给用例调用,如下图拨号界面的属性与功能的基础分解。

依据以上 Activity 封装模式,我们还需要在结构中再加入一层 Activity 函数库,那么,新的结构图如下所示:

这里涉及了几个Activity的查询方法。[LG1]

方法1:从开发那取得manifest文件

方法2:使用命令查询应用的全部Activity

adb shell dumpsys package <包名>

方法3:查询当前Activity 栈顶的Activity,推荐使用此方法

adb shell dumpsys activity

找到栈顶Activity

[LG1]这几个查询方法再做下比较吧?

方法4:找焦点Activity

adb shell dumpsys activity | find “mFocusedActivity”

简化搜索字符

adb shell dumpsys activity | find “mF”

以上方法,最快捷的是方法四可以马上知道当前的页面信息,最全面的是方法1与方法2,使用哪种方法需要依据实际使用情况进行选择。

之前我们介绍过,基于同种布局抽象出通用方法。我们将常用的通用方法,放在公共库中,将每个界面方法放于每个单独界面的类中。下面来看一下基本基本类图:

在各种方法都固化完后,编写用例就成了搭积木游戏,可以快速的搭建需要的用例。将用例的逻辑写在用例中,用例的数据分离出来全部写在对应的Activity 类中。这样平时主要维护已有的各个Activity内方法与数据。

最后再按照功能将用例结构抽象成为一个标准框架层理论,这样大家就更容易明白与理解了。

基于此框架,基本不变的层为:布局层、组件层、通用层。界面层会因为界面的变化而进行维护变化。设计时候尤其注意函数的通用性、函数的参数、各种重载函数,以及各种异常情况都需要重点考虑和规避。作为通用的方法,为了保证函数的调用不出问题,也是需要测试的,我们必须写一份用例来测试这些方法,模仿单元测试方式来检查这些通用方法的可用性、稳定性、可靠性,以此来保证在应用变化,Android版本变化时候能快速的发现哪些函数存在的不兼容现象,进行及时的修改,保证业务的正常进行。

界面层的所有方法都基于接口方式进行设计,实际的用例由这些接口方法组成。当版本变化的时候只需要重新实现接口重新变化一份,用例只需要变换一下实例化的类就可以完成切换用例。如此这样,用例的固定步骤也可以不用变化,仅仅变化每块积木里面的内容就可以。

以上内容总结为如下几点:

  • 合理封装方法,优化工程架构

  • 组件化

  • 布局化

  • 界面化

  • 接口化

APP 自动化测试封装结构模式的更多相关文章

  1. 基于UiAutomator2+PageObject模式开展APP自动化测试实战

    前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...

  2. 移动app自动化测试

    原文出处https://www.toutiao.com/i6473606106970063374/ 原文作者是今日头条的:一个字头的诞生 在此感谢原文作者的无私分享! 移动App自动化测试(一) 目前 ...

  3. node(3)MVC代码结构模式moogoDB的学习

    ---恢复内容开始--- 一.MVC代码结构模式 设计模式:观察者模式.中介者模式,这种模式,主要做的事情是处理类与类之间‘高内聚.低耦合’; 代码架构模式:MVC.MVVM.MVP Model:模型 ...

  4. App自动化测试方案

    App自动化测试方案 1.1  概述 什么是App自动化?为什么要做App自动化? App自动化是指给 Android或iOS上的软件应用程序做的自动化测试. 手工测试和自动化测试的对比如下: 手工测 ...

  5. [JAVA设计模式]第三部分:结构模式

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. 篇2 安卓app自动化测试-初识python调用appium

    篇2              安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...

  7. Android Native App自动化测试实战讲解(上)(基于python)

    1.Native App自动化测试及Appuim框架介绍 android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动 ...

  8. 通过实例介绍Android App自动化测试框架--Unittest

    1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...

  9. Python appium搭建app自动化测试环境

    appium做app自动化测试,环境搭建是比较麻烦的. 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎. 但没有成功的环境,就没有办法继续后续的使用. 在app自动化测试当中,我们主要是 ...

随机推荐

  1. Netty4.x中文教程系列(六) 从头开始Bootstrap

    Netty4.x中文教程系列(六) 从头开始Bootstrap 其实自从中文教程系列(五)一直不知道自己到底想些什么.加上忙着工作上出现了一些问题.本来想就这么放弃维护了.没想到有朋友和我说百度搜索推 ...

  2. encoding和charset的区别~

    本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难. ...

  3. 使用JSR验证

    1.spring mvc配置文件中添加:         <mvc:annotation-driven /> 2.pom.xml中添加        <dependency > ...

  4. jquery如何判断表格同一列不同行input数据是否重复

    function hasRepeat(objId,columnIndex){ var arr = []; $("#"+objId+" tbody tr").ea ...

  5. js和jquery获取父级元素、子级元素、兄弟元素的方法{转}

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当成DOM元素   原生的 ...

  6. 两天学会DirectX 3D之第二天

    提要 前几天非常easy地跑了一个DirectX 9 程序,以为DirectX就那么绘制,事实证明有点Naive了. 之前的那个程序最多也就是个固定流水线的东西. 可是今天要用DirectX11来写一 ...

  7. 关于在ubuntu平台下使用apt-get命令下载速度太慢的问题解决

    1. 进入设置,从哪进都一样找到就行. 2.选择软件与更新(Software and updates,英语估计是这个把) 点击下载自:这个下拉框,选中其它站点,选择镜像 选择阿里的或者搜狐的镜像,然后 ...

  8. Wex5循环某个div节点下的所有img标签,替换其src属性值

    Model.prototype.newsDetailAfterRefresh = function(event){ var newsDiv = this.getElementByXid("n ...

  9. 7.15;linux命令

    麦克维瀑布 https://farm5.staticflickr.com/4269/34749113172_d6c1ba274a_k.jpg ----------------------------- ...

  10. Mac下安装apk(命令形式)

    1 连接上设备 2 卸载原有程序 3 进入adb程序目录/Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools 4 键入命令 . ...