• 15
  • 16
分享
  • APPUI 自动化测试面试题——软件测试圈
  • TIMI 2021-10-11 11:26:06 字数 8267 阅读 3614 收藏 16

1、Android APP 内存不足时, 系统如何结束进程获得内存?

答:系统优先结束被挂起(暂停)的进程,释放内存

2、APP 测试常见的严重问题有哪些? 分别引起的原因有哪些?

答:常见的有 crash、ANR(应用无响应、卡死),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误

3、请简单介绍你曾使用过的一款 APP 自动化测试工具 ?

答:开放性问题,带点主观意见

  1. 对比其他熟悉的自动化工具的优缺点

  2. 自动化的简要方案(简要的同时关键内容请具体)。(提示: appnium 等)

4、Android 测试与 web 测试有什么区别?

答:相同点:

  1. 设计测试用例均依据等价类、边界值等方法,测试原理相同;

  2. 大多数都采用黑盒测试方法来验证业务功能;

  3. 需要检查界面布局、风格和按钮是否美观、统一等(UI 测试);

  4. 测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试);

  5. 测试应用系统的稳定性。

不同点:

  1. 手机作为通信工具,通信等一些行为会对 APP 产生(中断测试);

  2. 手机用户对 app 产品的安装卸载操作:从上一版本/上两个版本直接升级到最新版本(安装卸载测试);

  3. web 自动化测试使用的工具较常用的是 selenium,而 android 手机自动化测试比较常用的自动化工具是monkey、monkeyrunner、Appium(测试工具不一样)。

5、app 测试有哪几种环境?

答:

  1. 本地环境:app 安装的手机环境和电脑搭建的自动化测试环境(比如安卓 SDK 等等) 。

  2. 服务器环境:war 包部署的服务器,服务器可以通过浏览器访问,也可以通过 app去访问。(访问的是 web 程序的接口)

6、简单介绍一下 Android SDK 的安装步骤:

答:

  1. 下载 jdk 和安卓 sdk;

  2. 安装 jdk, 配置环境变量(java_home、 classpath、 path)。

7、请简要介绍一下移动应用及其服务端的测试点?

答:

  1. 移动应用主要有权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、用户体验。(app 的 11 大测试点)

  2. 服务端有接口测试、性能测试、安全测试。

8、如何判断 app 的 bug 是客户端问题还是后台问题

答:这个要根据业务来,一般数据的问题前端的问题多些,一般做法是有问题提给前端开发, 他们知道是他们自己的问题还是后台返回的数据问题。

9、安卓中如何取出日志信息?

答:

  1. 把安卓系统日志信息实时导入到本地: adb logcat -v time > d:\mylog.log;

  2. 运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) : adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log。

10、常见的 adb 命令:

答:

  1. 查看当前连接的设备: adb devices;

  2. 安装软件: adb install 路径\xx.apk;

  3. 卸载软件: adb uninstall <包名>;

  4. 从电脑上发送文件到设备: adb push <本地路径> <远程路径> adb push C:\test1.txt /sdcard/;

  5. 从设备上下载文件到电脑: adb pull <远程路径> <本地路径> adb pull /sdcard/test1.txt D:

  6. 实时获取日志: adb logcat -v time > D:\mylog.log

  7. 登录终端设备 shell: adb shell

  8. 查找包名/活动名: adb logcat | findstr START(脚本中, cmp= 后面的值就是 包名/activity 名称)

  9. 启动 APP 启动

adb shell am start -n packageName/activity

  10.关闭 app,语法: 

adb shell am force-stop 包名

  11.监控 APP 启动时间

adb shell am start -W packageName/activity

  12.Monkey 命令:

adb shell monkey -v -p mypackage 50

11、APP 这么多主流机型如何测试?

答:

我们公司就买了, 魅族, 华为, 小米, iphone7、iphone8 、iphone8plus 、iphonex 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采用云真机。

12、App 崩溃(闪退),可能是什么原因导致的?

答:缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况,运行的程序过多,导致内存不足

应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本 在调试中,也会造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退, 可能是应用在改版调试,可卸载后安装旧版。检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。检查 APP 的 sdk 和手机的系统是否兼容。在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候, 有些系统 API 老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退

13、Appium 都有哪些启动方式

答:

  1. 客户端启动

  2. 命令行启动

14、请简单介绍一下使用过的安卓 UI 自动化测试工具?

答:appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。robotium:是一款国外的 Android 自动化测试框架,主要针对 Android 平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的 API,能够对各种控件进行操作。

15、请说明 Android 手机和 IOS 手机,系统有什么区别?

答:

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

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

  3. IOS 中用于 UI 指令权限最高,安卓中数据处理指令权限最高。接口自动化测试

16、按你的理解,软件接口是什么?

答:就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。

17、HTTPS 在哪一层?

答:HTTPS 在应用层。

18、get 和 post 区别是什么?

答:POST 和 GET 都是向服务器提交数据,并且都会从服务器获取数据。区别:

  1. 传送方式:get 通过地址栏传输,post 通过报文传输;

  2. 传送长度:get 参数有长度限制(受限于 url 长度),而 post 无限制;

  3. GET 产生一个 TCP 数据包(对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200 返回数据),POST 产生两个 TCP 数据包(对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok 返回数据);

  4. get 请求参数会被完整保留在浏览历史记录里,而 post 中的参数不会被保留;

  5. 在做数据查询时,建议用 GET 方式;而在做数据添加、修改或删除时,建议用 post 方式。

19、常见的 POST 提交数据方式

答:主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml 等。

20、什么是 Http 协议无状态协议?怎么解决 HTTP 协议无状态协议

答:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服 务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能 改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导 致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成 不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态 交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是, 两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

21、cookie 和 session 的区别

答:cookie 数据存放在客户的浏览器上,session 数据放在服务器上cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session,session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用 cookie,单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie 可以将登陆信息等重要信息存放为 session;其他信息需要保存,可以放在 cookie。

22、什么是 DNS?

答:DNS 是域名系统 (Domain Name System),DNS 是用来做域名解析的,它会在你上网输入网址后,把它转换成 IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的 IP, 但有了 DNS 的处理,你只需要记住对应网站的域名,即网址就可以了。

23、请问你们公司是如何做接口测试的?

答:

  1. 接口测试实际跟一般测试不同就是测试用例的设计部分;

  2. 获取接口规范;

  3. 设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑 盒用例那一套);

  4. 各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还 有考虑参数有互斥或关联的情况);

  5. 接口返回值各种验证(符合接口文档需求);

  6. 了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…);

  7. 接口能并发执行吗、安全吗,性能满足要求吗;

  8. 采用工具或者自写代码来验证;

  9. 发现问题跟功能测试一样,该报 bug 报 bug,该跟踪状态的跟踪状态。

24、怎么设计接口测试用例?

答:

通常,设计接口测试用例需要考虑以下几个方面:

①是否满足前提条件

有些接口需要满足前提,才可成功获取数据。常见的,需要登录 Token 逆向用例:针对是否满足前置条件(假设为 n 个条件),设计 0~n 条用例

②是否携带默认值参数

正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值, 其他不填写,设计 1 条用例

③业务规则、功能需求

这里根据时间情况,结合接口参数说明,可能需要设计 N 条正向用例和逆向用例

④参数是否必填

逆向用例:针对每个必填参数,都设计 1 条参数值为空的逆向用例

⑤参数之间是否存在关联

有些参数彼此之间存在相互制约的关系

⑥参数数据类型限制

逆向用例:针对每个参数都设计 1 条参数值类型不符的逆向用例

⑦参数数据类型自身的数据范围值限制

正向用例:针对所有参数,设计 1 条每个参数的参数值在数据范围内为最大值的正向用例

25、你做接口测试,测什么?

答:

可用性测试

根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果:

  1. 接口功能是否正确实现;

  2. 返回值测试 - 返回值除了内容要正确,类型也要正确,保证调用方能够正确地解析;

  3. 参数值边界值、等价类测试; 错误和异常处理测试;

  4. 输入异常值(空值、特殊字符、超过约定长度等),接口能正确处理,且按预期响应;

  5. 输入错误的参数,接口能正确处理,并按预期响应;

  6. 多输入、少输入参数,接口能正确处理,且按预期响应;

  7. 错误传输数据格式(如 json 格式写成 form 格式)测试; 安全性测试,主要指传输数据的安全性:

  8. 敏感数据(如密码、秘钥)等是否加密传输;

  9. 返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;

  10. 接口是否对传入的数据做安全校验,如身份 ID 加 token 类似校验;

  11. 接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃);性能测试,如接口的响应时间、并发处理能力、压测处理情况:

  12. 并发请求相同的接口(特别为 POST 请求),接口的处理情况(如插入了相同的记录导致数据出错,引发系统故障);

  13. 接口响应时长在用户可忍受的范围内;

  14. 对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要。

26、平常用什么工具测接口的?

答:常用 http 协议接口测试工具,如:postman、fiddler、jmeter;webService 接口用 SoapUI、jmeter 等。

27、没有接口文档,如果做接口测试?

答:用抓包工具把接口抓取处理,然后针对性进行测试;接口中字段信息不清楚的,找时间 集中寻求开发解答。(常用抓包工具 Fiddler、Charles 等)

28、在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?

答:用一个全局变量来处理依赖的数据,比如登录后返回 token,其它接口都需要这个 token,那就用全局变量来传 token 参数。

29、依赖于第三方数据的接口如何进行测试?

答:mock

接着面试官会问你,如果 mock 的,然后你就顺着坑继续挖,搭建 mock 服务,参考这篇http://www.51ste.com/share/det-485.html

30、接口测试中,依赖登录状态的接口如何测试?

答:依赖登录状态的接口的本质上是在每次发送请求时需要带上 session 或者 cookie 才能发送成功,在构建 POST 请求时添加必要的 session 或者 cookie

31、如何模拟弱网做测试?

答:Fiddler 和 charles 都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试。具体可以看《几种弱网模拟方法,总有一种适合你》

32、你平常做接口测试的过程中发现过哪些 bug?

面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历经过 包装(不包装连面试机会都没有,没办法,为了生存,能理解)

答:常规错误,接口没实现,没按约定返回结果,边界值处理出错等。

输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理; 输入错误的参数、多输入、少输入参数,接口可能出现的错误;

安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请 求拦截等;

性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;

33、当一个接口出现异常时候,你是如何分析异常的?

答:先抓包,用 fiddler(charles)工具抓包,或者浏览器上 F12 调试工具;APP 上的话,那就用 Fiddler 做代理,通过手机设置代理去看请求和返回报文;

查看后端日志,如 Linux 系统通过 xhell 连上服务器,查看接口日志,查看是否有报错信息

(命令:tail -f 日志文件);

34、如何分析一个 bug 是前端还是后端的?

答:平常提 bug 的时候,前端开发和后端开发总是扯皮,不承认是对方的 bug。

这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就 是前端发的数据不对;

请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。

35、你们做接口测试自动化吗?

答:现在针对大量应用,普遍推崇做接口测试自动化,维护成本低、收益高。常用的工具有 许多,如 Jmeter、Robot Framework、pytest 等。

36、列出几个 JMeter 监听器?

答:一些 JMeter 监听器是: 集合报告

汇总报告 查看结果树

用表格查看结果图形结果

BeanShell Listener 摘要报告等

37、在 python 中进行数据驱动测试

答:在 unittest 中,没有自带的数据驱动,我们得借助 ddt 来实现,首先,我们得在 python 运行环境中安装 ddt,用下列命令安装

pip install ddt

另外一个测试框架pytest,它 自 带 数 据 驱 动 实 现 , 是 通 过

@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。也可以根据自己需求用 python 实现数据的读取和驱动。

38、接口自动化中的关联怎么处理?

答:把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使 用 setattr()函数),下一个请求去调用这个类属性

39、自动化测试怎么校验结果?

答:断言 ,预期结果与实际结果对比

数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对

40、自动化使用的测试框架是什么?简述自动化框架的设计与维护

答:测试框架:python+unittest+requests+ddt+openpyxl+pymysql+logging

python:入门简单,语法简洁

unittest :定义一个测试用例类,具体的方法来维护测试用例的生命周期,测试场景行为, 测试用例 前置场景,行为,期望结果,实际结果,断言方法,Setup teardown 方法

requests:接口调用 ,支持 http 请求的库,API 简洁,提供不同的 http 请求方法,支持session,cookies,

ddt :数据驱动,ddt 类装饰器,data 测试方法装饰器 unpack 解包可迭代的数据类型普通用户,数据库,配置文件—(基础数据)

openpyxl: 数据管理 excel 管理数据,使用 openpyxl 模块来进行 excel 数据的读和写

(excle,csv, json, yaml, txt 都可以管理测试数据)

pymysql:数据库交互,数据校验

eval,json:数据格式的转换 Eval 将 python 支持的格式转换成对应的格式

logging:日志处理, 统一日志输出格式,渠道,级别,执行结果的记录,便于定位问题jenkins:持续集成

2/框架设计思路:数据驱动+结构分层(可读性,可维护性,可扩展性)

数据驱动:将维护数据与代码分离,接口调用行为一致,针对不同的参数组合驱动不同的测 试场景,减少代码冗余

结构分层:数据层+用例层+逻辑层数据层:测试数据的支撑 data.xls

用例层:用例的执行 test_register.py test_recharge.py

逻辑层:公用的方法的封装与提取 doexcle.py do_mysql.py http_requests.py logger.py 等模块

框架设计步骤:

准备测试数据: EXCEL 表准备测试用例—excel 数据的读取—参数值的替换

发起请求:请求方法(get/post 方法进行封装—URL 的拼接(不同—参数转化为字典拿到请求的返回值:解析返回值 code,status,msg 信息

断言好处:

  1. 自动化测试用例和手工测试用例的完美结合,减少重复工作

  2. 配置灵活,可以自主切换测试环境,执行测试用例

  3. 常用功能进行封装,逻辑清晰,易于维护

  4. 统一执行入口,管理测试用例集:run.py 模块通过模糊查找来选择需要执行的测试用例

  5. 持续集成,定时构建,快速反馈

41、具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析

答:完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成 html 报表,查看测试通过率,查看接口的功能每次发版时,进行回归测试,新功能开发未提测前

作者:好好先生&Mr.Li

原文链接:https://blog.csdn.net/weixin_44275820/article/details/106116675

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   小编看到过这样的一个帖子,根据题主的描述可以看出来他是一名拥有十年工作经验的功能测试人员,目前掌握的技能还只是简单的功能测试,没有什么代码能力,面对功能测试的职场窘境,正在选择下一步该转测试开发还是软件开发?其实现在像题主一样处境的人不在少数,这就是行业技术发展的趋势导致。开篇之前,小编直接亮明观点,在测试开发和软件开发之间,选择前者的发展会永远比后者好。  这篇文章将从以下三个方面阐述我的观点:  ·功能测试为什么不建议选择软件开发?  · 为什么功能测试会产生转行软件开发的想法?  · 功能测试如何晋升测试开发?  一、功能测试为什么不建议选择软件开发?  表面看,...
            0 0 1616
            分享
          •         随着网络的不断发展,更多的互联网公司成立,在外行看来,互联网意味着高收入,导致了越来越多的人想转行要加入到互联网的行业中,但因为不懂技术,加入显现的不是那么容易,那对于没有接触过IT工作的人来说,那怎样找一个更加容易的切入点呢,我的推荐就是先做一个初级的软件测试,作为你撬开,成功进入互联网行业的第一份职业。 那我们怎么样才可能做到一个入门的初级测试呢? 初级测试人员需要具备的技能要求 1. 想要转行进入互联网行业,第一步就是要转变你的思维模式,看问题不要只看你眼睛所看到的,要有全局意识,更详细的去思考问题 2...
            0 4 5632
            分享
          • 本文主要分为两个部分:第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?第二部分:主要介绍为什么要做接口测试,并简单总结接口持续集成和接口质量评估相关内容。第一部分:首先,在做接口测试的过程中,经常有后端开发会问:后端接口都测试什么?怎么测的?后端接口测试一遍,前端也测试一遍,是不是重复测试了?于是,为了向开发解释上述问题,普及基本的测试常识,特意梳理了接口测试的相关内容以及其与前端测试的区别,使开发团队与测试团队在测试这件上达成基本的共识,提高团队协作效率,从而更好的保证产品质量。然后,我...
            0 0 1097
            分享
          • 现在docker分布式部署的的方式是非常流行的,开发将新版本整体打包好之后丢给测试人员,测试人员便可以在测试环境部署新版本了,其实部署安装也是测试内容之一,这个步骤是完全模拟了运维人员在客户那边部署的操作,如果这个时候出什么问题,开发还可以进行解决或者兼容,下面就先罗列一下docker部署常用的命令:# 创建一个名为myubuntu的容器# -t:分配一个伪终端  -i:让容器的标准输入保持打开$ docker run --name=myubuntu -t -i ubuntu /bin...
            1 0 2752
            分享
          •   在Windows 10下利用lcov进行C语言单元测试覆盖率检查  Lcov是Linux下的C语言覆盖率分析工具,在Widows下进行C语言开发的小伙伴可以使用吗?下面就来介绍一下如何在Windows 10下利用lcov进行C语言单元测试覆盖率检查。  1、安装mingw-w64  网上多处文章介绍下载mingw-get,由于现在网上大都数mingw-get均为32位的,所以不能用这个。所以大家需要下载https://sourceforge.net/projects/mingw-w64/files/下载mingw-w64-install.exe,在安装的时候注意:  i686为32位的,x...
            1 1 7634
            分享
      • 51testing软件测试圈微信