RESTful概念
首先, 明确RESTful, 他是一种理念,是一种设计规范
REST,全称Representation State Transfer(表现层状态转化) Resource Representation State Transfer(资源在网络中以某种形式进行状态转化)
资源
资源是RESTful中核心概念之一,每一样信息都可以定义为资源:文本,土拍你,音频、视频,而这些资源有一个统一的URI(统一资源标识符)
URI为每一个资源地址或者独一无二的标识符,通过路径找到资源
/api/v3/user/login
表现层
针对上面的资源,需要响应的展示,可以由多种的形式,把这种形式成为表现层
text: json, xml,yaml,html
状态转化
资源通常放在服务器,而客户都安对服务器的资源进行,增加,删除,修改,查询等操作,便涉及到资源的状态发生变化。这个过程就是状态的转化
怎么进行操作
基于HTTP协议,如何进行资源的修改:利用HTTP方法,GET、POST、PUT、 Delete
RESTful
URI- 规范 - URI不能出现动词/ 每一个URI代表一个资源(实体)
用法- 方法,HTTP方法,客户端通过HTTP的动词方法,对服务器的资源进行操作
Transfer
例子:
GET /zoos 获取所有的动物园
POST /zoos 新增一个动物园
GET /zoos/ID:获取某个指定的动物园ID信息
PUT /zoos/ID:更新某个指定的动物园信息
DELETE /zoos/ID:删除指定动物园
GET /zoos/ID/animals: 列出指定动物园中的所有的动物
DELETE /zoos/ID/animals/ID 删除一个动物
过滤信息
http://domain.com/api/v1/resource?limit=10: 指定返回的记录数量
?page=2&per_page=100: 指定第几页,以及每页记录数量
postman
如何使用,了解工具的基本组成部分
了解工具的基本的语法规则
掌握你的需要的功能(功能串接你的脚本)
掌握工具的思想是什么?
实现的业务(功能) - 帮助我们实现API接口调用
过程(流程)- 可以把接口组织起来(顺序)
使用方法 - 如何实现 1, 2, 3 这几个关注点
参数化
断言
进行接口测试得流程
建立测试集
编写测试用例
接口得主要要素
方法,url
请求头,请求体,解决参数问题
断言
postman
URL 有参数的时候,在query params填写参数,如果没有,就不用管
Content-Type:application/x-www-form-urlencoded , body中对应的选择 x-www-form-urlencoded
Content-Type:application/json, body中对应的选择 raw,以及最右边的菜单 json
postman参数化:
可设置环境变量和全局变量:
环境变量,所需要的接口运行时选择环境变量名称
全局变量,所有接口可用
引用参数:用双花括号 {{参数名}}
接口关联
1,json提取
相关接口引用:{{access_token}}
2,正则表达式,返回接口是html使用,是从响应体里提取
match:匹配
new ReqExp:自定义规则
括号里是要匹配的内容,如果取值多个,根据下标取最终结果
3,在响应头或者时cookie里提取
postman,getResponseCookie:postman自带提取cookie方法啊
使用 变量参数化
var res_code = pm.environment.get(“res_code”);
var login_text = pm.environment.get(“login_pass”)
//使用js code将string convert to integer
var res_code_int = new Number(res_code)
//将变量输出到控制台,验证变量获取是否成功
console.log(res_code_int)
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(res_code_int);
});
pm.test(“Body matches string”, function () {
pm.expect(pm.response.text()).to.include(login_text);
});
- 使用文件进行参数化/数据驱动的时候,第一行的名字,必须和脚本中使用变量名称一致
//login_text从文件接收参数
// 这里注意一个关键字就是data,data指定文件中的第一行的字段
var login_text = data.expected_result
console.log(login_text)
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
});
pm.test(“Body matches string”, function () {
pm.expect(pm.response.text()).to.include(login_text);
});
postman解析json字符串
postman如何实现接口的关联(1. 上一个接口的值,变成下一个接口参数)
// poseman实现接口关联
// 写对应的变量名和值,使用set
pm.environment.set("myvar","myvalue")
// 获取变量
// var temp_date = pm.environment.get('myvar')
// console.log(temp_date)
// 申明为全局变量
pm.globals.set("allmavar","allmyvalue")
// 获取全局变量
var temp_date=pm.globals.get("allmavar")
console.log(temp_date)
获取响应的文本
pm.response.text()
获取响应的header
pm.response.headers //获取的结果一个array/list套字典,
response的headers中自己获取 sessionid
通过response.json()方法帮助我们进行json的解析,对象的转换
postman做断言:
第一种:根据状态码
1、判断请求返回的状态为200,200就是正常
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
}); // 判断返回响应中的其它字段的值时,同样使用该方法可以实现
或者使用
tests[“Status code is 200”] = responseCode.code == 200;
“Status code is 200”:此处的文字信息可以任意定义(填写),只要能够方便我们自己辨别是什么意思就可以了
(运行的结果在“Test Results”中查看)
2、判断请求返回中其它字段的值(或状态)
pm.test(“Body matches string”, function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
“Body matches string”:此处的文字信息可以任意定义(填写),只要能够方便我们自己辨别是什么意思就可以了
“string_you_want_to_search”:此处填写的时我们需要判断的字段的值
3、获取json数据,并校对返回值的正确性
var res = JSON.parse(responseBody); // 先获取到返回的json数据
tests[“rsp的值是否为操作成功”] = res.rspInf == “操作成功”;
tests[“判断data的第二个元素的值是否正确”] = res.data.loginTime === 1548607006000;
或者
pm.test(“判断psCd是否=00000”, function () {
var res = pm.response.json();
pm.expect(res.rsCd).to.eql("00000"); // 判断rsCd的值是否正确
});
pm.test(“判断role是否=admin”, function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data.role).to.eql("admin"); // "判断data的第三个元素的值是否正确
});
pm.test(“返回的json数据中是否有rsCd”, function () {
pm.response.to.have.jsonBody("rsCd"); // 判断json数据中是否含有rsCd这个字段
});
4、判断响应时间
pm.test(“Response time is less than 200ms”, function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
“Response time is less than 200ms”:此处的文字信息可以任意定义(填写),只要能够方便我们自己辨别是什么意思就可以了
5、判断返回数据的类型
var res = JSON.parse(responseBody); // 先获取到返回的json数据
tests[“判断loginTime的值的类型是否是number”] = typeof(res.data.loginTime) === “number”;
tests[“判断rsCd的值的类型师是否是string”] = typeof(res.data.loginTime) == “number”;
// 比较常用的集中类型:number、string、object、array、boolean、undefined
6、判断返回数据中是否存在某个元素
tests[“判断返回的元素中是否有data”] =responseBody.has(“data”);
tests[“判断返回的元素中是否有rsCd”] =responseBody.has(“rsCd”);
postman抓接口****浏览器设置代理所用附件
只要需要代理的都可以使用这个设置,包括fidder postman jmeter
打开这个功能
浏览器添加组件
按序设置
按序设置
进行抓包
postman生成接口文档
可以选择生成代码