APP 自动化框架设计思路分享
APP自动化框架设计分享
欢迎一起交流,一起进步 可以关注我的微信公众号:扫描二维码关注哦:
点我关注
欢迎关注我的抖音号,会定时更新视频和直播:
抖音搜索:“测开星球”
框架需要解决的问题:
• 渠道包->多渠道包核心用例自动化
• 多设备覆盖安装,安装卸载更新等测试
• 多设备核心用例适配测试
• 验证主要页面(包括webview)检查是否加载成功
• 离线主流程覆盖
• 一些重复性操作可以通过框架简单实现
框架目标定位:
• 让Tester无需编写代码 通过简单数据驱动方式实现通用简单的自动化
• 跟开发约定一些UI上的元素标准和规范建立自动化规范流程化
• 结合实时抓包组件和性能监控插件方便分节点定位问题
• 自动异常捕获,CrashLog收集汇总等等
• 每一步都有Log、截图(甚至做到录制)方便复现问题
• 实行单台服务器多设备并行 根据配置不同机型执行不同case 并统一会汇总报告
关于自动化的一些疑问:
—>自动化的时候用例错误了怎么办?下面的会继续跑么?
当发生错误时会优先检查检查设备状态,网络状态当用例发生错误时(如果是webview会等待20秒刷新页面)回到上一步等待30s切换回来重复执行,如果还是发生错误会在报告说明,继续执行下一条用例
—>我们怎么去用这个东西呢?数据我们怎么去准备?数据准备麻烦么?
当测试人员有自动化测试需求时只需要配置好数据模板在网页选择执行的机器点击开始运行即可数据准备:数据准备为每一个自动化测试工程师的难题,因为每一步动作都需要用uiautomatorviewer 或者hierarchyviewer 去一个一个找元素
针对这个我们解决方法是:跟开发约定界面控件命名规范,元素控件值按我们约定的格式命名 只需打开app找到需要点击控件名称的首字母填入文档中即可(当然这种办法只会解决部分问题)
自动化跑完之后如果发生异常了怎么办?自动化跑完之后发生异常我们如何分析?
根据目前设计的框架,三种定位问题的方法:
>1,第一是跑自动化时会实时抓取Devices设备所有logcat日志并解析异常Log(包括crash日志)>2,第二是跑自动化时会实时截取实时app发送的所有API的内容以及状态方便定位区分前后端问题>3,第三是跑自动化时会实时截图甚至可以录制视频,还有测试人员自定义的一些检查点作为主要的定位路径
关于UI控件命名规范::
跟开发约定界面控件命名规范,元素控件值按我们约定的格式命名 这样可以提高自动化效率,以及减轻版本迭代自动化工作量!
以下示例:
以页面为整体 控件为类型 各类型的控件拼音首字母为控件标识 统一格式为:应用缩写_页面名称_控件类型_控件首字母
button格式:比如主页的搜索按钮 控件的格式为:TT_Home_ button_SsInput 格式:比如登录页面用户名输入框:TT_Login_input_Zhimage格式:比如推荐页面图片“每日十首”:TT_ Recommend_ image_mrss
这样的好处就是我们不需要用uiautomatorviewer 或者hierarchyviewer 去一个一个找元素 碰到需要点击的元素控件只需要根据页面上的控件首字母,就算页面改动我们也只需要对着app上面在模板内改动的部分修改一下数据即可~
流程图:
用户需要执行:
根据元素设计case
制定预期
选择机型并开始运行
启动log:
环境初始化:
Appium 启动封装起来,在每次启动前 检查初始化端口以及adb进程 再分配 Port 和BootPortAndroidDevices Capabilities 里面四个可变量参数可以通过adb取到(device 列表和对应的型号放在Map内)
设计一个DriverModel
package org.alimusic.driver;public class DriverModel {private String device="Android";private String deviceName;private String platformName="Android";private String platformVersion;private String appPackage="com.xxx.ttpod";private String appActivity="com.xxx.ttpod.EntryActivity";public String getDevice() {return device;}public void setDevice(String device) {this.device = device;}public String getDeviceName() {return deviceName;}public void setDeviceName(String deviceName) {this.deviceName = deviceName;}public String getPlatformName() {return platformName;}public void setPlatformName(String platformName) {this.platformName = platformName;}public String getPlatformVersion() {return platformVersion;}public void setPlatformVersion(String platformVersion) {this.platformVersion = platformVersion;}public String getAppPackage() {return appPackage;}public void setAppPackage(String appPackage) {this.appPackage = appPackage;}public String getAppActivity() {return appActivity;}public void setAppActivity(String appActivity) {this.appActivity = appActivity;}public DriverModel(String device, String deviceName,String platformName,String platformVersion) {super();this.device = device;this.deviceName = deviceName;this.platformName = platformName;this.platformVersion = platformVersion;}public DriverModel(String deviceName,String platformVersion) {super();this.deviceName = deviceName;this.platformVersion = platformVersion;}public DriverModel() {super();// TODO Auto-generated constructor stub}
}
Factory(三种情况):
package org.alimusic.driver;import io.appium.java_client.android.AndroidDriver;/*** * @author testly**/
public class DrvierSetting {public abstract class Factory{public abstract DriverModel createDriverModel();public abstract DriverModel createDriverModel(String device,String deviceName,String platformVersion,String platformName);}public static class SimpleFactory{public DriverModel createDriverModel() {DriverModel model = new DriverModel();return model;}public static DriverModel createDriverModel(String device,String deviceName,String platformVersion,String platformName){DriverModel model = new DriverModel(device,deviceName,platformVersion,platformName);AndroidDriver driver = DrvierStart.Start(model);return model;}public static DriverModel createDriverModel(String deviceName,String platformVersion){DriverModel model = new DriverModel(deviceName,platformVersion);return model;}}
}
Derices StartUp
public static AndroidDriver Start(String devicename,String ip, int port){ AndroidDriver driver = null;String platformName = GetEnvironmentVariable.DevicesVersion(devicename);DriverModel model = SimpleFactory.createDriverModel(devicename,platformName);DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("device",model.getDevice());capabilities.setCapability("deviceName",model.getDeviceName()); capabilities.setCapability("platformVersion", model.getDeviceName()); capabilities.setCapability("platformName",model.getDeviceName()); capabilities.setCapability("appPackage", model.getAppPackage()); capabilities.setCapability("appActivity", model.getAppActivity());try {driver = new AndroidDriver(new URL("http://”+ip+“:“+port+“/wd/hub"), capabilities);} catch (MalformedURLException e) {System.out.println("connection error!");e.printStackTrace();}return driver;}
数据配置定制:
前台网页 会根据用户选择配置去自动设置配置文件
检查:
检查是我认为最难!~目前我的设想是:1,用户自定义检查
2,网络传输层检查(自动化时实时抓包)
3,logcat实时抓取异常log(区粉设备)
4,截图录制、系统抛错,图片解析对比等
通过遍历文件内的数据文件的一条数据既是一个动作和检查点
欢迎一起交流,一起进步 可以关注我的微信公众号:扫描二维码关注哦:
APP 自动化框架设计思路分享相关推荐
- 【App自动化框架搭建流程及其思路】
App自动化框架搭建流程 之前公司我所在的业务是关于sdk的一些业务,为了缓解我们sdk组的功能测试大量重复性业务.我搭建了一套App自动化框架,现已投入日常的使用.这篇文章简单的介绍下我这个App自 ...
- 对接接口文档_接口自动化测试框架设计思路
接口自动化测试--框架设计思路 1 前言 之前文章跟大家分享了一下自己在接口自动化测试中进行测试准备的一些相关知识点,接下来本篇文章详细分享一下接口自动化框架设计的思路总结,希望能对初次探索接口自动化 ...
- NB-IOT实现万物互联设计思路分享 (从硬件到单片机到云平台)
NB-IOT实现万物互联 产品设计思路分享 NB-IOT窄带物联网(Narrow Band Internet of Things, NB-IoT),是一种专为万物互联打造的蜂窝网络连接技术.NB-IO ...
- 基于 Koa 的微服务 Node.js 框架设计思路与简单实现
大家好,我是前端点线面,毕业于华中科技大学,非科班出身的一枚新时代农民工,现在是百度前端研发工程师,著有<前端百题斩>.数十篇学习思维导图(go.React.Redux.Vue.Vuex. ...
- 4行代码,让app自动化框架支持 webview 混合应用操作
移动端 app 自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行.比较典型的是经典的 Python 框架 uiautomator2, 这个框架简单好用,没有 appium 那样复 ...
- Java接口自动化框架系列07:Web接口自动化测试框架设计思路
1.Java web接口自动化框架 框架名称:Java+Maven+httpClients+TestNg+Allure (因本次只讲解java部分,未包括git和jenkins,如果是包括git和je ...
- 接口自动化实战设计思路,想法及疑问(一)
各位粉丝朋友们大家好,最近在学习研究接口自动化测试时,在设计思路和实践过程中,碰到了很多问题,再不断的优化和调整,这过程中产生了很多疑问和不解,并与很多测试的朋友进行交流想法,但是各自想法意见偏差较大 ...
- APP自动化简单理解(在python中实现简单的app自动化框架)
一.app自动化环境搭建 1.安装jdk及配置jdk的环境变量 app底层是c语言,应用层是java,所以需要jdk 2.安装SDK,配置android SDK环境 3.安装模拟器 4.下载安装App ...
- java orm设计_大搜车orm框架设计思路
orm基本概念 ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和 ...
- 统一监控报警平台的架构设计思路分享
本文以全局视角,从一个监控系统的设计开始,为我们展示了一个高性能的监控系统应该如何架构和分层.细观现在的服务架构设计,越来越强调模块化.异步处理.分层设计.低耦合.高内聚等等.今天的文章为我们展示了一 ...
最新文章
- Pbsim模拟器的使用
- Linux 问题解决 :/lib/systemd/systemd-journald 占用内存过高
- 橱柜高度与身高对照表_橱柜高度与身高公式是什么
- java 参数传递_java中方法的参数传递机制
- html如何复用其它页面,编写可以复用的 HTML 模板
- imagecomposition工程分析
- Android颜色渐变的分隔线(ListView)
- java时间格式化yyyy
- CUDA编成:从GPU的物理体系结构到逻辑结构
- 多道程序设计模拟——C语言实现
- jmail组件 java,分享Jmail发送邮件工具类
- magic4升级鸿蒙系统,Magic UI 4.0将于9月中旬内测招募 后续可升鸿蒙系统
- 关于ubuntu 系统chromium浏览器启用AdobeFlashPlayer
- canvas画正六边形
- Android急速模拟器Genymotion安装指北
- python3计算列表长度
- c#中如何进行com口操作?
- devC++代码格式化对齐的快捷键
- Google Android 开发者网站更新了
- 【毕业设计】答 辩 技 巧 一(以一个过来人的身份,祝各位答辩 过 过 过)