结合开源项目maxim和appetizerio
定制化app自动遍历方案
并结合Appetizer HTML 报告模板输出测试报告模板
整体思路
在之前的文章中分别介绍了maxim和appetizerio
能不能结合起来并定制化输出测试报告呢?
针对不同的app可能稍有区别
- 自动遍历前的准备:删除一些缓存数据,上传apk插桩并安装插桩包
- maxim执行前的准备:删除maxim的缓存数据,上传maxim jar包,安装adbkeyboard,上传maxim策略配置文件
- 执行maxim
- 分析插桩数据并下载
- 整合数据,并定制化输出测试报告
- jenkins集成并添加附件
AppetizerIO 与 Maxim
.
├── README.md
├── api # 未使用
│ ├── MonkeyApi.py
│ └── test.py
├── appetizer
│ ├── __init__.py
│ ├── .access_token
│ ├── apkdump.js # 用于解析apk中的androidmanifest.xml获取包信息)
│ ├── config.json # 相关api
│ ├── insights.py # 修改后的insights文件,支持外部传参调用
│ ├── insights_bkp.py # 原insights备份
│ ├── report.py
│ ├── requirements.report.txt
│ ├── requirements.txt
│ └── user_info.json # 新增,避免token失效
├── attachments_log # 用于jenkins发送邮件中的附件
├── css # 测试报告css文件
│ ├── bootstrap.min.css
│ └── dataTables.bootstrap.css
├── data
│ ├── data.json # 整合后的分析报告,包含app的崩溃日志等
│ └── maxim.log # maxim执行的log
│ └── xx.log # 其他等
├── fonts # 测试报告字体文件
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ └── glyphicons-halflings-regular.woff2
├── history_log # 执行前把上一次的data中的文件打包留存
│ ├── data_log_20200727122022.zip
│ └── data_log_20200730110208.zip
├── index.html # 测试报告index
├── js # 测试报告js文件
│ ├── bootstrap.min.js
│ ├── dataTables.bootstrap.js
│ ├── jquery.dataTables.min.js
│ ├── jquery.min.js
│ └── json3.js
├── max_config # maxim需要的策略配置文件
│ ├── apps.strings
│ ├── awl.strings
│ ├── max.config
│ ├── max.strings
│ ├── max.widget.black
│ ├── max.xpath.actions
│ └── max.xpath.selector
├── max_package # maxim执行需要的apk和jar包
│ ├── ADBKeyboard.apk
│ ├── framework.jar
│ └── monkey.jar
├── maxim.py # 主入口
├── test_apk_appetizer # 将待测文件放入该文件夹
└── utils # 相关工具包
├── __init__.py
├── data_json_update.py # 将项目中用到的日志处理后并更新到appetizer分析日志中,合并生成测试报告
├── log_error_process.py # 项目中用到的log日志处理,可忽略
├── path_process.py # 相关文件路径的处理
└── report_json_process.py # ppetizer生成日志流程的封装,上传apk并插桩,下载安装插桩app,下载分析日志到指定目录等
其实通过 api 调用并无分析次数限制,可以获取到分析报告下载连接 (我的代码中通过python faker库注册登陆更换token可忽略)
我的项目源码
请参看个人github maxim monkey
自动遍历并生成测试报告
虽然目前 appetizer1.4.10 并不支持 html 导出功能,但其提供了 Appetizer HTML 报告的模板供使用,这样我们就可以将得到的 json 日志可视化展示了
Appetizer HTML 报告模板介绍
Appetizer HTML 报告模板用于通过 HTML 的方式可视化 Appetizer 的 APP 缺陷报告。模板是一个完全本地的 web 应用,读取 JSON 格式的 APP 缺陷数据 (data.js)(这里有点错误,应该为 data.json),通过 DataTables 渲染,并提供搜索,排序以及分页等功能
Appetizer HTML 报告模板项目地址
几点需要修改的地方
- 注释掉以下 data.js 引入,并没有 data.js 文件,我们得到的分析报告是 json 文件
<!-- <script type="text/javascript" src="data.js"></script> -->
- js 部分修改,读取到 data.json 文件
<script type="text/javascript">
$(document).ready(function() {
$.getJSON("data/data.json", function (data){
dataset = data.allItems;
如果本地调试的话涉及到跨域问题,在 chrome 快捷方式添加
--disable-web-security
集成的项目调试完后可部署到服务器上
- 分页报错
DataTables warning: table id=xx - Requested unknown parameter xx for row xx, column xx,For more information about this error, please see http://datatables.net/tn/4
这是因为生成的分析数据 data.json 的每个子结构不一致,有些字段没有,导致 datatables 无法依照数据匹配并生成列表,根据报错在对应的位置添加类似如下的 js 代码
if(!d.hasOwnProperty("problem")){
d["problem"] = "A_OK"
}
- 自定义模板
当然,针对 data.json 分析数据(各字段有什么含义呢?可参考 Appetizer 报告高级分析),也可以自己去写一套更漂亮一些的报告模板