Postman接口自动化

Postman官方blog
https://www.getpostman.com/docs/pre_request_scripts

发送请求

Postman界面分为两个部分,左边是工具栏,右边是请求编辑器


URL

一个URL就是一个接口,接口大致会分为一下几个部分


  • 请求协议:
    http --- 普通的http请求
    https --- 加密的http请求,传输数据更加安全
  • 请求IP:就是指提供接口的系统所部署的服务器地址
  • 请求端口:默认是80
  • 接口路径:指系统提供的接口在什么位置
  • 接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数
Params(参数)

点击URL Params按钮,会打开key-value编辑参数,这样比较直观


Headers

HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。


Method

GET
POST

Request body

post请求参数在实体中


环境变量

我们可能需要在多个环境下对同一个接口进行测试。比如我们请求的域名,开发、测试、生产环境,请求参数。在地址栏、header、请求参数、外部数据文件里,用 {{变量名}} 获取环境变量的值
Postman 的环境变量分为 environment 和 global 2种

Environment
手动设置环境变量
  • 点击设置按钮
  • 选择 Manage Environment


  • 点击Add
  • 填写变量名和变量值


代码自动创建环境变量
  • 请求发起之前创建,在Pre-request Script标签里面添加代码
    postman.setEnvironmentVariable("variable_key", "variable_value");
  • 在某个请求发起之后创建,在Tests标签里面添加如下


变量的引用

引用的时候加上双花括号:{{变量名}}

动态请求参数

Postman有以下三种内建变量:

{{$guid}}  // 生成GUID
{{$timestamp}}  // 当前时间戳
{{$randomInt}}  // 0-1000的随机整数

在Pre-request Script里写代码处理,存为环境变量,参数里用{{变量名}}取值
例如

// 随机整数
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;  
 // 随机选项
const getRandomValue = list => list[randomInt(0, list.length - 1)]; 

// 随机手机
environment.randomMobile = `18${randomInt(100000000, 999999999)}`;
// 随机设备名
environment.randomDevice = getRandomValue(['ios', 'android']);

//随机生成一个字符串作为用户名 
postman.setEnvironmentVariable("random_user", ("0000" + 
(Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));

//发起请求之前获取当前的时间戳放在参数里:
postman.setEnvironmentVariable("unixtime_now", Math.round(new Date().getTime()/1000));

Test

Setting an environment variable
postman.setEnvironmentVariable("key", "value");

Getting an environment variable
postman.getEnvironmentVariable("key");

Set a global variable
postman.setGlobalVariable("key", "value");

Get a global variable
postman.getGlobalVariable("key");

Check if response body contains a string
tests["Body matches string"] = responseBody.has("string_you_want_to_search");

Convert XML body to a JSON object
var jsonObject = xml2Json(responseBody);

Check if response body is equal to a string
tests["Body is correct"] = responseBody === "response_body_string";

Check for a JSON value
var data = JSON.parse(responseBody); tests["Your test name"] = data.value === 100;

Content-Type is present (Case-insensitive checking)
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); //Note: the getResponseHeader() method returns the header value, if it exists.

Content-Type is present (Case-sensitive)
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");

Response time is less than 200ms
tests["Response time is less than 200ms"] = responseTime < 200;

Status code is 200
tests["Status code is 200"] = responseCode.code === 200;

Code name contains a string
tests["Status code name has string"] = responseCode.name.has("Created");

Succesful POST request status code
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;

Use TinyValidator for JSON data

var schema = {
 "items": {
 "type": "boolean"
 }
};
var data1 = [true, false];
var data2 = [true, 123];
tests["Valid Data1"] = tv4.validate(data1, schema);
tests["Valid Data2"] = tv4.validate(data2, schema);
console.log("Validation failed: ", tv4.error);

实例

//验证本次请求的状态码 
tests["Status code is 200"] = responseCode.code === 200;

tests["检查返回的数据是否有成功执行"] = responseBody.has("成功执行");

tests["响应时间不超过500ms"] = responseTime < 500;

//先声明一个变量jsonData,调用JSON.parse()方法将responseBody转换成json的标准格式并赋值给变量jsonData,将返回结果传给其他接口使用
//检测JSON中的某个值是否等于预期的值;
//JSON.parse()方法,把json字符串转化为对象。parse()会进行json格式的检查是一个安全的函数。
var jsonData = JSON.parse(responseBody);

var jsonObject = xml2Json(responseBody);

//检测errcode字段的值是否为0
tests["errcode is 0"] = jsonData.errcode === `0`;
检测errcode字段的长度是否是1
tests["errcode's length"] = jsonData.errcode.length ===1

tests["description is 成功执行"] = jsonData.description === '成功执行'
tests["description's length"] = jsonData.description.length ===4

//检测description的数据类型是否是String
tests["description 的数据类型为String"] = _.isString(jsonData.description)

//测试response Headers中的某个元素是否存在(如:Content-Type)
//getResponseHeader()方法会返回header的值,如果该值存在
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); 

//判断字段的类型
var schema = {
 properties:{
     errcode: {type: 'String'},
     description:{type:'String'}
 }
};
tests["响应实体的类型 "] = tv4.validate(responseBody, schema);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 场景一次性走这9个接口: 1、验证手机号是否可以注册(这里我们得随机生成手机号)2、如果可以,就走获取短信验证码接...
    十一岁的加重阅读 644评论 0 4
  • 在学这门语言之前,先要知道为什么要学习接口自动化呢?想想我们的团队中,是不是开发开发出了大量的外部可以调用的接口?...
    邵琼阅读 759评论 1 2
  • Postman用法简介-Http请求模拟工具 在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,...
    奥利奥龙卷风阅读 4,183评论 2 9
  • 1.金刚坐与英雄坐的重点,注意点阐述出来? 金刚坐:双膝并拢,双手大拇指深入膝盖窝将小腿肌肉向下伸展;臀部坐与脚后...
    谢婆婆192599阅读 270评论 0 0