APP测试面试题汇总基础+进阶

news2024/11/27 14:43:17

目录

一、基础篇

1、请介绍一下,APP测试流程?

2、APP测试需要提前准备哪些测试资源?

3、APP测试和Web测试的区别?

1.系统结构方面

2.性能方面

3.兼容性方面

4、相对于 Wed 项目,APP有专项测试

5、Android手机和IOS手机,系统有什么区别?

6、IOS和Android的APP测试有什么区别?

7、介绍一个APP抓包工具?

8、APP日志如何抓取?

9、常用的adb命令有哪些?

1.查看帮助手册列出所有的选项说明及子命令:

10、adb三个组件是指?

二、进阶篇

1、介绍一下Android四大组件?

2、Activity生命周期?

3、请介绍一下,Android SDK中自带的几个工具?

4、你所了解的APP测试工具?

5、介绍一下冷启动、暖启动、热启动、首屏启动?

6、谈谈对冷启动的理解?

总结


一、基础篇

1、请介绍一下,APP测试流程?

APP测试流程与web测试流程类似,分为如下七个阶段:

1.根据需求说明书编写测试计划;

2.制定测试方案,主要是测试任务、测试人员和测试时间的分配;

3.测试准备,包括搭建测试环境,准备测试数据,确定测试方法;

4.测试用例的设计与编写,进行用例评审及补充完善;

5.执行测试时首先进行冒烟测试,然后对主功能流程进行测试,包括客户端的单个功能模块,及功能业务逻辑功能交互,回归测试;

6.提交测试结果,包括测试用例,测试计划;

7.日常维护性测试;

APP测试周期可根据项目的开发周期来确定测试时间,一般测试时间为两三周,根据项目情况以及版本质量可适当缩短或延长测试时间。

2、APP测试需要提前准备哪些测试资源?

具体要准备的测试资源,根据实际项目来,可以从以下几个方面出发:

1.IOS设备、Android设备(选取市面上主流手机产品);

2.支付宝/银联支付的项目,需要提前申请支付宝/银联账户等等;

3.有秒杀专题的题目,需要规划秒杀时间表;

4.有优惠券使用的项目,需要添加优惠券数据;

3、APP测试和Web测试的区别?

单纯从功能测试的层面上来讲的话,APP 测试、web 测试在流程和功能测试上是没有区别的。

相同点:

1.同样的测试用例设计方法;

2.同样的测试方法:都会依据原型图或效果图检查UI;

3.测试页面载入和翻页的速度、登录时长、内存是否溢出等;

4.测试应用系统的稳定性;

不同点:

1.系统结构方面

  • web项目,b/s架构,基于浏览器的;web测试只要更新了服务器端,客户端就会同步更新。

  • app项目,c/s结构的,必须要有客户端;app 修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍。

2.性能方面

  • web项目 需监测 响应时间、CPU、Memory;

  • app项目 除了监测 响应时间、CPU、Memory外,还需监测 流量、电量等;

3.兼容性方面

  • web项目:浏览器(火狐、谷歌、IE等);操作系统(Windows7、Windows10、Linux等)。

  • app项目:设备系统:iOS(ipad、iphone)、Android(三星、华为、联想等) 、Windows(Win7、Win8)、OSX(Mac);手机设备可根据 手机型号、分辨率、屏幕尺寸不同。

4、相对于 Wed 项目,APP有专项测试

1)干扰测试:中断,来电,短信,关机,重启等。

2)弱网络测试(模拟2g、3g、4g、5g,wifi网络状态以及丢包情况);网络切换测试(网络断开后重连、3g切换到4g、5g/wifi 等)。

3)安装、更新、卸载,中断、前后台切换。

  • 安装:需考虑安装时的中断、弱网、安装后删除安装文件,全新安装、升级安装、第三方工具安装等情况;

  • 卸载:需考虑第三方工具卸载、直接卸载卸,载后是否删除app相关的文件;

  • 更新:分强制更新、非强制更新、增量包更新、断点续传、弱网状态下更新;

  • 中断:来电中断、短信中断、闹钟中断、手机锁定、手机断电、手机死机;

4)界面操作:关于手机端测试,需注意手势,横竖屏切换,多点触控,前后台切换。

5)安全测试:安装包是否可反编译代码、安装包是否签名、权限设置,例如访问通讯录等。

6)边界测试:可用存储空间少、没有SD卡/双SD卡、飞行模式、系统时间有误、第三方依赖(QQ、微信登录)等。

7)权限测试:设置某个App是否可以获取该权限,例如是否可访问通讯录、相册、照相机等。

5、测试工具方面

  • 自动化工具:APP 一般使用 Appium; Web 一般使用 Selenium;

  • 性能测试工具:APP 一般使用Monkey、 JMeter; Web 一般使用 LR、JMeter;

5、Android手机和IOS手机,系统有什么区别?

1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。

IOS 沙盒运行机制:

  • 每个程序都有自己的虚拟地址空间。所以,程序之间不能进行访问。

  • 默认只会将应用的最后运行数据,记录在RAM里面。

Android 虚拟机运行机制:

  • 所有的应用程序都是运行在虚拟机中,用户界面其实是由虚拟机传递的,并且通过虚拟机,Android的任何程序都就可以轻松访问其他程序文件。

  • 所有的Android的应用程序都是运行在RAM里面的,所以会发现有时候Android用着用着就开始有点卡顿。

2.两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。

3.IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。

6、IOS和Android的APP测试有什么区别?

1.物理按键:Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;iOS所有的返回上一层,只能靠页面功能实现。

2.多分辨率测试:Android端20多种;IOS较少。

3.手机操作系统:Android较多,IOS较少且不能降级,只能单向升级;新的IOS系统中的资源库不能完全兼容低版本中的IOS系统中的应用,低版本IOS系统中的应用调用了新的资源库,会直接导致闪退。

4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等。

5.push测试:Android点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;IOS点击home键关闭程序和屏幕锁屏的情况(红点的显示)。

6.安装卸载测试:Android可以通过手机自带的应用市场或者是第三方的手机助手进行下载,下载和安装的平台和工具和渠道比较多;IOS主要有app store,iTunes和testflight下载。

7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号)。

8.支付方式:对于一些有内购功能的APP,Android直接调用第三方支付渠道完成支付;IOS需要先在APP store里绑定支付方式,然后通过APP store去完成支付操作。

9.消息推送机制:Android使用第三方或者自建平台进行消息推送;IOS的消息推送渠道由苹果官方提供。

7、介绍一个APP抓包工具?

一般用Fiddler,主要用来做app抓包使用,先在Fiddler客户端做好各项配置,端口设置为8888;然后在手机上设置代理,就可以抓包,主要看的是服务器返回的值、还能够修改传入参数、传出的参数、模拟网络延时,构造不同场景。

8、APP日志如何抓取?

  • 可以使用adb命令:adb logcat | find "com.sankuai.meituan" >d:\test.txt

  • 也可以用ddms抓取,手机连上电脑,打开ddms工具;

  • 或者在Android Studio开发工具中,打开DDMS;

9、常用的adb命令有哪些?

1.查看帮助手册列出所有的选项说明及子命令:

adb help

2. 获取设备列表及设备状态:

adb devices

3.安装应用:adb install 路径\xx.apk, 安装应用;adb install -r 重新安装。

adb install

adb install -r

4. 获取设备的状态,设备的状态有 device , offline , unknown3种,其中device:设备正常连接,offline:连接出现异常,设备无响应,unknown:没有连接设备。

adb get-state

5.卸载应用:adb uninstall <包名>, 后面的参数是应用的包名,区别于 apk 文件名。

adb uninstall 

6.将 Android 设备上的文件或者文件夹复制到电脑本地:adb pull  <远程路径> <本地路径>, 如复制 Sdcard 下的 pull.txt 文件到 D 盘:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt。

adb pull 

7.推送本地文件至 Android 设备:adb push  <本地路径> <远程路径>, 如推送 D 盘下的 ITester.txt 至 Sdcard:adb push d:\ITester.txt sdcard/   (注意sdcard 后面的斜杠不能少)。

adb push

8.结束和启动adb服务:adb kill-server /adb start-server , 结束 adb 服务/启动 adb 服务,通常两个命令一起用,设备状态异常时使用 kill-server,运行 start-server 进行重启服务。

adb kill-server

adb start-server

9.打印及清除系统日志:adb logcat , 打印 Android 的系统日志 ;adb logcat -c,清除日志。

adb logcat

adb logcat -c

10.查找包名/活动名

adb logcat | findstr START

10、adb三个组件是指?

ADB作为一个客户端/服务器架构的命令行工具,主要由3个部分组成。

  • adb clent(客户端):可以通过它对Android应用进行安装、卸载及调试。

  • adb service(服务器):管理客户端到Android设备上abd后台进程的连接,负责管理client和damon进行通信。  

  • adb daemon(守护进程):运行在Android设备上的adb后台进程。

                     

二、进阶篇

1、介绍一下Android四大组件?

Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。

  • Activity:应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。

  • BroadcastReceiver广播接收器:应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

  • ContentProvider内容提供者:内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

  • Service服务:是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务仍然能够保持正常运行,不过服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。

2、Activity生命周期?

生命周期即活动从开始到结束所经历的各种状态,从一个状态到另一个状态的转变,从无到有再到无,Activity本质上有四种状态:

  • 运行(Active/Running):Activity处于活动状态,此时Activity处于栈顶,是可见状态,可以与用户进行交互。

  • 暂停(Paused):当Activity失去焦点时,或被一个新的非全面屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此刻并不会被销毁,只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还在,只有在系统内存紧张的情况下,才有可能被系统回收掉。

  • 停止(Stopped):当Activity被系统完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时已不在可见,但是资源还是没有被收回。

  • 系统回收(Killed):当Activity被系统回收掉,Activity就处于Killed状态。

如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。

在上面的四中常有的状态之间,还有着其他的生命周期来作为不同状态之间的过渡,用于在不同的状态之间进行转换。

3、请介绍一下,Android SDK中自带的几个工具?

有如下几个工具:

  • ddms:Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik[虚拟机]调试监控服务。

  • monkey:Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。

  • uiautomator:UIAutomator是Eclipse自带的用于UI自动化测试工具,可仿真APP上的单击、滑动、输入文本等操作。

  • monitor:同uiautomator

  • adb:ADB的全称为Android Debug Bridge,就是起到调试桥的作用。通过ADB我们可以在Eclipse中方面通过DDMS来调试Android程序,就是debug工具。

4、你所了解的APP测试工具?

常用的APP测试工具如下,,查看对应工具地址。

APP自动化测试工具:

  • Appium

  • Airtest

  • uiautomator2(python)

APP稳定性测试工具:

  • Monkey

  • MonkeyRunner

  • Maxim

  • UICrawler

APP性能测试工具:

  • GT

  • Perfdog

  • SoloPi

APP弱网测试&抓包工具:

  • QNET

  • Fiddler

  • Charles

APP兼容性测试工具:

  • TestIn

  • 腾讯优测

  • 百度MTC

  • 阿里MQC

APP安全测试工具:

  • OWASP ZAP

  • Drozer

  • MobSF

  • QARK

5、介绍一下冷启动、暖启动、热启动、首屏启动?

APP启动会发生多个事件,测试人员需要知道整个环节是否出现问题,需要了解到具体是哪个环节存在问题:

  • 冷启动:当进程不存在的时候,从进程创建开始到界面的展示的过程;

  •  暖启动:有一部分资源已经存在,进程存在,相对于热启动要消耗更多资源。当用户退出应用程序时,进程还会存在,暖启动相较于冷启动只是少了进程的创建;

  • 热启动:大部分资源都在,只是应用之间的切换;

  • 首屏启动:第一屏加载完整;

标准:

  • 冷启动:需要5秒甚至更长;

  • 暖启动:需要2秒甚至更长;

  • 热启动:需要1.5秒甚至更长;

整个启动过程可以用adb工具进行分析,利用adb logcat获取启动数据,或者录屏,使用ffmpeg拆帧分析。

首先定义一个变量,这个变量填写用到的包名。

清除缓存数据:

停止进程:

通过以上命令就做好了冷启动的环境,下面启动app并获取数据。启动App

  • -S表示启动之前先停止应用进程

  • -W是表示等待对应的activity启动完成

获取数据:

获取的时间如下:

6、谈谈对冷启动的理解?

应用的启动可以分为冷启动,热启动和温启动,而启动最慢、耗时最长的就是冷启动。

冷启动开始时,系统会依次执行三个任务去启动APP:

  • 加载和启动应用程序;

  • APP启动后,立即创建一个空白的启动Window;

  • 创建APP的进程;

在这三个任务执行后,系统创建了应用进程,那么应用进程接下来会执行下一步:

  • 创建APP对象;

  • 开启一个主线程;

  • 创建启动页的Activity;

  • 加载View;

  • 布局view到屏幕;

  • 进行初始绘制显示视图;

当应用进程完成初始绘制之后,系统进程用启动页的Activity来替换当前显示的空白Window,这个时刻用户就可以使用App了。

总结

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,与我一起学习交流。

                                                                     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345400.html

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

相关文章

七种方式实现高并发秒杀

新建skill模块 pom依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId>…

@Intercepts为基础实现数据完整性保护

本文以Intercepts为基础&#xff0c;通过拦截器的方式拦截数据库操作包括query、insert、update、delete操作对数据的完整性保护。Intercepts是mybatis中的一个常用拦截器注解&#xff0c;表明当前对象是一个拦截器&#xff0c;当前类通过implements Interceptor实现Intercepto…

cuda性能分析工具

NVIDIA nvprof / nvvpNSight系列Nsight Systems本地使用远程使用结果分析Nsight Compute本地使用远程使用结果分析NVIDIA nvprof / nvvp 由2008年起开始支持的性能分析器&#xff0c;交互性好&#xff0c;利于使用记录运行日志时使用命令nvprof可视化显示日志时使用命令nvvp&a…

SpringCloud+Nacos+Gateway

SpringCloudNacosGatewaySpringBoot整合GatewayNacos一. 环境准备1. 版本环境2. 服务环境二. 实战1.创建用户服务2.创建订单服务3.创建网关服务4.测试三. 避坑指南问题1--503问题问题2--网关服务启动报错SpringBoot整合GatewayNacos 本篇文章只演示通过gateway网关服务访问其他…

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能 【论文原文】&#xff1a;A New Local Transformation Module for Few-shot Segmentation 【作者信息】&#xff1a;Yuwei Yang, Fanman Meng, Hongliang Li, Qingbo Wu,Xiaolong Xu an…

SpringMVC(2)

一)接受到JSON格式的数据:使用RequestBody来进行接收 ResponseBody表示的是返回一个非页面的数据 RequestBody表示的是后端要接受JSON格式的数据 一)接收单个格式的JSON格式的数据&#xff0c;我们使用一个对象来进行接收 1)我们之前接受GET请求中的queryString中的参数的时候&…

读懂下文,安装数据库不再求人

想要数据存储必须要有数据库为支撑。在项目运行的时候也是要提前安装好并导入表结构和数据。通俗点来说&#xff0c;学会了万事不求人。 这里就整理了一份关于Windows和Linux系统下安装Mysql的操作命令。 Windows下安装MySQL 1、设置环境变量 设置环境变量是为了让你在任何…

小程序接口封装、异步加载、Promise

目录 1、页面准备 2、在app.js中处理当前环境以便切换api的环境、公共变量 3、定义post、get请求方法 request.js 4、api.js 接口列表调用index.js的post、get请求 5、index.js 需要返回数据的页面 api.js 、index.js 示例 异步实现 async、await 1、页面准备 目录结构…

JAVA 常用类型之String结构

String在java中我们是用来操作字符串的&#xff0c;但它的底层结构确是一个char[]数组&#xff0c;通过数组的方式将每个字符进行保存。 使用时&#xff1a;String str"ABCD"&#xff0c;内部存value确是&#xff1a;value[A,B,C,D]; 如下图&#xff1a; 参考String源…

七大排序算法的多语言代码实现

文章目录 前言 一、排序算法 1.原理简述 2.分类与复杂度 二、实例代码 1.冒泡排序 C Python Java Golang Rust Dephi 2.选择排序 C Python Java Golang Rust Dephi 3.插入排序 C Python Java Golang Rust Dephi 4.希尔排序 ​编辑 C Python Java Gola…

Linux网络技术学习(五)—— 网络设备初始化(I)

文章目录什么时候进行的设备初始化&#xff1f;设备注册和初始化NIC&#xff08;网卡 Network Interface Card&#xff09;初始化的基本目标设备与内核之间的交互硬件中断中断类型传送节流方式为了改善效率中断共享IRQ处理函数映射的组织irqaction结构体存储方式什么时候进行的…

android fwk模块之Sensor架构

本文基于Android 12源码整理&#xff0c;包含如下内容&#xff1a; 通信架构应用层实现使用方式SensorManager抽象接口具体实现fwk层的实现native中的SensorManager的初始化流程native中的消息队列初始化与数据读取sensorservice实现HAL层的实现通信架构 应用层实现 涉及代码&…

C#开发的OpenRA的只读字典IReadOnlyDictionary实现

C#开发的OpenRA的只读字典IReadOnlyDictionary实现 怎么样实现一个只读字典? 这是一个高级的实现方式,一般情况下,开发人员不会考虑这个问题的。 毕竟代码里,只要小心地使用,还是不会出问题的。 但是如果在一个大型的代码,或者要求比较严格的代码里,就需要考虑这个问题了…

51单片机——中断系统之外部中断实验,小白讲解,相互学习

中断介绍 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#xff0c;很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一&#xff0c;是我们学些单片机必须要掌握的。 为了更容易的理解中断概念&…

1.3配置P2P网络类型

1.3.1实验3:配置P2P网络类型 实验需求实现单区域OSPF的配置实现通过display命令查看OSPF的网络类型实验拓扑实验拓扑如图1-11所示 图1-11 配置P2P网络类型 实验步骤步骤1:[1] 配置IP地址 路由器R1

关于“档案大数据”的非主流看法

近日&#xff0c;反复拜读了前国家档案局局长杨冬权先生今年6.9档案日的大作《从“选时代”到“全时代”——智慧社会档案工作的历史性转折》&#xff0c;作为档案信息化从业者那真是倍感振奋&#xff0c;壮怀激烈&#xff01; 这篇文章绝对可以用气势磅礴、高屋建瓴这样的词语…

Oracle Data Guard 角色转换(Role Transitions)

查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1&#xff0e;角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色&#xff0c;Oracle Data Guard支持以下的角色转换&#xff1a; 1&#xff0…

C语言——指针、数组的经典笔试题目

文章目录前言1.一维数组2.字符数组3.二维数组4.经典指针试题前言 1、数组名通常表示首元素地址&#xff0c;sizeof(数组名)和&数组名两种情况下&#xff0c;数组名表示整个数组。 2、地址在内存中唯一标识一块空间&#xff0c;大小是4/8字节。32位平台4字节&#xff0c;64位…

hive数据存储格式

1、Hive存储数据的格式如下&#xff1a; 存储数据格式存储形式TEXTFILE行式存储SEQUENCEFILE行式存储ORC列式存储PARQUET列式存储 2、行式存储和列式存储 解释&#xff1a; 1、上图左面为逻辑表&#xff1b;右面第一个为行式存储&#xff0c;第二个温列式存储&#xff1b; …

【C语言】程序环境和预处理|预处理详解|定义宏(上)

主页&#xff1a;114514的代码大冒险 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、程序的翻译环境和执行环境 二、详解编译和链接 1.翻译环境 2.编…