AI 写自动化测试脚本:Pytest+AI 实战记录

发布时间:2026/5/20 7:06:55

AI 写自动化测试脚本:Pytest+AI 实战记录 专栏《AI 测试实战手册》第 6 篇作者一线测试工程师适合人群手工测试转型、自动化测试提效、测试人搞副业开篇从手工到自动的跨越很多手工测试想学自动化但被代码劝退。我刚开始也是直到发现可以用 AI 帮忙写脚本。现在我的自动化脚本70% 是 AI 生成的我只需要 review 和调试。今天把具体方法分享给你。一、实战案例登录接口自动化1.1 接口信息接口POST /api/login 请求 { username: testuser, password: Test123456 } 响应 { code: 200, message: success, data: { token: xxx, user_id: 12345 } }1.2 给 AI 的 Prompt你是一个 Python 测试开发专家精通 pytest 框架。 请为以下登录接口编写自动化测试脚本 【接口信息】 - 方法POST - URL/api/login - 请求参数username, password - 响应字段code, message, data.token, data.user_id 【测试场景】 1. 登录成功 - 正确用户名密码 2. 登录失败 - 密码错误 3. 登录失败 - 用户不存在 4. 登录失败 - 用户名为空 5. 登录失败 - 密码为空 【技术要求】 - 使用 pytest 框架 - 使用 requests 库 - 使用 fixture 管理 base_url - 添加中文注释 - 添加断言 请输出完整的 Python 代码。1.3 AI 生成的代码importpytestimportrequestsclassTestLogin:登录接口自动化测试base_urlhttps://api.example.compytest.fixturedefheaders(self):公共请求头return{Content-Type:application/json}deftest_login_success(self,headers):测试登录成功 - 正确用户名密码payload{username:testuser,password:Test123456}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.status_code200assertresponse.json()[code]200assertresponse.json()[message]successasserttokeninresponse.json()[data]assertresponse.json()[data][user_id]0deftest_login_wrong_password(self,headers):测试登录失败 - 密码错误payload{username:testuser,password:Wrong123456}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.status_code200assertresponse.json()[code]401assertpasswordinresponse.json()[message].lower()deftest_login_user_not_found(self,headers):测试登录失败 - 用户不存在payload{username:notexistuser,password:Test123456}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.status_code200assertresponse.json()[code]404assertuserinresponse.json()[message].lower()deftest_login_empty_username(self,headers):测试登录失败 - 用户名为空payload{username:,password:Test123456}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.status_code400assertusernameinresponse.json()[message].lower()deftest_login_empty_password(self,headers):测试登录失败 - 密码为空payload{username:testuser,password:}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.status_code400assertpasswordinresponse.json()[message].lower()if__name____main__:pytest.main([__file__,-v])二、代码能直接用吗2.1 我的实测结果检查项AI 生成需要修改语法正确✅-框架使用✅-断言完整⚠️补充部分断言数据驱动❌需要添加异常处理❌需要添加日志记录❌需要添加配置文件❌需要单独写结论基础框架可以直接用但需要优化才能上生产。2.2 我做的修改修改 1添加数据驱动pytest.mark.parametrize(username,password,expected_code,[(testuser,Test123456,200),(testuser,Wrong123,401),(,Test123456,400),(testuser,,400),])deftest_login_param(self,username,password,expected_code,headers):参数化测试登录payload{username:username,password:password}responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)assertresponse.json()[code]expected_code修改 2添加异常处理deftest_login_with_retry(self,headers):测试登录 - 带重试机制payload{username:testuser,password:Test123456}foriinrange(3):try:responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders,timeout5)ifresponse.status_code200:breakexceptrequests.exceptions.Timeout:ifi2:raisecontinue修改 3添加日志importlogging loggerlogging.getLogger(__name__)deftest_login_log(self,headers):测试登录 - 带日志payload{username:testuser,password:Test123456}logger.info(f开始测试登录用户名{payload[username]})responserequests.post(f{self.base_url}/login,jsonpayload,headersheaders)logger.info(f登录响应{response.json()})assertresponse.json()[code]200三、AI 写脚本的正确流程3.1 我的标准流程1. 整理接口文档 ↓ 2. 写 Prompt包含接口信息 测试场景 ↓ 3. AI 生成代码 ↓ 4. 人工 review检查逻辑、断言 ↓ 5. 本地调试修复 bug ↓ 6. 添加增强数据驱动、日志、异常处理 ↓ 7. 提交代码3.2 时间对比阶段纯手写AI 辅助节省框架搭建30 分钟2 分钟93%用例实现60 分钟15 分钟75%调试修复30 分钟20 分钟33%总计120 分钟37 分钟69%四、常用 Prompt 模板4.1 接口测试模板你是一个 Python 测试开发专家。 请为以下接口编写 pytest 自动化测试脚本 【接口信息】 - 方法{GET/POST/PUT/DELETE} - URL{接口路径} - 请求参数{参数列表} - 响应字段{字段列表} 【测试场景】 1. {场景 1} 2. {场景 2} 3. {场景 3} 【技术要求】 - 使用 pytest 框架 - 使用 requests 库 - 添加中文注释 - 添加断言 请输出完整的 Python 代码。4.2 UI 自动化模板你是一个 Selenium 测试专家。 请为以下页面功能编写 UI 自动化测试脚本 【页面信息】 - 页面 URL{URL} - 页面元素{元素列表及定位方式} 【测试场景】 1. {场景 1} 2. {场景 2} 【技术要求】 - 使用 Selenium 4 - 使用 pytest 框架 - 使用 Page Object 模式 - 添加显式等待 请输出完整的 Python 代码。4.3 数据驱动模板请在以下测试脚本中添加数据驱动功能 {粘贴现有代码} 要求 1. 使用 pytest.mark.parametrize 2. 测试数据从 YAML 文件读取 3. 支持多组数据 4. 添加数据验证 请输出修改后的完整代码。五、常见问题及解决Q1AI 生成的代码跑不通原因依赖版本不匹配接口信息不准确AI 理解有误解决把错误信息发给 AI让它帮你改必要时人工调试Q2代码重复率高原因AI 倾向于用相似的模式生成多个用例。解决让 AI 用数据驱动提取公共方法人工重构Q3断言不够充分原因AI 不知道业务的完整校验规则。解决Prompt 里写明所有校验点人工补充断言建立断言检查清单六、进阶技巧6.1 让 AI 帮你优化代码请优化以下测试代码 1. 提取公共方法 2. 减少重复代码 3. 提高可读性 4. 添加类型注解 {粘贴代码}6.2 让 AI 帮你写 fixture请为以下测试场景编写 pytest fixture 1. 数据库连接 2. 测试数据准备 3. 测试数据清理 4. API 认证 token 要求支持 setup 和 teardown。6.3 让 AI 帮你写测试报告请为以下测试脚本添加 HTML 报告功能 1. 使用 pytest-html 2. 添加测试截图 3. 添加日志输出 4. 自定义报告样式 请输出配置和代码。写在最后AI 写自动化脚本最大的价值是降低门槛。手工测试可以用更少的代码知识快速上手自动化。但记住AI 生成的代码你要能看懂、能调试、能优化。否则出了问题还是得靠自己。下一篇预告《AI 生成测试数据这招让造数据不再头疼》批量生成测试数据脱敏数据处理边界数据生成技巧如果本文对你有帮助欢迎点赞、收藏、关注专栏第一时间获取更新

相关新闻