一、封装方法
1、编程如何越来越快:
  首先,需要经验丰富,知识面广。
  其次,每一个熟练编程的人员,都会有自己的一个库,解决各种问题、各种通用的方法函数。
  同理,自动化脚本也是编程,测试用例则为需求,UI自动化编写虽然容易,但是界面变化快、维护庞大。所以封装通用方法,是最快最容易的途径。
2、哪些方法需要封装:
  公共的操作方法
  经常使用的步骤:超过两次以上
  经常使用的组件:输入框、文本框、列表
  经常操作的布局:多个组件组成通用的布局
  经常操作的页面:ui页面由一个一个单独Activity组成,就可以将Activity封装成单独的类
  通用的工具函数:文件操作、时间操作之类
3、初级封装:
  通用方法库:将通用的方法封装在一个java文件中,比如登陆、文件操作、时间操作
  专用方法库:比如登陆专用的方法:qq登陆、微博登陆等
  用例集:通过调用方法库中的方法实现用例,这样看起来简洁清晰。
4、设计一个用例的过程:
  先编辑好用例执行步骤、顺序
  然后设计好对应的方法名
  然后新建一个class将这些写入,要将编辑好的用例步骤、方法名等作为注释,这样更清晰
 
  比如设计简单用例如下:
  Cer_MTBF_01:联系人的添加和删除
  预置条件:1、在添加联系人之前通讯录内无任何联系人
  

执行步骤 对应方法
打开通讯录
openContent
清空联系人
clearContent
新建联系人
newContent
确认联系人新建成功
confirmContents
删除联系人
deleteContens
确认联系人删除成功
confirmDelContents
退出通讯录
exitContent
二、接口化
1、面向接口的变成也可以引入自动化用例编写中。可以用到设计核心用例,基本核心用例20-30条,核心功能基本不会变,但是UI变化比较大,这样我们没必要把用例重新写一遍,只要把方法重新实现一下。
  设计用例与实现用例分离
  规范化用例
  多态-应用的多版本
三、组件化与布局化
1、对常用的组件单独编写组件常用方法。我们最终获取的每个对象都为某一个类型的组件
 例如:对EditView设计通用的方法,首先想想你是如何测试编辑框的,将这些方法全写在抽象的 EditView类中
    获取EditView对象
    输入文本
    清除数据
    判断编辑框类型
    判断编辑框
    各种异常与特殊方法预置、
 
四、界面化
1、界面化知识应用由不同的Activity组成,那我们可以将每一个界面封装成一个类,操作、方法、变量,也就是属性和方法再单独封装。
这样只要哪个界面有变化,再修改对应的Activity就可以了。
  实例:
    拨号盘页面
  属性:
    常用的固定号码,如:10086,10010,10000
    常用的暗码:*#06#、*#*#4636#*#*
    组件ID:页面各个组件ID按功能命名
    页面对象:页面各个UI对象
  方法:
    输入号码
    清除号码、删除号码
    拨号
    其他设置(添加联系人、暂停、等待、发送短信)
    选择号码
2、Activity查询方法
   方法1:有源码,从Manifest文件中获取
   方法2:使用命令查询应用的全部Activity
   adb shell dumpsys package<包名>
   方法3:查询当前Activity栈定的Activity
   adb shell dumpsys activity
   方法4:找到焦点Activity
   adb shell dumpsys activity | find "mFocusedActivity"
   简化搜索字符
   adb shell dumpsys activity | find "mF"
五、逻辑与数据分离
1、实际用例编写过程中有很多数据非固定的而是可变的
如:
   账号信息:邮箱账号、无线登陆账号、即时通讯软件
   逻辑控制:log输出、代码分枝切换
   电话号码
   。。。。。
对于可变的数据,我们应该剥离出来,使用一个数据类来进行控制和获取 
思路:
我们单独设计一个class,功能就是,从某个地方读取变量,再赋值给我们设计好的变量。
 
2、数据获取方式
  1)从命令传入参数:-e 键值对
  2)从文件传入参数:写一个配置文件,文件里包含配置变量的信息,放到手机目录下,然后文件读取,赋值给我们的变量。
  3)从云端传入参数:需要有一个云服务测试系统,用例通过POST请求,请求服务器,服务器上设置好信息,服务器再把信息返回给用例,用例再把信息赋值给对应的变量,然后其他用例再从数据类中读取。
 
简单实例:
  建一个管理数据的package
  建一个数据类
  设置变量
  在写一些获取变量值的方法

    public class Date extends UiautomatorBase{
public static String wlan="";
public static String QQ="";
public static String phone="";
} public void getConfig(){
wlan="";
QQ="";
phone="";
}
}

Android UI自动化用例设计技巧的更多相关文章

  1. 【UI】自动化用例设计技巧

    需要封装的方法: 公共的操作方法 经常使用的步骤:超过两次以上 经常使用的组件:输入框.文本框.列表 经常操作的布局:多个组件组成通用的布局 经常操作的页面:ui页面由一个一个单独Activity组成 ...

  2. 命令行运行Android Robotium自动化用例或单元测试用例

    本文目录 1.运行所有的测试用例 2.运行单个测试类或某个TestSuite 3.运行某个测试类里面的某个测试方法 4.运行两个不同的测试类或类中的方法 命令行运行Android Robotium自动 ...

  3. python3+Robot Framework+PyCharm第一个WEB UI自动化用例

    这里只是列举一个很简单的例子,简单介绍工具的使用,编写用例之前,做好WEB UI自动化的准备工作,下载好chrome驱动(这里以chrome为例,不同浏览器有对应的驱动),注意驱动和浏览器版本要对应, ...

  4. 2020,8种必备Selenium编写自动化用例的技巧

    在开始自动化时,您可能会遇到各种可能包含在自动化代码中的方法,技术,框架和工具.有时,与提供更好的灵活性或解决问题的更好方法相比,这种多功能性导致代码更加复杂.在编写自动化代码时,重要的是我们能够清楚 ...

  5. python+requests+yaml实现接口自动化用例

    前言:最近也思考了一下怎么做接口自动化,以下内容属于自己目前阶段所学习到的内容,也逐渐投入自己实际工作中,把最近的学习新得跟大家分享下,话不多说,切入正题. 对接口自动化测试用例的思考:接口测试大多测 ...

  6. pytest文档30-功能用例与自动化用例完美对接(allure)

    前言 做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在demo的层面. 真正把自动化做的好的大牛又不屑于分享自己的劳动成果,所以大部分情况 ...

  7. 【Golang】基于录制,自动生成go test接口自动化用例

    背景 之前写过一篇博客,介绍怎么用Python通过解析抓包数据,完成自动化用例的编写.最近这段时间在使用go test,所以就在想能不能也使用代码来生成自动化用例,快速提升测试用例覆盖率.说干就干. ...

  8. 【Robot Framework 项目实战 04】基于录制,生成RF关键字及 自动化用例

    背景 因为服务的迁移,Jira版本的更新,很多接口文档的维护变少,导致想要编写部分服务的自动化测试变得尤为麻烦,很多服务,尤其是客户端接口需要通过抓包的方式查询参数来编写自动化用例,但是过程中手工重复 ...

  9. 【Robot Framework 项目实战 03】使用脚本自动生成统一格式的RF自动化用例

    背景 虽然大家都已经使用了统一的关键字,但是在检查了一些测试用例之后,还是发现因为大家对RF的熟悉程度不一导致的测试用例颗粒度差异很大的情况:而且在手动方式转化测试用例过程中,有不少工作是完全重复的且 ...

随机推荐

  1. SQL基础语法(四)

    SQL ORDER BY 子句   ORDER BY 语句用于对结果集进行排序. ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序. ORDER BY 语句默认按照升序对 ...

  2. 滚来滚去,滚来滚去...Scroller完全解析

    API: 1 mScroller.getCurrX() //获取mScroller当前水平滚动的位置 2 mScroller.getCurrY() //获取mScroller当前竖直滚动的位置 3 m ...

  3. ASP.NET MVC 应用,站点发布到本地IIS

    材料准备 visual studio 2013 , iis 7 具体步骤 1.以管理员身份启动visual studio 2.新建项目 web app 或者站点 3.编译项目 4.右击项目选择publ ...

  4. Xcode 运行程序,左侧memory 不显示内存

    运行程序后,xcode 不显示当前使用的内存情况,问题是打开了僵尸--enable zoombie Objects,关闭即可 打开 product--->SCheme-->EditSChe ...

  5. Oracle时间戳(毫秒)转为Date

    1.SQL ) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE FRO ...

  6. BZOJ 4205: 卡牌配对

    4205: 卡牌配对 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 76[Submit][Status][Discuss] ...

  7. css-css权威指南学习笔记6

    第八章 padding/border/margin 1.对于只包含文本的行,能改变行间距里的属性只有line-height/font-size/vertical-align. 2.对行内非替换元素应用 ...

  8. Java开发环境搭建——Tomcat配置

    指定tomcat的JDK版本可能由于种种原因,系统的JAVA_HOME配置的JDK版本并不是当前需要的版本,而tomcat默认使用的是JAVA_HOME的JDK.可以通过修改tomcat/bin/ca ...

  9. ThinkPHP框架之验证码

    Think\Verify类可以支持验证码的生成和验证功能. 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify->entry(); 上面 ...

  10. sqlserver多文件组数据库的备份和还原实战

    数据库文件过大时就要进行数据分区,就是讲数据库拆分到多个文件组中.已方便数据文件管理,提高数据库的读取效能,多文件组如何进行数据库的备份和还原呢,今天主要做多文件组数据库的备份和还原实验. 第一步 创 ...