测试日常笔记


Genymotion模拟器

简介

Genymotion 是一个非常快的 Android 拟器,秒级开机关机速度,傻瓜式安装,易于使用,支持绝大部分的模拟器功能与感应器,甚至支持语音、NFC蓝牙等等。
下载安装
1.下载地址: https://www.genymotion.com/download/ (下载with VirtualBox版本)
2.因为genymotion需要账号登陆,因此我们需要去官网创建账号,因此才可以登陆软件,去如下链接创建账号:https://wwwgenymotion.com/account/create/
3.创建好账号之后,回到刚刚装好的genymotion软件,输入帐号密码,点击next,选择Personal Use,继续next即可使用个人版

创建模拟器

1根据左侧设备分类选择设备类型,然后点击右上角- 号即可创建设备
2.创建设备之后下载完成即可启动。
3.使用adb devices可以检测设备是否连接,设备列表格式一般为: 模拟器ip+端口

adb devices
List of devices attached
192.168.46.101:5555 device
ARM****转换
Genymotion 是基于x86的不支持ARM架构。所以有些应用是基于ARM架构编译的就无法安装

解决方法:下载安装转换工具Genymotion ARM Translation 根据自己的模拟器系统版本下载对应的 zip 包,然后将包直接拖入到模拟器安装,安装完成后重启模拟器

测试内容

电量不足、存储空间不足、网络不稳定时,测试App是否能正确响应、正常运行

不断增加负载、不断增大数据吞吐量,用户增多,请求增多等以确定App的服务瓶颈,测试App运行时对移动设备的资源占用情况,包括内存、CPU消耗,App长期运行时耗电量、耗流量情况

CPU:过高直接crash掉

Adb命令:adb shell top (-h)来显示cpu等信息

僵尸进程. 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。

测试app中某一个单一进程对cpu的占用率是否异常

ios的xcode性能监控工具Instruments

Activity Monitor
监视CPU、内存、磁盘和网络使用统计信息跟踪进程的匿名虚拟内存和堆
Allocations
为对象提供类名和可选的retain/release历史记录
这个模板通过时间分析来度量应
Core Animation
用程序图形性能以及进程的CPu使用情况
这个模板跟踪Core Data文件系
Core Data
统活动,包括提取、缓存失败和保存
使用基于时间或时间的采样方法
Counters
收集性能监视器计数器(PMC)事件
这个模板提供有关电量使用以及
Energy Log
主要设备模块的基本开关状态的诊断信息
这个模板监视文件和目录活动,包括文件的打开关闭和调用、文
File Activity
件权限修改、目录创建、文件移动等
了解对游戏性能和平滑帧率至关
Game Performance
重要的关键性能领域
测量内存使用情况,检查泄漏内存,并按照类来提供对象分配的
Leaks
统计信息,以及所有活动分配和泄漏内存地址历史记录
通过提供应用程序、驱动程序和GPU层的跟踪信息来分析iOS.
Metal System Trace
tvOS和 macOS Matal 应用程序的性能


内存测试

安卓的内存管理机制是:和linux不一样,linux是如果进程结束了就会回收,但是安卓是保 留在内存中,当不够用的时候才会回收释放

Adb shell cat /proc/meminfo 查看内存信息,查看单个进程对内存的占用是否异常

使用命令adb shell procrank来获取各个应用的VSS、RSS、PSS、USS

VSS-Virtual Set Size虚拟耗用内存

RSS-Resident Set Size实际使用物理内存
PSS-Proportional Set Size按比例使用的物理内存

USS-Unique Set Size进程独自占用的物理内存

使用adb命令来测试指定进程包名的内存使用详细情况,命令格式如下:adb shell dumpsys meminfo [pkg or pid]

前面是adb命令,后面可以用python 导入csv os time 库等 csv.write生成图表展示CPU,内存使用情况

内存泄漏

使用static变量引起的,线程未回收,handler的使用,资源未关闭造成的(curse,close),bitmap占用过多内存未recycle

ios测试fps:

使用Instruments的core animation工具,测试内存

Fps帧率:越高更新越快 就越练来越连贯

android fps测试过程:

  • adb devices连接
  • 设置-开发者选项-监控-GPU呈现模式分析-勾选上In adb shell dumpsys gfxinfo
  • 获取设备当前打开的应用包名adb shell dumpsys window | grep mCurrentForcus
  • adb shell dumpsys gfxinfo com.youku.phone > C:\Users\Desktop\fps.txt

启动方式

冷启动,热启动 adb命令可以获取启动时间

adb shell am start -w com.you ku.phone/c om.youku. phone.Activitywelcome

ios使用instuments的time profile测试耗时毫秒

功耗电量测试

细致到单个进程耗电量

android:

1.收集电池的历史数据

adb shell dumpsys batterystats –enable full-wake-history

2.重置电池数据

adb shell dumpsys batterystats –reset

使用命令adb bugreport导出电量信息结果

android7.0以上:

adb bugreport C: \Users\Shuqing\Desktop\bugreport.zip

android7.0以下:

获取 bugreport信息(记录了从开机之后详细的dumpsys , dumpstate和logcat信息)adb bugreport > [path]bugreport.txt

Android 7.0以上系统版本:
adb bugreport C: \Users\Shuqing\Desktop \bugreport.zi p
/data/user_de/O/com.android. shell/files/bugreports/bugreport-meizu_M1822_…-01-44.zip: 1file pulled, 0 skipped. 15.4 MB/s (3393069 bytes in 0.210s)
.Android 7.0以下系统版本
获取 bugreport信息(记录了从开机之后详细的dumpsys , dumpstate和logcat信息)

adb bugreport > [path]bugreport.txt

获取dumpsys信息(获取系统信息:比如内存 CPU,accounts,activities,wifi等信息)

adb shell dumpsys batterystats >存放的电脑地址/batterystats.txt
或者获取指定的应用程序的dumpsys 信息:
adb shell dumpsys batterystats >包名〉存放的电脑地址/batterystats.txt

ios功耗测试

1.打开设置-开发者─Logging

2.打开Energy,点击开始录制

3.执行操作

4.完成后,设置-开发者─Logging,点击“stop recording”

5.连接设备,打开instrument,启动Energy Log,从设备导入数据

6.导入完成,查看数据

过度绘制测试

Android过度绘制测试

开启:设置-开发者选项-调试GPU过度绘制-选择GPU过度绘制区域

原色:无过渡绘制
蓝色:绘制一次(正常)

绿色:绘制二次(轻微)

浅红:绘制三次(中度)

深红:绘制四次(严重)

ios过度绘制测试

ios使用instuments的CoreAnimation测试,Color Blended Layer用来检测哪里发生了图层混合,并用红色标记出来,所以我们要尽可能减少红色区域。

Fiddler模拟丢包延迟

iOS手机上开发者工具也可以模拟网络环境 简便设置一些参数

Perfdog:性能测试工具 点击开始记录到结束时间大于10秒,传到后台里面可以查看数据结果,可以到处excel查看图表(上诉所有的指标)

安全测试:

抖音遭撞库攻击 账号密码泄露

渗透测试和安全测试

渗透测试:攻击者角度,成功入侵证明

安全测试:保护着角度,全面分析架构等问题,分析可能存在的隐患

api安全测试:http嗅探、客户端证书有效性、XSS/CSRF、越权访问(前端)、api dos攻击,syn postman astra

Web安全测试:aqi注入,url安全测试,xss,csrf burpsuite

App安全测试:代码反编译、中间人攻击、组件暴露、数据安全sql

Android四大组件:

Activity:界面组件,就是一个单独的窗口(如冷启动应用进入的界面就是launchable-activity)

Service:服务组件,用于在后台完成用户指定的操作(如后台音乐播放)

Content provider:内容组件,是一种数据共享型组件,用于向其他应用共享数据(如短信和联系人应用之间的数据共享)

Broadcast receiver:消息组件,监听/接收应用App发出的广播消息并做出响应(如电话呼入,耳机插入)

Apktool可以双向反编译,还可以生成签名

Sql注入:后端服务器php等有问题,欺骗表单提交过来的sql查询并执行(动态拼装sql,sql预处理语句) 是否加密 可以直接导出来查看的

Drozer:自动化测试漏洞

Activity组件暴露::export=true 就会导致越权,不用登录直接进入

Broadcast暴露:消息泄露或越权

Service暴露;越权

Contentprovider暴露:改密码等操作

Httpcanary:手机抓包

中间人攻击,两边都欺骗着 IP地址端口等

ios抓包 :stream 自动抓包,手动构建请求(postman)

僵尸进程:子进程比父进程先结束,但是父进程没有回收子进程,导致资源没有被释放

Ios的app是以沙盒方式存贮的可以通过xcode来找到沙盒里面的文件

沙盒校验点:

sqlite(查看工具:sqlite manager)

文件是否存储敏感信息,是否加密

文件是否被备份,是否有泄露的风险

Cookie

查看Cookie有效期(有效期不能短于登录Cookie的有效期)

敏感信息重点关注“登录信息,用户身份信息,服务器sql注入链接,管理员登录账号密码”一类信息

以及文件敏感信息是否加密等

Ios中又keychain最安全的存贮数据的地方实际上也是一个db

http安全:中间人攻击 没有校验服务器的证书,导致伪造证书,劫持等

脱壳:因为app store的app有加密,所以我们用dumpdecrepted工具来解密脱壳

mobSF 手机安全测试软件 可以生成报告 图标查看

苹果手机连接电脑

可以使用多种软件,包括但不限于iTunes和PP助手。以下是连接流程的概述:

iTunes:这是苹果公司官方提供的软件,用于连接iPhone和其他iOS设备到电脑上的一个应用程序。要使用iTunes,您需要访问苹果官网上下载并安装iTunes的安装包。安装后,通过USB数据线将您的iPhone或iPad连接到电脑,然后启动iTunes,按照屏幕提示操作即可完成连接。1

PP助手或其他第三方软件助手:这些辅助工具通常提供更直观的用户界面和额外的功能。如果您没有越狱,则只能使用iTunes。但如果有越狱,您可以尝试使用如361安全卫士、91助手或QQ电脑管家等其他第三方的手机助手软件来连接您的iPhone。

IRQ全称为Interrupt Request,即是”中断请求”的意思,IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,比如我们需要读取硬盘中的一段数据时,当数据读取完毕,硬盘就通过IRQ来通知系统,相应的数据已经写到指定的内存中了。

热更新

(Hot Update),也称热修复(Hot Fix),是指在不停机或重新启动的情况下,对软件或应用程序进行在线更新或修复的技术。这种更新方式可以缩短用户等待时间,提高用户体验,同时也为开发者提供了更好的版本控制和管理方式

ES服务器

ES服务器(Elasticsearch server)是一个基于Lucene库的实时全文搜索和分析引擎,能够实现快速、可靠的搜索和分析功能,适合大规模数据的处理和分析,也可用作日志分析、商业智能、安全分析等领域。ES服务器具有数据完备性,支持复杂的查询方式,同时也可以支持实时搜索,非常适合满足高吞吐量下的大数据需求。

ES对服务器的要求

  1. 内存要足够:ES服务器需要足够的内存来处理查询和索引,建议内存至少为32GB及以上;

  2. 处理器速度要快:ES服务器需要持续地进行分析和搜索,所以越快的处理器速度越好,建议使用至少2.4GHz的处理器;

  3. 存储要大:ES服务器需要处理大量的数据和文件,所以存储要大,建议使用至少1TB的硬盘存储。

ES服务器最大内存建议

建议ES服务器最大内存在32GB以上,因为ES服务器需要足够的内存来处理查询和索引,否则可能导致内存使用率过高和性能下降。

ES服务器默认密码

ES服务器默认密码为“changeme”,建议在安装和使用ES服务器时及时更改默认密码并设置安全访问控制。

Elasticsearch基本概念:

ES中有几个基本概念:索引(index)、类型(type)、文档(document)、映射(mapping)等。我们将这几个概念与传统的关系型数据库中的库、表、行、列等概念进行对比,如下表:

RDBS ES
数据库(database) 索引(index)
表(table) 类型(type)(ES6.0之后被废弃,es7中完全删除)
表结构(schema) 映射(mapping)
行(row) 文档(document)
列(column) 字段(field)
索引 反向索引
sQL 查询DSL
SELECT * FROM table GET http:// …
UPDATE table SET PUT http://……
DELETE DELETE http://…

索引(index):
索引是ES的一个逻辑存储,对应关系型数据库中的库,ES可以把索引数据存放到服务器中,也可以sharding(分片)后存储到多台服务器上。每个索引有一个或多个分片,每个分片可以有多个副本。

类型(type):
ES中,一个索引可以存储多个用于不同用途的对象,可以通过类型来区分索引中的不同对象,对应关系型数据库中表的概念。但是在ES6.0开始,类型的概念被废弃,ES7中将它完全删除。删除type的原因:

我们一直认为ES中的“index”类似于关系型数据库的“database”,而“type”相当于一个数据表。ES的开发者们认为这是一个糟糕的认识。例如:关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。
我们都知道elasticsearch是基于Lucene开发的搜索引擎,而ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的。举个例子,两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。
去掉type能够使数据存储在独立的index中,这样即使有相同的字段名称也不会出现冲突,就像ElasticSearch出现的第一句话一样“你知道的,为了搜索····”,去掉type就是为了提高ES处理数据的效率。
除此之外,在同一个索引的不同type下存储字段数不一样的实体会导致存储中出现稀疏数据,影响Lucene压缩文档的能力,导致ES查询效率的降低

alias:可以给 index 添加零个或多个alias,通过 alias 使用index 和根据index name 访问index一样,但是,alias给我们提供了一种切换index的能力,比如重建了index,取名● customer_online_v2,这时,有了alias,我要访问新 index,只需要把 alias 添加到新 index 即可,并把alias从旧的 index 删除。不用修改代码。

文档(document):
存储在ES中的主要实体叫文档,可以理解为关系型数据库中表的一行数据记录。每个文档由多个字段(field)组成。区别于关系型数据库的是,ES是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一标识。

映射(mapping):
mapping是对索引库中的索引字段及其数据类型进行定义,类似于关系型数据库中的表结构。ES默认动态创建索引和索引类型的mapping,这就像是关系型数据中的,无需定义表机构,更不用指定字段的数据类型。当然也可以手动指定mapping类型。

ES集群核心概念:

1、集群(cluster)
一个ES集群由多个节点(node)组成, 每个集群都有一个共同的集群名称最为标识

2、节点(node)
一个es实例即为一个节点,一台机器可以有多个节点,正常使用下每个实例都应该会部署在不同的机器上。ES的配置文件中可以通过node.master、 node.data 来设置节点类型

  • node.master: true/false 表示节点是否具有成为主节点的资格
  • node.data: true/false 表示节点是否为存储数据
  • client_node,主要是起到请求分发的作用,类似路由

node节点的组合方式:

  • 主节点+数据节点: 默认方式,节点既可以作为主节点,又存储数据
  • 数据节点: 节点只存储数据,不参与主节点选举
  • 客户端节点: 不会成为主节点,也不存储数据,主要针对海量请求时进行负载均衡

3、分片(shard):
如果我们的索引数据量很大,超过硬件存放单个文件的限制,就会影响查询请求的速度,ES引入了分片技术。一个分片本身就是一个完成的搜索引擎,文档存储在分片中,而分片会被分配到集群中的各个节点中,随着集群的扩大和缩小,ES会自动的将分片在节点之间进行迁移,以保证集群能保持一种平衡。分片有以下特点:

(1)ES的一个索引可以包含多个分片(shard);
(2)每一个分片(shard)都是一个最小的工作单元,承载部分数据;
(3)每个shard都是一个lucene实例,有完整的简历索引和处理请求的能力;
(4)增减节点时,shard会自动在nodes中负载均衡;
(5)一个文档只能完整的存放在一个shard上
(6)一个索引中含有shard的数量,默认值为5,在索引创建后这个值是不能被更改的。
(7)优点:水平分割和扩展我们存放的内容索引;分发和并行跨碎片操作提高性能/吞吐量;
(8)每一个shard关联的副本分片(replica shard)的数量,默认值为1,这个设置在任何时候都可以修改。

2、副本:replica
副本(replica shard)就是shard的冗余备份,它的主要作用:

  • 冗余备份,防止数据丢失;
  • shard异常时负责容错和负载均衡;

ES的特性:

速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。
分布式:横向扩展非常灵活
全文检索:基于lucene的强大的全文检索能力;
近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
RESTful API:JSON + HTTP

插件HEAD

elasticsearch-head是一个界面化的集群操作和管理工具

Android文件存储路径

手机存储分为三块区域
1.内部存储
2.SD卡存储(Primary External Storage)
3.外置sd卡(Secondary External Storage)

内部存储

1.RAM 运行时内存
2.ROM 内部存储,即data目录

*Environment.getDataDirectory().getPath()
/data(没有root,无法打开)

1./data/app(存放着安装的apk)
2./data/data(APP的存储内容)
data/data/<包名>/shared_prefs
data/data/<包名>/databases
data/data/<包名>/files
data/data/<包名>/cache(context.getCacheDir())
3./mnt/ (挂载点)

​ /mnt/adcard0/ 存储卡挂载目录

​ /mnt/udisk/ U盘挂载目录

4./dev/(Linux系统文件夹)
5./system/(系统配置)下的:

app/ 存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是/data/app文件夹中。

bin/ 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)

etc/ android 系统的配置文件,比如APN接入点设置等核心配置。

fonts/ 这里面保存着系统的字体,标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常.如果你有root权限,可以往里添加自己喜欢的字体,比如雅黑

framework/ 主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
lib/里面保存的是系统底层类库,里面很多都是框架层的实现文件,一般以.so后缀结尾类似windows下的dIl文件

usr/ 用户文件夹,包含共享、键盘布局、时间区域文件等。

media/
audio/ 保存着安卓系统默认的铃声闹铃提醒alarms/
notificatinos/ 短信或提示音
rignstones/ 来电铃声
ui/ 界面音效,比如键盘敲击声

/sbin/ 系统工具,比如 ps/cp/pm等

SD卡存储(可读写)

外部存储路径:
Environment.getExternalStorageDirectory().getPath()
/storage/emulated/0

九大公有目录:

Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS) ;
//storage/emulated/0/Alarms
Environment.getExternalStoragePublicDirectory(DIRECTORY_DCIM);
//storage/emulated/0/DCIM
Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS);
//storage/emulated/0/Download
Environment.getExternalStoragePublicDirectory(DIRECTORY_MOVIES);
//storage/emulated/0/Movies
Environment.getExternalStoragePublicDirectory(DIRECTORY_MUSIC);
//storage/emulated/0/Music
Environment.getExternalStoragePublicDirectory(DIRECTORY_NOTIFICATIONS);
//storage/emulated/0/Notifications
Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES);
//storage/emulated/0/Pictures
Environment.getExternalStoragePublicDirectory(DIRECTORY_PODCASTS);
//storage/emulated/0/Podcasts
Environment.getExternalStoragePublicDirectory(DIRECTORY_RINGTONES);
//storage/emulated/0/Ringtones

可通过context.getExternalFilesDir(String type)获取,也由上直接获取,不建设使用公有目录存储App数据

私有目录:

getExternalCacheDir()
//storage/emulated/0/Android/data/<包名>/cache/

context.getObbDir()
//storage/sdcard/Android/obb/

外置SD卡(可读,无法写入)

应用管理清除数据的清楚目录:

清除缓存:将外部私有数据下的cache包(/storage/emulated/0/Android/data/<包名>/cache)清除,将内部数据下的cache包下的内容(/data/data/<包名>/cache/)清除 。
清楚数据:将外部私有数据的data下包名(/storage/emulated/0/Android/data/<包名>/)清除,将内部数据包名下的所有内容(/data/data/<包名>/)清除;

文件夹

1./acct/ 系统回收站,删除的系统文件
2./cache/ 缓存

3./data/ 用户的所有程序相关数据

 app/    所有用户安装的apk文件

4./proc/ 运行时的文件

5./dev/设备文件,Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统
6./storage/ 手机存储设备

​ /sdcard0/ 第一块SD存储卡

iOS设备的系统常用文件夹的位置

2、【/private/var/mobile/Media /DCIM】 相册照片文件存放目录【/Library/Wallpaper】 系统墙纸的存放目录

3、【/private/var/mobile/Media/DCIM/999APPLE】 系统自带截屏文件存放路径,截屏方法:按住Power并快速按一下Home键

4、【/System/Library/Audio/UISounds】 系统声音文件的存放目录

5、【/private/var/mobile/Media /ipad Recorder】 录音文件存放目录

6、【/private/var/root/Media/EBooks】 电子书存放目录

7、【/private/var/mobile /Media/iTunes_Control/Music】 iTunes上传的多媒体文件(例如MP3、MP4等)存放目录,文件没有被修改,但是文件名字被修改了,直接下载到电脑即可读取。

8、【/private/var/mobile /Library/AddressBook】 系统电话本的存放目录。

9、【/private/var/mobile/Media/Maps】 离线地图目录,把地图文件夹放到该目录下,文件夹赋予777权限

10、【/Applications】 常用软件的安装目录

11、【/Applications/Preferences.app/zh_CN.lproj】 软件Preferences.app的中文汉化文件存放目录

12、【/private/var/mobile/Library/Downloads】 ipa文件存放目录,把下载来的ipa文件放到此目录下,用Installous安装

13、【/private/var/mobile/Applications】 通过AppStore和iTunes安装的程序都在里面。

14、【/private/var/run】 系统进程运行的临时目录,查看这里可以看到系统启动的所有进程

15、【/bin】 和linux系统差不多,是系统执行指令的存放目录。

16、【/private/var/logs/CrashReporter】 系统错误记录报告

17、【/private/var/mobile】 新刷完的机器,要在这个文件夹下建一个Documents的目录,很多程序都要用到。

18、【/private/var/stash】 这个文件夹下的Applications目录里面是所有通过Cydia和app安装的程序,Ringtones目录里是所有的手机铃音,自制铃音直接拷在里面即可,Themes目录里是所有Winterboard主题,可以手工修改。

19、【/var/stash/Themes.XXXXXX】 winterboard主题文件存放路径

20、【/System/Library/Fonts/Cache】 系统字体目录,要替换的字体放在该目录下,权限644不变

21、【/private/var/mobile/Library/Keyboard】 系统拼音字库文件位置

apk结构

lib/

res/
assets/

classes(n).dex

resources.arsc

AndroidManifest.xml

移动端 app 分类

Native App:原生app 手机应用程序

Hybrid App:混合型app手机应用程序

Web App:基于 Web 的 app 手机应用程序

Activity
Window
View
ViewGroup

开启开发者选项

不锁定屏幕(充电时不锁屏休眠)

蓝牙数据包日志(进行bug测试,方便同蓝牙下的其他人员查看日志)

OEM解锁(刷机时,需要解除手机设备锁)

DSU Loader(安卓11开始,下载最新GSI,无需输入任何快速启动或adb命令)

USB 调试(连接usb启动调试模式)

无线调试(pc端和客户端在同一个WLAN下)

选择调试应用(允许开发者在电脑上调试手机应用)

日志记录器缓冲区(记录移动电话系统日志文件)

选择模拟位置信息应用(地图软件定位其他到地方)

显示点按(触摸)操作反馈(点击屏幕有白色圆点出现)

指针位置(显示当前触摸点坐标x,y)

时间悬浮窗(显示当前时间,时分秒)

显示布局边界(用于剪辑边界,边距等)

启动GPU调试层(提升手机流畅性和图像,增加手机发热,耗电量)

显示刷新率(不是实时的,当前屏幕最高能飙到多少帧率)

调试 GPU 过渡绘制(关闭,显示红色过度绘制,显示适合绿色弱视者查看的区域)

系统跟踪(将设备活动保存到跟踪文件的Android工具,用于性能)

强制允许将应用写入外部存储设备(强制应用可以安装写入到sd卡)

最小宽度(用于调整缩放,数值设置在360-1000,范围外会变成砖头机)

强制将活动设为可调整大小(强制让不支持分屏的app开启分屏模式 ,开启后重启)

演示模式(显示固定时间,满格信号,电量图标)

功耗检测(上:帧速率检测工具,中:当前时间检测工具,下:进程活动检测工具)

显示所有“应用程序无响应ANR”

bug

太占用手机内存
太耗电和流量
在使用应用的过程中,点击某一个事件进人的页面出现白屏的闪动等

adb常用命令

包括三个部分采用了客户端-服务器(C/S)模型,
客户端client

adb -P start-server

服务端server(默认):5037
守护进程 daemon

adb devices -l

返回设备序列号和model(设备名称)

adb [-d |-e |-s ]

-d:指定当前唯一通过 USB 连接的 Android 设备为命令目标

-e:指定当前唯一运行的模拟器为命令目标

-s:指定相应serialNumber号的设备(adb devices的参数)/模拟器为命令目标

adb get-state

device 正常

offine 连接出现异常,设备无响应

unauthorized未授权

adb kill-server

普通安装:adb install <apk路径>

覆盖安装:adb install -r <apk路径>

完全卸载:adb uninstall <包名>

保留配置文件:adb uninstall -k <包名>

adb shell cmd package install -k <包名>

截图:adb shell screencap <设备路径>

录屏:adb shell screenrecord <设备路径>

adb shell dmesg 会打印出内核的调试信息

# 点亮屏幕
adb shell input keyevent 224

# 熄灭屏幕
adb shell input keyevent 223

查看屏幕分辨率

adb -s <设备序列号> shell wm size

查看设备型号

adb -s <设备序列号> shell getprop ro.product.model

查看Android系统版本

adb -s <设备序列号> shell getprop ro.build.version.release

发布端口 可以设置任意的端口号,做为主机向模拟器或设备的请求端口。 如:adb forward tcp:5555 tcp:8000

adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。

adb root 或者 adb shell然后su` 后执行命令

adb unroot 命令

打开飞行模式: adb shell settings put global airplane_mode_on 1

关闭飞行模式: adb shell settings put global airplane_mode_on 0

Activity管理器(am)工具发出命令以执行各种系统操作

启动应用:adb shell am start -n<包名>/<Activity名>

强制停止应用:adb shellam force-stop <包名>

软件包管理器(pm)工具发出命令,对设备上安装的应用软件包执行操作和查询

显示所有应用:adb shellrpm list packages

只显示系统应用:adbshellpmlist packages -s

只显示第三方应用:adb shell pm list packages -3

列出所有测试软件包:adb shell pm list instrumentation

获取模拟器所有包名并且包括APK路径 adb shell pm list packages -f

删除与软件包关联的所有数据:adb shell pm clear <包名>

调用dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出

获取前台包名:adb shell dumpsys activity | grep mFocusedActiviby

检查输入诊断:adb shell dumpsys input

测试界面性能fps:adb shell dumpsys gfxinfo <包名>

检查电池诊断:adb shell dumpsys batterystats –charged<包名>

Current Battery Service state:
Ac powered: true
USB powered: false
Wireless powered:false
Max charging current:2000000#最大充电电流;mA
status:2 #电池状态:2:充电状态,其他数字为非充电状态
health:2 #电池健康状态:只有数字2表示good
present: true #电池是否安装在机身
scale:100 #电量:百分比level:81
temperature:353 #电池温度,单位是0.1摄氏度
voltage:4108 #电池电压

technology: Li-poly #电池种类

查看CPU信息:adb shell dumpsys cpuinfo

查看内存信息:adb shell dumpsys meminfo

liux/mac:adb shell top -d 1| grep “包名” (每隔1秒打印一次)

windows:adb shell top | findstr “包名”

获取内存占用情况统计信息:adb shell dumpsys procstats –hours 3

打印链接设备的log信息

V-明细 verbose(最低优先级)
D-调试 debug
I-信息 info
W-警告 warn
E-错误 error
F-严重错误 fatal
S-无记载silent(最高优先级,绝不会输出任何内容

crash 闪退

exception异常
force closed 强制退出

anr (application no response)程序无响应

屏幕输出日志:adb logcat
通过标签过滤:adb logcat -s 标签

显示时间:adb logcat -v time

输出所有信息:adb logcat -v long

adb logcat -v color 使用不同的颜色来显示优先级

输出日志到app上:adb logcat -f

输出日志到pc上:adb logcat -v time > log.txt

清除旧日志信息:adb logcat -c

adb logcat -v time “*:W” 打印 warning 及以上级别的日志
adb logcat ActivityManager:D ‘*:S’
过滤tag 为ActivityManager,level为Debug及以上级别的日志

dump 出当前窗口的UI布局信息
前窗口的UI布局简化信息:adb shell uiautomator dump –compressed

指定输出文件:adbshell uiautomator dump file <设备路径>

模拟输入 adb shell input text 字符串(不支持中文)

模拟鼠标点击 adb shell input tap X Y

模拟鼠标滑动 adb shell input swipe X1 Y1 X2 Y2

返回键:adb shell input keyevent 4

Home键:adb shell input keyevent 3(置应用于后台运行

音量放大:adb shell input keyevent 24

音量缩小:adb shell input keyevent 25

adb-monkey测试

monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。简而言之,就是利用工具模拟人的操作,如触摸屏幕,滑动trackball,按键,对手机app进行大量的随机的点按操作。

目的是测试app在大量用户随机操作下是否会crash(崩溃)和ANR无响应现象

adb shell monkey -vvv <事件数>

-v ,用于指定反馈信息级别(就是日志的详细程度)

-v,只提供启动提示、测试完成提示和最终结果等少量信息;

-v -v,较为详细的日志,包括每个发送到activity的时间信息;

-v -v -v,最详细的日志,包括测试中选中/未选中的activity信息

-s 用于指定伪随机数生成器都seed(种子)值,如果使用相同的种子值重新运行monkey,他将生成相同的事件,常用于bug复现

注意:-s需要跟在包名后,次数前

-p 用于约束限制,参数用于指定一个或多个包

–pct-事件类别+事件类别百分比;百分比总数不超过100

–pct-touch:触摸事件(设定点击事件百分比)

–pct-motion :滑动事件(设定动作事件百分比

–pct-trackball:轨迹球事件(设定轨迹球事件百分比)

–pct-nav :导航事件( 设定基本导航事件百分比,比如输入设备上、下、左、右键

–pct-majornav:主要导航事件(设定主要导航事件百分比,比如中间键、返回键、菜单键 )

–pct-syskeys:系统按键事件( 设定系统导航事件百分比,比如H0ME键、BACK建、拨号键及音量键

–pct-appswitch:activity之间的切换(设定启动Activity事件百分比)

–pct-pinchzoom:缩放事件

–pct-rotation:屏幕旋转事件

–pct-flip:键盘事件
–pct-anyevent :任意事件(设定不常用事件百分比)

–throttle <数字> 每个事件结束后的间隔时间

–ignore-crashes:忽略崩溃

–ignore-timeouts:忽略超时

****–monitor-native-crashes,监视本地崩溃代码;******监视并报告Android系统中本地代码的奔溃事件

–ignore-security-exceptions:忽略安全异常

–kill-process-after-error:发生错误后直接杀掉进程

–dbg-no-events:初始化启动的activity,但是不产生任何事件

–hprof:指定该项后在事件序列发送前后会立即生成分析报告

–wait-dbg:直到连接了调试器才执行monkey测试

–bugreport:当ANR,系统无响应,Crash的时候获得bugreport

adb shell monkey 1000 >文件路径/文件名

adb shell logcat -v time ‘*:E’ > monkey.log

指定一个包adb shell monkey -p 包名 [数件数]

指定多个包adb shell monkey -p 包名 -p 包名 [事件数]

Dos命令

tasklist 查看进程
netstat -a 查看端口情况
netstat -aon|findstr 5037 查看占用端口的进程PID 5037为adb默认端口
tasklist /fi “PID eq 15448” 通过PID查看所有进程
taskkill /pid 15448 /f 杀死占用端口的进程

或者taskkill /f /fi “PID eq 8448”

Drozer安装使用

运行:

adb forward tcp:31415 tcp:31415

drozer.bat console connect

查包名:

通过输入安装包的部分关键字查找包全称 run app.package.list -f 安装包部分关键字

run app.package.list -f ifree

使用app.package.info模块查看apk基本信息

run app.package.info -a com.example.demo

使用app.package.attacksurface模块识别攻击面

dz> run app.package.attacksurface com.ifreetalk.ftalk
Attack Surface:
11 activities exported
5 broadcast receivers exported
1 content providers exported
6 services exported

问题:

报错ImportError: No module named google.protobuf,需要安装依赖,直接安装显示超时,那么我们使用镜像安装。

pip国内镜像

  阿里云 http://mirrors.aliyun.com/pypi/simple/

  中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

  豆瓣(douban) http://pypi.douban.com/simple/

  清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

  中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

临时使用:可以在使用pip的时候在后面加上-i参数,指定pip源

安装依赖如下:

pip2 install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple

pip2 install pyopenssl -i https://pypi.tuna.tsinghua.edu.cn/simple

pip2 install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple

pip2 install twisted -i https://pypi.tuna.tsinghua.edu.cn/simple

pip2 install service_identity -i https://pypi.tuna.tsinghua.edu.cn/simple

原文链接:https://blog.csdn.net/SouthWind0/article/details/108931740

Drozer获取目标包名中文乱码和模块报Error 0

根据路径找到文件[python2](https://so.csdn.net/so/search?q=python2&spm=1001.2101.3001.7020)\Lib\site-packages\drozer\modules\app\package.py

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
        if arguments.no_app_name:
            self.stdout.write(u"%s\n" % application.packageName)
        else:
            self.stdout.write(u"%s (%s)\n" % (application.packageName, self.packageManager().getApplicationLabel(application.packageName)))

https://blog.csdn.net/qq_34594929/article/details/128873722

重启一遍Drozer,在打开Drozer,通过设置基本解决了问题

更新测试

升级测试-APP升级。web不涉及升级

1)下载升级 : Android ios 区分,网络类型2G/3G/4G,wif,不同机型;/

2.新旧版本兼容:微信–旧版本 新版本 -后台接口

3.升级后版本使用情况:a.新功能;老功能–回归;老数据升级后是不是正常–存在 查看显示

4.文档–静态检查

代码层(Junit,Pytest/unitest)-单元测试-》接口层(jmater,postman,loadruner,robot framework)-集成测试-》UI层(appinium,airtest,poco,selenium)-自动化测试


文章作者: 读序
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 读序 !
  目录