Appium 自动化测试第一天——基础知识

概述

Adb作为PC和Android设备交互与通信的工具

Android调试桥接,Android DebugBridge,它是一个CS架构的命令行工具,作用就是PC通过adb来操作手机

Adb的组成

客户端(client):所有命令都是PC发起,可以对Android应用进行安装,卸载和调试(可以有多个窗口或程序发送命令)

服务端(server):管理客户端到Android设备上adb后台进程的连接(不同客户端发来的命令都由服务器负责和Android设备通信,他们之间的通信都是通过5037端口连接)

守护进程:Android后台运行的进程,负责接收命令(ADB服务器和守护进程的通信是通过相邻的两个端口实现的,偶数端口(比如5554)负责处理命令行的通信,奇数端口(比如5555)是用来保持连接的,我们可以看到,adb服务器可以和多台设备连接,每连接一个,会分配两个相邻的端口出来,第一对是5554/5555,第二对就是5556/5557,相对应的,我们adb连接多台设备的时候,需要指定端口号或者设备名称,服务器会找到对应的设备,进行通信)

Adb环境配置

下载SDK-------将tools和platform-tools两个目录配置到系统环境变量PATH中-----这样就可以直接在命令行中使用adb命令进行验证了

ADB命令

ADB基本命令格式

adb [-e | -d | -s<设备序列号>]<子命令>


参数


说明


-e


只运行在模拟器 adb -e shell


-d


只运行在真机adb -d shell


-s


运行在指定的设备中,设备序列号通过adb device获取到


help


列出adb帮助文件


version


列出adb版本

Adb基础命令

文件传输和安装命令


子命令


参数


说明


devices


[-l]详细信息


列出所有已经连接的设备,有三种状态
device/offline/device not fount
分别对应设备连接正常,设备断线和设备未找到


push


<local> <remote>


复制电脑本地文件到手机设备


pull


<remote> <local>


拉取手机设备文件到本地


install


[-lrtsd] <file>


安装apk
-l:标识应用为受限制应用
-r:替换安装
-t:运行安装测试包
-s:安装到SD卡
-d:允许降级安装


install -mutiple


[-lrtsd] <file ...>


批量安装
-p:部分应用程序安装


uninstall


[-k] <package>

查找包名可以通过命令(adb shell pm list packages | find “***”)


卸载
-k:保持data和cache下的文件

获取信息命令


子命令


参数


说明


wait-for-device



等待设备连接


start-server



开启adb服务


kill-server



杀掉adb服务(adb连不上的时候可以尝试)


get-state



获取adb服务状态
offline | bootloader | device


get-serialno



获取SN号


get-devpath



获取device-path


status-window



连续打印指定设备的设备状态(监听状态)—做开发工具时使用较多

Log与重启相关命令


子命令


参数


说明


bugreport



打印当前的dumpsys,sumpstate,logcat的输出


logcat


参数较多,
需要单独研究


输出Android系统日志


shell


参数较多,
需要单独研究


进入远程shell端


remount



重新挂载系统分区,是的系统分区重新可写(多用于push到系统目录之前)


reboot


[bootloader | recovery]


重启


reboot -bootloader



重启到bootloader


root



重新启动adbd获取root身份


usb



重新启动adbd来监听USB,相当于重新插拔USB


tcpip


<port>


重新启动adbd来监听指定的TCP端口

Adb备份与恢复命令


子命令


参数


说明


backup
(将一页的数据文件写入到指定的文件,如果没有指定-f输出目录,则保存在当前目录的backup.ab)


[-f<file>]


指定备份目录


[-apk | -noapk]


是否备份apk文件,默认为否


[-obb | -noobb]


是否备份obb数据包,默认为否


[-shared | -noshared]


是否备份SD卡共享内容,默认为否


[-all]


备份所有已安装应用


[-system | -nosystem]


是否备份系统应用,-all包括系统应用


[<packages...>]


备份指定的应用列表


restore



将备份文件恢复到手机中

这两个命令可以实现数据的备份以及两台手机间的数据恢复等场景

如下图的操作步骤可以将手机完全备份,备份的过程中可以进行加密,这样恢复的时候也需要密码

Adb重定向端口命令

端口映射模型

将开发PC上的端口(1314)重定向到设备的端口(5200)上,这样所有发往PC端口1314的数据都会被转发到设备端口5200。

这个机制可以实现远程控制Android设备应用。

如下图

具体命令如下表格,具体应用后续如果使用到再进行补充


子命令


参数


说明


forward --list



列出所有套接字连接列表


forward


<local><remote>


重定向端口


forward --norebind


<local><remote>


重定向端口,假如local端口已经被占用则失败


forward --remove


<remote>


移除本地已连接的套接字


forward --remove-all



移除本地已连接的所有套接字


reverse --list



列出所有连接设备的反向连接套接字


reverse


<remote><local>


反向连接套接字


reverse --norebind


<remote><local>


反向连接,假如端口被占用则失败


reverse --remove


<remote>


删除一个特定的逆转套接字连接


reverse --remove-all



删除所有特定的逆转套接字连接

Adb无线连接与文件同步

Adb无线连接可以不使用USB来直接调试Android设备,这样就是通过TCP/IP连接来操作设备,其实和操作模拟器的原理是一致的


子命令


参数


说明


connect


<host>[:<port>]


通过TCP/IP连接到设备,如果没有指定端口号则使用5555作为默认端口


disconnect


<host>[:<port>]


断开与TCP/IP设备的连接,如果没有指定端口号则使用5555作为默认端口,如果使用这个命令没有附加参数,将端口所有连接的TCP/IP设备


sync


[<directory>]


只要文件发生改变时就会自动从主机拷贝到设备,需要指定环境变量ANDROID_PRODUCT_OUT为同步目录

同步文件的使用场景多为有多个so文件等需要同步,如果一个个删除再push的话会耗费很大的工作量,这时候使用同步命令

无线连接和同步的具体操作后续完善补充

Adb连接问题

Adb list of devices attached

Windows:

首先安装驱动程序,看设备管理器驱动是否安装成功,不能安装驱动可以借助随便一个手机助手解决

然后打开手机开发者选项中的usb调试,并允许电脑始终对手机usb调试

连不了的时候首先用adb kill-server和adb start-server进行重启adb,或者用命令查看是哪个进程占用了5037端口,然后进行释放

参考:http://blog.csdn.net/johnnycode/article/details/7678083

这时候如果这些准备好的话应该是可以正常连接的,我们的手机序号应该已经写入了Windows下的.android隐藏目录下的adb_usb.ini文件,但还是同样的adb list of devices attached,这时候我们要考虑自动连接写入的adb设备号是否和我们终端使用的adb为同一个路径,在合适的位置写入正确的设备号即可,亲测有效,记得加0x

参考:http://blog.csdn.net/join_12/article/details/45970717

Ubuntu:和Windows下的基本思路是一致的,具体的操作方法参考如下帖子:

http://blog.csdn.net/mr_driver/article/details/8449642

Adb devices offline

端口抢占,可以参考上述方法解决

时间: 2025-01-16 17:05:14

Appium 自动化测试第一天——基础知识的相关文章

wpf(第一章 基础知识)

wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案中生成如下的结构: 1.程序起始相关的资源:2.与整个wpf相关的后台代码:3.窗体界面:4.窗体界面的后台代码. 在app.xaml中 1.Application的后台类:2.启动窗体:3.系统资源区域 除此之外可以在MainWindow.xaml中自定义窗体设置属性,拖拉控件在里面.

【读书笔记】《Python基础教程》第一章 基础知识

第一章 基础知识 实现两个数整除:使用命令开关 -Qnew (?): 使用双斜线. from future import division 执行向计算器那样的普通除法. 幂(乘方)运算符: 2 ** 3 (8),用函数代替 pow(2,3),内建函数 长整数型:在数字结尾加L.eg:10000000000000L 获取用户输入 input("提示信息 :") eg: x = input("x: ") .输入的是合法的python表达式 raw_input("

Kubernetes 第一章 基础知识

Kubernetes 第一章 基础知识 Kubernetes是一个开源容器编排引擎,用于自动化容器化应用程序的部署,扩展和管理.开源项目由Cloud Native Computing Foundation(CNCF)托管. Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明性配置和自动化.它拥有庞大,快速发展的生态系统.Kubernetes服务,具有广泛的工具和支持可用. 发展历程 传统部署时代: 早期,组织在物理服务器上运行应用程序.无法为物理服务器中

汇编语言--第一章--基础知识

基础知识 D(decimal)10 B(binary)2 H(hexadecimal)16 O(octal)8 二进制数和十进制数的转换 十进制转换为二进制: 1.降幂法 2.除法:多用除法 把要转换的十进制数的整数部分不断除以2,并记下余数,知道商为0为止.从下向上写. 对于被转换的十进制数的小数部分则应不断乘以2,并记下其整数部分,直到结果的小数部分为0为止.从上向下写. 为了便于对二进制数的描述,应该选择一种易于与二进制数相互转换的数制. 计算机中常用的字符是采用8位二进制数组成的一个字节

HTML第一课——基础知识普及【2】

关注公众号:自动化测试实战 img标签 我们先看一下文档结构: 这里我们文件当前位置就是lesson.html,所以现在我们img属性src给的值要进入imgs文件夹,所以我们可以用相对路径来表示,看代码: <!DOCTYPE html><html>    <head>        <title>第一节课</title>        <meta charset="UTF-8"/>    </head>

第一部分基础知识小结,基础数据类型到循环

# Python基础数据类型考试题 # 考试时间:两个半小时 满分100分(80分以上包含80分及格) # 一,基础题. # 1, 简述变量命名规范(3分) # 1.变量由字母.数字.下划线任意组成 # 2.不能以数字开头 # 3.不能使用python关键字 # 4.变量要具有可描述性 # 5.变量不能是中文 # 5.官网推荐骆峰体和下划线,这里推荐下划线 # 2,字节和位的关系.(2分) # 1字节 = 8位 # 3,'太白'使用utf-8编码时,占的位数和字节数,是多少?使用gbk编码时,占

kali学习日记第一篇 -- 基础知识

一.kali基础 1.kali是基于backtrack基础之上的渗透测试新工具,它基于Debian GNU/Linux系统,并且支持多种桌面环境,多种语言,apt软件包管理机制,自定义系统,支持各类硬件(树莓派),包含多种渗透测试知名开源框架,kali包含的开源项目社区氛围好,更新较快. 二.kali安装之后必要的几步操作  1.配置网络与远程管理 kali默认是不开启网卡的,在确保联网的情况下使用dhcp或static使网卡获取ip地址 1.[email protected]:~# servi

汇编第一章--基础知识梳理与总结

闲谈汇编之初,先说说计算机的硬件组成:运算器,控制器,存储器,输入设备,输出设备. 下图就是计算机的硬件组成框架: 在早期,机器语言是直接对硬件进行操作,但是机器语言是0和1的字符串,这就是的早期程序员的工作十分繁杂,如果0或者1有一位出错,那么整个程序就会崩掉了,那么如何解决这个问题呢? 汇编语言就应运而生了. 汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式. 程序员运用汇编语言书写指令提升了效率,可是计算机只能读懂机器指令,那么怎

汇编语言课堂总结1——第一章 基础知识

什么是汇编语言: 汇编语言是比机器语言高级,但依旧偏向于硬件的一种编程语言.比起C.C++.Java这些偏向于人的语言,在编写汇编程序时需要考虑更全面,要写的代码也要更多,但汇编程序的运行速度却是这些语言所不能比的.不同的CPU也有不同的汇编语言. 汇编语言的组成 and 指令vs.数据: 汇编语言由3类指令组成:汇编指令.伪指令和其他符号(注释.变量.标号.段等).其中,汇编指令有对应的机器码,而伪指令和其他符号则没有对应的机器码. 在内存中,不管是指令还是数据,都是以二进制的形式存储,两者的