热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何降低自动化测试成本?

背景设计思路

背景

UI自动化是提高测试效率不可少的手段。 闲鱼UI自动化之前的情况是脚本维护成本较高,因此减少脚本投入的成本作为提高自动化效率的第一步。

设计思路

1、monkey大家都了解,毫无顺序的随机乱点,可以用来测app的稳定性,如果能记录monkey点击的元素,那就相当于有了自动化脚本里面的操作步骤

2、有了操作步骤后,我们还需要预期结果才能算一条完整的用例,如果能把点击后,界面的元素记录下来,我们就可以作为预期结果来使用

3、然并卵,这样的脚本根本没用,范围不可控,操作路径又太长,没有mock服务端数据脚本根本跑不起来

4、改进策略,脚本按页面的维度来设计,只针对当前页面点击,跳出去后返回到当前页面继续点击下一个元素

具体实现

0 1

遍历实现

获取页面元素

1、页面元素获取,使用appium自带方法getpagesource获取

2、 获取界面元素的同时需要获取页面名称,作为唯一标识,Android端能获取activity,ios只能采用hook方式拼接页面名称

3、将页面元素+页面名称记录

页面操作

1、页面判断,不在当前页面,或者appcrash等异常,重启app回到该页面,或者back会页面
2、读取元素包括,id,name,bounds,封装使用id,xpath点击方式,找不到id,就用xpath点击,保底方法
3、过滤不可点击的元素,能区分出来不可点击的元素(本地有记录,但是不对它进行点击)
4、元素属性文件解析,直接生成可点击的属性,如id,xpath等
5、页面元素点击完后,判断是否要滑动屏幕从新加载元素,页面保持不变

记录操作步骤

1、获取到的页面元素是xml格式的,本地不做转换,保存在本地时就保留xml格式,以元素名称命令
2、调用手机截屏操作,截图保存本地,以点击元素命名
3、保留一个文件一直记录操作步骤,从遍历开始到结束一直记录
4、缓存记录已点击的元素,防止重复点击

异常处理

1、app异常
2、跳出app
3、手机断开,服务断开

目前开源的框架appcrawler已支持这些功能,只需要针对操作步骤解析生成脚本就行,如果有资源可以自己重新做一套遍历框架。

如何降低自动化测试成本?

0 2

脚本处理&归类

脚本按页面划分

1、如果按业务划分脚本,脚本操作步骤会很长,没有mock数据支持,脚本成功率很低

2、记录 页面名称-页面可点击元素--点击后页面元素(或者页面截图,可以用图片识别能力来做结果比对)

3、细分按模块,每个模块脚本归为一类,目前我采用统一标识moduleName值,1代码模块1,2代表模块2,如果脚本更新,只需要把模块对应的moduleName值变更下(每次脚本更新,之前的脚本保留,新的脚本改下模块值就可以)

脚本存入数据库

1、数据存入mongdb,对应关系表如下

如何降低自动化测试成本?

0 3

脚本执行&报告生成

执行框架

基于appium框架,完善数据驱动的自动化执行框架

封装获取设备的方法

1、获取本地连接的设备,设备号,带入appium启动app
2、带入设备号,带入appium启动app

数据库脚本读取

1、mongdb链接,读取

封装case执行类

1、 数据驱动执行,指定casename,预期结果,操作步骤,截图等
2、 封装连接数据库方法,获取数据库页面元素,存入数组,读取数组数据作为脚本,每一个元素作为一个脚本执行,对应的元素执行失败,不影响其它元素执行
3、统一的去除弹框,针对app登录方法

报告生成

1、报告展示(成功脚本,失败脚本,操作步骤截图,手机日志)

效果

目前采用遍历的方式,我们脚本从原有的120个增加到247个,通过率提高到98%左右,覆盖11个主干页面,每次版本,纯手工更新脚本需要半天时间,现在1小时内可以完成更新,目前发现有效问题15个。

如何降低自动化测试成本?

畅想

通过遍历生成脚本,使用成本不高,每次在新版本发布后,可以针对对修改过的页面进行遍历,收集更新脚本,目前最大的工作量是脚本需要筛选一次,将部分动态变化的脚本去掉,运行更加稳定。每次版本更新发布,自动遍历修改过的页面,自动更新脚本,零成本脚本生成到运行出结果。

你可能还喜欢

如何降低自动化测试成本?

闲鱼技术精选“推荐书单”,拿走不谢

如何降低自动化测试成本?

已开源|2亿用户背后的Flutter应用框架Fish Redux

如何降低自动化测试成本?

重磅系列文章|“UI2Code”智能生成Flutter代码

如何降低自动化测试成本?

老代码多=过度耦合=if else?阿里工程师这么捋直老代码

如何降低自动化测试成本?


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
author-avatar
手机用户2502892641
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有