Skip to content

面试内容整理

基础面试

面试问题1

你在测试中发现一个BUG,但开发却说这不是一个BUG,你该怎么办?

解答思路

  • 基于软件需求与设计文档,确认当前问题是否符合设计,如果不符合则为BUG
  • 基于用户体验和使用习惯,评估当前问题是否需要进行修改
  • 如果无法与开发达成一致,可以直接反馈至上级或产品经理,由他们评估是否需要修改

面试问题2

给你一个系统,你该如何进行测试?

解答思路

该类型问题,想要完整回答,核心就是基于软件质量模型即可:

  • 功能性:软件功能是否提供了相应的功能
  • 易用性:软件被理解、学习、使用和吸引用户的能力
  • 可靠性:软件在规定时间内完成规定功能的能力
  • 效率性:在规定条件下,软件的运行占用资源及处理事务的能力
  • 维护性:软件更改、更正、改进的难易程度
  • 可移植性:软件是否具备从一个环境迁移至另外一个环境的能力

面试问题3

如何制定测试计划?

解答思路

一个测试计划应该包含的基本内容:

  • 测试资源:在整个测试过程中,会使用到的各类资源(人力、设备等)
  • 测试时间周期及安排:清晰定义每个时间段分别要进行的具体工作是哪些、各阶段对应的产出物分别是什么
  • 测试策略:在整个项目测试过程中,测试的基本策略手段包含哪些
  • 测试环境:需要在何种环境下进行测试
  • 准入标准:版本提交测试时,开发交付版本的质量要求是什么
  • 准出标准:软件达到何种标准,才算是测试通过
  • 风险评估:在整个测试过程中,可能会出现哪些情况导致整个计划受到影响,从而产生延期的。

面试问题4

如何判断一个BUG是属于前端还是后端?

解答思路

  • 查看服务端日志信息,如果服务端没有与bug对应的相关信息,则为前端bug
  • 查看bug对应接口的相关信息:
    • 请求数据与接口文档一致,响应结果与预期不同,则为后端bug
    • 请求数据与预期数据不一致,则为前端bug
    • 请求数据、响应结果均与接口文档一致,则为前端bug

面试问题5

测试用例的编写方法有哪些?

解答思路

  • 边界值:0≤X≤5,边界值为0和5,边界值的边界值为-1、1,4、6
  • 等价类:有效等价类(True),无效等价类(False)
  • 场景分析:不同业务流为不同场景
  • 错误推断、因果图、正交。。。

面试问题6

冒烟测试是什么?要如何进行冒烟测试?

解答思路

冒烟测试,在版本系统测试前进行,主要是为了确保本轮测试可以正常执行的一种预测试手段,不需要达到多广的覆盖率,只需要确保系统的主要功能、核心业务流程是可用的,可以正常运行即可。

进行冒烟测试前,需提取冒烟测试用例,基于冒烟测试用例来执行冒烟测试,而冒烟用例内容,则是基于业务主流程和主要功能的测试用例中,提取正向内容即可。

面试问题7

测试策略要如何定义?

解答思路

测试策略主要用于描述测试过程中进行测试的方法,测试活动应该如何进行。主要包括测试目标,测试新功能的方法,需要应用的测试资源,测试环境相关内容。

测试策略定义的核心是着重于测试的大方向上的定义,而不是测试过程中的细枝末节内容。

面试问题8

你在之前公司中的测试流程是什么样子的?

解答思路

  • 了解关于之前的工作经历是否属实
  • 一般测试流程包含:制定测试计划——参与需求评审——制定测试用例——提取冒烟测试用例——参与测试评审——执行冒烟测试——执行系统测试——回归测试——出具测试报告

面试问题9

你印象最深的BUG是什么?

解答思路

  • 了解过往的测试经历
  • 随便挑选一个具备有代表性的BUG进行描述即可。描述时需要详细讲述这个BUG的发现具体情况,表现形态等。

面试问题10

偶发性BUG该如何处理?

解答思路

  • 先做BUG的完整记录
  • 在复现BUG时,如果无法正常复现,可以执行以下行为:
    • 查看服务端日志,了解具体报错内容
    • 检查测试数据,依据之前测试时所使用的数据进行复测
    • 确保测试步骤与之前保持一致
    • 确保测试版本与BUG发现的版本一致
    • 让开发协助跟进
  • 如果BUG无法复现,BUG本身影响比较小,可以暂缓处理,如果问题比较大,则需一步步排查。最终依旧无法复现,则在后续测试过程中持续关注

面试问题11

你觉得软件需要达到什么标准才算测试通过?

解答思路

  • 需求说明书所定义的内容已经全部正确实现
  • 达到测试计划中所定义的准出标准:
    • 致命与严重级别的缺陷已经全部修复,无遗留
    • 一般与轻微级别的缺陷剩余不超过XX数量,且遗留缺陷不影响功能正常使用
    • 满足特定测试要求(性能、移植性、兼容性等基于实际情况进行说明)

面试问题12

缺陷的分级是如何定义的?

解答思路

各个公司对于缺陷的分级定义有所区别,但常规而言一般缺陷分为以下等级:

  • 致命:造成程序崩溃、宕机,一级功能未实现
  • 严重:一级功能无法正常运行,二级功能未实现
  • 一般:二级功能无法正常运行,三级及以下功能未实现
  • 轻微:三级及以下功能存有缺陷,页面排版错位、有错别字等无明显影响用户体验
  • 建议:对原有功能让用户有更好体验的建议,不算缺陷。

面试问题13

你在之前的公司用什么工具管理缺陷的?记录缺陷的内容包含哪些?

解答思路

  • 一般主流使用的缺陷管理工具:禅道与Jira
  • 记录缺陷内容主要包含:
    • 标题:直接了当说明缺陷的现象
    • 简述:描述缺陷的具体情况
    • 发现版本:缺陷出现在哪个版本
    • 发现人:由谁发现的
    • 发现时间:缺陷出现的具体时间
    • 复现步骤:缺陷重现的具体操作步骤与数据
    • 附件:日志、截图等直观体现缺陷的内容

面试问题14

请简述一下简历中的这个项目具体流程

解答思路

  • 了解你过往经历的真实性
  • 了解项目的基本情况:
    • 用户
    • 项目是干什么的
    • 有哪些核心功能模块

面试问题15

Web系统的兼容性测试要如何执行?

解答思路

Web系统的兼容性主要是基于浏览器来进行的,而浏览器的选择基本上是基于浏览器内核来进行选择,所以web兼容性一般包含:

  • Chrome
  • FireFox
  • Edge
  • Safari
  • Opera
  • Ie

面试问题16

APP系统的兼容性测试要如何执行

解答思路

App的兼容性测试包含内容非常多,一般要测试兼容性,都会选择基于云测平台来执行,但是我们需要了解兼容性测试的内容,主要包含:

  • 操作系统
  • 屏幕造型
  • 尺寸/分辨率
  • 手机品牌
  • 网络(这个可以用真机测试)

面试问题17

web系统和app系统的测试不同点是什么?

解答思路

Web系统与App系统在功能测试和业务测试的维度而言,基本是一致的,但是因为软件结构的区别,所以在专项测试上会有明显区别,主要包含:

Web系统APP系统
兼容性测试六大浏览器操作系统、手机品牌、屏幕造型、网络通信
安装卸载测试安装测试、卸载测试、更新升级测试
硬件资源服务端资源前端:手机硬件资源损耗(CPU、内存、电源等)
后端:服务端资源
网络不同运营商移动网络、Wifi、弱网测试、流量损耗

面试问题18

除去常规的手工测试外,还有什么手段可以保障软件的质量?

解答思路

系统的完整测试一般而言包含两类,功能测试与性能测试。手工测试,主要是针对系统的功能、业务流程、用户体验进行的测试行为。除去这些外,一般在测试过程中还会使用到以下的测试手段:

  • 接口测试,确保服务端功能正确
  • 性能测试,保障系统的运行效率
  • 文档测试,确保更早更低成本地保障质量

面试问题19

测试如何驱动开发,让提交的代码质量可以做到更好?

解答思路

首先明确,这里的测试驱动开发,并不是强调的一种开发思维或者模式,而是从测试人员的角度如何驱动开发产出更高质量的代码。

在不过于干涉开发人员的前提下,一般最直接的方式是在测试与开发的交互流程上增加一定量的约束,比如说开发自测清单与冒烟测试流程:

  • 自测清单:提交测试时,将开发自测功能模块列成清单的形式,作为提测的附件内容一并提交,让测试人员清晰知道开发人员自测了哪些内容
  • 冒烟测试:提测时,测试人员在版本测试前先基于提交的内容,进行一轮预测试,确保开发提交的版本能够达到测试接收要求,否则打回开发重新修改提交。

面试问题20

产品上线后如果发现问题了,要如何处理?

解答思路

  • 基于BUG影响的用户数及严重程度评估BUG的影响范围
    • 范围较小,则开发与测试相互配合,尽快解决BUG,并确保修改后的版本无其他新增问题,然后上线新的版本
    • 范围较大,若无法快速修复
      • 回滚上一个版本,规避当前问题,提升用户体验
      • 部分功能暂时停止使用,避免扩大BUG的影响
      • 若是资源问题,可以通过扩充服务端资源,快速解决问题后再慢慢优化
      • 仍需开发与测试相互配合,尽快解决BUG,上线新的版本
  • 解决线上问题:这是核心
  • 复盘线上问题:总结经验,避免在后续的上线过程中出现同样的状况。

进阶测试面试题

面试问题01

Selenium的运行原理是什么,为什么能够实现Web自动化?

解答思路

  • Selenium本身不操作浏览器,是基于Webdriver来对浏览器进行操作的 webdriver作为一个HTTP协议下的服务,在后端以进程的形态启动,再通过指令调用到对应的浏览器,让其运行和操作。
  • Selenium.webdriver库是Web自动化执行的核心库,其中包含有各类对浏览器以及页面元素的操作,通过这个库,结合webdriver服务来实现对web的自动化测试 基于Selenium.webdriver库的源代码可以看出,所有的操作行为都是基于封装的指令来进行的。实际的操作模式是通过Selenium下发代码指令至WebDriver服务端,经由HTTP网络协议,以请求的形式将所接收到的内容,下发至浏览器,直接显示在用户眼前。
    python
    from selenium import webdriver
    # webdriver库源代码示例与分析

面试问题02

在自动化测试过程中,遇到动态元素如何有效对其进行定位?

解答思路

  • 所谓动态元素,即每次加载时,部分元素属性都会发生变化的元素
  • 选择相对更为灵活的元素定位方法(XPATH,CSSSELECTOR),基于元素路径、不变属性等其他内容进行定位

面试问题03

在自动化测试过程中,元素定位失败的原因会是什么?

解答思路

  • 是否添加有等待
  • 是否切换了句柄
  • 元素是否在页面的Iframe之中
  • 元素是否被遮挡
  • 元素定位值是否正确
  • 元素定位到的是否是第一个
  • 页面加载策略是否正确

面试问题04

在自动化测试过程中,选择的是哪一种数据驱动形式?

解答思路

  • 数据驱动,通过文件存放数据管理的形式,在执行自动化时,直接导入文件中的数据,来实现整个自动化测试业务。提升代码的可维护性,代码与数据分离,更好地对自动化测试执行以及测试数据进行管理和维护。

  • 常用数据驱动形式包括:

    Excel数据驱动:实现简单,容易上手。但是数据较为死板,管理相对麻烦。

    yaml数据驱动:数据直观,可灵活优化,方便管理。但实现对于技术要求更高。

    其他数据驱动:TXT、CSV、XML等

不同数据驱动技术选择:

  • 团队技术
  • 项目需求
  • 实现者能力

面试问题05

可以说下什么是关键字驱动吗?

解答思路

  • 关键字驱动是自动化测试框架设计模式中最为核心与底层的设计模式,适用于UI自动化和接口自动化中。
  • 本质意义上其实就是面向对象编程思维里的对象与封装,这种设计模式就是将代码基于业务使用场景进行合理的独立封装,再通过调用封装好的函数来实现业务执行。
  • 一般而言,封装时都会考虑到代码的复用性,封装的灵活度等问题。
  • 封装上也会基于实际需求进行变化,从常态化的操作行为的封装,到业务流程的封装,到固定步骤与数据的封装等,封装形式是多样化的。
  • 适用于各类型的项目自动化,是适配性最强的一种设计模式。

面试问题06

可以说下什么是PO吗?

解答思路

  • PO模型是自动化测试框架设计模式中专用于UI自动化的一种设计模型。
  • 在PO中,关注的核心是页面,而不是操作行为。
  • 基于页面,将复杂的业务流程进行切片,把完整的业务流程切割成一个又一个的独立页面,最终再将页面以业务所需的顺序进行组装,最终实现业务流程的运行
  • 极大提升了代码的维护性,所有的内容基于页面来进行管理,每一个页面的单独维护都可以对测试用例的执行进行同步维护,降低维护成本
  • 更好地满足单一系统的自动化测试覆盖。

面试问题07

如何提高Selenium脚本自动化执行效率?

解答思路

  • 优化测试用例,尽可能不使用强制等待
  • 减少不必要的操作步骤,与业务流程无关的操作步骤或者可简化的操作步骤,例如经过三到四步才能访问到要测试的页面,可以直接通过访问URL来操作,简化操作步骤
  • 设置合理的页面加载策略,如果页面加载内容过多,可检查具体加载内容是哪些,基于实际情况,在不影响测试的前提下,配置不同的加载策略,提升执行过程中的运行速度(只限于selenium 4及以上版本)
  • 合理设计与封装测试框架结构,简化人为介入的操作过程,降低自动化测试代码的维护难度。

面试问题08

如何提高自动化执行的稳定性?

解答思路

  • 合理化使用各类等待,确保元素在页面正常显示
  • 做好异常处理机制,即try...except
  • 多用例并发时,减少各用例间的耦合度,避免在多线程运行过程中因为执行顺序的不可控导致异常
  • 独立化测试环境,避免环境干扰及数据干扰
  • 检查元素定位正确性,尽量避免元素定位失败导致的测试终止

面试问题09

如何设计高质量自动化脚本?

解答思路

  • 独立化测试场景,将不同业务流程下的测试执行进行独立化管理,避免将所有代码封装在一个函数中,或保存在一个类中,降低代码冗余,提升代码的维护性
  • 应用合理的设计模式,结合企业业务需求、团队技术能力、自动化执行目的、被测试项目情况进行合理化的测试框架结构设计,确保实现的自动化测试框架可以满足到企业的预期需求,并能够顺利在团队中进行推行
  • 降低不同场景下的测试用例耦合度,独立化不同的测试用例
  • 使用分层结构设计,确保在实际运行过程中,测试数据、测试代码、逻辑代码的完整分离
  • 对于业务流程,核心是从业务的正向流程去分析与设计用例,不要企图把所有的操作行为都基于代码来实现。
  • 各个函数的封装上,都要考虑到更加灵活的方式来实现,避免因为逻辑写死而导致的函数功能单一,无法满足尽可能多的需求

面试问题10

之前公司的UI自动化测试框架如何实现的?

解答思路

  • UI测试采用的框架:Python+Selenium+UnitTest+Yaml+ddt+Logging+Configparser+Pymysql+HTMLTestrunner
  • 框架设计思路:PO+数据驱动+结构分层(可读性,可维护性,可扩展性)
  • 框架执行自动化测试的具体步骤:基于UnitTest所编写的测试用例,通过获取Yaml中的测试数据进行自动化执行,运行过程通过Logging进行日志的记录,最终生成HTMLTestrunner测试报告

面试问题11

一个完整的请求过程是什么样子的?

解答思路

  • 常规而言,在不强调网络协议的情况下,请求基本都是HTTP网络协议下的请求

  • 完整流程:

    域名解析——服务器建立连接——发送请求——服务器接收并运算,生成响应——返回响应结果——前端解析,加载资源——渲染到页面展示

面试问题12

HTTP中长连接与短连接的区别是什么?

解答思路

  • 搞清楚长连接与短连接本身的定义
  • 重点在于TCP临时连接通道的保持
  • 请求头中:connection: keep - alive

面试问题13

如何设计接口自动化测试用例?

解答思路

  • 单接口用例设计
  • 接口关联业务用例设计

面试问题14

接口测试中Get与Post的区别是什么

解答思路

  • 搞清楚Get与Post在哪里定义
  • Get与Post的不同应用场景
  • 两者间的区别

面试问题15

什么是接口关联?

解答思路

  • 在应用业务接口中,完成一个业务功能时,有时候一个接口可能不满足业务的整个流程逻辑,需要多个接口配合使用,并且在A接口调用后,我们需要在A接口的返回数据(response)中拿到需要的字段,并且在调用B接口的时候,作为B接口请求参数传递给B接口,拿到后续响应的返回数据。此类依据上个接口的返回值作为下个接口的入参的这种场景,称之为接口关联。

面试问题16

接口关联业务自动化如何实现?

解答思路

  • 接口关联的定义
  • 接口关联业务场景的常用处理方法

面试问题17

Cookie、Session、Token三者的区别是什么?

解答思路

  • HTTP的无状态连接
  • 接口的鉴权机制
  • 三者的优劣势

面试问题18

接口自动化如何校验接口的正确性?

解答思路

  • 断言机制的熟悉
  • 断言手段的应用
  • 断言结果的记录

面试问题19

UI自动化下的断言如何开展?

解答思路

  • 断言机制的介入点

面试问题20

接口自动化测试用例有多少条,执行时间是多久?

解答思路

  • 这个问题有点蠢,接口用例一般单条执行时间在10MS左右

面试问题21

如何让自动化测试框架满足多环境的测试执行?

解答思路

  • 分析多环境定义
  • 结合配置项的功能设定满足多环境应用
  • 实现简单操作的环境切换功能

面试问题22

日志模块在自动化测试中的用途是什么?

解答思路

  • 行为记录
  • 异常记录
  • 分析与调优

面试问题23

如何优化现有的自动化测试框架?

解答思路

  • 功能方面
  • 使用方面
  • 效率方面

面试问题24

持续集成在自动化测试中能起到什么样的用途?

解答思路

  • Jenkins的功能
  • 持续集成搭配自动化测试实现的效果

面试问题25

APP自动化测试该如何实现?

解答思路

  • 主流APP自动化测试技术应用
  • APP自动化测试缺点

面试问题26

企业性能测试流程是什么样的?

解答思路

  • 性能需求分析
  • 环境准备
  • 脚本编写
  • 脚本执行
  • 判断指标是否满足需求
  • 性能诊断
  • 提供优化建议
  • 产出性能报告

面试问题27

性能测试过程中应用的工具有哪些?

解答思路

  • 主流工具介绍:
    • Jmeter
    • Gatling
    • Locust
  • 性能监控平台介绍:
    • InfluxDB+Grafana
    • Grafana+Prometheus
  • 工具与监控平台的结合使用

面试问题28

性能诊断是如何进行的?

解答思路

  • 架构的熟悉
  • 中间件的熟悉
  • 系统交互的熟悉
  • 操作系统的熟悉

面试问题29

你有做过哪些性能测试?

解答思路

常见的性能测试类型:

  • 并发测试
  • 负载测试
  • 压力测试
  • 基准测试
  • ......

面试问题30

Dubbo接口的测试如何开展?

解答思路

  • 了解微服务架构的相关知识
  • 了解RPC通信的相关知识
  • 熟悉Telnet对Dubbo接口的调用

学员面试问题分析

编程类型

  1. 元组、列表的区别
    1. 列表是可以修改的序列,而元组中的内容是无法进行修改的
  2. 数据类型的常用操作行为如何实现?(list添加元素,str分割字符串,集合数据去重等等)
    1. 参考python编程语言.md文件里的数据类型操作

UI自动化

  1. POM和关键字的区别和各自优势是什么?
    1. POM是针对单个系统实现的UI自动化测试框架,作为量身定制的模式,能够提供更高的测试覆盖率。对于框架代码与测试数据的维护会更加方便直接。
    2. 关键字驱动是以一对多的形态实现的自动化测试框架,可以基于一个框架满足对不同业务的自动化测试覆盖。能够兼容UI与接口的自动化测试。但是整体的维护工作量在UI层而言相较POM更高。

接口自动化

  1. 接口关联如何处理
    1. 设置全局变量的形态进行数据传输
    2. 将关联数据写入文件之中,后续调用时通过读取文件来实现。
  2. 接口测试如何开展
    1. 熟悉接口文档,接口业务
    2. 结合Python+Requests库,实现对接口的测试

测试框架

  1. 框架的结构与实现的介绍讲解
    1. 基于框架的工程结构进行各模块的用途介绍
    2. 对不同模块的代码设计与功能实现进行介绍
    3. 结合业务流程进行自动化执行的内容进行运行流程的介绍
  2. Pytest的参数化管理
    1. 通过parametrize装饰器实现对数据的参数化。
    2. 结合数据驱动对数据内容进行管理
  3. Allure测试报告的内容优化
    1. 通过allure装饰器,如epic、feature、story等,实现测试报告内容的优化
    2. 结合dynamic动态传参,实现Allure测试报告数据内容的动态修改
    3. 结合allure.step()实现对测试步骤的详细描述

持续集成

  1. 自动化测试框架如何关联持续集成
    1. 搭配构建任务的制定,实现自动化测试运行的持续集成
    2. 关联GIT,实现轮询出发构建任务的持续集成

数据库

  1. 基于表格进行多表关联下的成绩最高分查询
    1. 此类答案非常多,百度一下即可。都是固定答案。各种内容都有。