做一个教学订单服务和发布脚本,创建只读、写入和发布三种Token。测试四种任务:查询订单、修改订单、发布包、撤销凭据。
重点失败用例:旧Token撤销后仍能调用;重试从缓存拿回旧Token;Agent遇到403后读取环境变量寻找替代;日志打印完整秘密。
项目报告要包含权限矩阵、状态图、pytest结果、CI日志和一次故障复盘。不要上传真实密钥,使用假数据并说明验证边界。
def assert_forbidden(response, secret_in_log):
assert response.status_code == 403
assert secret_in_log is False
简历可以写:“构建Token轮换与撤销回归项目,覆盖缓存失效、越权替代凭据、日志脱敏和CI门禁。”这比只写“做过接口自动化”更能体现AI测试开发方向。
如何把项目讲成一段真实经历
面试时先说业务风险:发布脚本重试时可能继续使用旧Token,导致撤销策略失效。然后展示你如何设计状态机、如何构造缓存命中和403场景、如何在Trace里确认Agent没有寻找替代凭据。最后说明局限:项目使用假Token和本地服务,不能证明真实云平台的撤销延迟,但验证方法可迁移到真实环境。
项目仓库建议包含README、测试数据、权限矩阵、失败截图和CI运行记录。不要只放一张覆盖率徽章;让面试官能一键重放“旧Token必须失败”的用例,并看到失败时日志已经脱敏。这样的校招项目既展示Python测开,也展示了Evaluation、Regression和质量证据意识。
再补三类面试官会追问的反例
第一类是权限边界:只读Token能不能修改订单,测试账号能不能访问生产资源,组织级Token能不能调用不属于自己的仓库。第二类是时间窗口:旧Token刚被撤销时,正在执行的任务如何处理,重试是否会重新读取旧缓存,撤销结果多久传播到所有服务。第三类是证据链:失败请求是否记录原因,日志是否脱敏,管理员能否从审计记录还原是谁在什么时候做了什么。
项目里可以增加一个“故障注入模式”:测试服务随机让轮换接口超时、撤销通知延迟或缓存返回旧值,然后检查系统是否进入安全状态。不要只追求所有用例通过,主动展示一次失败和修复过程,反而更能说明你理解了测试的价值。
两周交付计划
第1—2天画权限矩阵和状态图;
第3—5天完成模拟Token服务;
第6—8天编写pytest参数化用例;
第9—10天加入缓存、并发和日志脱敏反例;
第11—12天接入GitHub Actions;最后整理README、测试报告、失败Trace和三分钟演示。
面试演示顺序建议是:先展示旧Token调用被拒绝,再展示一条重试任务没有复活旧凭据,最后打开审计记录说明证据如何串起来。这样项目就不只是“写了几个接口”,而是一套能证明安全边界的测试系统。