结合开源项目maxim和appetizerio
定制化app自动遍历方案
并结合Appetizer HTML 报告模板输出测试报告模板

整体思路

在之前的文章中分别介绍了maximappetizerio

能不能结合起来并定制化输出测试报告呢?

针对不同的app可能稍有区别

  1. 自动遍历前的准备:删除一些缓存数据,上传apk插桩并安装插桩包
  2. maxim执行前的准备:删除maxim的缓存数据,上传maxim jar包,安装adbkeyboard,上传maxim策略配置文件
  3. 执行maxim
  4. 分析插桩数据并下载
  5. 整合数据,并定制化输出测试报告
  6. 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 报告模板项目地址

Appetizer HTML 报告模板

几点需要修改的地方

  1. 注释掉以下 data.js 引入,并没有 data.js 文件,我们得到的分析报告是 json 文件
<!-- <script type="text/javascript" src="data.js"></script> -->
  1. js 部分修改,读取到 data.json 文件
<script type="text/javascript">
      $(document).ready(function() {
	  $.getJSON("data/data.json", function (data){
		dataset = data.allItems;

如果本地调试的话涉及到跨域问题,在 chrome 快捷方式添加--disable-web-security
集成的项目调试完后可部署到服务器上

  1. 分页报错

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"
}
  1. 自定义模板
    当然,针对 data.json 分析数据(各字段有什么含义呢?可参考 Appetizer 报告高级分析),也可以自己去写一套更漂亮一些的报告模板