
软件测试常见的十三个问题第一接口测试的流程是什么样的。第二没有接口文档如何开展接口测试。第三接口响应常用的状态码有哪些分别是什么意思第四接口测试怎么设计用例和UI测试用例有什么区别需要考虑哪些方面呢第五接口测试需要结合数据库数据进行判断时你会怎么做第六接口加密解密以及数字签名这类场景该怎么测试第七接口幂等性有了解过吗第八接口自动化测试过程中如何实现参数化。第九接口出现异常错误该怎么定位和分析问题。第十文件上传接口测试有什么注意事项吗第十一异步接口该怎么测试第十二接口测试依赖第三方接口时该如何进行测试。第十三接口测试中token和session有什么区别呢一、 接口测试的流程是什么样的接口测试的流程与软件测试整体流程类似通常分为以下几个阶段1. 需求评审参与需求讨论理解业务逻辑、接口需求文档PRD及交互设计明确接口的输入输出、业务规则和限制条件。2. 接口用例设计基于接口文档或需求使用等价类划分、边界值分析、场景法等设计测试用例覆盖正常流、异常流、权限校验及边界条件。3. 评审接口用例与开发、产品对齐用例确保对接口的理解一致查漏补缺。4. 准备测试数据准备请求参数、Mock数据以及初始化数据库中的前置数据。5. 执行测试冒烟测试新版本发布后先对核心接口进行冒烟测试通过后再进行全面测试。功能测试使用 Postman、Apifox、JMeter 等工具发送请求检查响应数据状态码、响应体、字段类型、业务逻辑是否正确。异常与安全测试验证非授权访问、参数篡改、SQL注入、并发控制等。6. 缺陷跟踪与回归提交 Bug 给开发修复修复后进行回归测试。7. 自动化测试落地将核心接口、冒烟接口编写为自动化测试脚本集成到 CI/CD 持续集成流水线中如 Jenkins。二、 没有接口文档如何开展接口测试在敏捷开发或文档缺失的情况下可以通过以下几种方式来开展接口测试1. 抓包分析最常用使用Fiddler、Charles、Burp Suite或浏览器自带的DevTools (F12)。在前端页面进行实际业务操作如登录、下单拦截并观察前端发出的请求和响应记录请求地址URL、请求方法GET/POST、请求头Headers、请求参数Payload/Query及返回格式。2. 与开发沟通协作直接找开发人员索取代码逻辑、内部接口定义或者让开发配合梳理核心接口。3. 代码走查白盒辅助如果有权限可以直接阅读后端代码如 Controller 层、路由配置明确接口路径、入参字段及校验规则。4. 逆向推导与补充文档通过抓包和沟通的结果边测试边记录反向整理出属于自己的“接口测试清单”并在测试过程中逐步完善。三、 接口响应常用的状态码有哪些分别是什么意思HTTP 状态码大体分为 5 大类接口测试中常见的具体状态码如下2xx成功200 OK请求成功服务器已成功处理了请求。201 Created请求成功并且服务器创建了新的资源常用于 POST 或 PUT 请求。204 No Content请求成功但响应头或响应体中没有返回具体内容常用于 DELETE 请求。3xx重定向301 Moved Permanently永久重定向请求的资源已被永久移动到新 URI。302 Found临时重定向。304 Not Modified协商缓存生效客户端有缓存的资源服务器允许使用缓存未发生修改。4xx客户端错误400 Bad Request客户端请求语法错误或参数有误服务器无法理解。401 Unauthorized请求未经授权缺少 Token 或 Token 校验失败。403 Forbidden服务器收到请求但拒绝提供服务权限不足。404 Not Found请求的资源不存在URL 拼写错误或接口未发布。405 Method Not Allowed请求方式不被允许例如将 GET 接口写成了 POST。5xx服务端错误500 Internal Server Error服务器内部错误通常是代码抛出未捕获的异常。502 Bad Gateway网关或代理服务器尝试执行请求时从上游服务器收到了无效的响应。504 Gateway Timeout网关超时服务器过载或后端服务响应时间过长。四、 接口测试怎么设计用例和UI测试用例有什么区别需要考虑哪些方面呢1. 接口测试用例与 UI 测试用例的区别比较维度接口测试用例UI 测试用例测试对象后端应用程序的 API 接口前端用户界面、页面元素、交互体验测试层级属于服务层/集成测试绕过前端直接测后端逻辑属于系统层/端到端测试依赖前端展示发现 Bug 阶段较早发现底层逻辑、数据流转、安全、性能等问题发现页面布局错乱、样式冲突、文字错误、前端交互卡顿等问题执行效率执行速度快适合自动化持续集成执行速度慢受浏览器渲染和前端网络影响大2. 设计接口测试用例需要考虑的方面参数校验字段级别必填项检查参数为空、为 null、不传。数据类型检查String、Int、Boolean、Array 等类型错误。边界值检查数值过大/过小、字符串超长、数组越界。特殊字符与格式如邮箱格式、手机号格式、HTML/SQL注入字符。业务逻辑校验正常业务流程是否能跑通。业务限制条件如余额不足能否下单、优惠券是否过期、库存是否扣减。状态转换逻辑如订单从“未支付”到“已支付”再到“已发货”的状态流转是否正确。安全与权限校验未登录状态下是否能访问敏感接口401。普通用户越权访问管理员接口403。Token 过期、篡改或伪造的情况。响应结果校验状态码、错误码、错误提示信息Message是否准确。返回的数据结构JSON 格式、字段完整性、嵌套层级是否符合文档。五、 接口测试需要结合数据库数据进行判断时你会怎么做接口与数据库的结合主要用于前置数据准备和后置结果校验1. 前置数据准备Setup在执行测试前通过 SQL 脚本或测试框架如 Python 的 PyMySQL、Java 的 JDBC向数据库中插入特定状态的数据。例如测试“查询用户详情”接口时先在数据库插入一个指定 ID 的用户记录。2. 后置结果校验Assertion当接口执行了“写”操作如注册、修改密码、下单后不能只看接口返回的code: 200必须直接去数据库查询对应的表和字段校验数据是否真实准确地落盘。示例调用“扣减库存”接口后查询数据库中该商品的stock字段值是否正确减去了购买数量。3. 数据清理Teardown测试完成后清理掉测试过程中产生脏数据保证测试环境的独立性和可重复性。六、 接口加密解密以及数字签名这类场景该怎么测试针对加密、解密和数字签名的接口测试时需要厘清加解密逻辑并在测试中进行针对性覆盖1. 常见加密与签名机制对称加密如 AES、DES加解密使用同一个密钥用于敏感数据传输如密码。非对称加密如 RSA公钥加密、私钥解密或反之常用于登录或敏感信息交换。数字签名如 MD5、SHA256、HMAC将参数按规则排序、拼接并加上密钥Secret计算出签名值Sign用于防止请求被篡改。2. 测试策略与方法正向测试使用正确的算法、密钥或签名规则发送请求验证后端能否正常解密并处理。篡改测试验证防篡改故意修改请求体中的某个参数值但保持签名不变验证接口是否报错如“签名无效”。缺失测试发送请求时故意不传签名参数或加密密文验证接口的校验拦截机制。时效性/重放攻击测试Timestamp如果签名中带有时间戳Timestamp测试时间戳过期如超过 5 分钟后接口是否拒绝响应。自动化加解密处理在自动化测试框架如 JMeter 的 JSR223 脚本、Python 的 requests hooks中编写加解密函数在发送请求前自动加密/生成签名在收到响应后自动解密从而不影响业务逻辑的自动化断言。七、 接口幂等性有了解过吗1. 什么是幂等性幂等性是指任意多次执行所产生的影响均与一次执行的影响相同。也就是说同一个接口被发起一次或多次对系统产生的影响是一样的且不会发生副作用。典型场景用户重复点击支付按钮、网络延迟导致前端重复提交请求、消息队列重复消费。GET、PUT、DELETE通常具备天然的幂等性而POST如创建订单通常是非幂等的。2. 常见解决方案Token 机制防重令牌客户端请求前先获取一个全局唯一的 Token提交时携带该 Token服务端校验 Token 存在则执行并删除重复提交时因为 Token 已不存在而拦截。唯一索引Unique Constraint利用数据库表字段的唯一性约束如订单号、业务流水号重复插入时数据库直接报错拦截。分布式锁Redis通过分布式锁在并发请求时锁定某个业务 ID只允许第一个请求通过其余请求直接返回或等待。3. 如何进行幂等性测试使用自动化测试工具如 JMeter 的多线程并发组或编写脚本模拟高并发或高频连续多次发送完全相同的请求。验证后端系统是否只处理了一次检查数据库是否只生成了一条记录、余额是否只扣减了一次、接口是否对重复请求返回了友好的提示或相同的成功响应。八、 接口自动化测试过程中如何实现参数化。参数化是指将测试数据与测试脚本分离通过外部数据源多次驱动同一段测试脚本运行。不同工具实现方式如下1. Postman / Apifox使用 CSV 或 JSON 格式的数据文件。在集合Collection运行器中导入数据文件在请求体或环境变量中使用{{变量名}}进行引用。2. Python (pytest requests)使用pytest.mark.parametrize装饰器直接传入列表或元组。通过读取外部文件如 YAML、JSON、CSV、Excel或连接数据库获取数据传给测试函数。3. Java (JMeter / TestNG)JMeter使用“CSV Data Set Config”CSV 数据文件设置组件将数据读取到变量中在取样器中通过${变量名}调用。TestNG使用DataProvider注解提供数据源。九、 接口出现异常错误该怎么定位和分析问题当接口出现异常如返回 500、404、超时或数据错误时可以按以下步骤排查1. 查看响应结果与状态码如果是404检查 URL 路径、接口版本号、请求方式GET/POST是否正确。如果是401/403检查 Token 是否失效、缺失或权限不足。如果是500说明后端报错需配合日志进一步分析。2. 检查请求报文Payload/Headers检查传参格式是否符合 JSON/Form 要求、必填字段是否遗漏、数据类型是否匹配。3. 查看后端服务日志Log登录服务器或通过日志平台如 ELK、Graylog查看对应时间戳的后端错误日志。重点看Stack Trace堆栈信息定位具体是哪一行代码、哪个类抛出了异常如 NullPointerException、SQLSyntaxErrorException。4. 抓包与网络层分析使用 Charles 或 Fiddler 确认请求是否真正到达了服务器或者是否在中途被网关Nginx拦截如 Nginx 502、504 超时。5. 联合排查如果是数据库异常检查连接池是否耗尽或 SQL 语句语法问题如果是第三方接口异常检查下游服务的状态。十、 文件上传接口测试有什么注意事项吗文件上传接口除了常规的入参校验还需关注文件本身的特性1. 文件格式MIME 类型限制上传支持的格式如.jpg,.png,.pdf验证成功。上传不支持的格式如.exe,.sh,.bat验证后端是否能拦截并报错。防范恶意文件上传如将木马文件后缀名改为.jpg测试后端是否会检查文件头Magic Number或内容。2. 文件大小限制上传小于限制的文件成功。上传刚好等于限制边界的文件成功或边界处理。上传超过最大限制的文件如限制 2MB上传 5MB验证接口是否正确报错如“文件过大”。3. 文件名与特殊字符测试中文文件名、超长文件名、包含特殊字符如空格、#、?的文件名验证系统是否会乱码或报错。测试重名文件上传验证系统是自动覆盖、重命名还是报错。4. 并发与传输异常多用户同时上传大文件测试服务器性能和带宽压力。网络中断、上传一半取消验证系统是否会产生垃圾文件服务器端是否有临时文件清理机制。十一、 异步接口该怎么测试异步接口如发送短信、生成大型报表、视频转码通常是请求发出后后端立即返回一个“受理成功”的响应但实际业务在后台慢慢执行。测试要点如下1. 验证即时响应检查请求发送后接口是否能秒级返回且响应状态码和业务状态码表示“处理中”或“已受理”通常返回一个任务 IDtaskId或流水号。2. 结果轮询与状态查询通过返回的taskId调用另外的“查询任务状态”接口验证状态是否从“处理中”流转为“成功”或“失败”。3. 回调通知Webhook测试如果系统支持异步回调需配置接收回调的测试服务验证当后台任务完成后第三方或后端是否成功向指定回调地址发送了通知且通知参数准确。4. 数据库与最终一致性校验等待后台异步线程执行完毕后检查数据库中的最终数据状态是否符合预期。十二、 接口测试依赖第三方接口时该如何进行测试在开发或测试环境中第三方接口如微信支付、短信验证码、第三方登录可能存在不稳定、收费、无法在测试环境调用等问题通常采用以下方案1. 使用 Mock 服务最常用使用 Mock 工具如 Apifox、WireMock、Moco在本地或测试环境模拟第三方接口。预设好第三方接口在各种场景下的返回结果如成功、超时、返回错误码从而独立开展本系统接口的测试。2. 沙箱环境Sandbox如果第三方如支付宝、微信支付提供沙箱环境可以直接配置沙箱环境的密钥和 URL 进行联调测试。3. 白名单与网络打通如果必须调用真实的第三方测试接口需确保测试环境的外网 IP 已加入第三方的防火墙白名单中。十三、 接口测试中 token 和 session 有什么区别呢Token令牌和 Session会话都是用于用户身份认证的机制它们的核心区别在于状态存储的位置和扩展性1. Session基于服务端存储位置存储在服务端如内存、Redis 或数据库中。工作原理用户登录成功后服务端生成一个 Session ID通过 Cookie 传给客户端。后续请求客户端自动带上 Cookie包含 Session ID服务端去内存/缓存中比对。缺点服务端需要消耗内存存储会话在分布式集群环境下需要做 Session 共享同步处理否则横向扩展服务器会出问题。2. Token基于客户端/JWT 常见存储位置存储在客户端如浏览器的 LocalStorage、SessionStorage 或移动端的沙盒中每次请求通过请求头Headers传给服务端。工作原理用户登录成功后服务端根据用户信息通过秘钥签名生成一个加密的 Token 字符串返回。后续请求客户端带上该 Token服务端通过解密/验签来验证身份服务端本身不存储会话状态。优点无状态、易于扩展天然支持分布式集群和移动端跨平台应用。