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

news2024/12/26 23:07:33

目录

前言:

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 10s

root@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.coloradmin.cn/o/789364.html

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

相关文章

临时文档3

值传递 当一个对象被当作参数传递到一个方法后&#xff0c;此方法可改变这个对象的属性&#xff0c;并可返回变化后的结果&#xff0c;那么这里到底是值传递还是引用传递 是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时&…

什么是Java中的JVM(Java虚拟机)?

JVM&#xff08;Java虚拟机&#xff09;是Java平台的核心组件之一&#xff0c;是一个用于执行Java字节码的虚拟计算机。Java源代码经过编译器编译&#xff0c;生成字节码文件&#xff08;.class文件&#xff09;&#xff0c;然后由JVM来解释和执行这些字节码。JVM负责将字节码翻…

比较6组迭代次数的大小顺序

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A&#xff0c;B中各有5个点&#xff0c;并且让这10个点的位置没有重合。比较迭代次数。 其中有6组数据 差值结构 A-B 迭代次数 差值结构 构造平均…

tabs-pane锚点

目录 隐藏滚动条 锚点 <div class"right-wrap"><mds-tabs position"right" v-model"active" change"scroll(active, $event)"><mds-tabs-pane v-for"i in moduleNames" :key"i.val" :tab"i…

Android Service启动ANR原理

一、前言 在Service组件StartService()方式启动流程分析文章中&#xff0c;针对Context#startService()启动Service流程分析了源码&#xff0c;其实关于Service启动还有一个比较重要的点是Service启动的ANR&#xff0c;因为因为线上出现了上百例的"executing service &quo…

力扣 435. 无重叠区间

题目来源&#xff1a;https://leetcode.cn/problems/non-overlapping-intervals/description/ C题解1&#xff1a;对区间进行排序&#xff0c;根据区间的末端进行排序&#xff0c;小的在前&#xff0c;大的在后&#xff1b;由于有重复区间&#xff0c;我们拿后面的区间去看是否…

产品设计思考:如何平衡用户习惯和用户体验

在产品设计领域&#xff0c;平衡用户习惯与用户体验之间的关系是一个重要而复杂的任务。 用户习惯是指用户在长期使用产品过程中逐渐形成的一种行为模式&#xff0c;而用户体验则是用户在与产品交互时所感受到的整体感受。 在追求良好的用户体验的同时&#xff0c;还需要考虑用…

【广州华锐互动】AR智慧机房设备巡检系统

AR智慧机房设备巡检系统是一种新型的机房巡检方式&#xff0c;它通过使用增强现实技术将机房设备、环境等信息实时呈现在用户面前&#xff0c;让巡检人员可以更加高效地完成巡检任务。 首先&#xff0c;AR智慧机房设备巡检系统具有极高的智能化程度。该系统可以根据用户设定的…

C语言每天练习----输出乘法口诀表

题目&#xff1a;乘法口诀表 内容&#xff1a;在屏幕上输出9*9乘法口诀表 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main() {int a 0;int b 0;for (a 1; a < 9; a) {for (b 1; b < 9; b) {printf("%d*%d%2d\t", a, b, a*b);}}retu…

Docker Compose容器的快速编排

Docker Compose容器的快速编排 一、Docker Compose简介1、Docker Compose是什么2、Docker Compose三大概念 二、Docker Compose 安装与操作1、环境安装2、YAML文件格式及编写注意事项3、Docker Compose配置常用字段4、Docker Compose常用命令5、Docker Compose文件结构6、删除创…

AI智能化技术对项目管理的挑战与应对︱腾讯CSIG能源行业总经理王磊

腾讯CSIG能源行业总经理王磊先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;AI智能化技术对项目管理的挑战与应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 自从DALLE、Midjourney、…

chatGPT 学习分享:内含PPT分享下载

InstructGPT论文地址&#xff1a; Training language models to follow instructions with human feedbackchatGPT地址&#xff1a;openAI个人整理的PPT&#xff08;可编辑&#xff09;&#xff0c;下载地址&#xff1a;chatGPT学习分享PPT

二十三种设计模式第十七篇--迭代子模式

迭代子模式是一种行为型设计模式&#xff0c;它允许你按照特定方式访问一个集合对象的元素&#xff0c;而又不暴露该对象的内部结构。迭代子模式提供了一种统一的方式来遍历容器中的元素&#xff0c;而不需要关心容器的底层实现。 该模式包含以下几个关键角色&#xff1a; 迭…

【UGUI基础】Toggle Group组件

Toggle组件&#xff1a;控制一个复选框&#xff0c;打开或关闭选项。 主要属性&#xff1a; isOn&#xff1a;为true时显示&#xff0c;为false隐藏。 onValueChanged&#xff1a;isOn变化时&#xff0c;如果监听了事件会执行对应事件。 Group&#xff1a;做单选时需要添加T…

Acwing.898 数字三角形(动态规划)

题目 给定一个如下图所示的数字三角形&#xff0c;从顶部出发&#xff0c;在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点&#xff0c;一直走到底层&#xff0c;要求找出─条路径&#xff0c;使路径上的数字的和最大。 输入格式 第一行包含整数n&#xff0…

helm部署rabbitmq

1.添加rabbitmq仓库并下载包 helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/rabbitmq --version 10.1.4 tar -zxvf rabbitmq-10.1.4.tgz mv values.yaml values.yaml.back grep -v "#" values.yaml.back > values.yaml2.helm部署…

Ubuntu18.04配置PX4开发环境

源文件下载 读者可以参考PX4中文维基百科&#xff0c;或者使用下面命令↓ git clone https://github.com/PX4/PX4-Autopilot.git --recursive 下载完成之后&#xff0c;执行脚本安装命令&#xff0c;PX4给我们提供了脚本安装模式 bash ./PX4-Autopilot/Tools/setup/ubuntu.sh …

【雕爷学编程】Arduino动手做(81)--- 8位LED数码管模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

LeetCode213.House-Robber-II<打家劫舍II>

题目&#xff1a; 思路&#xff1a; 在版本一中增加了一个条件 那就是首尾相关联。那么只需要进行两次循环即可。 第一次是循环是偷第一家的 那么循环到n-1 截至 并且保存一个cmp 第二次循环是不偷第一家的 循环到n截至。然后比较cmp 与 dp [n] 的最大值即可。 代码是&#…

常用css 笔记

1、水平垂直居中 div {width: 100px;height: 100px;position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto; }父级控制子集居中 .parent {display: flex;justify-content: center;align-items: center; }伪元素和 inline-block / vertical-align&#xff08;兼…