热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用anyproxy做app网络流量测试

android应用大概有三种测试方法:通过读取系统文件获取流量数据。获取的数据内容是整体的数据,不便做更进一步分析。通过android系统提供的API获取。可能需要root权限。通

android应用大概有三种测试方法:



  • 通过读取系统文件获取流量数据。获取的数据内容是整体的数据,不便做更进一步分析。

  • 通过android系统提供的API获取。可能需要root权限。

  • 通过其他工具收集信息Appetizer、GT等。

  • 通过代理抓包,wireshark等。 iOS可能最好的办法应该是通过工具、网络代理获取流量信息。

通过代理的方式,可以抓取到明细的数据(请求资源地址、具体资源数据大小等),也方便做后续的具体分析,同时android、iOS应用均实用,不好的一点是对非WiFi情况需要想其他办法处理(顺便提一下iOS可以通过rvictl做,社区也有帖子提到iOS 性能专项初探)。


入主题,本文是通过anyproxy做代理获取流量数据的一些测试尝试

选用anyproxy,主要是用的多了,感觉方便,主要一点是anyproxy的过滤规则机制可以发挥很多作用,了解anyproxy。
准备工作:准备测试机,设置代理,安装代理证书等等
anyproxy过滤规则rule.js ,我的过滤规则是讲请求资源地址、请求数据大小、接受数据大小记录到文件,主要内容如下:

module.exports = {
// 获取接口的请求流量
*beforeSendRequest(requestDetail) {
if (requestDetail.url.indexOf("https") === 0) {
url = requestDetail.url;
requestLength = requestDetail.requestData.length;
// requestLength = requestDetail.length;
return null;
}
},
// 获取接口的响应流量
// 存储到文件
*beforeSendResponse(requestDetail, responseDetail) {
if (requestDetail.url.indexOf("https") === 0) {
responseLength = responseDetail.response.body.length;
fs.appendFile(interfaceLog, url + ',' + requestLength + ',' + responseLength + '\n', 'utf8', function(err) {
if(err) {
console.log(err);
}
});
return null;
}
},
}

标注一下:我用的anyproxy版本非最新版,用新版本的可以取response header中的x-anyproxy-origin-content-length字段获取返回相数据大小;还有一点这样的方式获取到数据流量大小与真实数据大小可能略有差异,我只取了一些数据与实际下载时的文件大小做了对比,后续有时间会通过使用多个工具方法等做对比。


拿淘宝android客户端做了一些测试

保存的log文件内容大致如下:



 

逗号做分隔,资源地址、请求数据大小、返回数据大小,单位是字节数。
然后再读取log文件内容,把信息存入数据库,统计数据库信息做分析。

 

def read_flow(log):
# 读取anyproxy记录的流量数据计算流量
# path = "/Users/*****"
# filePath = path + log
res = open(log)
requestData = 0
responseData = 0
l = 0
while 1:
line = res.readline()
# print "--line:", line
if not line:
break
l = l + 1
lineList = line.split(",")
resource = lineList[0].split("?")[0]
rex = [r'.*(?:.png|.jpg|.jpeg|.ico|.gif)', r'.*(?:.js)', r'.*(?:.css)', r'.*(?:.html)']
reRes = 0
type = 0
for i in range(len(rex)):
ls = lambda a: re.findall(rex[i], a.split("/")[-1])
if ls(resource):
reRes = i + 1
break
print "resource:", resource, reRes, "|", int(lineList[-2]), int(lineList[-1])
# 插入数据库
try:
start_time = time.strftime("%Y-%m-%d %H:%M:%S")
# insertSql = "insert into flow_2(resource, type, requestData, responseData, total_flow, create_time, tag) ****
# db.query(insertSql)
except:
print u"sql插入数据库出错"
return

取了三个场景首次启动淘宝并登录、切换淘宝底部的功能栏、查找一件商品添加到购物车并查看我的淘宝部分功能;
网络流量使用数据分别为:3.96902179718、4.89165401459、9.34268379211 单位MB
查询数据库信息,可以清晰的看到流量占用最多的请求,重复请求次数最多的请求,图片、js、css等等具体分类资源的请求数据
例如:
总流量消耗最多



 



图片流量消耗



 



js流量消耗



 



其他资源流量消耗



 

 

这样就比较清晰了了解到具体流量消耗数据,哪些消耗最多,哪些频繁请求次数最多等等,再做针对性的分析做处理。


进一步拓展

可以将流量数据收集过程集成到自动化测试的过程中,设置好多个场景,保存不同场景的流量数据信息,做标记,多次测试取基准值,设置好阈值,在自动化测试的过程中,收集信息,超过一定的范围,则预警,也是可以发现一些有问题的功能的;同时anyproxy作为代理工具也可以mock相关数据,为自动化测试提供了方便。



推荐阅读
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • PHP中处理回车换行符转换的有效方法与技巧
    PHP中处理回车换行符转换的有效方法与技巧 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • C++ 进阶:类的内存布局与虚函数类的实现细节
    C++ 进阶:类的内存布局与虚函数类的实现细节 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 高效批量文件重命名软件
    开发了一款基于Python的高效批量文件重命名软件,并集成了wxWidgets图形用户界面,使用cxfreeze将其打包为独立的可执行文件(exe)。该工具适用于需要频繁处理大量文件的用户,能够显著提高文件管理效率。详细使用说明包含在软件压缩包内。开发环境为Python 2.7和wxWidgets 3.0,运行环境要求兼容Windows系统。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 在执行 Vim/VM 命令时遇到错误提示:检测到名为
    在使用 Docker 时,通过 Vim 编辑 Dockerfile 文件时遇到了错误提示:“检测到名为 .dockerfile.swp 的交换文件”。这一问题通常是因为上次编辑该文件时意外中断,导致系统生成了临时的交换文件。为了解决这个问题,可以手动删除该交换文件或使用 Vim 的恢复功能来恢复未保存的更改。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
author-avatar
捕鱼达人2602929461
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有