千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

当前位置:首页  >  应聘面试  >  软件测试面试题  > 2026年软件测试面试题:10道接口题,淘汰90%候选人_千锋教育

2026年软件测试面试题:10道接口题,淘汰90%候选人_千锋教育

来源:千锋教育
发布人:cli
时间: 2026-05-30 06:35:40 1780094140

2026年软件测试面试题:10道接口题,淘汰90%候选人

面试官不会告诉你,真正的分水岭不在功能测试,而在接口测试。2026年,企业要的不是“点工”,是懂协议、会Mock、能搞定鉴权的接口测试专家。本文拆解10道高频题,每道都配答案和代码,看完直接超越90%的竞争者。

接口测试不是选择题,是生存题。

01 HTTP协议:从状态码到请求方法,面试官在挖什么坑?

问题1:HTTP状态码403和401有什么区别?

面试官想听的不是定义。401是“你是谁?”,403是“知道你是谁,但你没权限”。401触发登录弹窗,403直接拒绝访问。

实战场景:你测试一个支付接口,返回401,说明token过期或未携带;返回403,说明token有效但账户被冻结。前者是认证失败,后者是授权失败。

问题2:GET和POST请求的本质区别是什么?

标准答案说GET安全、幂等、有长度限制,POST不安全、不幂等、无限制。但面试官要听的是:GET请求参数在URL,会被浏览器缓存、历史记录保存、服务器日志记录;POST请求参数在Body,相对隐蔽。

代码对比:

python
# GET请求
import requests
response = requests.get('https://api.example.com/users?id=123')
print(response.url)  # 参数明文显示

# POST请求
payload = {'username': 'test', 'password': 'pass123'}
response = requests.post('https://api.example.com/login', data=payload)
print(response.request.body)  # 参数在Body中

问题3:如何测试一个HTTPS接口的证书有效性?

2026年,证书问题导致的安全事故占比37%。测试要点:证书过期时间、域名匹配、证书链完整性、是否被吊销。

Python测试代码:

python
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

# 关闭SSL警告(仅测试环境)
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

# 验证证书
response = requests.get('https://example.com', verify='/path/to/cert.pem')
print(response.status_code)

# 测试过期证书
try:
    response = requests.get('https://expired.badssl.com', verify=True)
except Exception as e:
    print(f'证书过期:{str(e)}')

技术深度,是面试官唯一认可的通行证。

02 RESTful API设计:一个接口规范,暴露你的系统架构能力

问题4:RESTful API中,PUT和PATCH的区别?

PUT是整体替换,PATCH是局部更新。面试官会追问:如果你用PUT更新用户年龄,没传名字字段,名字会被清空吗?答案是:会。PATCH只更新传入字段。

接口设计示例:

text
# PUT - 全量更新
PUT /users/123
Body: {"name": "张三", "age": 25}
# 结果:name变成"张三",age变成25,其他字段不变或清空

# PATCH - 局部更新
PATCH /users/123
Body: {"age": 26}
# 结果:age变成26,name保持不变

问题5:如何设计一个分页接口的参数?

面试官考察的是你对大规模数据处理的认知。标准设计:page(页码)、size(每页数量)、sort(排序字段)、order(排序方向)。

测试用例设计:

  • ►边界值:page=1, size=0(返回空数组还是报错?)
  • ►异常值:page=-1, size=10000(系统会崩溃吗?)
  • ►组合测试:page=1&size=10&sort=createTime&order=desc

问题6:RESTful API版本管理有几种方式?

三种主流方式:

1. URL路径:/v1/users、/v2/users

2. 请求头:Accept: application/vnd.example.v1+json

3. 查询参数:/users?version=1

推荐用URL路径,简单直观,方便测试和文档管理。面试官会问:你遇到过API版本兼容性问题吗?答案:新增字段时,旧版本客户端会忽略;删除字段时,必须发公告并设置过渡期。

接口设计不是写代码,是定规则。

03 Mock服务:没有真实环境,如何把测试跑起来?

问题7:什么时候需要使用Mock服务?

三大场景:

1. 第三方接口未开发完成(如支付、短信)

2. 测试环境不稳定或无法访问

3. 需要模拟异常场景(超时、返回错误码、数据异常)

问题8:如何用Python搭建一个简单的Mock服务?

使用flask库,30行代码搞定:

python
from flask import Flask, jsonify, request

app = Flask(__name__)

# Mock支付接口
@app.route('/api/pay', methods=['POST'])
def mock_pay():
    data = request.json
    amount = data.get('amount', 0)
    
    # 模拟不同金额返回不同状态
    if amount > 10000:
        return jsonify({'code': 500, 'message': '金额超限'}), 500
    elif amount <= 0:
        return jsonify({'code': 400, 'message': '金额无效'}), 400
    else:
        return jsonify({'code': 200, 'message': '支付成功', 'trade_no': '2026' + str(amount)}), 200

# Mock短信接口(模拟超时)
@app.route('/api/sms', methods=['POST'])
def mock_sms():
    import time
    time.sleep(10)  # 模拟10秒超时
    return jsonify({'code': 200, 'message': '短信发送成功'}), 200

if __name__ == '__main__':
    app.run(port=9999, debug=True)

问题9:Mock服务如何保证数据和真实环境一致?

核心原则:Mock数据要基于真实接口的返回格式设计。推荐做法:

1. 抓取真实接口的返回数据,保存为JSON模板

2. 用faker库生成随机但符合规则的数据

3. 定期对比Mock数据和真实数据的字段差异

python
from faker import Faker
fake = Faker()

def generate_user():
    return {
        'id': fake.random_int(min=1000, max=9999),
        'name': fake.name(),
        'email': fake.email(),
        'phone': fake.phone_number(),
        'createTime': fake.date_time_this_year().isoformat()
    }

Mock不是造假,是可控的真实。

04 鉴权机制:Token、JWT、OAuth2.0,一次说透

问题10:JWT和Token鉴权的区别?测试要点是什么?

JWT(JSON Web Token)包含三部分:Header(头部)、Payload(载荷)、Signature(签名)。Token只是一个随机字符串,需要查数据库验证。

JWT的结构:

text
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6InRlc3QiLCJpYXQiOjE1MTYyMzkwMjJ9.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

测试要点:

1. Token过期测试:生成一个过期Token(设置exp为过去时间),请求接口,预期返回401

2. 签名篡改测试:修改JWT的Payload部分,重新编码但不更新签名,预期返回401

3. 权限越界测试:用普通用户Token请求管理员接口,预期返回403

Python测试代码:

python
import jwt
import time

# 生成过期JWT
expired_token = jwt.encode({
    'user_id': 123,
    'role': 'admin',
    'exp': int(time.time()) - 3600  # 1小时前过期
}, 'secret_key', algorithm='HS256')

# 测试过期Token
headers = {'Authorization': f'Bearer {expired_token}'}
response = requests.get('https://api.example.com/admin/users', headers=headers)
assert response.status_code == 401

# 测试签名篡改
parts = expired_token.split('.')
tampered_payload = jwt.encode({'user_id': 999, 'role': 'superadmin'}, 'wrong_key', algorithm='HS256')
tampered_token = f'{parts[0]}.{tampered_payload.split(".")[1]}.{parts[2]}'
headers = {'Authorization': f'Bearer {tampered_token}'}
response = requests.get('https://api.example.com/admin/users', headers=headers)
assert response.status_code == 401

补充题:OAuth2.0的四种授权模式如何选择?

面试官考察你对业务场景的理解:

  • ►授权码模式:最安全,适合有后端的Web应用
  • ►隐式模式:简化版,适合纯前端应用(已被淘汰)
  • ►密码模式:直接传用户名密码,适合信任的客户端
  • ►客户端凭证模式:适合服务间调用

测试重点:授权码的code只能使用一次、state参数防CSRF攻击、refresh_token刷新逻辑。

鉴权测试,防的不是用户,是漏洞。

---

接口测试不是点点点,是协议、架构、安全的三维博弈。2026年,企业要的不是会写用例的人,是能设计Mock、能破解鉴权、能预测系统瓶颈的人。10道题只是入场券,真正的考验在面试官追问的那一刻。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT