经典问题——华测
1、没有 token 的情况下,接口的自动化测试可以通过哪些方式处理?
- 确认接口是否有其他认证机制:
- 如果使用的是 Basic Auth、Session ID 等传统方式,可以在请求中直接传递相关认证信息(如用户名和密码、Cookie 等)。
- 如果接口没有任何认证机制:
- 确认测试环境是否可以直接访问接口。没有认证可能是因为项目运行在封闭的内网环境,安全性依赖于网络隔离。如果如此,可以直接进行接口调用。
- 模拟真实请求:
- 通过抓包工具(如 Fiddler、Wireshark、Postman)确认接口调用的请求头和参数,并在自动化测试中复现这些请求。
- 利用固定的测试账户:
- 若接口允许用测试账户登录,则在自动化测试中以此账户的固定凭据来发送请求。
- 加强环境隔离:
- 如果生产环境对安全性有要求,建议限制测试脚本的调用权限,只允许在测试环境中使用。
- 自动化工具选择:
- 使用合适的自动化测试工具(如 JMeter、Rest Assured、Postman Collection Runner 等)模拟请求并验证响应。
无 token 的情况下,确保接口调用的认证机制(如果存在)正确实现即可;若没有认证机制,则重点在于验证功能逻辑而非安全性。
2、什么是 Token?
Token 是一种认证凭证,用于在客户端和服务器之间进行身份验证。它通常是一串加密的字符串,由服务器生成并返回给客户端,客户端在后续请求中携带 Token,服务器通过验证 Token 来判断请求的合法性。
Token 的主要功能:
- 身份验证:确认请求者的身份。
- 权限验证:确认请求者是否有权限访问指定资源。
- 防止重复登录:避免频繁验证用户名和密码。
Token 的典型内容:
内容部分 | 描述 |
---|---|
用户身份信息 | 可能包括用户 ID、用户名等,用于标识用户身份。 |
签发时间 | Token 的生成时间,用于判断是否过期。 |
过期时间 | Token 的有效期,超过该时间后需要重新登录或刷新 Token。 |
权限信息 | 描述用户的角色或权限范围,用于控制资源访问。 |
随机数/唯一标识符 | 防止 Token 被重放攻击(Replay Attack)。 |
签名信息 | 使用服务器密钥签名,确保 Token 内容未被篡改,可以通过加密算法(如 HMAC、RSA)验证真实性。 |
Token 的常见类型:
类型 | 特点 |
---|---|
JWT(JSON Web Token) | 一种标准化的 Token,基于 JSON 格式,包含 Header、Payload 和 Signature 三部分,支持跨语言验证。 |
Opaque Token | 不透明的 Token,通常是随机字符串,所有验证和信息存储在服务器端。 |
OAuth Token | 用于授权协议(如 OAuth2)的 Token,可以分为访问令牌(Access Token)和刷新令牌(Refresh Token)。 |
3、什么是 Cookies?
Cookies 是一种由服务器生成并存储在客户端浏览器中的小型数据文件,用于保存用户状态和信息。它可以帮助服务器识别用户、保存用户会话信息以及实现个性化功能。
Cookies 的特点:
- 存储位置:存储在客户端(通常是浏览器)中。
- 大小限制:通常每个 Cookie 最大为 4KB,一个域名最多可存储 20 个 Cookie(不同浏览器略有差异)。
- 生命周期:
- 会话 Cookie:浏览器关闭后即失效。
- 持久化 Cookie:通过
Expires
或Max-Age
属性设置到期时间,存储在客户端直到到期或手动删除。
- 作用范围:可以通过
Domain
和Path
指定 Cookie 的适用范围。 - 安全性:通过
Secure
属性(仅通过 HTTPS 传输)和HttpOnly
属性(禁止客户端脚本访问)提高安全性。
Cookies 的组成:
字段 | 描述 |
---|---|
名称(Name) | Cookie 的键,用于标识存储的数据。 |
值(Value) | Cookie 的值,存储具体信息(如 Session ID、用户偏好)。 |
域(Domain) | 指定 Cookie 的适用域名,默认是当前域名。 |
路径(Path) | 指定 Cookie 在域名下的适用路径。 |
有效期(Expires/Max-Age) | 指定 Cookie 的过期时间。 |
安全(Secure) | 如果设置,则 Cookie 仅通过 HTTPS 传输。 |
HttpOnly | 如果设置,则禁止通过 JavaScript 访问此 Cookie,增强安全性。 |
SameSite | 限制跨站点请求时是否携带 Cookie,值为 Strict 、Lax 或 None 。 |
Cookies 的主要用途:
- 会话管理:如保存用户登录状态、购物车信息。
- 个性化设置:如保存语言偏好、主题样式。
- 跟踪与分析:用于记录用户行为,支持广告投放和网站分析。
Cookies 的优缺点:
优点 | 缺点 |
---|---|
能在客户端和服务器间快速传递状态信息。 | 容量有限,仅适合存储少量数据。 |
支持持久化存储,可以保存用户偏好或会话信息。 | 安全性较低,可能被篡改或盗取(如 XSS 攻击)。 |
通过 HttpOnly 和 Secure 等属性可以提高安全性。 | 对用户隐私存在潜在威胁,可能被用于跨站点跟踪。 |
被广泛支持,几乎所有浏览器都兼容。 | 每次请求都会自动携带,可能造成不必要的带宽浪费。 |
4、什么是 Session?
Session 是一种服务器端机制,用于在用户与服务器交互的多个请求之间保持用户的状态和数据。它通过在服务器端存储会话数据,并在客户端和服务器之间交换标识符(通常是 Session ID)来实现状态管理。
Session 的特点:
- 存储位置:会话数据保存在服务器端,客户端仅保存 Session ID。
- 标识唯一性:每个 Session 都有唯一的标识符(Session ID)。
- 生命周期:默认情况下,Session 会在用户关闭浏览器或 Session 超时时结束,可以通过配置延长或缩短生命周期。
- 安全性:比 Cookies 更安全,敏感数据不直接存储在客户端。
- 状态管理:常用于保持用户登录状态、购物车数据等。
Session 的组成:
组成部分 | 描述 |
---|---|
Session ID | 一个唯一标识符,用于关联客户端与服务器端的会话数据。 |
会话数据 | 服务器端存储的具体信息(如用户身份、购物车、权限信息)。 |
生命周期配置 | 指定会话的有效时间,通常可以通过服务器配置文件设置。 |
Session 的实现过程:
- 创建:用户首次访问服务器时,服务器生成一个唯一的 Session ID,并将其存储在服务器中,同时通过 Cookie、URL 重写或隐藏表单字段返回给客户端。
- 标识:客户端在后续请求中携带该 Session ID,服务器根据 Session ID 找到对应的会话数据。
- 使用:服务器利用会话数据为用户提供个性化服务。
- 销毁:会话到期或用户主动登出时,服务器删除会话数据。
Session 和 Cookies 的比较:
对比项 | Session | Cookies |
---|---|---|
存储位置 | 数据存储在服务器端,客户端仅存储 Session ID。 | 数据直接存储在客户端。 |
安全性 | 更安全,敏感信息不暴露给客户端。 | 安全性较低,数据可能被篡改或窃取。 |
数据大小 | 可存储较大数据量,取决于服务器配置。 | 通常限制为 4KB 以内。 |
性能影响 | 服务器存储需要占用更多资源,影响性能。 | 不占用服务器存储资源,但每次请求都会传输数据。 |
生命周期 | 通常与会话相关,可通过服务器设置有效期。 | 由 Expires 或 Max-Age 属性决定。 |
Session 的常见用途:
- 用户身份验证:在用户登录后,存储其身份信息。
- 购物车功能:临时保存用户选购的商品。
- 跨请求状态共享:为同一个用户的多个请求提供一致的数据状态。
- 权限管理:存储用户角色和访问权限信息。
凡是过去,皆为序章;凡是未来,皆有可期。