在ui自动化测试过程中,目前存在最大的缺陷就是如果产品的ui或者结构改了那么这个项目进行的自动化测试脚本可能要面临全面维护。这也是目前ui自动化面临的很让人崩溃的事情。因此现在很多互联网产品项目发现ui自动化在测试中的价值越来越小,因为互联网产品的迭代太快,自动化测试组往往刚刚完善了自动化脚本,项目也跑起来了。突然来了项目大改版,崩溃啊,这意味这代码要重新进行维护,而且维护成本很高。可能维护完了产品需求又改了,往往跟不上脚步。因此我UI自动化比较适合以下两种情况的项目:1.产品原型趋于稳定阶段,2.手机固件项目(因为手机固件是在原生安卓上修改的,原生安卓的的系统构架通常短时间内很少会做重大改版,即使小改动也是一年一次)。
以前我们的自动化项目都是趋于关键字驱动,数据和代码是揉杂在一起的。我们写自动化测试用例的流程大概是这样的(以魅族社区发帖举例子只走流程不包括断言):点击发帖按钮—输入标题—输入正文—点击发送按钮
代码如下:
UiObject write_title=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/et_write_title"));

//assertTrue("write_title focusable is false", write_title.isFocused()==true);
Configurator config = Configurator.getInstance();
config.setKeyInjectionDelay(40);
write_title.setText(Utf7ImeHelper.e(“帖子标题”));
sleep(2000);
UiObject richet_post=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/richet_posts"));
richet_post.click();
sleep(2000);
//assertTrue("richet_post focusable is false", richet_post.isFocused()==true);
richet_post.setText(Utf7ImeHelper.e(“帖子正文”));
config.setKeyInjectionDelay(0);
sleep(2000);
UiObject send_post=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/action_send_posts"));
send_post.clickAndWaitForNewWindow(3000);
sleep(3000);

这样测试流程走通了,但是如过遇到以下问题1.resourceId改变了或者控件名称改变了(uiautomator也可以用控件名称定位控件)这就意味着我需要在代码中修改这些控件资源id或者name了。2.原始流程是A-B-C这种固定流程,万一流程中添加了F步骤变成A-F-B-C了,意味着在中间要插入一段代码,在无数行代码中找到这段代码然后插入,这样一定是很麻烦的而且还要调试。3.如果这个功能不要了意味着这些幸幸苦苦写的代码就白写了。相信以上问题都是大家在自动化测试实践过程中所到很蛋疼的问题。这也是为什么现阶段大家越来越对ui自动化持怀疑态度了,进而转向接口自动化的原因,因为随着产品的持续迭代维护成本越来越高。
那么为了解决以上问题,所以现在又出现了一种趋于数据驱动的自动化模型,就是将测试代码和测试数据分开来,做到代码和数据独自开来这样每次迭代我们只需要修改测试数据和少量测试代码就能对自动化测试脚本进行很好维护,同时能减少代码量,通过对方法的二次封装可以简化自动化测试的难度,使新手能更快的入手。整个设计思路为:将测试控件的资源id或者name和操作类型保存在excel表格或者数据库中,然后代码去读取excel表格中的控件资源数据作为参数传给操作代码。最后通过判断操作类型做出相应的操作,以上实现方法以魅族社区发帖步骤为例:
1.现在用excel建立一个管理测试数据的表格

2.获取表格中的资源id和操作方式数据主要方法如下:

public List<String> readXls(int rowNun)throw Exception{

String path="E:/新建 Microsoft Excel 97-2003 工作表.xls"
File file = new File(path);
InputStream is =new FileInputStream(
//默认第一个表格
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(rowNun);
int minColIx=row.getFirstCellNum();
int maxColIx=row.getLastCellNum();
List<String> result=new ArrayList<String>();
//过滤掉第一列和第二列数据
for(int collx=minColIx+2;collx<maxColIx;collx++){
HSSFCell cell=row.getCell(collx);
if(cell==null){continue;}result.add(ExcelUtils.getStringVal(cell));   }return result;

}
3.获取到数据后供uiautomator定位控件方法调用,接下来我们对获取的数据进行调用操作:
/*
通过判断操作类型来调用不同的用例方案
rowNum 读取数去行数
**/
public void testUI(int rowNum)throw Exception{

//还可以定义其他类型的操作(如:长按等)在里面这里只举例两种
if((String)this.readXls(rowNum).get(1).equals("单击")){
UiObject click=new UiObject(new UiSelector().resourceId((String)this.readXls(rowNum).get(0)));
richet_post.click();
sleep(2000);}
else if((String)this.readXls(rowNum).get(1).equals("输入")){
UiObject editText=new UiObject(new UiSelector().resourceId((String)this.readXls(rowNum).get(1)));
Configurator config = Configurator.getInstance();
config.setKeyInjectionDelay(40);
search_movies1.setText(Utf7ImeHelper.e((String)this.readXls(rowNum).get(2)));
config.setKeyInjectionDelay(0);}}

这样所有的工作都准备好了,我们设计测试用例定位控件操作时只要按照逻辑重复的调testUI(int rowNum)方法就行,只需修改rowNum参数,它会按照操作类型自动帮你调不同类型的操作。而且可以发现测试数据和代码都分离出来了。如果改了ui界面控件我们只需在excel表格中修改测试数据就行,就算项目大修改代码维护起来工作量也不是很大,而且操作逻辑上很灵活。(未完待续)。

关于数据型驱动自动化测试实现相关推荐

  1. 数据型驱动风控有什么内容?从蚂蚁借呗与花呗谈起~

    早前,在知识星球平台上提到一个借呗跟芝麻分的问题,内容如下: 去年年末因为蚂蚁暂缓上市,蚂蚁再上热搜,对于阿里最重要的蚂蚁集团其相关的业务跟产品有哪些内容,今天我们从一个同学的问题谈起. 一.从借呗与 ...

  2. 滴滴数据科学家分享:数据如何驱动业务增长

    分析师的商业价值 直觉驱动的困境我是统计科班出身,对数据较为亲近,毕业后便在互联网开始从事机器学习与数据分析工作.几年观察下来,发现许多业务虽然都会引入算法工程与分析师等这些数据职能,但是大部分的决策 ...

  3. 【软件构造】第三章第三节 抽象数据型(ADT)

    第三章第三节 抽象数据型(ADT) 3-1节研究了"数据类型"及其特性 ; 3-2节研究了方法和操作的"规约"及其特性:在本节中,我们将数据和操作复合起来,构成 ...

  4. 神策数据胡士文:数据智能驱动业务实践

    本文根据神策数据算法工程师胡士文,以<数据智能驱动业务实践>为主题的演讲整理而成,将为您重点介绍以下内容: 依据场景解读如何应用数据智能? Case 1:如何通过机器学习,促进付费用户识别 ...

  5. 如何成为数据型产品经理

    产品经理的概念在不断泛化.近些年来,随着互联网行业的发展,越来越多的企业意识到了大数据和精细化运营的重要性,为了更好地挖掘数据的价值,指导业务的优化和发展,数据产品经理应运而生,他们基于数据分析方法发 ...

  6. 数据监测驱动下的信息流广告优化

    信息流广告是什么 "今日头条和百度必有一战",相信不少的互联网人在过去几个月都听到过类似的断言.定位于信息分发平台的今日头条和主营搜索业务的百度会产生如此大的利益冲突,最核心的点其 ...

  7. 美的微晶冰箱以云数据为驱动,实现智能保鲜冰箱智慧新升级

    美的微晶冰箱以云数据为驱动,实现智能保鲜冰箱智慧新升级 近日,美的微晶冰箱将微晶技术升级为"智慧微晶".美的微晶冰箱搭载V-Tech智能云保鲜技术,以更多更全的OTA数据算法,实现 ...

  8. 阿里云大数据型实例规格族d1配置性能详解

    阿里云大数据型实例规格族d1配置性能CPU.内存.适用场景.d1实例规格族,InstanceTypes分享大数据型实例规格族d1实例详解: 大数据型实例规格族d1配置特性 I/O优化实例 仅支持SSD ...

  9. Friday BI Fly | 2016年12月02日晚8点半微信直播交流 地理大数据如何驱动智慧选址第42场...

    公告 周五BI飞起来,每周一个主题,一场跟数据有关的行业.工具.技术的交流盛宴,锁定在每周五晚20:30,不见不散! 本期分享内容 1.选址的本质与实际工作中的思考角度. 2.目前主流选址使用的数据有 ...

最新文章

  1. gin redis 链接不上_内存优化,Redis是如何实现的!
  2. staticextension 上提供值时引发了异常_干!一张图整理了 Python 所有内置异常
  3. 《大数据》2015年第2期“专题”——关于大数据交易核心法律问题 —— 数据所有权的探讨及建议...
  4. GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
  5. efcore 有值才加where_lol手游怎么加好友 日服英雄联盟手游邀请好友一起玩方法[多图]...
  6. anyview下载java,下载AnyviewMobile Games Java - 596763 - ebook txt Anyview | mobile9
  7. Mybatis-Plus代码生成器初体验
  8. 十步教你成为数据科学家!
  9. java导出excel_Java导出excel【复制粘贴直接用】
  10. c#: Newtonsoft.Json 高级用法二(jsonpath)
  11. app测试用例考虑点
  12. virt viewer Usbredir USB重定向
  13. python地震数据处理_NumPy实例:地震数据的统计分析
  14. 计算机硬盘容量减少修复,硬盘容量丢失的修复方法
  15. Modbus协议中文pdf免费下载地址
  16. 手机5款令人爱不释手的APP 好用到爆
  17. 微信登陆失败redirect_uri 域名与后台配置不一致 10003(thinkphp)
  18. HTTP协议5之代理--转
  19. 一分钟了解什么是代理ip和api接口
  20. Swin Transformer理论讲解

热门文章

  1. sap客户主数据bapi_【SD系列】SAP SD模块-创建供应商主数据BAPI
  2. rpg制作大师2003_RPG制作大师MV 我们一起做游戏(十五)
  3. python 迭代器 生成器_Python迭代器和生成器
  4. c#modbus tcp通讯助手开源_RS485和Modbus知识点汇总
  5. python flask框架是什么_Python三大web框架分别是什么 哪个更好
  6. sendgrid java_java – SendGrid电子邮件API,发送电子邮件附件
  7. python的根号运算_python怎么表示根号运算
  8. 如何编写wenpack插件
  9. 质性研究工具_MAXQDA在质性数据分析中的使用——免费的中文在线研讨会!
  10. 评课用计算器计算机,《用计算器计算》教学反思