Android App 持续集成性能测试:启动流量

目录

前言:

get app UID

获取流量数据

获得启动流量数据

总结


前言:

Jenkins 是一种开源的持续集成工具,可以帮助我们更加方便地进行软件开发和测试工作。通过 API 远程管理 Jenkins 可以帮助我们更加方便地进行 Jenkins 的配置和管理工作,并且可以更加灵活地进行 Jenkins 环境的搭建和部署。

本文对 Android App 的启动流量测试进行介绍。这里的启动流量指的是网络流量,即 App 在启动时发起网络请求和接收网络响应时传输的网络数据量。

说起流量,也许大家的第一反应就是 tcpdump/wireshark 这类网络抓包工具。的确,Android 系统确实也支持tcpdump工具,通过tcpdump,我们可以实现非常精准的流量测试。但tcpdump也有个问题,就是它捕捉到的流量是系统层面的,我们很难区分捕捉得到的流量数据是否都是当前 apk 产生的。

其实,对于特定 apk 的整体流量数据,在 Android 系统中都会存储到对应文件中,我们完全可以通过读取对应文件来获得当前 apk 的流量信息。

get app UID

与流量相关的状态数据存储在/proc/uid_stat/<UID>/目录下,其中,<UID>表示 apk 对应的 UID。

关于 UID,简单地进行下说明。在 Linux 系统中,UID 表示的是 User Identifier,主要用于表示是哪位用户运行了该程序。但在 Android 系统中,由于 Android 系统本身就为单用户系统,这时 UID 就被赋予了新的使命,主要用于实现数据共享。具体地,Android 系统为每个应用都分配了一个 UID,不同 apk 的 UID 几乎都是互不相同的,而对于不同 UID 的 apk,不能共享数据资源。之所以用 “几乎”,是因为有时候同一厂家会存在多个产品,并且希望能在多个 apk 之间实现数据共享,这个时候,便可通过在 menifest 配置文件中指定相同的 sharedUserId,然后在 Android 系统中安装应用时便会分配相同的 UID。

获取 app UID 的方式有多种,最简单的方式应该还是从/data/system/packages.list中读取,并通过 apk 的<PKGNAME>找到对应的 UID。

root@hammerhead:/ # cat /data/system/packages.list | grep com.UCMobile.trunk                   
com.UCMobile.trunk 10084 0 /data/data/com.UCMobile.trunk default 3003,1028,1015

在这里,10084 即是com.UCMobile.trunk的 UID。

获取流量数据

流量数据分为接收流量(tcp_rcv)和发送流量(tcp_snd)两部分,这两个状态数值我们可以通过读取/proc/uid_stat/<UID>目录下的两个文件得到。

shell@hammerhead:/ $ cat /proc/uid_stat/10084/tcp_rcv                          
3446837
shell@hammerhead:/ $ cat /proc/uid_stat/10084/tcp_snd                          
134366

通过这种方式,我们就可以读取得到指定 apk 在当前时刻的累计流量数值。

获得启动流量数据

有了前面的基础,我们要测试启动流量就很好实现了。只需要在启动前采集下累计流量数值,然后启动应用,完成启动后再采集一次累计流量数值,前后两次累计数值的差值便是当次启动耗费的流量数。需要注意的是,由于很多时候 apk 在启动后,会在系统后台异步加载一些数据资源,因此为了保证我们采集到当次启动耗费的全部流量数值,我们在启动应用后最好能等待一段时间。

root@hammerhead:/ # cat /proc/uid_stat/10084/tcp_snd                           
15068
root@hammerhead:/ # cat /proc/uid_stat/10084/tcp_rcv                           
98021# start app activity, sleep 10sroot@hammerhead:/ # cat /proc/uid_stat/10142/tcp_snd                           
23268
root@hammerhead:/ # cat /proc/uid_stat/10142/tcp_rcv                           
965651

采集到前后两次流量数值后,即可计算得到当次启动耗费的总流量。

当次启动总流量 = (23268 + 965651) - (15068 + 98021) = 875830 bytes

当然,这里的启动还分为好几种,包括首次安装启动、非首次安装启动、覆盖安装启动等。具体的启动方式可根据实际场景来定,但在统计流量的方法方面都是相同的。

总结

本文讲解了 Android App 启动流量测试的一种方法。然而,本次介绍的方法也存在一定局限性,因为/proc/uid_stat/<UID>/目录下的tcp_rcvtcp_snd文件中都只记录了总值,如果我们只关注总体的流量数值还好,但要是我们希望能测试得到更细化的数据,该方法就没法满足我们的测试需求了。

举个例子,UC 浏览器国际版在启动后,会和美国的服务器进行通讯交互。现在,我们想测试 UC 浏览器国际版在启动后与美国服务器的通讯流量。

显然,本文中介绍的方法是没法实现上述例子中的测试需求的。那例子中的场景要怎么测呢?这就还是得用到tcpdump,在下一篇文章中我会再详细进行介绍。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react实现路由跳转动画

下载插件 npm i react-transition-group 配置路由 import { createBrowserRouter as ReactRouter,Navigate } from "react-router-dom";import App from ../App.js import Login from "../view/login.js"; import Home from "../home.js"; co…

了解 3DS MAX 3D摄像机跟踪设置:第 4 部分

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 项目设置 步骤 1 打开“后效”。 打开后效果 步骤 2 转到合成>新合成以创建新合成。 将“宽度”和“高度”值分别设置为 1280 和 720。将帧速率设置为 25&#xff0c;将持续时间设置为 12 秒。单…

Flask 文件上传,删除上传的文件

目录结构 app.py from flask import Flask, request, render_template, redirect, url_for import osapp Flask(__name__) BASE_DIR os.getcwd() UPLOAD_FOLDER os.path.join(BASE_DIR, testfile)app.route(/) def home():files os.listdir(UPLOAD_FOLDER)return render_t…

欧盟新规,燃油噩梦?2025年起,高速公路每60公里设立一处快充站

根据外媒The Verge报道&#xff0c;欧洲电动汽车用户将获得更多便捷的待遇&#xff0c;同时还能减少有害温室气体排放&#xff0c;这得益于欧盟理事会最新通过的法规。 根据欧盟的法规要求&#xff0c;自2025年起&#xff0c;TEN-T高速公路系统在欧洲将需要每隔60公里设立一座高…

Langchain 和 Chroma 的集成

Langchain 和 Chroma 的集成 1. Chroma2. 基本示例​3. 基本示例(包括保存到磁盘)4. 将 Chroma Client 传递到 Langchain ​5. 基本示例(使用 Docker 容器)6. 更新和删除7. 带分数的相似性搜索​ 1. Chroma Chroma 是一个人工智能原生开源矢量数据库&#xff0c;专注于开发人员…

ES6基础知识六:你是怎么理解ES6中 Promise的?使用场景?

一、介绍 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;回调函数&#xff09;更加合理和更加强大 在以往我们如果处理多层异步操作&#xff0c;我们往往会像下面那样编写我们的代码 doSomething(function(resu…

[ 容器 ] Harbor 私有仓库的部署与管理

目录 一、什么是Harbor二、Harbor的特性三、Harbor的构成四、Harbor 部署五、关于 Harbor.cfg 配置文件中有两类参数&#xff1a;所需参数和可选参数六、维护管理Harbor 一、什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户…

jQuery的DOM操作之笔记总结

jQuery的DOM操作之笔记总结 首先我们来介绍一下什么是DOM 简述&#xff1a; 1.DOM全称Document Object Model&#xff08;文档对象模型&#xff09;。 2.每个文档都是一棵DOM结构的树&#xff0c;文档里的很多元素&#xff0c;就像树上的很多节点&#xff0c;或是分叉的树枝…

知识库数据导出为excel-使用JavaScript实现在浏览器中导出Excel文件

我们智能客服知识库机器人已经开发完成&#xff0c;后端数据库是使用的qdrant向量数据库&#xff0c;但是该数据库并没有导出备份功能&#xff0c;所以我按简单的纯前端实现知识库导出excel数据 使用第三方库(如SheetJS) SheetJS是一个流行的JavaScript库&#xff0c;可帮助处理…

腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面

目录 ​编辑 一、前言 1、什么是腾讯云 Cloud Studio 2、本文实验介绍 二、前期准备工作 1、注册 Cloud Studio 2、初始化工作空间 三、开发一个简版的点餐系统页面 1、安装依赖 1.1、安装 antd-mobile 1.2、安装 less 和 less-loader 1.3、暴露 webpack 配置文件 …

OpenCV实现照片换底色处理

目录 1.导言 2.引言 3.代码分析 4.优化改进 5.总结 1.导言 在图像处理领域&#xff0c;OpenCV是一款强大而广泛应用的开源库&#xff0c;能够提供丰富的图像处理和计算机视觉功能。本篇博客将介绍如何利用Qt 编辑器调用OpenCV库对照片进行换底色处理&#xff0c;实现更加…

Stable Diffusion生成艺术二维码

Stable Diffusion生成艺术二维码 文章会有浏览问题&#xff0c;点击此处查看原文 首先需要一个Stable Diffusion服务环境&#xff0c;《Stable Diffusion服务环境搭建&#xff08;远程服务版&#xff09;》如果你已经有了那就忽略 一、准备一个比较好的二维码底图 首先解析二…

STC12C5A系列单片机片内看门狗的应用

wdt.c #include "wdt.h"void wdt_init(void) {WDT_CONTR 0x24; // 0010 0100 - 1.1377s }void wdt_feed(void) {WDT_CONTR | 0x10; // 喂狗 }wdt.h #ifndef _WDT_H_ #define _WDT_H_#include "stc12c5a60s2.h"// 函数声明 extern void wdt_init(void); …

uniapp开启消息通知/提示(使用uniPush)

亲爱的小伙伴们&#xff0c;最近对uniPush有稍许研究&#xff0c;当前研究出一些心得&#xff0c;现在分项给大家&#xff0c;希望对大家的uniapp之路有所帮助。本次的教程是教会你如何使用uniPush自定义消息通知&#xff0c;同时还附带添加消息提示音添加&#xff0c;多的不说…

【Spring MVC学习】连接 接收请求参数 响应返回参数

目录 前言&#xff1a;认识Spring MVC &#x1f337;1、什么是MVC&#xff1f; 一、建立连接&#xff08;5个注解&#xff09; &#x1f337;1、RequestMapping注解:注册接⼝的路由映射&#xff08;默认返回页面&#xff09; &#x1f337;2、ResponseBody注解&#xff1a…

unity调用c++dll时变量处理问题

在C中为了处理方便可以将有些局部变量变为全局变量。 以下面三个变量为例 如果还有新全局变量需要这其来赋值&#xff0c;就会有问题。 如下面的body1_ptr为了dll生成处理方便&#xff0c;变为全局变量后&#xff0c;这个指针变赋值就会有问题。 因为geometry_path这个只在调…

Ubuntu22.04上部署Lua开发环境

需求背景 想在Ubuntu22.04上搭建一下Lua的开发环境&#xff0c;其实步骤比较简单的&#xff0c;此文章也适用于Ubuntu主机环境搭建Lua,如果想在在Ubuntu内部署一个容器&#xff0c;然后在容器内搭建Lua的环境&#xff0c;可以先参考容器的创建过程 ubuntu22.04上如何创建有pri…

字节抖音小程序,使用 uniapp 调起内置支付

字节抖音小程序&#xff0c;使用 uniapp 调起内置支付 第一步&#xff1a;提交订单 后端通过抖音预下单接口&#xff0c;提交支付订单信息。 预下单接口_小程序_抖音开放平台预下单接口 提交支付订单信息。 ## 使用限制 无 ## 接口说明 预下单接口需要保证同一app_id下每笔订…

Linux6.15 Docker 私有仓库(harbor)

文章目录 计算机系统5G云计算第四章 LINUX Docker 私有仓库&#xff08;harbor&#xff09;一、搭建本地私有仓库二、Docker--harbor私有仓库部署与管理1.Harbor 简介1&#xff09;什么是Harbor2&#xff09;Harbor的特性3&#xff09;Harbor的构成 2.Harbor 部署1&#xff09;…

【深度学习-神经网络架构-通俗易懂的入门课程】

文章目录 深度学习与AI的关系机器学习的流程机器学习的核心以及问题深度学习要解决的问题模型如何搭建&#xff1f;特征如何提取&#xff1f;为什么要深度学习&#xff1f; 深度学习的应用深度学习的问题计算机视觉任务分类与检索如何实现分类 神经网络基础线性函数损失函数防止…