电影收藏清单小程序 - Postman接口自动化测试

电影收藏清单小程序 - Postman接口自动化测试
一、环境准备1.1 启动后端服务1.2 准备测试数据确保数据库中有测试用户使用手机号19713266501密码aa123456二、Postman基础配置2.1 创建环境变量打开Postman点击左上角Environments图标点击创建新环境命名为 MovieCollection-Local配置以下变量注意token、password 这类敏感信息选择 secret 类型其他普通变量选择 default 类型2.2 创建Collection1、点击左侧 Collections 选项卡2、点击 创建新集合3、命名为 电影收藏清单测试集三、创建接口测试用例3.1 登录接口获取Token步骤在Collection中右键 → Add request命名为01-用户登录配置请求Body (raw JSON){phone: {{phone}},loginType: password,password: {{password}}}这是 HTTP请求的请求体Request Body用于向服务器发送登录所需的数据。在Postman 中当你发送POST请求时需要把数据放在Body里传给服务器。字段作用说明phone: {{phone}}手机号{{phone}} 是Postman环境变量会自动替换为 19713266501loginType: password登录方式告诉服务器用密码登录另一种是 code 验证码登录password: {{password}}密码{{password}} 会自动替换为aa123456当Postman发送请求时{{phone}} 和 {{password}} 会被自动替换成环境变量中设置的值后端会接收数据Tests脚本// 验证状态码 检查HTTP响应码是否为200成功pm.test(状态码应为200,function() {pm.response.to.have.status(200);});// 解析响应。将响应体JSON格式解析为JavaScript对象方便后续操作varjsonData pm.response.json();// 验证业务返回码检查业务层面的返回码是否为 0通常 0 表示业务成功// 注意HTTP 200 不代表业务成功所以需要额外验证业务码pm.test(业务返回码为0,function() {pm.expect(jsonData.code).to.eql(0);});// 验证返回数据// 验证响应数据中包含 token 和 user 字段// 验证用户信息中的 phone 字段值是否与请求时保存的手机号一致pm.test(返回数据包含token和用户信息,function() {pm.expect(jsonData.data).to.have.property(token);pm.expect(jsonData.data).to.have.property(user);pm.expect(jsonData.data.user).to.have.property(phone, pm.variables.get(phone));});// 保存token到环境变量// 将返回的 token 保存到环境变量中供后续请求使用// 在 Postman Console 控制台打印日志方便调试// substring(0, 30) 只显示前 30 个字符避免日志过长pm.environment.set(token, jsonData.data.token);console.log (Token已保存:, jsonData.data.token.substring(0, 30) ...);console.log(用户ID:, jsonData.data.user.id);3.2 获取用户信息步骤1、在Collection中右键 → Add request2、命名为02-获取用户信息配置请求 Authorization授权、认证告诉接口 “我是谁” Bearer持票人、持有者固定格式 {{token}}你登录接口拿到的令牌Tests脚本pm.test(Status code is 200,function() {pm.response.to.have.status(200);});varjsonDatapm.response.json();pm.test(业务返回码为0,function() {pm.expect(jsonData.code).to.eql(0);});pm.test(返回用户信息,(){pm.expect(jsonData.data).to.have.property(id);pm.expect(jsonData.data).to.have.property(phone);pm.expect(jsonData.data).to.have.property(nickname);})3.3 获取收藏数量步骤命名为03-获取收藏数量配置Method: GETURL: {{baseUrl}}/api/favorite/countHeaders: Authorization: Bearer {{token}}Tests 脚本pm.test(Status code is 200,function() {pm.response.to.have.status(200);});varjsonData pm.response.json();pm.test(业务返回码为0,function() {pm.expect(jsonData.code).to.eql(0);});pm.test(返回count字段,function() {pm.expect(pm.response.text()).to.include(count);});pm.environment.set(favoriteCount,jsonData.data.count);console.log(当前收藏数量,jsonData.data.count);3.4 获取收藏列表步骤命名为04-获取收藏列表配置Method: GETURL: {{baseUrl}}/api/favorite/listHeaders: Authorization: Bearer {{token}}Tests 脚本pm.test(Status code is 200,function() {pm.response.to.have.status(200);});varjsonData pm.response.json();pm.test(业务返回码为0,function() {pm.expect(jsonData.code).to.eql(0);});pm.test(返回数据列表,function() {pm.expect(jsonData.data).to.have.property(list); // 有 list 字段pm.expect(jsonData.data.list).to.be.an(array); // list 是数组pm.expect(jsonData.data).to.have.property(total); // 有 total 总数});3.5 添加收藏步骤命名为05-添加收藏配置Method: POSTURL: {{baseUrl}}/api/favorite/addHeaders:Authorization: Bearer {{token}}Content-Type: application/jsonBody{movie_name: 测试电影-{{$timestamp}},director: 测试导演,rating: 8.5,release_date: 2024-01-01,collection_reason: 自动化测试添加,poster_url: }Pre-request Script// 生成唯一时间戳避免重复添加pm.variables.set(timestamp, Date.now());Tests 脚本pm.test(Status code is 200,function() {pm.response.to.have.status(200);});varjsonData pm.response.json();pm.test(收藏成功,function() {pm.expect(jsonData.code).to.eql(100);});pm.test(返回新增收藏ID, () {pm.expect(jsonData.data).to.have.property(id);pm.expect(jsonData.data).to.have.property(movie_name);});if(jsonData.data jsonData.data.id) {pm.environment.set(newFavoriteId, jsonData.data.id);console.log(✅ 新收藏ID:, jsonData.data.id);}3.6 获取单个收藏详情步骤命名为06-获取收藏详情配置Method: GETURL: {{baseUrl}}/api/favorite/{{newFavoriteId}}Headers: Authorization: Bearer {{token}}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));varjsonData pm.response.json();pm.test(获取成功, () pm.expect(jsonData.code).to.eql(0));pm.test(返回正确数据, () {//验证ID正确pm.expect(jsonData.data).to.have.property(id, parseInt(pm.variables.get(newFavoriteId)));//验证有电影名字段pm.expect(jsonData.data).to.have.property(movie_name);});3.7 更新收藏步骤命名为07-更新收藏配置Method: PUTURL: {{baseUrl}}/api/favorite/{{newFavoriteId}}Headers: Authorization: Bearer {{token}} , Content-Type: application/jsonBody{movie_name: 更新后的测试电影,director: 更新后的导演,rating: 9.0,collection_reason: 自动化测试更新}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));varjsonData pm.response.json();pm.test(更新成功, () pm.expect(jsonData.code).to.eql(0));pm.test(数据已更新, () {pm.expect(jsonData.data.movie_name).to.eql(更新后的测试电影);pm.expect(jsonData.data.director).to.eql(更新后的导演);});3.8 删除收藏步骤命名为08-删除收藏配置Method: DELETEURL: {{baseUrl}}/api/favorite/{{newFavoriteId}}Headers: Authorization: Bearer {{token}}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));var jsonData pm.response.json();pm.test(删除成功, () {pm.expect(jsonData.code).to.eql(0);pm.expect(jsonData.message).to.eql(删除成功);});3.9 获取计划列表步骤命名为09-获取计划列表配置Method: GETURL: {{baseUrl}}/api/plan/list?page1pageSize10statusallHeaders: Authorization: Bearer {{token}}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));varjsonData pm.response.json();pm.test(业务返回码0, () pm.expect(jsonData.code).to.eql(0));pm.test(返回列表, () {pm.expect(jsonData.data).to.have.property(list);pm.expect(jsonData.data.list).to.be.an(array);});3.10 添加计划步骤命名为10-添加计划配置Method: POSTURL: {{baseUrl}}/api/plan/addHeaders: Authorization: Bearer {{token}} , Content-Type: application/jsonBody{movie_name: 测试计划-{{$timestamp}},plan_date: 2024-12-31,priority: 高,notes: 自动化测试计划}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));var jsonData pm.response.json();pm.test(添加成功, () pm.expect(jsonData.code).to.eql(0));if (jsonData.data jsonData.data.id) {pm.environment.set(newPlanId, jsonData.data.id);console.log(新计划ID:, jsonData.data.id);}3.11 切换计划状态步骤命名为11-切换计划状态配置Method: PATCHURL: {{baseUrl}}/api/plan/{{newPlanId}}/statusHeaders: Authorization: Bearer {{token}} , Content-Type: application/jsonBody{is_completed: 1}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));var jsonData pm.response.json();pm.test(状态切换成功, () pm.expect(jsonData.code).to.eql(0));3.12 删除计划步骤命名为12-删除计划配置Method: DELETEURL: {{baseUrl}}/api/plan/{{newPlanId}}Headers: Authorization: Bearer {{token}}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));var jsonData pm.response.json();pm.test(删除成功, () {pm.expect(jsonData.code).to.eql(0);pm.expect(jsonData.message).to.eql(删除成功);});3.13 异常测试 - 未登录访问步骤命名为13-异常未登录访问配置Method: GETURL: {{baseUrl}}/api/favorite/count不携带Authorization头Tests 脚本pm.test(状态码应为401, () {pm.response.to.have.status(401);});var jsonData pm.response.json();pm.test(返回未认证提示, () {pm.expect(jsonData.code).to.eql(401);pm.expect(jsonData.message).to.include(未提供认证令牌);});3.14 异常测试 - 无效Token步骤命名为14-异常无效Token配置Method: GETURL: {{baseUrl}}/api/favorite/countHeaders: Authorization: Bearer invalid_token_123456Tests 脚本pm.test(状态码应为401, () {pm.response.to.have.status(401);});var jsonData pm.response.json();pm.test(返回认证失败提示, () {pm.expect(jsonData.code).to.eql(401);pm.expect(jsonData.message).to.include(认证失败);});3.15 AI推荐测试步骤命名为15-AI电影推荐配置Method: POSTURL: {{baseUrl}}/api/ai/askHeaders: Authorization: Bearer {{token}} , Content-Type: application/jsonBody{question: 主角被冤枉入狱最终越狱的故事}Tests 脚本pm.test(状态码200, () pm.response.to.have.status(200));var jsonData pm.response.json();pm.test(AI响应成功, () pm.expect(jsonData.code).to.eql(0));pm.test(返回推荐内容, () {pm.expect(jsonData.data).to.have.property(answer);pm.expect(jsonData.data.answer).to.include(肖申克的救赎);});四、运行测试4.1 使用Postman Runner点击Collection名称右侧的Run按钮在弹出的Runner窗口中选择环境MovieCollection-Local迭代次数1延迟0ms点击Run4.2 查看测试结果运行完成后会显示每个接口的通过/失败状态每个断言的结果响应时间控制台日志4.3 导出测试报告点击Export Results导出JSON格式的测试报告。五、使用Newman命令行运行CI/CD集成5.1 安装Newmannpm install -g newman5.2 导出Collection和环境变量在Postman中右键点击Collection →Export→ 选择v2.1 → 保存为 movie-collection.json点击环境变量旁边的 ... →Export→ 保存为 local-environment.json5.3 运行测试newman run movie-collection.json \-e local-environment.json \--reporters cli,json \--reporter-json-export test-report.json5.4 生成HTML报告npm install -g newman-reporter-htmlnewman run movie-collection.json \-e local-environment.json \--reporters html \--reporter-html-export test-report.html六、测试用例清单最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。