App遍历探讨(含源代码)
好像好久没有更新博客了,之前写的几篇博客关于自动化的框架的居多,其中好多博友向我提了好多问题,我没有回复。这里给博友道个歉~ ~ 总结几点原因如下:
1.我一般很少上博客,看到了都是好几天之前的问题
2.比较懒~ ~这是主要原因,以后会更改!
3.框架都是比较老了,现在已经对自动化单元测试框架,做了更高级的封装。(报告更加优美,功能也增加了:比如错误截图,后台异常搜集,可重复多次执行,错误录屏,后台crash和anr异常· 捕捉)
4.打算最近重新把这一套完整的东西,放在github上。
目前从事的是APP测试,所以封装了minicap快速截图、监听器处理异常弹框(广告)、图形识别、OCR技术等公共方法与appium完美结合,关于图形识别和OCR的作用是明显的...当前这一套东西同样适应用web端。
目前我们的所有测试结果是放在平台上的。包括功能、性能、稳定性、兼容性测试等....
这一块,我改天专门讲讲我在封装时的一些小心得.....
今天,我们的主题是遍历APP!!!
进入主题,为什么要研究这个玩意?
话说做app自动化测试或者功能测试对monkey这个玩意应该不陌生吗,在压力测试中经常跑这个然后搜集crash和anr信息。但是monkey的缺点是很明显:
1.没有目的性,遍历效果比较差,一般很难比较系统的遍历玩app的大部分页面!!
2.经常没事还把你wifi给断了,那么接下来的monkey是无意义的,有些app没有网就是废的~
3.可能陷入到一种死循环中,比如A-B-C-D-C-B-A 根本出不来,这时候如果看见了,可能狂按返回键帮他跳出整个死循环...
所以我也改造了monkey了 某种程度上让他看起来稍微智能和高效点,整个有感兴趣的博友可以留言讨论。。。
好了,说了这么多,我们总想着如果有一种算法大致上能像人一样点完app的上所有按钮,然后在点击过程中收集一些性能信息比如耗电、cpu、上下行流量...更重要的是搜集一些crash和anr信息,对于一些比较固定且内容变化不大的app还可以进行图形对比,判断不同版本对应不同页面的截图差异!等等
其实,早就有这个东西了像百度的测试的那个所谓的深度遍历,还有其他的各种云的遍历,但是但是,效率是相当的差,因为不支持定制和一些过滤规则,根本遍历不了几个按钮就结束或者陷入死循环...而且tm的还要钱...我是试用了下,懒得再用了!然后再testhome上看见了一个大神写的app遍历:https://testerhome.com/search?q=AppCrawler
感觉想法和思路很好!我非常佩服,但是我下载了下来用来遍历我们的这个比较比较变态的app,效率和遍历深度很差....这里没有其他的意思(针对我的这个app),实话实说!原因呢可能有一下几点:
1.我们的这个app广告特别的多,不时弹出个广告,让你措手不及,这个不好处理!
2.过滤规则我可能没太理解怎么用!
3.有死循环出现。比如在A用户的个人主页面点击进了B的个人profile然后进入C的个人profile,反正一直在profile页面遍历!
还有一些缺点:
1.没有脱离appium,运行脚本建立在appium的基础上
2.速度有点慢...
那么,我也想写个简单的遍历脚本(我希望他不断不简单),当前可能不能和这位大神的AppCrawler相比,但是也有我的一些小优点~~
1.用的自生长的深度优先遍历算法
在一个初始页面获取所有自定义规则的element,然后点击其中的一个element,跳转或者不跳转到另外一个page,再次获取次也么的合法element添加路径和图的邻边...一直这样递归一直到一个page
无法获取新的element或到达设定的深度或设定的时间终止遍历!!如果不太了解可以看下深度优先遍历算法。不过我们的这个图和邻边是单向的。
2.脱离了appium,利用appium的真正实现原理封装了针对于uiautomator2-server的方法,只要装有这个apk就行,省去了appium的安装成本和排除坑爹的appium错误的错误成本。
3.同样支持规则引导
4.目前自认为还可以的遍历效率和深度(对我这个app,当前还要不断增加逻辑和优化,这是我写这篇博客的主要目的!)
5.遍历完生成思维导图和遍历截图(用jsmind)
....
其他的慢慢的再加上,我只想让他遍历高效点和准确点,工程我已经放在github上,写这篇博客的目的就是想引入这么个概念,然后想让感兴趣的一些拓展或修改这个框架,不管是过滤规则还是算法
我相信只有大家共同来想好怎么做这个工程才能做好!!!
项目github的地址:https://github.com/zhoudaqiang/appCrawler
最后,写的时候比较随意主要是让他能运行起来。如果大家对这个框架不太了解或者对其中的任何思想不明白可以留言加QQ详聊。希望能有人一起想好做好这个遍历工程,至少能比monkey高效点~
App遍历探讨(含源代码)的更多相关文章
- C#用户自定义控件(含源代码)-透明文本框
using System; using System.Collections; using System.ComponentModel; using System.Drawing; using Sys ...
- 用C#来开发CAD插件,含源代码
转自原文 用C#来开发CAD插件,含源代码 CAD插件看起来很神秘,其实一个合格码农经过几天就能快速掌握.没什么秘密,开发CAD插件和winform一样简单学几个类库用法就是(只是太多人不喜欢知识分享 ...
- 2018-8-9-win10-uwp-装机必备应用-含源代码
title author date CreateTime categories win10 uwp 装机必备应用 含源代码 lindexi 2018-8-9 9:7:31 +0800 2018-8-9 ...
- 利用层序遍历(含空节点)和中序遍历重建二叉树 python
给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...
- 数据结构系列之2-3-4树的插入、查找、删除和遍历完整版源代码实现与分析(dart语言实现)
本文属于原创,转载请注明来源. 在上一篇博文中,详细介绍了2-3树的操作(具体地址:https://www.cnblogs.com/outerspace/p/10861488.html),那么对于更多 ...
- arcgis api for js入门开发系列八聚合效果(含源代码)
上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...
- arcgis api for js入门开发系列七图层控制(含源代码)
上一篇实现了demo的地图分屏对比模块,本篇新增图层控制模块,截图如下(源代码见文章底部): 图层控制模块实现的思路如下: 1.在地图配置文件map.config.js里面配置图层目录树节点信息,作为 ...
- arcgis api for js入门开发系列六地图分屏对比(含源代码)
上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...
- arcgis api for js入门开发系列五地图态势标绘(含源代码)
上一篇实现了demo的地图查询功能,本篇新增地图态势标绘模块,截图如下: 本篇核心的在于调用API的Draw工具:https://developers.arcgis.com/javascript/3/ ...
随机推荐
- 【Java基础】【01初识Java】
01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代 ...
- mongos-sharding连接池配置
ShardingTaskExecutorPoolMaxSize Maximum number of outbound connections each TaskExecutor connection ...
- SpringCloud(2) 服务注册和发现Eureka Server
一.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于REST的服务,用于定位服务,以实现云端中间层服务发现 ...
- Smobiler 4.4 更新预告 Part 2(Smobiler能让你在Visual Studio上开发APP)
Hello Everybody,在Smobiler 4.4中,也为大家带来了新增功能和插件(重点,敲黑板). 新增功能: 1, 企业认证用户可设置路由(即客户端可根据不同的IP地址访问不同的服务器组) ...
- MVC+angularjs
angularjs可以解决开发人员不擅长HTML的问题,采用模块化配置,但是不支持样式的微调和修改 angularjs+MVC开发的协同办公平台,贴下图 编辑页面+附件 列表页 一个页面涉及另一个子表 ...
- PHP中的Traits用法详解
PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法.php的Traits和Go语言的组合功能有点类似, 通过在类中使用use关键字声明要组合的Tr ...
- C++系列总结——volatile关键字
前言 volatile的中文意思是易变的,但这个易变和mutable是不同的含义.mutable是指编译期的易变,根据语法编译器默认不会让我们修改某些变量,但是加上mutable让编译器知道我们要修改 ...
- Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)
上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页 了解了LigerUI 中Grid的基本用法 现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...
- TS学习随笔(六)->断言
now,我们来看一看TS里面的断言,听起来很上档次啊,其实看完你就发出惊叹,这就是断言啊 类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型 语法 <类型>值 ...
- 用WijmoJS搭建您的前端Web应用 —— React
前文回顾 在本系列文章中,我们已经介绍了Angular和Vue框架下 WijmoJS 的玩法. 而今天,我们将展示如何使用 WijmoJS 来搭建一款具备独特创新性.出色性能和简单代码逻辑的 Reac ...