接口测试的测试点
功能测试
单接口功能:
业务场景功能
性能测试
安全测试
与手工测试相同之处
与手工测试不同之处
手工测试用例文档8大要素:
用例编号、用例标题、模块、优先级、预置条件、测试数据、操作步骤、预期结果
接口测试用例文档10要素:
用例编号、用例标题、模块、优先级、预置条件、请求方法、URL、请求头、请求体(请求数据)、预期结果
以TPShop为例
登陆模块的接口测试用例测试点
数值
用例编号 | 模块 | 用例名称 | 接口名称 | 请求URL | 请求方法 | 请求参数类型 | 请求参数 | 预期结果 | 测试结果 | 备注 |
---|---|---|---|---|---|---|---|---|---|---|
tpshop_login_001 | 登陆 | 登陆成功 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 登陆成功 |
用例编号 | 模块 | 用例名称 | 接口名称 | 请求URL | 请求方法 | 请求参数类型 | 请求参数 | 预期结果 | 测试结果 | 备注 |
---|---|---|---|---|---|---|---|---|---|---|
tpshop_login_002 | 登陆 | 账号不存在 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 账号不存在 | ||
tpshop_login_003 | 登陆 | 密码错误 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 密码错误 |
参数(接口测试特有)
正向
反向
用例编号 | 模块 | 用例名称 | 接口名称 | 请求URL | 请求方法 | 请求参数类型 | 请求参数 | 预期结果 | 测试结果 | 备注 |
---|---|---|---|---|---|---|---|---|---|---|
tpshop_login_001 | 登陆 | 登陆成功 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 登陆成功 | ||
tpshop_login_002 | 登陆 | 用户名为空 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " ", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 账号不存在 | ||
tpshop_login_003 | 登陆 | 多参数 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888, “abc”:“123”} | 获取到验证码图片 密码错误 | ||
tpshop_login_003 | 登陆 | 密码错误 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 密码错误 | ||
tpshop_login_001 | 登陆 | 无参数 | 获取验证码 登陆 | http://106.54.9.13/index.php?m=Home&c=User&a=verify http://106.54.9.13/index.php?m=Home&c=User&a=do_login | GET POST | form | data = { “username”: " 18184761327", “password”: “123456”, “verify_code”: 8888 } | 获取到验证码图片 登陆成功 |
分析测试点
针对“员工管理”业务场景
针对每个业务设计单接口用例
登陆
添加员工-
查询员工
修改员工
再次查询
删除员工
查询员工列表
步骤:
断言:让程序判断预期结果和实际结果是否一致
特点:
//判断响应状态码是否等于200 pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm:postman的一个实例 test():postman实例的一个方法 参数1:断言完成后给出的提示信息 参数2:function(){},匿名函数调用
//判断响应体中是否包含指定的字符串 pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); pm:postman的一个实例 test():postman实例的一个方法 参数1:"Body matches string"断言完成后给出的提示信息 参数2:function(){},匿名函数调用 "string_you_want_to_search" :判断是否包含的字符串
//判断响应体数据是否等于指定的字符串 pm.test("Body is correct",function(){ pm.response.to.have.body("response_body_string"); }); pm:postman的一个实例 test():postman实例的一个方法 参数1:"Body is correct"断言完成后给出的提示信息 参数2:function(){},匿名函数调用 "response_body_string" :判断响应体是否相同的字符串
//校验响应的JSON数据 pm.test("Your test name",function() { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); pm:postman的一个实例 jsonData:定义的一个json格式的响应体变量 test():postman实例的一个方法 参数1:"Body is correct"断言完成后给出的提示信息 参数2:function(){},匿名函数调用 "response_body_string" :判断响应体是否相同的字符串
//判断相应头中是否包含指定的头标签 pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });
全局变量
环境变量
请求参数中获取:{{var_name}}
代码中获取:var value = pm.environment.get(“var_name”);
假设,这样一种场景:
调某接口时,要输入“时间戳”,如果输入的“时间戳”的绝对值,超过标准时间10分钟。则不允许调用
时间戳:表示当前系统时间。表示方式:从1970年1月1日 00:00:00~现在所经历的秒数
请求前置脚本:
案例
调用百度首页接口,传时间戳给服务器
步骤:
//获取时间戳 var timestamp = new Date().getTime() //将时间戳保存到全局变量中 pm.globals.set("glb_timestamp",timestamp)
postman的关联,用来解决接口和接口之间调用的依赖关系。需要借助全局变量、环境变量来解决关联问题。
实现步骤:(以A接口返回的数据,供B接口使用为例)
案例
请求获取天气接口,提取响应结果中的城市,将城市名,给百度搜索接口使用
实现步骤
//获取响应数据 var jsonData = pm.response.json(); //获取城市名 var city = jsonData.weatherinfo.city //写入全局变量 pm.globals.set("glb_city",city)
点击小眼睛查看全局变量是否设置正确
组织百度搜索接口的请求方法、URL,在查询参数中,指定使用全局变量{{glb_city}}
步骤
运行结果:
使用newman命令,运行导出的测试集脚本,打开cmd输入:
newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export report.html eg: newman run demo.postman_collection.json -r html newman run demo.postman_collection.json -r html --reporter-html-export report.html
命令说明:
生成报告步骤:
F:\Four_year\测试\postman> newman run postman关联.postman_collection.json -r html --reporter-html-export postman关联报告.html
点击查看