自动化接口测试-第02天-接口用例设计思路单接口用例业务场景用例postman
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化接口测试-第02天-接口用例设计思路单接口用例业务场景用例postman相关的知识,希望对你有一定的参考价值。
更多功能测试以及全套学习路线图均在专栏,↑↑戳进去领取~
系列文章目录
😊身为开发必知必会的Linux:Linux远程连接/命令的使用
😊Linux命令大全,唯一以案例详解文,持续更新中
😊Linux命令大全以及数据库,唯一以案例详解文,已完结
👼 Web自动化测试01:认识web自动化在什么项目中适用
👼Web自动化测试02:Web自动化测试工具选择大全
👼…中间部分内容看专栏哦!篇幅问题没有放!
👼Web自动化测试11:Selenium之frame切换、多窗口切换
👼Web自动化测试12:Selenium窗口截图、验证码处理
🍅接口测试-第01天-万字教程带你入门接口测试
🍅…中间部分内容看专栏哦!篇幅问题没有放!
🍅接口测试-第04天-Postman读取外部数据文件(参数化)
💻性能测试-第01天-从理解到体验,最后能够对比说出Loadrunner和JMeter的优缺点
💻性能测试-第02天-JMeter环境搭建完成第一个案例
💻性能测试-第03天-以案例理解JMeter主要元素以及相关的作用域
💻性能测试-第03天-掌握Jmeter断言和关联使用、自动录制脚本
💻性能测试-第04天-掌握Jmeter直连数据库
🏅自动化接口测试-第01天-接口、接口测试、URL、HTTP协议、接口文档解析
今日学习目标
分析接口文档,设计编写接口测试用例
使用Postman设置请求方法、URL、请求头、请求体,向接口发送http请求,并查看响应数据
接口用例设计
为什么写
- 防止测试点漏测。条理清晰
- 方便分配工作,评估工作量和时间
- 面试时使用!
接口测试的测试点
测试点称之为测试维度。
功能测试
- 单接口功能:
- 手工测试中的单个业务模块,一般对应一个接口。
- 登录业务 ——> 登录接口
- 加入购物车业务 ——> 加入购物车接口
- 订单业务 ——> 订单接口
- 支付业务 ——> 支付接口
- 借助工具、代码。绕开前端界面,组织接口所需要的数据,展开接口测试。
- 手工测试中的单个业务模块,一般对应一个接口。
- 业务场景功能:
- 按照用户实际 使用场景,梳理 接口业务 场景。
- 组织业务场景时,一般只需做 正向 测试即可(与手工一致)。
- 一般建议用最少的 用例 覆盖最多的业务场景。
- 登录 —— 搜索商品 —— 加购物车 —— 下单 —— 支付 —— 评价
性能测试
- 响应时长
- 吞吐量
- 并发数量
- 服务器资源利用率
安全测试
-
攻击安全。 —— 与测试工程师无关。
-
业务安全。 —— 测试的方向。
- 敏感数据是否加密
- SQL注入:在用户能输入数据的位置,写入SQL语句。
- SQL注入安全,用户恶意写入的SQL语句,不会执行,查询数据库!
设计方法与思路
与手工设计相同之处
- 手工测试 对应的 功能测试点,与接口测试对应的功能 完全一致。
tpshop商城 登录 页面,手工功能测试用例设计要点:
- 页面布局是否符合需求
- 测试 用户名 输入框,输入的数据是否正确。
- 测试 密码 输入框,输入的数据是否正确。
- 测试 验证码 输入框, 输入的数据是否正确。
tpshop商城 登录 页面,接口测试用例设计要点:
- 测试 用户名 输入框对应的 username 的值 是否正确。
- 测试 密码 输入框对应的 password 的值,是否正确。
- 测试 验证码 输入框对应的 verify_code 的值,是否正确。
与手工设计不同之处
- 手工测试,测写入到输入框中的数据是否正确。接口测试测 参数 对应的 参数值 是否正确。
- 接口测试,不单单针对 参数值进行,还可以针对 参数本身 进行测试。
- 正向参数:
- 必选参数:所有的 必选(必填)都包含。
- 组合参数:所有的 必选 + 任意一个或多个可选参数。
- 全部参数:所有的 必选 + 所有的 可选参数
- 反向参数:
- 多参:多出一个或多个必选参数 (可以任意指定)
- 少参:缺少一个或多个必选参数。
- 无参:没有必选参数。
- 错误参数:参数名输入错误。
- 正向参数:
单接口测试用例
手工 测试用例文档 8 大要素:
编号、用例名称(标题)、模块、优先级、预置条件、测试数据、操作步骤、预期结果
接口 测用例文档 10 要素:
- 编号、用例名称(标题)、模块、优先级、预置条件、请求方法、URL、请求头、请求体(请求数据)、预期结果
分析接口文档,以 “登录接口” 为例:
- 请求方法:post
- URL: “系统信息” 中的 协议和域名 + /api/sys/login
- 请求头:Content-Type : application/json
- 请求体:“mobile”:“13800000002”,“password”:“123456”
- 预期结果: “success”:true,“code”:10000,“message”:“操作成功!”,“data”:“f5050a1b-7919-444c-9ec4-3c1a7286536d”
- data:值为登录成功生成的 令牌数据。该数据 会定时变化。
编号 | 用例名称 | 模块 | 优先级 | 预置条件 | 请求方法 | URL | 请求头 | 请求体(请求数据) | 预期结果 |
---|---|---|---|---|---|---|---|---|---|
login_001 | 登陆成功 | 登录 | p1 | 账号已注册 | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“123456” | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”,“data”:“f5050a1b-7919-444c-9ec4-3c1a7286536d” |
登录模块的接口测试用例测试点:
- 数值
- 正向:
- 登录成功
- 反向:
- 用户名为空
- 用户名包含特殊字符、字母
- 用户名超过11位(12位)
- 用户名不足11位(10位)
- 用户名未注册
- 密码为空
- 密码包含特殊字符、字母
- 密码为1位
- 密码为100位
- 密码错误
- 正向:
- 参数(接口测试特有)
- 正向:
- 必选参数:正确用户名 + 正确密码
- 组合参数:忽略
- 全部参数:正确用户名 + 正确密码
- 反向:
- 多参:多 abc:“123”
- 少参(少mobile):没有用户名,正确密码
- 无参:没有任何参数
- 错误参数(手机号参数名错误):abc:1381234567, password:”123456”
- 正向:
用户名相关 5 条:
login_002 | 用户名为空 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:"",“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
---|---|---|---|---|---|---|---|---|---|
login_003 | 用户名包含特殊字符、字母 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800&#abc”,“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_004 | 用户名超11位(12位) | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“138000000023”,“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_005 | 用户名不足11位(10位) | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“1380000000”,“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_006 | 用户名未注册 | 登录 | p2 | 数据库中不存在的手机号 | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“16700542479”,“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
密码相关 5 条:
login_007 | 密码为空 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:"" | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
---|---|---|---|---|---|---|---|---|---|
login_008 | 密码包含特殊字符、字母 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“123&%rt” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_009 | 密码1位 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“1” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_010 | 密码100位 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“放置100位字符组成的密码” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_011 | 错误密码 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“888888” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
参数相关:
login_012 | 必选参数(全部参数) | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “mobile”:“13800000002”,“password”:“123456” | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”,“data”:"f5050a1b-7919-444c-9ec4- 3c1a7286536d " |
---|---|---|---|---|---|---|---|---|---|
login_013 | 多参 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “abc”:“123”,“mobile”:“13800000002”,“password”:“123456” | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”,“data”:"f5050a1b-7919-444c-9ec4- 3c1a7286536d " |
login_014 | 少参(少mobile) | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
login_015 | 无参 | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “success”:false,“code”:99999,“message”:“抱歉,系统繁忙,请稍后重试!”,“data”:null | |
login_016 | 错误参数(mobile参数名错误) | 登录 | p2 | —— | POST | 协议+域名/api/sys/login | Content-Type:application/json | “abc”:“13800000002”,“password”:“123456” | 状态码:200 “success”:false,“code”:20001,“message”:“用户名或密码错误”,“data”:null |
业务场景测试用例
- 用户怎么用,怎样设计业务。
- 用最少的测试用例,尽量覆盖最多的接口。
分析测试点
针对 “员工管理” 业务场景:
- 登录 —— 添加员工 —— 查询员工 —— 修改员工 —— 再次查询 —— 删除员工 —— 查询员工列表
添加员工
-
请求方法:post
-
URL: 协议+域名/api/sys/user
-
请求头:
- Content-Type: application/json
- Authorization: Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d (具体数据 来源 登录成功返回的 响应体中的 data的值)
-
请求体(请求数据):“username”:“爱因斯坦”,“mobile”:“17289432100”,“timeOfEntry”:“2021-07-12”,“formOfEmployment”:1,“departmentName”:“测试0607”,“departmentId”:“1412421425733664768”,“workNumber”:“234”,“correctionTime”:“2021-07-30T16:00:00.000Z”
-
预期结果:
- 状态码:200
- “success”:true,“code”:10000,“message”:“操作成功!”, “data”:“id”:“113749504”
用例名称 | 模块 | 优先级 | 预置条件 | 请求方法 | URL | 请求头 | 请求体(请求数据) | 预期结果 |
---|---|---|---|---|---|---|---|---|
添加员工 | 员工管理 | p0 | 登录成功 | post | 协议+域名/api/sys/user | Content-Type: application/json, Authorization: Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d | “username”:“爱因斯坦”,“mobile”:“17289432100”,“timeOfEntry”:“2021-07-12”,“formOfEmployment”:1,“departmentName”:“测试0607”,“departmentId”:“1412421425733664768”,“workNumber”:“234”,“correctionTime”:“2021-07-30T16:00:00.000Z” | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”, “data”:“id”:“113749504” |
查询员工
- 请求方法:GET
- URL: 协议+域名/api/sys/user/:target
- 请求头:
- Content-Type: application/json
- Authorization: Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d (具体数据 来源 登录成功返回的 响应体中的 data的值)
- 请求体:
- 无
- 返回数据:
- 状态码:200
- “success”: true,
“code”: 10000,
“message”: “操作成功!”,
“data”: 所查询的员工的详细信息
emp_manager_002 | 查询员工 | 员工管理 | p1 | 登录成功 | GET | 协议+域名/api/sys/user/:target | Content-Type: application/json, Authorization: Bearer f5050a1b-7919-444c-9ec4-3c1a7286536d | 状态码:200 “success”: true, “code”: 10000, “message”: “操作成功!”, “data”: 所查询的员工的详细信息 | |
---|---|---|---|---|---|---|---|---|---|
修改员工
emp_manager_003 | 修改员工 | 员工管理 | p0 | 登录成功 | PUT | 协议+域名/api/sys/user/:target | Content-Type: application/json, Authorization: Bearer xxx | “username”:“小猪佩奇” | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”, “data”:“id”:“xxx” |
---|---|---|---|---|---|---|---|---|---|
返回数据中的 id ,代表 修改的员工id (是一个会变化的数据)。
删除员工
emp_manager_004 | 删除员工 | 员工管理 | p0 | 登录成功 | delete | 协议+域名 /api/sys/user/:target | Content-Type: application/json, Authorization: Bearer xxx | 状态码:200 “success”:true,“code”:10000,“message”:“操作成功!”,“data”:null | |
---|---|---|---|---|---|---|---|---|---|
查询员工列表
emp_manager_005 | 查询员工列表 | 员工管理 | p0 | 登录成功 | GET | 协议+域名 /api/sys/user?page=1&size=10 | Content-Type: application/json, Authorization: Bearer xxx | 状态码:200 “success”: true, “code”: 10000, “message”: “操作成功!”, “data”: “total”: xxxx, “rows” [ ,,… 10个员工的详细信息 ] | |
---|---|---|---|---|---|---|---|---|---|
Postman
简介和安装
- 简介:
- Postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用,开发人员也会经常使用。
- 特征:
- 简单易用的图形用户界面
- 可以保存接口请求的历史记录
- 使用测试集Collections可以更有效的管理组织接口
- 可以在团队之间同步接口数据
- 安装:
- 参见 课前下发的 ”Postman相关安装“ 目录下的《Postman环境安装.pdf》文件 及相关资料。
案例一
使用 postman 发送 http请求,访问 tpshop 商城的 “搜索” 接口
访问 tpshop 商城的 “搜索” 接口所需要的信息:
—— 结合 F12 浏览器开发者工具分析:
- 请求方法:GET
- URL:http://tpshop-test.itheima.net/Home/Goods/search.html?q=%E6%89%8B%E6%9C%BA
- 请求头:无
- 请求体:无
- 返回数据:html网页
案例二
使用 Postman 向 topshop 商城 登录接口 发送一个密码错误的 登录请求
请求方法:post
URL:http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.6693319462870182
请求头:Content-Type:application/x-www-form-urlencoded
请求体:
- username: 13812345678
- password: 12345699999
- verify_code : 8888
返回数据:
“status”:-2,“msg”:“密码错误!” ---- 实际返回结果 “验证码错误” 与业务有关,后续课程讲解。
案例三
从接口文档,获取 登录接口 的 http请求,使用 Postman 发送
作业
-
每日反馈
-
完成作业《接口测试-第02天-作业.md》
-
预习早读单词《接口测试-第03天-早读单词.md》
-
预习 Postman 高级用法 和 Postman 测试报告
以上是关于自动化接口测试-第02天-接口用例设计思路单接口用例业务场景用例postman的主要内容,如果未能解决你的问题,请参考以下文章
接口测试-第03天-使用Postman管理执行测试用例生成测试报告