当前位置: 首页 > news >正文

Android Camera压力测试工具

背景描述:

随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。

对于压力测试,之前虽然有接触,但只是使用工具跑测,然后分析日志,解决问题。现在需要自己根据要测试的场景来确定使用什么压测工具-》跑一次压测(怎么使用)-》结果分析,确定问题-》跑一次压测。

Android Camera压测开源工具有哪些

虽然专门针对相机的开源压测工具较少,但可以通过组合现有的开源测试框架和工具来实现对Android相机的高负载测试和性能验证。以下是一些适合进行Android相机压测的开源工具,大概是三种使用场景:

  • 频繁启动与停止相机
    • 使用UI Automator或者Monkey Tesing进行高频次的启动、停止操作测试。
    • Appium也使用于这种场景,尤其是如果需要多线程或并发测试时。
  • 多任务压力测试
    • Appium是进行多任务并发操作的最佳选择,它支持同时运行多个任务,并且可以跨设备进行测试。
    • Perfetto可用于深入分析设备的性能,特别适合在多任务负载下进行详细的性能监控。
  • 性能分析
    • Perfetto
    • Android Benchmarking Framework
    • Systrace 用于捕获和分析系统级别的性能数据。适合开发者、性能优化人员分析和调试复杂的性能问题,特别是那些跨应用、框架和操作系统的性能瓶颈。

CameraX Performance Testing

CameraX是Google提供的用于简化相机开发的API,它具备较强的性能和稳定性,Google官方提供了相机性能测试框架和相关代码示例。

使用场景:

通过CameraX,可以简化相机的多线程和多任务处理,通过性能测试工具分析响应时间、内存占用等指标。

使用方法:

可以基于CameraX的GitHub示例项目进行压力测试(包括相机启动、预览、拍照等多个操作)。可以使用CameraX提供的ImageCapture或VideoCapture来模拟不通过配置下的拍照和录像任务。

链接: https://github.com/android/camera-samples

Monkey Testing(Android)

Monkey是Android内置的一个压力测试工具,能够进行随机的用户输入事件测试。虽然它不是专门为相机设计的,但你可以用它来模拟频繁的启动、停止相机和执行其他操作。

使用场景:

  • 能够进行随机点击、滑动、输入等操作,适合进行高频次的随机测试。
  • 适合频繁启动和停止相机应用以及模拟多任务操作。

使用方法:

通过adb命令启动Monkey测试,例如

$adb shell monkey -p com.android.camera -v 500

这个命令会对com.android.camera进行500次随机操作,模拟随机的用户行为。

链接:https://developer.android.com/studio/test/monkey

UI Automator

UI Automator是Android的自动化测试框架,可以用来模拟用户交互操作,并且支持在多个应用间进行跨应用的操作。适合用于频繁启动与停止相机的测试。

使用场景:

  • 可以精确控制启动、停止相机的操作,模拟拍照、录像等行为。
  • 支持跨应用操作,例如在测试过程中切换到其他应用、回到相机。

使用方法:

编写UI Automator自动化测试脚本,模拟用户操作(如打开相机、拍照、切换模式等操作)。反复启动和关闭相机应用,进行多次压力测试。

例子(UI Automator测试脚本):

@Test
public void testCameraLaunchAndStop() {// 获取设备实例UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());UiObject cameraApp = device.findObject(new UiSelector().description("Camera"));// 启动相机cameraApp.clickAndWaitForNewWindow();UiObject shutterButton = device.findObject(new UiSelector().description("Shutter"));assertTrue(shutterButton.exists());// 停止相机(返回到主屏幕或退出应用)device.pressBack();// 重复多次启动和停止for (int i = 0; i < 100; i++) {  // 执行100次cameraApp.clickAndWaitForNewWindow();device.pressBack();}
}

链接: https://developer.android.com/training/testing/ui-automator 

Perfetto

Perfetto是Google提供的系统性能跟踪工具,能提供详细的硬件和系统性能数据。通过Perfetto可以对相机的性能进行深入分析,尤其适合长时间的压测场景。

使用场景:

  • 收集设备性能数据,包括CPU、内存、相机硬件、输入事件等。
  • 能够分析在高负载下相机功能的瓶颈(例如启动、拍照、录像等)

使用方法:

在测试时结合Perfetto进行监控,收集压力测试数据,并分析设备在运行时的性能变化。

链接:https://perfetto.dev/

Appium

Appium是一个跨平台的自动化测试工具, 支持Android和iOS,适合进行跨应用和多任务的压力测试。可以使用Appium模拟复杂的多任务操作,同时进行相机操作。

使用场景:

  • 支持多线程和并发操作,适合模拟多任务测试。
  • 可以在测试过程中自动化启动、停止相机应用,并同时进行其他任务。

使用方法:

编写Appium脚本来进行自动化的相机操作,比如拍照、录像、切换模式、启动停止相机等。

例子:

const { remote } = require("webdriverio");async function run() {const driver = await remote({capabilities: {platformName: "Android",deviceName: "Android Emulator",appPackage: "com.android.camera",appActivity: ".Camera",}});// 启动相机await driver.launchApp();// 执行拍照操作const shutterButton = await driver.$("~Shutter");await shutterButton.click();// 停止相机await driver.closeApp();// 重复启动和停止操作for (let i = 0; i < 100; i++) {  // 执行100次await driver.launchApp();await driver.closeApp();}await driver.deleteSession();
}run();

链接:https://appium.io/ 

Android Benchmarking Framework

Android Benchmarking Framework是Google提供的用于性能评估的框架,可以用来测试相机在不同条件下的表现(如启动时间、响应时间等)。

使用场景:

  • 适用于多种Android设备,可以对应用的启动、响应、内存消耗等进行性能基准测试。
  • 通过编写基准测试,分析相机在不同负载下的表现。

使用方法:

使用框架进行定时、定量的相机性能测试,基于测试结果进行优化。

链接:https://github.com/android/benchmark

相关文章:

Android Camera压力测试工具

背景描述&#xff1a; 随着系统的复杂化和业务的积累&#xff0c;日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化&#xff0c;需要对Android Camera应用进行全面的压测。 对于压…...

【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】

【华为OD-E卷 - 最优资源分配 100分&#xff08;python、java、c、js、c&#xff09;】 题目 某块业务芯片最小容量单位为1.25G&#xff0c;总容量为M*1.25G&#xff0c;对该芯片资源编号为1&#xff0c;2&#xff0c;…&#xff0c;M。该芯片支持3种不同的配置&#xff0c;分…...

字符串格式时间(HH-MM)添加间隔时间后转为HH-MM输出

转换时间代码如下所示 #include <iostream> #include <iomanip> #include <sstream>//添加时间转换为时间 std::string addMinutesToTime(const std::string& timeStr, int minutesToAdd) {int hours, minutes;char delimiter;//解析输入时间std::istri…...

SQL 基础教程 - SQL ORDER BY 关键字

SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序&#xff0c;您可以使用 DESC 关键字。 SQL ORD…...

STM32 软件I2C读写

单片机学习&#xff01; 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...

neo4j学习笔记

图数据库 图数据库是基于图论实现的一种NoSQL数据库&#xff0c;其数据存储结构和数据查询方式都是图论为基础的&#xff0c;图数据库主要用于存储更多的连接数据。 图论&#xff08;GraphTheory&#xff09;是数学的一个分支。图论以图为研究对象&#xff0c;图论的图是由若干…...

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板

STM32-MBD&#xff08;1&#xff09;安装 STM32 硬件支持包 STM32-MBD&#xff08;2&#xff09;Simulink 模型部署 【动手学电机驱动】STM32-MBD&#xff08;2&#xff09;Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...

Nginx代理本地exe服务http为https

Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包&#xff0c;解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入&#xff1a;nginx -v 查看版本 nginx -h&#xff…...

C++: glibc: pthread: pthread_cond_destroy,程序hang一例

今天碰到一个程序hang的情况。程序在退出的时候,调用到了pthread_cond_destroy,但是另一个线程还在pthread_cond_timedwait。应该是死锁的一个例子。应该查看libpthread.so的二进制文件,查看具体是在等什么。 Thread 1 (Thread 0x7f7028037580 (LWP 38)): #0 0x00007f7022e…...

【中间件】docker+kafka单节点部署---zookeeper模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控&#xff0c;先在测试环境部署单节点kafka验证…...

深入Android架构(从线程到AIDL)_08 认识Android的主线程

目录 3、 认识Android的主线程(又称UI线程) 复习&#xff1a; 各进程(Process)里的主线程​编辑 UI线程的责任&#xff1a; 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习&#xff1a; 各进程(Process)里的主线程 UI线程的责任&#xff1a; 迅速处理UI事…...

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…...

【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程

create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…...

Jetpack Compose 学习笔记(一)—— 快速上手

本篇主要是对 Jetpack Compose 有一个宏观上的了解。 1、Jetpack Compose 是什么与优势 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;可以帮助您简化并加快 Android 界面开发。 Compose 的优势&am…...

Kafka3.x KRaft 模式 (没有zookeeper) 常用命令

版本号&#xff1a;kafka_2.12-3.7.0 说明&#xff1a;如有多个地址&#xff0c;用逗号分隔 创建主题 bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic demo --partitions 1 --replication-factor 1删除主题 bin/kafka-topics.sh --delete --boots…...

Leetcode 最大正方形

java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...

ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题

参考https://cloud.tencent.com/developer/ask/sof/116470494 电脑是联想x1笔记本&#xff0c;显卡是intel的&#xff0c;nvidia显卡好像没看见这种问题。 sudo apt update sudo apt install xserver-xorg打开custom.conf&#xff0c; sudo gedit /etc/gdm3/custom.conf 解…...

沙箱模拟支付宝支付3--支付的实现

1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…...

Golang的代码质量分析工具

Golang的代码质量分析工具 一、介绍 作为一种高效、简洁、可靠的编程语言&#xff0c;被越来越多的开发者所喜爱和采用。而随着项目规模的增长和团队人员的扩大&#xff0c;代码质量的管理变得尤为重要。为了保障代码的可维护性、健壮性和可扩展性&#xff0c;我们需要借助代码…...

【Linux】:多线程(读写锁 自旋锁)

✨ 倘若南方知我意&#xff0c;莫将晚霞落黄昏 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...