# app测试篇
[TOC]
> ### app测试与web测试的区别
1. 系统架构:web端系统,更新服务器,不需要更新客户端;APP如果更新了服务端,客户端也要更新并测试;
2. 兼容性。Web端要考虑不同的浏览器内核进行测试(IE、chrome、Firefox),APP的兼容性要考虑选择主流的机型,不同的分辨率、尺寸, 以及不同的操作系统;
3. App要考虑交叉事件测试,安装,卸载,前后台切换测试;
4. App还要考虑界面操作,如:横竖屏切换,多点触控,事件触发区域。
> ### APP的兼容性怎么测试,测了哪些机型?哪些版本?那又怎么测Android的兼容性、怎么测手机的兼容
> ### app测试点有哪些?
功能,兼容性,用户体验,安全性,安装卸载升级测试,交叉事件,UI测试,性能测试。
> ### app项目做了多久
一直在做,现在app的主体需求已经完成了,后期都是一些零零散散的需求,测试工作量比较少。
> ### 你测了app哪些模块
所有功能都测
> ### App的性能测试怎么做的
App的性能分为服务器端的性能和手机端的性能。
服务器端的性能,我们用Jmeter工具进行测试的,和web的端性能测试方法一样的。
我们是用monkey做手机端App的稳定性测试的,使用monkey跑10万次,看它会不会出问题,如果出了问题,我们再定位原因,具体的做法是这样的:
1. 在跑monkey前,先使用`adb logcat -c`清空手机的logcat日志
2. 接下来,使用`adb logcat -v time`获取logcat日志并导入本地文件
3. 使用monkey运行被测应用:`adb shell monkey -p 包名 -v 10万次`并将执行结果导入到本地
4. 测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看monkey日志中有没有crash或者anr的关键字,如果有还需定位到是什么原因导致的anr或者crash的问题。并且将相关日志和logcat日志与进程号提交给开发定位,如果是anr的问题,还需要从安卓中获取/data/anr/traces.txt文件提交给开发定位。
> ### adb命令有哪些?
> ### 你这个app测试人员有几个?怎么分工?
2个。按测试的手机类型分工,每个人负责几种测试机型,每个人都要测试app的所有测试点。
> ### 你做APP用过monkey,能具体讲一下吗?
我们是用monkey对APP进行稳定性进行测试。
一般我们会用到命令 adb shell monkey -p 包名 -v 次数,我们项目每次测试都跑10万次。
> ### 那如果monkey测试过程中,出现crash你怎么定位?
参考答案:crash一般是空指针导致的,在monkey日志中输入“crash”搜索到相关的日志,然后把日志给开发定位。
> ### 那问题开发修复了你怎么验证?(意思就是,monkey怎样做回归测试)
参考答案:我们会进行回归测试,会按照之前的轨迹(seed)去跑monkey,命令是:adb shell monkey -p 包名 -s seed值 -v 次数
> ### 面试官:看你写有用MONKEY做APP测试,怎么做的?如果有问题的话怎么定位?
我:我们是使用monkey来做稳定性测试的,
1. 在跑monkey前,先使用`adb logcat -c`清空手机的logcat日志
2. 接下来,使用`adb logcat -v time`获取logcat日志并导入本地文件
3. 使用monkey运行被测应用:`adb shell monkey -p 包名 -v 10万次`并将执行结果导入到本地
4. 测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。那我就要去看看monkey日志中有没有crash或者anr的关键字,如果有还需定位到是什么原因导致的anr或者crash的问题。并且将相关日志和logcat日志与进程号提交给开发定位,如果是anr的问题,还需要从安卓中获取/data/anr/traces.txt文件提交给开发定位。
* * *
> ### APP出现ANR的原因:
1. 线程阻塞的
2. 内存不足
3. CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)
> ### APP出现CRASH的原因:
1. 空值指针
2. 数组越界
3. 内存不足
4. CPU满负荷(由于现在的手机基本都是8核CPU,所以基本不会出现CPU满负荷的情况)
> ### appium自动化环境是怎么搭建的呢?
参考答案:这个环境搭建起来,稍微复杂些,我自己总结了个文档,网上都找不到的。把这个环境搭建起来,最好先把selenium自动化环境搭建起来,然后安装JDK,配置环境变量,接下来安装nodejs,安装appium,安装SDK,配置好ANDROIR\_HOME环境变量就可以了。
> ### appium你是用什么工具定位元素的?
参考答案:可以用uiautomatorviewer,但是这个工具不稳定,经常报错;我一般都用appium自带的inspector来定位。
> ### app自动化,你会用什么方式来定位元素?
参考答案:appium定位方式有id,classname,xpath,还有find\_element\_by\_android\_uiautomator,根据实际情况来灵活运用。
> ### H5元素怎么定位?
参考答案:要切换上下文,这个和selenium自动化里面的切换表单有点相似。首先,我们要查出H5页面的context名称,再用switch\_to.context()方法切换过去,接下来,就可以进行正常的操作了。
> ### web自动化和app自动化有什么区别?
测试的思路都是一样的,要用到元素定位,unittest框架这些,app自动化定位可以用appium的Inspector来定位。
> ### 如何判断客户端还是后台的问题
* 一、客户端问题
1. 文字,图片有误;
2. 无法输入,按钮不可用;
3. 抓包信息显示客户端发送的信息有误。
* 二、服务器端问题
1. 通过抓包检查服务器返回的信息,如果信息有误,就可以断定是服务器的问题;
2. 客户端向服务器发送信息后,服务器无响应。
> ### 问:你怎么做app测试的?
测试前,先熟悉app的原型图和业务需求,确定测试点,开发做完接口之后,先做接口测试,App开发好后,先做一个冒烟测试,看看软件的基本功能是否可用,如果正常,我们再做功能测试,UI测试,兼容性测试,交叉事件测试,安装卸载测试等。
如果面试官问具体某个测试类型怎么,就要举例子加以说明。
比如:
UI测试:检查app的UI是否和原型图一致。
功能测试:xxxx
兼容性测试:xxxx
用户体验测试:xxxx
(补上app的8大测试点,并举例子说明)
> ### Appium的工作原理是什么?
> ### 为什么要限速/模拟弱网?
主要是为了模拟app端(也包括pc端)在低网络速度的情况,是否有bug,对用户体验是否有影响
> ### appium如何远程调用其他机器?
参考答案:在上个项目中,一般我们只使用一台机器去跑appium脚本。
涉及到多台机器调用用的少一些,不过我自己业余时间有学过,大概说一下我的思路。
比如:A要使用B的服务为例:
1. 首先,修改B的服务主机 ip
2. 将A机器要执行的脚本中的ip替换为B的服务ip
3. 将测试机插到远程机B上
4. 在机器A上执行脚本,就可以调用远程机
> ### appium遇到系统弹窗是怎么处理的?
和selenium方法一样的。使用switch\_to.alert.accept()来接收弹窗,如果是拒绝就是switch\_to.alert.dismiss()
> ### appium遇到有电话或者短信怎么处理?
这种情况一般会导致定位不到相关元素,我们就可以直接用try....except去捕捉异常处理,写一些处理逻辑,比如设置等待或者停止运行等。
- 总章
- Oracle数据库
- 常见的Linux命令
- 理论内容整理
- 给你如下功能怎么测试
- 支付怎么测试
- 购物车怎么测试?
- 搜索功能怎么测试?
- 文件上传功能怎么测试?
- 登录功能怎么测试?
- 还款功能怎么测试?
- 订单功能怎么测试?
- 自动化测试篇
- 必记代码
- 接口测试篇
- 性能测试篇
- app测试篇
- 面试篇
- 项目篇
- 职业素养篇
- 真实案列分析
- 如何预防冷场
- redis
- 琪琪
- 禅道搭建手册
- 禅道搭建手册1
- 禅道的基本使用
- 基于Python3_Selenium的自动化
- Python3安装
- Python3基础
- 列表_元组_集合
- 函数_模块_类
- Python代码
- selenium环境
- selenium定位方式
- Selenium常见操作
- toast读取代码
- 添加用户代码
- 隐式等待与显式等待
- 循环添加用户
- 测试用例练习
- 测试用例优化
- Fiddler抓包工具
- 安装
- Fiddler使用
- 接口测试
- Jmeter的安装
- Jmeter使用
- jmeter+ant+jenkins接口自动化测试框架
- 接口安全测试
- 性能测试
- Nmon监控LInux系统
- Jmeter分布式
- 性能测试-具体案例
- Monkey
- 安装1
- Monkey使用
- appium自动化
- appium的安装
- appium基本使用
- 真机USB连接
- 问题排查
- Jenkins持续集成
- Jenkins安装
- Jenkins配置任务
- Python扩展内容
- Python连接数据库
- Python进行接口测试
- 开启服务