adb 命令行执行单元测试
文章目录
- 1、配置 adb 环境变量
- 2、adb 执行测试
- 3、官方文档解读 adb 使用
- (1)第一条执行测试的adb命令
- (2)am instrument 参数
- (3)-e 参数 的 key-value键值对
- (4)用法用例
- 4、存在问题
1、配置 adb 环境变量
可参考教程:Mac配置ADB环境变量
adb在我们配置 Android Studio 时 安装的 AndroidSDK 的 platformTools 目录中,所以我们首先要找到 adb 所在目录,就在sdk目录下面。在Project Structure中,找到SDK安装路径.
![[图片]](https://img-blog.csdnimg.cn/9c194a65c8624dcaa05e3e83e1bd9ff2.png)
ADB的目录就在 上面目录的 platform-tools中
直接终端编辑 bash_profile 文件,配置环境变量
vi ~/.bash_profile
将下面的进行复制粘贴到文件中即可,记得把users/name 中的name改成自己的本机用户名
export ANDROID_HOME=/Users/name/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
:wq 进行保存后,输入 source ~/.bash_profile 生效
我们最后输入 adb version,查看是否有结果,有结果那么此时adb 环境变量配置成功
![[图片]](https://img-blog.csdnimg.cn/3ffa6ceaf1834b2b92ba8891b761e666.png)
2、adb 执行测试
参考文档:developer.android.com
官方的文档还是看的有点抽象,我们可以自己实践一下。
选择一个单元测试方法,点击绿色的执行测试按钮
![[图片]](https://img-blog.csdnimg.cn/1696c7440c814145bd57634aa14ed5ab.png)
先使用图形交互点击的方式,执行了一个测试方法,其实就是底层默认启动了一个adb命令。在我们可以看一下,adb书写的参数以及怎么具体执行
![[图片]](https://img-blog.csdnimg.cn/2710112081e849e79df3463830907e5d.png)
$ adb shell am instrument -w -m -e debug false -e class ‘com.didi.testcase.basemap.A’ com.didi.mapsdk_base.test/androidx.test.runner.AndroidJUnitRunner
$ adb shell am instrument -w -m -e debug false -e class ‘com.didi.testcase.basemap.TestBaseMapBD#testUiSettingIsCompassEnabled’ com.didi.mapsdk_base.test/androidx.test.runner.AndroidJUnitRunner
我们可以在自己的终端,直接复制上面的adb命令,发现可以进行启动测试方法,从而达到通过命令行的方式完成对单元测试方法的执行.
3、官方文档解读 adb 使用
(1)第一条执行测试的adb命令
文档解说,官方文档中的 adb 使用命令进行解读
![[图片]](https://img-blog.csdnimg.cn/db469e7b06784f26bbd95aba1ba7a06a.png)
上面提到,am instrument 测试有几个操作
(1)构建或者重新构建主应用测试软件包
解读:build打包没问题,能编译通过
(2)将APK文件安装到 Android设备中获模拟器上
解读:单元测试的方法肯定依赖于app软件,所以要连接设备后,安装应用软件包和test测试软件包。点击以下gradle命令需要在手机上安装apk包。
![[图片]](https://img-blog.csdnimg.cn/00bb934d58024bc097b1dcb7cfeb5c61.png)
(3)执行adb命令
adb shell am instrument -w <test_package_name>/<runner_class>
- 这个命令
<test_package_name>,指的是整个测试包
- <runner_class> 指的是执行的测试程序类(也就是执行什么测试程序,用AndroidJunitRunner进行测试),一般默认是androidx.test.runner.AndroidJUnitRunner,我们不需要改动
-
-w 指的是 文档有讲解,就是adb执行测试命令,等测试执行输出完日志后,在退出adb shell状态,保证我们能够看到执行测试的结果
-
这一整条命令的意思就是 执行整个软件测试包中的所有测试方法
疑问:什么是测试应用Android软件包?
<test_package_name>,这里提到了一个 测试应用Android软件包,是什么意思呢?

查看解释发现 Android 软件包就是 applicationId,在 build.gradle 文件中能够找到,然后因为是测试软件包,所以需要在后面再追加一个.test 然后我们就可以定位到手机上测试哪个软件包下的方法了
(2)am instrument 参数
![[图片]](https://img-blog.csdnimg.cn/4fa27582f686447d81ccb543a22cf0a3.png)
文档中列举了一些adb shell am instrument 命令后面的参数,说明用法非常清楚。
这里注意的就是,-e 选项在后面还有很重要的作用
(3)-e 参数 的 key-value键值对
![[图片]](https://img-blog.csdnimg.cn/7c789d82ecc24236b99862b14a7dfb32.png)
文档中列举出了 -e 参数可以 跟的键值对,非常有用,圈住的就是我们正常点击测试执行时要用到的
-package <package_name>可以指定执行某个包下的所有测试方法
class <class_name>可以执行执行某个类下的所有测试方法,跟在class_name后面的#<method_name>可以具体执行每个类中的测试方法- debug,是否在调试状态执行
(4)用法用例
文档最后提供了一个实例,我们可以看看,写的很清楚。
如上图,在这里说明项目结构,方便进行填入参数, 给定测试软件包名,测试类、测试方法
![[图片]](https://img-blog.csdnimg.cn/1f706f563319452e8907c2bf2f8a1cb6.png)
第一个案例:只指定了测试软件包名,所以执行软件包下的所有测试类
![[图片]](https://img-blog.csdnimg.cn/aec366c72cbf462398b399121eb0a79b.png)
第二个案例:使用 -e class 指定了TestClass1测试类,所以执行这个类中的所有测试方法。
![[图片]](https://img-blog.csdnimg.cn/b8ab6a423ad446d88d7315e0501a072c.png)
第三个案例:使用 -e class <class_name>#<method_name>指定了 TestClass1 测试类,TestClass2 中的 testMethod3 方法,执行两块测试内容,中间使用逗号隔开,然后使用AndroidRunner程序类开始执行测试类/方法.
![[图片]](https://img-blog.csdnimg.cn/2b993f8d3c074c539db416b86783c550.png)
4、存在问题
缺点:无法生成测试报告进行查看,无法生成覆盖率统计报告,只能够用例执行而已。还是建议使用 gradle 命令
相关文章:
adb 命令行执行单元测试
文章目录 1、配置 adb 环境变量2、adb 执行测试3、官方文档解读 adb 使用(1)第一条执行测试的adb命令(2)am instrument 参数(3)-e 参数 的 key-value键值对(4)用法用例 4、存在问题 …...
Ceph入门到精通-Linux下Ceph源码编译和GDB调试
Ceph版本:14.2.22 Linux版本:ubuntu-server 18.04 第一部分 下载Ceph源码 1.1 配置Ceph源码镜像源 Ceph源码是托管在Github上,由于某些原因,国内访问Github网站很慢,所以需要从其他途径加速获取源码。Github官方给出…...
【c语言】动态内存管理(超详细)
他治愈了身边所有人,唯独没有治愈他自己—超脱 csdn上的朋友你们好呀!!今天给大家分享的是动态内存管理 👀为什么存在动态内存分配 我们定义的局部变量在栈区创建 int n 4;//在栈上开辟4个字节大小int arr[10] { 0 };//在栈上开…...
Linux/centos上如何配置管理NFS服务器?
Linux/centos上如何配置管理NFS服务器? 1 NFS基础了解1.1 NFS概述1.2 NFS工作流程 2 安装和启动NFS服务2.1 安装NFS服务器2.2 启动NFS服务 3 配置NFS服务器和客户端3.1 配置NFS服务器3.2 配置NFS客户端 4 实际示例4.1 基本要求4.2 案例实现 1 NFS基础了解 NFS&…...
Element组件浅尝辄止5:Empty 空状态组件
Empty空状态组件:空状态时的占位提示。 如第一次进入当前功能模块时,数据状态为空,则展示空状态,可用到Empty组件 1.How? <el-empty description"描述文字"></el-empty> 2.自定义图片 通过设置 image 属…...
【华为Datacom 综合拓扑案例—分享篇】
拓扑图 题目要求 实验要求: 1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址,SW5作为服务器,SW3和SW4作为中继 创建地址池ip pool huawei1和ip pool huawei2,租期都为2天 2、SW3与SW4做链路聚合,采用LACP模式。SW3作为主…...
springcloud3 使用openfegin实现getpost请求调用
一 项目介绍 1.1 工程介绍 1.consumer9008 2.provider9009 二 get请求 2.1 消费端 1.controller 2.service 2.2 提供者 1.提供者 2.3 测试请求 地址: http://localhost:9008/consumer/payment/nacos/2223 三 post请求 3.1 消费者 3.2 提供者 3.3 测试请求…...
【JVM】类装载的执行过程
文章目录 类装载的执行过程1.加载2.验证3.准备4.解析5.初始化6.使用7.卸载 类装载的执行过程 类装载总共分为7个过程,分别是 加载,验证,准备、解析、初始化、使用、卸载 1.加载 将类的字节码文件加载到内存(元空间)中。这一步会…...
FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、独立看门狗介绍 二、看门狗监测多任务执行思路 1、监测目标 2、监测方案 3、应用注意事项 三、看门狗监测多任务编程 1、STM32cubeMX配置 2、代码编写 四、低功耗Tickless模…...
预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks
一.文章概述 本文提出了一种自监督属性图生成任务来预训练GNN,使得其能捕图的结构和语义属性。作者将图的生成分为两个部分:属性生成和边生成,即给定观测到的边,生成节点属性;给定观测到的边和生成的节点属性…...
Python实现透明隧道爬虫ip:不影响现有网络结构
作为一名专业爬虫程序员,我们常常需要使用隧道代理来保护个人隐私和访问互联网资源。本文将分享如何使用Python实现透明隧道代理,以便在保护隐私的同时不影响现有网络结构。通过实际操作示例和专业的解析,我们将带您深入了解透明隧道代理的工…...
并发编程系列-CompletableFuture
利用多线程来提升性能,实质上是将顺序执行的操作转化为并行执行。仔细观察后,你还会发现在顺序转并行的过程中,一定会牵扯到异步化。举个例子,现在下面这段示例代码是按顺序执行的,为了优化性能,我们需要将…...
锁粒度的粗细与时空损耗互换
1 空间换时间的cases 1.1 redis的用户分组限流和用户定制的限流器 Redis 用户分组限流和用户定制的限流器:使用 Redis 进行用户分组限流或用户定制的限流意味着你使用 Redis 数据库来维护用户的访问限制。可以通过计数器、滑动窗口或令牌桶等算法来实现限流。用户…...
[Android 11]使用Android Studio调试系统应用之Settings移植(七):演示用AS编译错误问题
文章目录 1. 篇头语2. 系列文章3. AS IDE的配置3.1 AS版本3.2 Gradle JDK 版本4. JDK的下载5. AS演示工程地址6.其他版本JDK导致的错误1. 篇头语 距离2021年开始,系列文章发表已经有近两年了,依旧有网友反馈一些gitee上演示源码编译的一些问题,这里就记录一下。 2. 系列文章…...
MyBatis面试题
MyBatis面试题: 1、MyBatis是什么? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句…...
Lorenz系统最大lyapunov exponent的求解
首先看下Lorenz混沌系统: 赋予初始值,例如: 当然,初始值可以根据需要设定。 看下他的吸引子,很美: 看下他的分叉图:...
c#实现策略模式
下面是一个使用C#实现策略模式的示例代码: using System;// 策略接口 public interface IStrategy {void Execute(); }// 具体策略类A public class ConcreteStrategyA : IStrategy {public void Execute(){Console.WriteLine("具体策略A的执行逻辑");} …...
家纺行业小程序商城搭建指南
家纺行业作为一个不可或缺的消费领域,近年来备受关注。随着互联网的发展,小程序商城成为家纺行业拓展市场的新利器。搭建一个家纺行业小程序商城并不是一件困难的事情,只需要按照以下几个步骤进行操作,就能轻松上手。 首先&#x…...
Python语法基础--条件选择
学习目标 使用比较运算符编写布尔表达式。使用random.randint(a,b)或者random.random()函数来生成随机数。编写布尔表达式(AdditionQuiz)。使用单向if语句实现选择控制。使用单向if语句编程。使用双向if-else语句实现选择控制。使用嵌套if和多向if-elif-else语句实现选择控制。…...
visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)
在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目,直接打开这个头文件源文件就会一起出来了! 真的管用,亲测有效。...
中性点不接地系统或中性点经消弧线圈接地系统的小电流接地故障仿真研究(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 🎁…...
14100开源难题解榜141期:5道前沿技术难题完整收录|后续五期分步保姆级落地开源方案
开源难题解榜141期:5道前沿技术难题完整收录|后续五期分步保姆级落地开源方案 摘要 本文完整原样提取黄大年茶思屋难题解榜第141期全部五道硬核技术原题、技术背景、现存痛点、当前技术成果与详细技术诉求,不作内容删减与修改。本篇定为题目抽…...
qData 数据中台开源版 v1.5.2 发布:建模资产双升级,全方位提升企业数据治理效率
qData 数据中台开源版 v1.5.2 发布:建模标准化、资产精细化,全方位提升企业数据治理效率在企业数字化建设不断深化的今天,数据中台已演变为支撑企业经营决策、业务创新与数据治理落地的核心基础设施。qData 数据中台开源版 v1.5.2 正式发布&a…...
多摄像头融合平台:构建智能视觉感知的基石
摘要随着安防监控、智慧交通、工业检测等领域对视觉感知能力要求的不断提升,单一摄像头的视野局限和信息孤岛问题日益凸显。多摄像头融合平台通过整合多个视角的图像数据,实现时空对齐、目标关联与信息互补,显著提升了感知系统的准确性与鲁棒…...
拒绝玩具CRUD:用 5 款全栈离线“仓储管理”微系统精通前后端解耦(附专家级级联 Prompt)
各位全栈同仁、大前端极客以及正在突破技术瓶颈的开发者们,大家好。作为一名每天和分布式架构、数据库事务以及前端复杂状态流打交道的工程师,今天想和大家聊聊全栈工程落地中的“咬合力”。在很多技术社区里,大家往往能看到各种速成的单表 C…...
GESP6级C++考试语法知识(二十五、深度优先搜索(五、DFS终极奥义))
⚔️第五课《DFS终极奥义》——原来算法世界到处都是 DFS!🌟一、故事开始:算法圣殿1、经过前四课。小骑士 DFS 已经成为了:🌟DFS 小勇者!2、但是。算法王国最深处。还有一座:🌟“dfs…...
软件测试行业还有未来吗?从业者该何去何从?
前几天某软出现了稍具规模的维权活动,据说当事人是测试同行,感觉当前从业环境越来越恶劣了,然后我把各大招聘平台(如BOSS直聘、拉勾、智联招聘、猎聘等)上“软件测试”相关岗位爬了一遍,并做了深度数据挖掘…...
GEO学习能帮我提高AI搜索排名吗?
先直接回答这个问题:GEO不叫"排名",但效果比排名更直接。如果你理解了这句话,你就理解了GEO和SEO的本质区别。AI搜索没有"排名",只有"引用"传统SEO优化的目标是在搜索结果页面占据靠前位置——第几…...
三自由度机械臂DH参数建模常见误区盘点:你的Xi-1轴方向真的设对了吗?
三自由度机械臂DH参数建模常见误区盘点:你的Xi-1轴方向真的设对了吗? 在机械臂运动学建模领域,DH(Denavit-Hartenberg)参数法堪称经典,但看似简洁的四个参数背后藏着无数"坑"。尤其当面对三自由度…...
Veo 2K/4K生成失败率下降92%的核心设置(2024实测版Veo 2.3.1隐藏参数曝光)
更多请点击: https://codechina.net 第一章:Veo 2K/4K生成失败率下降92%的底层归因分析 Veo 视频生成模型在 2K/4K 高分辨率输出场景中,近期实测失败率由历史均值 18.7% 降至 1.5%,降幅达 92%。这一跃迁并非单一模块优化结果&…...
