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/ ...
随机推荐
- Servlet+Tomcat总结
Tomcat的缺省端口是多少,怎么修改 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml ...
- 痞子衡嵌入式:第一本Git命令教程(4)- 转移(add/rm/mv)
今天是Git系列课程第四课,上一课我们在Git空间里做了一些文件改动并且知道了如何利用Git查看这些变动,今天痞子衡要讲的是将这些变动提交到Git本地仓库前的准备工作. Git仓库目录下的文件改动操作 ...
- Hibernate框架笔记03表操作多对多配置
目录 1. 数据库表与表之间的关系 1.1 一对多关系 1.2 多对多关系 1.3 一对一关系[了解] 2. Hibernate的一对多关联映射 2.1 创建一个项目,引入相关jar包 2.2. 创建 ...
- Softmax函数模型介绍
Softmax在机器学习中有非常广泛的应用,但是刚刚接触机器学习的人可能对Softmax的特点以及好处并不理解,其实你了解了以后就会发现,Softmax计算简单,效果显著,非常好用. 我们先来直观看一 ...
- JS 无限长form表单提交
1 简介 开发时候,总会遇到根据后台传的变量{组件数}来动态渲染组件的情况,比如后台传命令要绑定10个父子关系,则前台展开十个input组件,后台决定绑定5个福字关系,则前台展开5个input组件.再 ...
- 基本数据类型 int float str
一.数字型1.整型 int======================================基本使用======================================1.用途 用来 ...
- cookie特殊字符在游览器被转义
环境:vue2.x axios 1.如果只是前端自己用,那么可以用 encodeURIComponent(string) 存 ,用decodeURIComponent(string)取. 2.遇到一种 ...
- 前端项目git操作命名规范和协作开发流程
前言 一个项目的分支,一般包括主干 master 和 开发分支 dev,以及若干临时分支 分支命名规范 分支: 命名: 说明: 主分支 master 主分支,所有提供给用户使用的正式版本,都在这个主分 ...
- Selenium自动化测试 Verify
Selenium 找了很久,没有发现有verify的方法,可是,有个时候要的是确认,而不是直接断言, 当然要在运行结束后能够得到确认的结果,于是写了下面的代码,给大家分享. import ja ...
- ios屏幕怎么投屏到电脑显示器
iphone在国内一直都很受欢迎,为什么这么受欢迎呢?其实苹果手机操作系统非常的新颖,让人对手机有了重新的认识.但是ios屏幕怎么投屏到电脑显示器.感兴趣的一起阅读下面的内容吧! 使用工具: 苹果手机 ...