面试题目录
一、 软件测试理论与流程(22题)
- 软件测试的核心目标是什么?
答案:通过系统化的方法验证软件是否符合需求,发现潜在缺陷,评估软件质量。测试不仅是找Bug,更是质量保障的过程。 - 软件测试生命周期(测试流程)包含哪些阶段?
答案:需求分析→测试计划→用例设计→用例评审→环境搭建→执行测试→缺陷管理→回归测试→测试报告→验收交付 - 如何制定测试策略(Test Strategy)?
答案:根据项目类型(如安全关键系统需强化安全测试);资源限制(高优先级模块优先);风险评估(高风险模块优先)。 - 测试计划的核心内容有哪些?
答案:测试目标与范围;资源分配(人力、环境);进度安排;风险分析与应对策略;准入/退出标准。 - 测试用例设计方法有哪些?
答案:
黑盒:等价类划分、边界值分析、因果图、错误推断、场景法;
白盒:语句覆盖、条件覆盖、判定覆盖、条件判定覆盖、语句覆盖 - 什么是等价类划分法?请举例说明。
答案:将输入数据划分为有效和无效等价类,每类选取代表值测试。
示例:测试输入年龄(1-100岁),有效类:20,无效类:-5(负数)、150(超上限)。 - 边界值分析法的原理是什么?
答案:测试输入范围的边界值及其相邻值(如最小值、最大值、略小于最小值、略大于最大值)。
示例:输入范围1-100,测试0、1、2、99、100、101。 - 测试用例包含哪些要素?
答案:用例编号、用例标题、模块、优先级、操作步骤、预期结果、实际结果 - 缺陷包含哪些要素?
答案:缺陷编号、缺陷概述、测试环境、影响版本、模块、严重性、缺陷详细描述、缺陷重现步骤、缺陷重现频率、附件(日志、测试数据等) - 缺陷生命周期(Bug Life Cycle)的状态流转是怎样的?
答案:新建(New)→ 分配(Assigned)→ 修复(Fixed)→ 验证(Verified)→ 关闭(Closed)
其他可能状态:拒绝(Rejected)、重新打开(Reopened)。 - 测试分为哪几个阶段?
答案:分为 5 个阶段:单元测试、集成测试、确认测试、系统测试、验收测试。 - 单元测试的测试对象、目的、测试依据、测试方法?
答案:测试对象是模块内部的程序错误,目的是消除局部模块逻辑和功能上的错误和缺陷。测试依据是程序流程图,测试方法是采用白盒测试。 - 验收测试与系统测试的区别?
答案:
验收测试:由最终用户执行,验证业务场景是否符合需求。
系统测试:由专业测试团队执行,验证技术需求(如性能、安全)。 - 解释“测试左移”(Shift-Left Testing)的概念。
答案:在开发早期(如需求、设计阶段)介入测试活动,尽早发现缺陷。
实践:需求评审、单元测试、代码审查。 - 什么是探索性测试(Exploratory Testing)?如何实施?
答案:
定义:无预先设计用例,通过探索系统并实时设计测试。
实施:设定时间盒(如2小时)、记录测试路径、快速反馈缺陷。 - 持续集成(CI)中的测试流程如何设计?
答案:
分层测试:单元测试(必跑)、集成测试(每日构建)、UI测试(异步执行)
快速反馈:构建失败时立即通知开发。 - 传统瀑布模型与敏捷模型的测试流程差异?
答案:
瀑布模型:测试在开发完成后集中执行(阶段隔离)。
敏捷模型:每个迭代包含完整测试周期(持续测试)。 - 回归测试的范围如何确定?
答案:影响模块分析(代码变更关联的模块);高风险核心功能;自动化测试用例高优先级筛选。 - 测试停止(退出)的标准有哪些?
答案:用例执行率≥95%;致命/严重缺陷修复率100%;剩余缺陷风险可接受(如低优先级问题可延期)。 - 测试总结报告应包含哪些内容?
答案:测试执行统计(用例数、通过率)、缺陷分析(解决率、分布、趋势)、质量评估与风险说明、改进建议。 - 介绍一下你在上家公司测试的系统,典型用户角色和业务流程是什么样的?
答案:面试官主要想了解你对被测软件的掌握和熟悉程度。做软件测试除了依赖测试知识,对被测系统的业务场景掌握也是非常重要的。 - 用例设计:给你一个登录界面,包含用户名输入框、密码输入框、登录按钮,你会如何设计测试用例?
答案:关键在于回答的逻辑性和用例完整性。划分为功能用例(有效等价类、无效等价类、边界值、场景)、性能用例(并发)、稳定性用例(长时间正确性)、兼容性用例(浏览器、软硬件)、安全性用例(密码是否明文传输、是否有防暴力破解、是否有CSRF/XSS攻击防护、登出后是否清除session)、易用性(输入框差错防止性、错误提示完整性、文档说明完整性)、UI(界面排版、美观性)
二、操作系统(15题)
- 进程和线程的本质区别是什么?
答案:进程是资源分配的最小单位,拥有独立内存空间;线程是CPU调度的最小单位,共享进程资源。多线程更轻量但需处理同步问题。 - 如何查看系统中所有正在运行的进程?
答案:ps aux 或 ps -ef,配合 grep 过滤,eg: ps aux | grep nginx - 什么是僵尸进程?如何清理?
答案:子进程结束但父进程未回收资源(仍占用进程号)。
解决:kill -9 父进程PID 或重启父进程。 - 查看实时进程资源的命令?
答案:top(动态查看)、htop(增强版),按P按CPU排序,M按内存排序。 - vim命令有哪几种工作模式?
答案:三种模式:命令模式、输入模式、命令行模式 - 如何过滤日志中的ERROR信息?
答案:grep “ERROR” app.log 或 awk ‘/ERROR/{print $0}’ app.log。 - 如何查找指定目录下所有.log文件?
答案:find /path/to/dir -name “*.log” - 如何查看最新日志内容?
答案:tail -n 100 /var/log/app.log //查看日志最后100行日志 - Linux文件权限755表示什么?如何修改?
答案:7表示所有者权限为:读+写+执行,第一个5表示组的权限为:读+执行,第二个5表示其他用户的权限为:读+执行。修改权限命令:chmod 755 filename 或 chmod u=rwx,g=rx,o=rx filename - 如何查看磁盘剩余空间?
答案:df -h(人类可读格式)、du -sh /path(统计目录大小)。 - 如何解压.tar.gz文件?
答案:tar -xzvf file.tar.gz - 如何统计文件行数?
答案:wc -l filename 或 cat filename | wc -l - 如何查看服务器端口占用情况?
答案:lsof -i :8080 或 netstat -anp | grep 8080 - 如何永久修改Linux环境变量?
答案:
用户级:echo ‘export PATH=$PATH:/new/path’ >> ~/.bashrc
系统级:修改 /etc/profile 或 /etc/environment,执行 source 生效。 - Windows操作系统中的哪个工具可以记录硬件资源的占用情况?
答案:性能监视器
三、接口与计算机网络(15题)
-
TCP三次握手与四次挥手的流程是什么?
答案:
三次握手:SYN → SYN-ACK → ACK(建立连接)
四次挥手:FIN → ACK → FIN → ACK(释放连接)
关键点:确保双方数据收发完毕,防止旧连接报文干扰 -
TCP与UDP的区别是什么?
答案:
TCP:面向连接、可靠传输(如文件传输)
UDP:无连接、高效但不可靠(如视频流) -
Cookie与Session的机制差异是什么?
答案:
Cookie存储在客户端,Session存储在服务端
Session更安全但占用服务器资源,Cookie易被篡改但减轻服务器压力 -
简述HTTP请求报文与响应报文的结构
答案:
请求报文:请求行(方法+URL+协议)、请求头、空行、请求体
响应报文:状态行(协议+状态码)、响应头、空行、响应体 -
HTTP与HTTPS的核心区别是什么?
答案:
HTTPS通过SSL/TLS加密传输,HTTP明文传输
HTTPS需CA证书验证身份,HTTP无验证
HTTPS默认端口443,HTTP端口80 -
HTTP常见状态码及含义
答案:
200:请求成功
301/302:永久/临时重定向
404:资源未找到
500:服务器内部错误
503:服务不可用(如服务器过载) -
POST与GET请求的核心区别
答案:
GET参数在URL中,POST在请求体中(POST更安全)
GET有长度限制,POST支持大数据
GET可被缓存,POST不可 -
如何测试弱网环境下的应用表现?
答案:模拟2G/3G/4G网络使用工具如:Charles/Fiddler验证页面加载时间、数据同步成功率 -
什么是API测试?
答案:API测试是一种软件测试方法,专注于验证应用程序编程接口(API)的行为和响应。它确保API能够按照设计和文档的要求正常工作,包括正确响应请求、准确返回数据以及在各种条件下保持稳定性。与传统的UI测试不同,API测试更关注底层的功能实现,而非图形用户界面(GUI)。 -
简述API测试的价值
答案:
加快发布周期:API测试可以在用户界面完全构建完毕之前就能开始验证关键功能,能在更早的时间点发现和解决问题,从而加速整个项目的进度。
提高测试覆盖率:API测试专注于应用程序的核心功能、数据响应以及业务逻辑,能够验证所有系统组件是否按预期工作。
提高效率:自动化API测试不需要等待用户界面准备就绪,执行时间短,通常只需要几分之一的时间就能完成测试,显著提高了测试效率。
降低成本:通过在GUI测试之前进行API测试,可以及早发现并修复小错误,降低整体的测试成本。
风险降低:通过API测试提前发现潜在的问题,可以降低项目开发过程中的风险。这有助于确保软件在发布时更加稳定和可靠。 -
API测试的核心验证点是什么?
答案:功能正确性、参数校验、异常响应(如400/500状态码)、数据一致性(接口返回与数据库匹配) -
接口测试中登录状态依赖的接口如何测试?
答案:使用登录接口获取Token,将Token携带进API进行测试 -
常用的API测试工具有哪些?
答案:Postman、Fiddler、JMeter -
接口测试中上下游有数据依赖如何处理?
答案:用正则表达式提取出上游接口中的响应数据,传参到西游接口中作为请求参数。 -
如何定位判断bug在前端还是后台?
答案:
1、用 f12 或者 fiddler 抓包:如果页面上的数据没有正确的传到 request 的参数里面,以及response 中的参数的值没有正确的显示到前端页面上是前端的 bug ,入参和前端页面交互问题就是前端 bug
如果request 的参数的值没有正确的存到数据库中,以及数据库中的数据没有正确的存到response 中的参数中,则是后端的 bug,出参和数据库交互问题就是后端 bug
2、通过 bug 出现范围判断:如果是在前端页面上,比如 ui,和交互,以及展示相关的,而后端数据处理和存储是正常的,一般是前端问题,或者前端页面点击没有发送请求等都属于前端 bug。只要是后端数据处理和存储是不正常的一般是后端问题
3、查看错误提示或者日志来判断:如果是 f12 的控制台有报错,一般是前端问题,如果是 linux 服务器中的日志文件报错般是后端问题,比如 error、warming、exception 等报错都是后端的问题。
4、接口状态码来判断:接口状态码 4 开头的是前端或客户端问题,接口状态码 5 开头的是后端或服务器问题
四、数据库与SQL(15题)
-
在软件测试中,数据库测试通常包括哪些内容?
答案:
1、数据库性能测试:评估数据库系统的响应速度和处理能力,以及在高负载情况下的性能表现;
2、数据库安全性测试:检查数据库是否具有足够的防护措施,防止非法访问和数据泄露;
3、数据库数据完整性测试:确保数据在输入、处理和输出过程中的完整性和一致性;
4、数据库恢复测试:验证在系统崩溃或数据丢失后,数据库的恢复能力和备份策略的有效性。 -
如何制定数据库的备份策略,并在需要时恢复数据?
答案:
备份策略:
1、全量备份:对整个数据库进行完整备份,适用于数据量较小或变更不频繁的场景。全量备份可以快速恢复整个数据库,但占用存储空间较大,且备份时间较长。
2、增量备份:只备份自上次全量备份以来发生变化的数据。这种方式节省存储空间和时间,但恢复速度较慢,依赖于之前的备份。
3、差异备份:结合全量备份和增量备份,仅备份自上次全量备份以来的更改。这种方法兼顾了存储空间和恢复速度。
恢复策略:
1、版本恢复:利用备份操作期间创建的镜像来恢复数据库的先前版本。
2、事务日志恢复:通过恢复事务日志来恢复到特定时间点,适用于需要精确恢复到某一操作前的状态。
3、自动化恢复:通过脚本或工具自动化备份和恢复过程,减少人工干预,提高效率。 -
事务的ACID特性指什么?
答案:
原子性(Atomicity):事务全部完成或全部回滚
一致性(Consistency):数据状态符合约束
隔离性(Isolation):并发事务互不干扰
持久性(Durability):提交后数据永久保存 -
什么是死锁?如何避免?
答案:
死锁:多个事务互相等待对方释放锁
避免方法:按固定顺序访问资源、设置超时时间、降低事务粒度 -
主键(Primary Key)和外键(Foreign Key)的区别与作用?
答案:
主键:唯一标识表中记录,非空且唯一(如订单ID)
外键:建立表间关联,确保引用完整性(如订单表中的用户ID关联用户表) -
数据库连接池的作用是什么?测试需关注哪些问题?
答案:
作用:复用数据库连接,减少创建连接的开销
测试重点:连接泄漏、最大连接数限制、超时配置 -
简述有几个类型的SQL语句?
答案:数据查询语句DQL(主要使用SELECT语句)、数据操作语句DML(包括插入(INSERT)、更新(UPDATE)和删除(DELETE)等操作)、数据定义语句DDL(包括CREATE、ALTER、DROP、RENAME和TRUNCATE等)、数据控制语句DCL(包括给用户授予访问权限(GRANT)和取消用户访问权限(REVOKE)等操作) -
如何优化查询性能?
答案:
1、对被查询字段创建索引;
2、使用SELECT具体列而不是SELECT *;
3、避免在WHERE子句中使用函数,因为这会让索引失效;
4、根据情况选择合适的JOIN操作,如INNER JOIN、LEFT JOIN,避免使用资源消耗大的CROSS JOIN;
5、聚合函数和GROUP BY优化:确保GROUP BY列已被索引,只对必要列进行聚合;
6、利用查询缓存存储重复查询结果,减少计算负担。 -
简述sql语句中的各类连接和他们的区别?
答案:SQL中的连接类型主要包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)
内连接(INNER JOIN):内连接的结果集是两个表匹配行的集合,不包含任何不匹配的行。
左连接(LEFT JOIN):左连接返回左表中的所有记录以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果集中这些记录的右表部分将包含NULL。
右连接(RIGHT JOIN):右连接与左连接相反,它返回右表中的所有记录以及左表中满足连接条件的记录。如果左表中没有匹配的记录,则结果集中这些记录的左表部分将包含NULL。
全连接(FULL JOIN):全连接返回两个表中的所有记录。当某行在一个表中存在而在另一个表中不存在时,结果集中该行的对应部分将包含NULL。 -
SQL编程中drop,delete,truncate的区别?
答案:
drop一般用于删除整体性数据 如表,模式,索引,视图,完整性限制等。当你不再需要该表时, 用 drop;
delete用于删除局部性数据 如表中的某一元组。当你要删除部分记录时(always with a WHERE clause), 用 delete;
truncate是将表进行清空。当你仍要保留该表,但要删除所有记录时, 用 truncate;
效率方面:drop > truncate > delete -
SQL查询中如何避免查出重复记录?
答案:使用DISTINCT关键字。例如,如果我们要从一个员工表中查询不重复的部门名称,可以这样写:SELECT DISTINCT department FROM employees; -
解释SQL中的视图是什么,并说明其优点。
答案:视图是从一个或多个表中导出来的表,它是一种虚拟存在的表。视图的结构和数据都依赖于基本表,视图自身不存储数据。视图可以象表一样使用,比如查询、插入、更新等。
优点:
简化查询语句:日常开发中,我们可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。
可提高安全性:通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不到也取不到。
逻辑数据独立性:视图可以帮助用户屏蔽真实表结构变化带来的影响。 -
写一个SQL:统计每个用户的订单总数和总金额
答案:SELECT user_id, COUNT(order_id) AS order_count, SUM(amount) AS total_amount FROM orders GROUP BY user_id; -
写一个SQL:查询表中第N高的薪资
答案:SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET N-1; -
写一个SQL:查询已下单用户的订单详情(仅返回有订单的用户)?
答案:
SELECT
o.order_id,
u.name AS user_name,
o.amount,
o.order_time,
u.register_time
FROM orders o
INNER JOIN users u
ON o.user_id = u.user_id;
五、编程语言(21题)
5.1 Java语言(11题)
- Java面向对象的三大特性及测试意义
答案:
封装:隐藏对象实现细节,通过接口暴露功能(测试需验证接口输入输出是否符合预期)
继承:子类复用父类属性和方法(测试需验证继承链中方法重写是否正确)
多态:同一方法在不同对象中的不同行为(测试需覆盖不同子类实现) - Java基本数据类型及其字节大小
答案:byte(1)、short(2)、int(4)、long(8)、float(4)、double(8)、char(2)、boolean(1bit)。 - ==与equals()的区别
答案:
==:基本类型比较值,引用类型比较内存地址。
equals():默认比较地址,但String、Integer等类重写后比较值 - String、StringBuilder、StringBuffer的使用场景分别是什么?
答案:
String:不可变,适合少量数据操作(如配置项读取)
StringBuilder:线程不安全,单线程字符串拼接(如生成动态SQL)
StringBuffer:线程安全,多线程环境使用(如日志拼接) - ArrayList与LinkedList的区别是什么?
答案:
ArrayList:基于数组,随机访问快
LinkedList:基于链表,插入删除快 - final、finally、finalize的区别
答案:
final:修饰不可变变量/方法/类
finally:异常处理中确保代码必执行(如资源释放)
finalize:对象被GC回收前的清理方法(测试中避免依赖) - 重载(Overload)与重写(Override)的区别
答案:
重载:同一类中方法名相同,参数列表不同(与返回值无关)。
重写:子类覆盖父类方法,方法名、参数、返回值均相同。 - 抽象类与接口的区别
答案:
抽象类:可包含方法实现,单继承,成员变量可为非final。
接口:JDK8前仅抽象方法,支持多实现,变量默认public static final。 - static关键字的作用
答案:修饰类成员(变量/方法),属于类而非实例,可直接通过类名访问。static块在类加载时执行一次。 - HashMap与Hashtable的区别
答案:
HashMap:线程不安全,允许null键/值,效率高。
Hashtable:线程安全(synchronized),禁止null键/值。 - HashSet如何保证元素唯一性?
答案:基于HashMap实现,元素作为键存储,依赖hashCode()和equals()去重。
5.2 Python语言(10题)
-
谈谈对 Python 和其他语言的区别?
答案:
语言特点: 简洁优雅,省略了各种大括号和分号,还有一些关键字,类型说明
语言类型: 解释型语言,运行的时候是一行一行的解释并运行,所以调试代码很方便,开发效率高
第三方库: python是开源的,并且python的定位时任由其发展,应用领域很多比如Web,运维,自动化测试,爬虫,数据分析,人工智能.Python具有非常完备的第三方库 -
python中是否需要缩进?
答案:缩进是Python必需的。它指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。通常使用四个空格字符来完成。如果您的代码没有必要缩进,它将无法准确执行并且也会抛出错误。 -
Python中的函数是什么?如何定义函数?
答案:函数是一个代码块,只有在被调用时才会执行。使用def关键字定义函数。 -
Python 内建数据类型有哪些?
答案:int、bool、 str、 list、 tuple、 dict -
Python中可变与不可变数据类型有哪些?原理是什么?
答案:
不可变:整型、字符串、元组(修改值会创建新对象)。
可变:列表、字典、集合(允许原地修改)。 -
Python中列表(List)和元组(Tuple)的核心区别是什么?
答案:
列表:可变,支持增删改操作(如append/pop),适用于动态数据场景。
元组:不可变,创建后无法修改,适用于数据保护和哈希键存储。 -
is和==的区别是什么?
答案:==比较值是否相等,is比较对象内存地址是否相同。a = [1,2]; b = [1,2] → a == b为True,但a is b为False。 -
__new__和__init__的区别是什么?
答案:
__new__创建实例对象并返回(需显式调用父类方法),__init__初始化实例属性。
__new__是静态方法,__init__是实例方法。 -
如何用一行代码实现1到100的求和?
答案:sum(range(1, 101)) # 输出5050 -
如何用Python实现多线程?多线程是否适合CPU密集型任务?
答案:使用threading模块,但受GIL限制,CPU密集型任务推荐多进程(multiprocessing模块)。
六、自动化测试(23题)
-
什么是自动化测试?哪些场景适合自动化测试?
答案:自动化测试通过脚本和工具替代手工执行测试用例,适用于回归测试、数据驱动测试、性能测试等重复性高、稳定性强的场景。 -
自动化测试框架的设计原则是什么?
答案:模块化、可扩展性、可维护性、可复用性,例如通过分层架构(BasePage→PageObject→TestCase) -
TestNG是什么?与JUnit相比有哪些优势?
答案:
TestNG(Testing Next Generation)是Java的测试框架,支持单元测试、集成测试等。
优势:更灵活的注解(如@BeforeSuite)、并行测试、依赖管理、数据驱动测试、丰富的报告生成。 -
列举TestNG中常用的注解及其作用
答案:
@Test:标记测试方法。
@BeforeSuite/@AfterSuite:测试套件开始/结束时执行一次。
@BeforeTest/@AfterTest:测试类执行前后运行。
@BeforeMethod/@AfterMethod:每个测试方法前后运行。 -
TestNG测试方法的执行顺序是怎样的?
BeforeSuite→BeforeTest→BeforeMethod→Test→AfterMethod→AfterTest→AfterSuite -
如何在TestNG中跳过某个测试方法?
答案:使用@Test(enabled = false)注解。 -
TestNG如何实现测试方法的依赖执行?
答案:使用@Test(dependsOnMethods = {“methodName”}),确保依赖方法先执行 -
如何设置测试方法的执行优先级?
答案:使用@Test(priority = 1),数字越小优先级越高 -
TestNG支持哪些并行测试方式?如何配置?
答案:
并行方式:methods、tests、classes、instances。
配置:在testng.xml中设置parallel="tests"和thread-count=“2” -
TestNG中常用的断言方法有哪些?
答案:Assert.assertEquals()、Assert.assertTrue()、Assert.assertNotNull() -
如何从Excel读取数据实现参数化测试?
答案:结合Apache POI读取Excel,并通过@DataProvider返回数据:
eg:
@DataProvider
public Object[][] excelData() throws IOException {
// 使用POI读取Excel逻辑
return new Object[][]{{“user1”, “pass1”}, {“user2”, “pass2”}};
}
@Test(dataProvider = “excelData”)
public void loginTest(String username, String password) { … } -
如何确保测试的独立性和可重复性?
答案:每个测试前重置状态(如数据库回滚)。使用@BeforeEach初始化测试数据,避免共享状态。 -
如何实现接口自动化测试?
答案:使用Requests库(Python)或RestAssured(Java)发送HTTP请求验证响应状态码、数据格式及业务逻辑。 -
如何降低自动化测试的维护成本?
答案:选择稳定的功能模块进行自动化;使用PO模式减少元素变更影响;定期重构测试脚本 -
Selenium WebDriver的工作原理是什么?
答案:通过浏览器驱动(如ChromeDriver)与浏览器通信,发送HTTP请求模拟用户操作(如点击、输入) -
什么是Page Object模式(PO)?其优势是什么?
答案:
PO模式:将页面元素定位和操作封装成类,提升代码复用性和可维护性。
优势:降低元素变更的影响、增强代码可读性。 -
如何实现数据驱动测试(DDT)?
答案:使用Excel/CSV存储测试数据,结合@DataProvider注解(TestNG)或ddt库(Python)。 -
列举Selenium WebDriver支持的元素定位方式
答案:By.id()、By.name()、By.className()、By.tagName()、By.linkText()、By.partialLinkText()、By.xpath()、By.cssSelector() -
XPath中绝对路径与相对路径的区别?如何定位动态变化的元素?
答案:
绝对路径:以/开头,从根节点遍历(如/html/body/div)。
相对路径:以//开头,从任意位置匹配(如//input[@name=‘q’])。
动态元素:使用XPath函数(如contains()、starts-with())或CSS选择器模糊匹配 -
如何处理iframe中的元素?
答案:使用switch_to.frame()切换至iframe -
UI自动化测试中常用的等待策略有哪些?
答案:
强制等待(time.sleep):简单但效率低
隐式等待(implicitly_wait):全局等待页面加载
显式等待(WebDriverWait):针对特定元素条件等待。 -
关闭浏览器时,driver.close()与driver.quit()有何区别?
答案:
close():关闭当前标签页。
quit():关闭所有标签页并退出浏览器会话, -
如何生成自动化测试报告?
答案:结合TestNG生成HTML报告,或使用Allure框架增强报告可读性
七、性能测试(10题)
-
什么是性能测试?其核心目标是什么?
答案:性能测试是通过模拟用户负载验证系统在特定条件下的响应时间、吞吐量、稳定性等指标,核心目标是发现性能瓶颈、评估系统容量及优化资源利用率。 -
性能测试的常见类型有哪些?
答案:
基准测试:建立性能基线。
负载测试:逐步增加负载至瓶颈点。
压力测试:超负荷测试系统稳定性。
并发测试:模拟多用户同时操作 -
JMeter中如何实现参数化?
答案:使用CSV Data Set Config读取外部文件,或通过User Defined Variables定义变量 -
什么是集合点(Synchronizing Timer)?如何设置?
答案:集合点用于模拟多用户同时触发请求,通过添加Synchronizing Timer并设置线程数实现 -
JMeter中如何实现动态关联?
答案:通过正则表达式提取器或JSON提取器捕获响应数据,存入变量供后续请求使用 -
如何设计JMeter脚本实现阶梯式加压?
答案:使用Ultimate Thread Group或Stepping Thread Group插件,分阶段增加线程数 -
JMeter如何监控服务器资源(如CPU、内存)?
答案:通过PerfMon Metrics Collector插件连接服务器代理(如ServerAgent)采集数据。 -
非GUI模式下如何运行JMeter脚本?
答案:命令行执行jmeter -n -t script.jmx -l result.jtl -
性能测试的关键指标有哪些?
答案:响应时间、错误率、CPU/内存利用率、吞吐量(TPS/QPS)、并发用户数 -
如何识别性能瓶颈?
答案:TPS下降或响应时间陡增时可能为数据库或代码瓶颈。CPU/内存持续高负载时需优化资源分配或代码逻辑。
八、质量管理与控制(7题)
-
什么是软件质量?如何衡量软件质量?
答案:软件质量是软件符合明确需求(功能、性能)和隐含需求(可维护性、用户体验)的程度。衡量指标包括缺陷密度、测试覆盖率、客户满意度等 -
敏捷开发中如何保证质量?
答案:通过持续集成(CI)、自动化测试、每日站会、迭代评审和回顾会议确保质量。 -
质量控制(QC)与质量保证(QA)的区别?
答案:
QC:检测产品缺陷(如测试),关注产品(结果)。
QA:预防缺陷(如流程审计),关注过程。 -
如何实施PDCA循环进行质量改进?
答案:
Plan:识别问题并制定改进计划。
Do:执行试点改进。
Check:评估效果。
Act:标准化或调整方案 -
什么是软件过程改进(SPI)?列举常见的改进模型。
答案:SPI通过优化开发流程提升质量与效率,常用模型包括CMMI、ISO 9001、敏捷Scrum -
CMMI的五个成熟度级别是什么?
答案:初始级、可重复级、定义级、量化管理级、优化级 -
ISO 9001的核心原则有哪些?
答案:客户聚焦、领导作用、过程方法、持续改进、循证决策
九、职业素养-通用能力(9题)
-
如果开发人员不认可你提交的缺陷,你会如何处理?
答案:
1、先倾听对方观点,确认是否因理解差异导致争议。
2、提供更多证据(如需求文档条款、用户场景案例)。
3、必要时拉入产品经理或TL仲裁,避免情绪化争论。 -
你最近学习了哪些测试相关的新技术/工具?如何应用到工作中?
示例:学习Postman自动化测试脚本编写,在XX项目中替代了手工测试接口,效率提升40%。
加分项:说明学习路径(如课程、文档、实践) -
你发现现有测试流程存在低效环节时,会如何推动改进?
参考答案:
数据举证(如手工回归测试耗时占比70%)。
提出方案(引入自动化测试框架)。
小范围试点后推广(先覆盖核心模块)。
示例:推动团队使用Allure报告替代传统Excel,效率提升50%。 -
面对一个完全陌生的业务系统,你会如何快速上手测试?
参考答案:
第一步:阅读需求文档和现有测试用例,梳理核心业务流程。
第二步:阅读和分析产品已有缺陷,梳理缺陷集中模块与用户使用场景。
第三步:与产品/开发对齐关键业务规则。
第四步:通过探索性测试熟悉系统,逐步补充测试用例。 -
目前在工作中是否用到AI工具来辅助测试?如何应用的?
参考答案:可以简述AI编码助手在代码编写、生成单元测试方面的能力和应用,以及在测试用例设计、编写、缺陷分析、数据分析方面的应用。 -
如何看待重复性测试工作(如回归测试)?
答题思路:承认重复工作的必要性,但会通过自动化脚本或优化用例集(如基于风险选择用例)提升效率。 -
如果项目周期紧张,测试时间被压缩,你会怎么做?
答案:优先级策略:优先测试核心功能和高风险模块。
风险沟通:明确告知团队剩余风险,推动各方共同决策。 -
你如何看待测试人员的责任边界?
参考答案:
基础责任:确保交付质量,明确缺陷风险。
延伸责任:推动流程优化(如建议代码评审增加测试视角)。 -
请分享一个你发现别人容易忽略的缺陷的案例。
示例:在测试文件上传功能时,发现界面未限制文件名特殊字符(如#),但后端解析会报错。团队原以为只测试了常规文件名。
十、 职业发展(3题)
-
未来1-2年,你希望在哪方面提升测试能力?
参考答案:
技术深化:主攻自动化测试(如Selenium+Python)或性能测试(JMeter/LoadRunner)。
业务扩展:深入理解当前行业领域(如金融、电商)的业务规则。 -
你更倾向于走技术专家路线(如测试开发)还是管理路线(如测试经理)?为什么?
参考答案:
技术路线:“希望成为测试架构师,专注解决复杂系统的质量保障问题,例如搭建CI/CD流水线中的质量门禁。”
管理路线:“目标是带领测试团队,通过流程优化和人才培养提升整体效率,例如推行敏捷测试实践。” -
如何看待测试岗位的未来发展趋势?
参考答案:
测试左移(参与需求评审)与右移(监控线上质量)。
AI在测试中的应用(如自动生成用例、智能分析日志)。