本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22
二、实战训练
2.1 宠物市肆接口文档分析
接口文档:http://petstore.swagger.io ,这是宠物市肆接口的 swagger 文档。
2.1.1 什么是 swagger
- Swagger 是一个用于天生、形貌和调用 RESTful 接口的 WEB 服务。
- 普通的来讲,Swagger 就是将项目中全部想要袒露的接口展如今页面上,而且可以举行接口调用和测试的服务。
- 如今大部门的项目都使用了 swagger,由于如许后端开辟就不必要专门为接口使用者编写接口文档。
- 当接口更新之后,只必要修改代码中的 Swagger 形貌就可以及时天生新的接口文档,如许就可以制止接口文档老旧不能使用的标题。
- 而且通过 Swagger 页面,可以直接举行接口调用,低落了项目开辟阶段的调试资本。
2.1.2 分析查询接口
接口的 swagger 文档怎么看。
2.1.3 调试宠物
怎么在页面上调试接口?
以查询宠物接口举例:
- 点击 Try it out
- 哀求参数 status 选择 available
- 点击 Execute 发出哀求
- 下方展示当前哀求的 Curl 下令
- 下方展示当前哀求的完备 URL
- 下方展示相应状态码和对应的相应体
- 有了 swagger,就可以非常方便的获取到接口的信息,从而计划测试用例
2.2 接口测试用例计划
查询宠物
新增宠物
更新宠物信息
删除宠物
2.3 编写断言
Tests 重要用来做断言,比如要测试返回效果是否含有某一字符串,就可以用到 Tests。
- 断言,就是效果和预期对比
- 如果同等,则用例通过,返回PASS
- 如果差别等,断言失败,用例失败,失败返回 FAIL
test 中可以使用 JavaScript 脚原来举行断言的编写。如果本身不认识 JS 语法的话也没有关系,Postman 当中已经预置好了常用的断言。
- 验证相应状态码Status Code:Code is 200
- pm.test("响应状态码为 200", function () {
- pm.response.to.have.status(200);
- });
复制代码 status 方法中传入的值 200 就是预期效果,可以把括号中的状态码改为恣意必要的值,比如 400。
- 查抄相应体中是否包罗某个字符串Response Body:contains string
- pm.test("响应体中包含预期的字符串", function () {
- pm.expect(pm.response.text()).to.include("doggie");
- });
复制代码
- 检测 JSON 中的某个值是否便是预期的值Response Body:JSON value check
- pm.test("宠物名称为 doggie", function () {
- var jsonData = pm.response.json();
- pm.expect(jsonData[0].name).to.eql("doggie");
- });
复制代码 var jsonData 是界说了一个变量,然后把相应数据颠末 JSON 格式化之后,赋值给了界说好的变量。然后用 expect 这个方法,把相应数据中的 url 这个 key 中的值提取出来,用 eql 这个方法去和括号中的字符串做比力,如果这两个值是同等的,返回 true,如果差别等就返回 false。
- 验证相应体是否与某个字符串完全雷同Response Body:Is equal to a string
- pm.test("Body is correct", function () {
- pm.response.to.have.body("response_body_string");
- });
复制代码 这是一个全量的断言,把相应的数据和一个确定的字符串去做比力,如果完全雷同返回 true,不完全雷同返回 false。
- 验证相应头信息中的 Content-Type 是否存在Response Body:Content-Type header check
- pm.test("Content-Type is present", function () {
- pm.response.to.have.header("Content-Type");
- });
复制代码 这个断言可以用来测试相应的头信息中是否包罗某个字段,Content-type 可以换位其他的字段
- 验证相应时间是否小于某个值Response time is less than 200ms
- pm.test("Response time is less than 200ms", function () {
- pm.expect(pm.response.responseTime).to.be.below(200);
- });
复制代码 可以用来判断相应的时间是否凌驾了某一个值,预设的是 200ms,如果没有凌驾返回 true,凌驾预设的值返回 false
2.4 Postman 完成接口测试
2.4.1 创建测试集
- 选择左侧边栏的 Collecions,点击 + 进入新建 collection 界面,定名为【宠物市肆】
- 如今的这四个接口是对宠物的操纵,以是可以在 collection 中再创建一层文件夹,点击 Add folder,定名为【宠物】
2.4.2 查询宠物接口
- 定名:查询宠物
- 哀求方法:保持 GET 稳固
- 哀求 URL:
- 哀求参数:GET 哀求参数要在 Params 中设置,status=available
2.4.3 新增宠物接口
- 定名:新增宠物
- 哀求方法:换为 POST
- 哀求 URL:
- 哀求参数:POST 哀求的参数必要放在 body – raw 中,这里的哀求参数格式为 JSON
注意: id 具有唯一性必要举行修改
- {
- "id": 9223372000001083222,
- "category": {
- "id": 1,
- "name": "cat"
- },
- "name": "miao",
- "photoUrls": [
- "string"
- ],
- "tags": [
- {
- "id": 5,
- "name": "cute"
- }
- ],
- "status": "available"
- }
复制代码
- pm.test("响应状态码为 200", function () {
- pm.response.to.have.status(200);
- });
- pm.test("响应体正确", function () {
- pm.response.to.have.body("{"id":9223372000001083222,"category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
- });
复制代码 2.4.4 更新宠物接口
- 定名:更新宠物信息
- 哀求方法:换为 PUT
- 哀求 URL:
- 哀求参数:POST 哀求的参数必要放在 body – raw 中,这里的哀求参数格式为 JSON
比如修改宠物姓名:
- {
- "id": 9223372000001083333,
- "category": {
- "id": 1,
- "name": "cat"
- },
- "name": "小黑",
- "photoUrls": [
- "string"
- ],
- "tags": [
- {
- "id": 5,
- "name": "cute"
- }
- ],
- "status": "available"
- }
复制代码
- pm.test("响应状态码为 200", function () {
- pm.response.to.have.status(200);
- });
- pm.test("响应体正确", function () {
- pm.response.to.have.body("{"id":9223372000001083333,"category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
- });
复制代码
2.4.5 删除宠物接口
- 定名:删除宠物
- 哀求方法:换为 DELETE
- 哀求 URL:
- 哀求参数:宠物 id,直接跟在 URL 中
- https://petstore.swagger.io/v2/pet/9223372000001083333
复制代码
- 添加断言 这里重点断言业务错误码 code 和 message 这两个字段的值就可以。
- pm.test("响应状态码为 200", function () {
- pm.response.to.have.status(200);
- });
- pm.test("业务错误码为 200", function () {
- var jsonData = pm.response.json();
- pm.expect(jsonData.code).to.eql(200);
- });
- pm.test("message 为删除的宠物 id", function () {
- var jsonData = pm.response.json();
- pm.expect(jsonData.message).to.eql("9223372000001083222");
- });
复制代码
2.4.6 运行测试集
对于 collection 来说,每一级的目次都可以单独运行。比如如今只想要运行宠物操纵相干用例,那么就可以点击宠物,进入宠物 folder 页面。
- 点击 Run 按钮进入 collection 实验页面
- 可以选择要实验的 collection,选择环境变量、选择实验次数、选择耽误时间,选择测试数据(做数据驱动)
- 点击 Run 按钮即可开始实验
2.4.7 查察测试效果
运行完毕后会进入测试效果页面,就可以查察测试效果了
2.4.8 变量
- Data:在测试会集上传的数据
- Environment:环境范围
- Collection:聚集范围
- Global:全局范围
- Local:在脚本中设置的变量
变量界说
Postman 的变量重要用于参数化和关联,常用变量可以按使用范围设置。
Local
Local 级别的变量着实就是在脚本中界说的变量,比如删除宠物信息用例中,断言里使用了查验 JSON 格式中某个 key 的值
这内里的 jsonData 就是一个 Local 级别的变量。它只在这条断言中收效。
Global
如果是大部门的接口都会用到的变量,可以设置为全局变量,如许的话 Postman 中的全部接口都可以直接调用。
点击左侧的 Environments,点击 Globals 进入全局变量设置界面。
在这里可以设置变量
- VARIAVLE: 变量名
- INITIAL VALUE: 共享初始值, 用于团队共享时供别人使用的默认值
- CURRENT VALUE: 当前值, 本身当前使用的变量值 (一样平常我们只用设置这个值即可)
- Perisit All: 保持全部, 将当前本身使用的值 (CURRENT VALUE) 更换全部的初始值
- Reset All: 重置全部, 将当前全部的 CURRENT VALUE 重置为与当前初始值一样
这里我们设置一个全局变量名为 status ,INITIAL VALUE 设置为 available,然后点击 sava 生存设置
如今一个全局变量已经设置好了。
在 Postman 中的使用为 {{ 变量名 }},当 Postman 剖析变量时,字符串 {{ 变量名 }} 会被更换为相应的值。
比如进入查询宠物接口,这时间就可以把 status 的值更换为全局变量。
除了手动设置之外,还可以通过脚本的方式设置。
一样平常设置变量会在哀求之前,可以在 Pre-request Script 当中来完成。
Postman 已经给我封装好了现成的设置和获取全局变量的脚本,可以直接使用。
- 进入查询宠物接口
- 在 Pre-request Script 当中点击 Set a global variable
- pm.globals.set("status", "sold");
复制代码 如许设置就相当于在哀求之前,先把全局变量 status 的值设置为了 sold,以是哀求的效果也是返回的 sold 状态的宠物信息。
如今再看下 Globals 当中,status 如今的值
这就分析哀求前使用脚本设置全局变量是乐成的。
那如果必要在脚本当中获取全局变量的值应该怎么办
比如如今要在脚本中获取 status 这个全局变量的值,而且打印在控制台。
- var status = pm.globals.get("status");
- console.log(status)
复制代码 点击 Postman 下方的 Console 按钮,就可以打开 Postman 中的控制台,这里就可以看到全部的 log 日志
Collection
如果是某一个测试会集的接口会用到的变量,可以设置为测试集变量。
比如点击 Collections 中的宠物市肆,可以看到在测试集当中也可以设置鉴权方式,哀求前脚本,测试脚本和变量。
点击 Variables,就可以设置对应的测试集变量。
注意,宠物市肆的下一级,宠物 folder 只可以设置鉴权方式和脚本,变量是不可以设置的。
回到宠物市肆的变量设置页面。
前面的宠物操纵都涉及到了宠物 id 的值,可以把宠物 id 设置为测试集变量。
设置好之后,新增宠物、更新宠物和删除宠物接口中的宠物 id 就都可以引用这个测试集变量。
对应的断言也得做修改
起首要先获取到这个测试集变量,然后再把变量值拼接到预期效果当中就可以了。
- var petId = pm.collectionVariables.get("petId");
- pm.test("响应体正确", function () {
- pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
- });
- pm.test("Body matches string", function () {
- pm.expect(pm.response.text()).to.include("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"miao","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
- });
复制代码
修改断言,思绪和新增宠物的同等。
- var petId = pm.collectionVariables.get("petId");
- pm.test("响应状态码为 200", function () {
- pm.response.to.have.status(200);
- });
- pm.test("响应体正确", function () {
- pm.response.to.have.body("{"id":" + petId + ","category":{"id":1,"name":"cat"},"name":"小黑","photoUrls":["string"],"tags":[{"id":5,"name":"cute"}],"status":"available"}");
- });
复制代码
修改断言
- var petId = pm.collectionVariables.get("petId");
- pm.test("message 为删除的宠物 id", function () {
- var jsonData = pm.response.json();
- pm.expect(jsonData.message).to.eql(petId);
- });
复制代码 Enviroment
怎么设置和使用环境变量。
环境变量一样平常来说是用来切换差别测试环的境。
比如一套接口要在差别的环境上测试时, 可以新建两个环境,比如 test 环境和 stage 环境, 两个环境中添加 base_url 变量并设置差别的值, 哀求中接口的url中使用 {{ base_url }}, 如许只需在 Postman 中切换环境就可以测试差别的环境。
如今先创建一个 test 环境。
左侧边栏点击 Environments,点击 + 进入创建新环境的界面。
- 定名:测试环境
- 变量名:baseURL
- 初始值:https://petstore.swagger.io/v2
选择测试环境
然后四个接口就可以修改一下 url 的设置了。
- 查询宠物:{{ baseURL }}/pet/findByStatus?status={{ status }}
- 新增宠物:{{ baseURL }}/pet
- 更新宠物:{{ baseURL }}/pet
- 删除宠物:{{ baseURL }}/pet/{{ petId }}
修改完毕之后,记得生存设置。然后再次运行测试集。
Data
data 级别的就是在测试会集导入数据,通过数据驱动的方式完成测试。
变量的优先级
当变量重名的时间,优先级从高至低为:Data → Enviroment → Collection → Global → Local。
保举学习
【霍格沃兹测试开辟】7天软件测试快速入门带你从零根本/转行/小白/就业/测试用例计划实战
【霍格沃兹测试开辟】最新版!Web 自动化测试从入门到醒目/ 电子商务产物实战/Selenium (上集)
【霍格沃兹测试开辟】最新版!Web 自动化测试从入门到醒目/ 电子商务产物实战/Selenium (下集)
【霍格沃兹测试开辟】明星讲师经心打造最新Python 教程软件测试开辟从业者必学(上集)
【霍格沃兹测试开辟】明星讲师经心打造最新Python 教程软件测试开辟从业者必学(下集)
【霍格沃兹测试开辟】佳构课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试
【霍格沃兹测试开辟】腾讯/ 百度/ 阿里/ 字节测试专家技能沙龙分享合集/ 精准化测试/ 流量回放/Diff
【霍格沃兹测试开辟】Pytest 用例布局/ 编写规范 / 免费分享
【霍格沃兹测试开辟】JMeter 及时性能监控 平台/ 数据分析展示体系Grafana/Docker 安装
【霍格沃兹测试开辟】接口自动化测试的场景有哪些?为什么要做接口自动化测试?怎样一键天生测试陈诉?
【霍格沃兹测试开辟】口试本领引导/ 测试开辟本领评级/1V1 模仿口试实战/ 冲刺年薪百万!
【霍格沃兹测试开辟】腾讯软件测试本领评级标准/ 要评级表格的接洽我
【霍格沃兹测试开辟】Pytest 与Allure2 一键天生测试陈诉/ 测试用例断言/ 数据驱动/ 参数化
【霍格沃兹测试开辟】App 功能测试实战快速入门/adb 常用下令/adb 压力测试
【霍格沃兹测试开辟】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂口试真题解说,卷完拿高薪Offer !
【霍格沃兹测试开辟】App自动化测试零根本快速入门/Appium/自动化用例录制/参数设置
【霍格沃兹测试开辟】怎样用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |