📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
一、Cookie与Token深度解析
1. Cookie工作机制
本质:服务器发送到浏览器并保存在本地的小型数据片段
工作原理:
客户端首次访问 → 服务端通过Set-Cookie响应头下发
浏览器自动存储 → 后续请求自动携带Cookie头
服务端验证 → 维持有状态会话
关键属性:
Set-Cookie: sessionId=abc123;
Domain=.example.com;
Path=/;
Max-Age=3600;
Secure;
HttpOnly;
SameSite=Lax
2. Token工作机制
主流实现:JWT(JSON Web Token)
结构组成:
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
验证流程:
客户端登录获取Token
客户端存储Token(通常LocalStorage)
请求时手动添加到Authorization头
服务端解密验证签名
二、测试工程师必备知识体系
1. 安全测试要点
Cookie安全:
HttpOnly测试:验证是否阻止JS访问
// 尝试读取Cookie应失败
try { document.cookie; } catch(e) { /* 预期抛出异常 */ }
Secure测试:非HTTPS请求不应传输
curl -I http://example.com/ --cookie "session=123"
# 应观察到Cookie未发送
SameSite测试:
# 跨站请求测试
def test_samesite():
session = requests.Session()
# 模拟跨站请求
response = session.post('https://victim.com/transfer',
data={'to': 'hacker', 'amount': 1000},
headers={'Origin': 'https://attacker.com'})
assert 'Set-Cookie' not in response.headers
Token安全:
签名算法测试:尝试修改Payload保留原签名
# 修改JWT中间部分但保留原签名
echo "eyJhbG...<篡改部分>...SflKxw" | base64 -d | jq
# 服务端应拒绝
时效性测试:精确到秒的过期验证
// Postman测试脚本
const token = pm.response.json().token;
const decoded = jwt_decode(token);
pm.expect(new Date(decoded.exp * 1000)
.to.be.lessThan(new Date(Date.now() + 3600*1000));
2. 功能测试要点
会话管理测试:
测试场景 | 预期结果 |
---|---|
清除Cookie后访问 | 跳转登录页 |
修改Cookie值 | 会话失效 |
过期Cookie | 返回401 |
Token刷新测试:
def test_token_refresh():
# 获取初始Token
token = login()
# 等待Token临近过期
time.sleep(TOKEN_LIFETIME - 10)
# 发起业务请求
response = request_with_token(token)
# 验证是否触发自动刷新
assert 'New-Token' in response.headers
assert response.status_code == 200
并发测试:
Cookie会话冲突:
# 模拟多终端登录
curl -H "Cookie: session=A" https://api.example.com/profile &
curl -H "Cookie: session=B" https://api.example.com/profile &
# 验证会话是否互斥
Token复用检测:
// 使用相同Token发起并行请求
const token = pm.variables.get('token');
const requests = [
{ url: 'api/order', method: 'POST' },
{ url: 'api/payment', method: 'POST' }
];
requests.forEach(req => {
pm.sendRequest({
url: req.url,
method: req.method,
header: { 'Authorization': `Bearer ${token}` }
}, (err, res) => {
pm.expect(res.code).to.equal(200);
});
});
3. 性能测试要点
基准测试指标:
指标 | Cookie方案 | Token方案 |
---|---|---|
认证耗时 | 依赖会话存储查询 | 仅需解密验证 |
服务端内存占用 | 高(存储会话) | 无状态 |
集群扩展成本 | 需会话复制/共享 | 天然支持 |
测试脚本示例:
// JMeter测试计划示例
HTTP Request Defaults:
- Server: api.example.com
- Path: /auth-check
- Method: GET
Cookie Manager:
- Implementation: HC4CookieHandler
- Policy: standard
HTTP Header Manager:
- Authorization: Bearer ${token}
Throughput Controller:
- Total Executions: 1000
三、专项测试技术
1. 渗透测试技术
Cookie劫持测试:
# 使用Mitmproxy拦截
mitmproxy -s cookie_stealer.py
# cookie_stealer.py内容:
def response(flow):
if 'Set-Cookie' in flow.response.headers:
print(f"Stolen Cookie: {flow.response.headers['Set-Cookie']}")
Token重放攻击:
# 使用旧Token尝试访问
def test_token_replay():
old_token = get_used_token() # 获取已使用过的Token
response = requests.get(
'https://api.example.com/data',
headers={'Authorization': f'Bearer {old_token}'}
)
assert response.status_code == 401 # 应拒绝旧Token
2. 自动化测试框架集成
Pytest插件示例:
# conftest.py
@pytest.fixture
def authenticated_session():
session = requests.Session()
# Cookie方案
if AUTH_TYPE == 'cookie':
session.get(LOGIN_URL)
yield session
session.get(LOGOUT_URL)
# Token方案
else:
token = get_token()
session.headers.update({'Authorization': f'Bearer {token}'})
yield session
revoke_token(token)
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】