使⽤postman给API写测试
使⽤ postman 给 API 写测试
Intro
上次我们简单介绍了,这次主要来写⼀些测试⽤例以检查请求的响应是否符合我们的预期以及如何使⽤脚本测试
使⽤ postman 内置的随机变量
postman 内置的有⼀些产⽣随机值的变量,在发送请求时随机⽣成,这样我们可以在请求中随机⽣成⼀些⽤户名,邮箱,公司名称等等,{{$randomZipCode}}
{{$randomCity}}
{{$randomCityPrefix}}
{{$randomCitySuffix}}
{{$randomStreetName}}
{{$randomStreetAddress}}
{{$randomStreetSuffix}}
{{$randomStreetPrefix}}
{{$randomSecondaryAddress}}
{{$randomCountry}}
{{$randomCountryCode}}
{{$randomState}}
{{$randomStateAbbr}}
{{$randomLatitude}}
{{$randomLongitude}}
{{$randomColor}}
{{$randomDepartment}}
光伏政策{{$randomProductName}}
{{$randomPrice}}
{{$randomProductAdjective}}
{{$randomProductMaterial}}
{{$randomProduct}}
{{$randomCompanyName}}
{{$randomCompanySuffix}}
{{$randomCatchPhra}}
{{$randomBs}}
{{$randomCatchPhraAdjective}}
{{$randomCatchPhraDescriptor}}
{{$randomCatchPhraNoun}}
两用沙发
{{$randomBsAdjective}}
{{$randomBsBuzz}}
{{$randomBsNoun}}
{{$randomDatabaColumn}}
{{$randomDatabaType}}
{{$randomDatabaCollation}}
{{$randomDatabaEngine}}
{{$randomDatePast}}
{{$randomDateFuture}}
蜗牛与黄鹂鸟教案
{{$randomDateBetween}}
{{$randomDateRecent}}
{{$randomMonth}}琳琅满目是什么意思
{{$randomWeekday}}
{{$randomBankAccount}}
{{$randomBankAccountName}}
{{$randomCreditCardMask}}
{{$randomCurrencyAmount}}
{{$randomTransactionType}}
{{$randomCurrencyCode}}
{{$randomCurrencyName}}
{{$randomCurrencySymbol}}
{{$randomBitcoin}}
{{$randomBankAccountIban}}
{{$randomBankAccountBic}}
{{$randomAbbreviation}}
{{$randomAdjective}}
{{$randomNoun}}
{{$randomVerb}}
{{$randomIngverb}}
{{$randomPhra}}
{{$randomImage}}
{{$randomAvatarImage}}
{{$randomImageUrl}}
高一班主任工作计划{{$randomAbstractImage}}
{{$randomAnimalsImage}}
{{$randomBusinessImage}}
{{$randomCatsImage}}
{{$randomCityImage}}
{{$randomFoodImage}}
{{$randomNightlifeImage}}
{{$randomFashionImage}}
{{$randomPeopleImage}}
{{$randomNatureImage}}
{{$randomSportsImage}}
{{$randomTechnicsImage}}
{{$randomTransportImage}}
{{$randomImageDataUri}}
{{$randomEmail}}
{{$randomExampleEmail}}
{{$randomUrName}}
{{$randomProtocol}}
{{$randomUrl}}
{{$randomDomainName}}
{{$randomDomainSuffix}}
{{$randomDomainWord}}
{{$randomIP}}
{{$randomIPV6}}
{{$randomUrAgent}}
宋哲元{{$randomHexColor}}
{{$randomMACAddress}}
{{$randomPassword}}
{{$randomLoremWord}}
{{$randomLoremWords}}
{{$randomLoremSentence}}
{{$randomLoremSlug}}
{{$randomLoremSentences}}
{{$randomLoremParagraph}}
{{$randomLoremParagraphs}}
走字底怎么写{{$randomLoremText}}
{{$randomLoremLines}}
{{$randomFirstName}}
{{$randomLastName}}
{{$randomFullName}}
{{$randomJobTitle}}
{{$randomNamePrefix}}
{{$randomNameSuffix}}
{{$randomNameTitle}}
{{$randomJobDescriptor}}
{{$randomJobArea}}
{{$randomJobType}}
{{$randomPhoneNumber}}
{{$randomPhoneNumberFormat}}
{{$randomPhoneFormats}}
{{$randomArrayElement}}
{{$randomObjectElement}}
{{$randomUUID}}
{{$randomBoolean}}
{{$randomWord}}
{{$randomWords}}
{{$randomLocale}}
{{$randomAlphaNumeric}}
{{$randomFileName}}
{{$randomCommonFileName}}
{{$randomMimeType}}
{{$randomCommonFileType}}
{{$randomCommonFileExt}}
{{$randomFileType}}
{{$randomFileExt}}
{{$randomDirectoryPath}}
{{$randomFilePath}}
{{$randomSemver}}
还是⽐较偏英⽂化,对于中⽂可能并不太友好,下⾯来演⽰⼀个使⽤⽰例:
在请求中使⽤上⾯这些变量
监控发送的 HTTP 请求
从上图中可以看到,我们使⽤到的随机变量在发送请求的时候是已经替换成具体的值的了
编写测试⽤例
Scripts 介绍
postman 有⼀套基于 nodejs 的运⾏时,我们可以写⼀些 scripts 来在请求发送之前做⼀些⽇志等,在得到响应之后测试响应是否与预期⼀致
postman 的 script 主要分成两类,⼀类是 Pre-Request Scripts,在发送请求之前执⾏,⼀类是 Tests,个⼈感觉可能叫 Post-Respon Scripts 更好⼀些,因为我们不仅仅可以写测试,也可以记录⽇志,也可以设置变量等
上次我们说过了 postman 的测试推荐使⽤ Collection ,Collection 下可以分⽬录也可以直接就是 request,⽬录⾥也可以有具体的 api request,还可以有⼦⽬录
Collection/Folder/Request 都可以定义⾃⼰的 Pre-Request Scripts 和 Tests,这些 Scripts 执⾏顺序如下:
上⼀级的测试作⽤于⼦级所有的请求,也就是说我们可以在 Collection 的 Test Scripts 中定义⼀个测试⽤例,这会对这个 Collection 下的所有请求都有效,都会验证这个测试是否有效
如果想要实现测试⽤例的复⽤可以将类似的请求放在⼀个⽬录下针对⽬录写测试⽤例,这样这个⽬录下的请求都会有这个测试⽤例
如果只是想针对某⼀个请求的测试,可以针对 request 来写,只在对应 request 的 Test Scripts 中定义即可
Scripts 常⽤语法
Postman Console
postman 是基于 nodejs 的,你可以直接使⽤ console.log 来记录⼀些⽇志,通过 postman console 来查看,在左上⾓的菜单 View 下有⼀个 Show Postman Console
我们在请求的 Pre-Scripts ⾥输出⼀条⽇志,然后发送请求
这⾥的 pm.variables.t("phone","") 是设置 phone 这⼀参数为空字符串,由下图可以看出,phone 这⼀变量在发送请求的时候会被替换成空字符串
查看 postman console
可以看到我们在上⾯输出的⽇志已经输出到 postman console 了
变量设置
postman ⽀持的变量分⼏个层级,
global
environment
collection
data(数据⽂件中的变量值)
local
变量优化级:
上⾯的类型优先级从低到⾼,“就近原则”
// Variables
// This function arches for the variable across globals and the active environment.
var value = ("variable_key"); // 这个⽅法会从上⾯所有的来源寻找对应的变量,就近原则,优先从最靠近⾃⼰的地⽅找
// Globals
// Set a global variable,设置⼀个全局变量
pm.globals.t("variable_key", "variable_value");
// Get a global variable,从全局变量中获取某个变量的值
("variable_key");
// Clear a global variable,取消设置全局变量,移除变量
pm.globals.unt("variable_key");
// Environments
// Setting an environment variable, 设置⼀个环境变量(注,这是postman 中的 <Environment> 环境变量,不同于系统环境变量)
// 你也可以序列化⼀个对象或数组放在变量中
// Setting a nested object as an environment variable
// var array = [1, 2, 3, 4];
// pm.environment.t("array", JSON.stringify(array, null, 2));
// var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
// pm.environment.t("obj", JSON.stringify(obj));
// Getting an environment variable,从环境中获取某个变量
var value = ("variable_key");
// If the value is a stringified JSON:
// The statements should be wrapped in a try-catch block if the data is coming from an unknown source.
var array = JSON.("array"));
var obj = JSON.("obj"));
// // Clear an environment variable, 从环境中移除某⼀个变量
// pm.environment.unt("variable_key");
// Collection
// Setting an collection variable,设置⼀个 collection 变量
// Get a collection variable,从 collection 中获取⼀个变量
var val = ("variable_key");
// Clear a collection variable,从 collection 中移除⼀个变量
// local
pm.variables.t("variable_key", "variable_value");
("variable_key");
使⽤变量,如 urname => {{urname}},使⽤两层⼤括号来表⽰变量引⽤,⽐如上⾯的测试中的 phone
测试⽤例
postman 的测试⽤例也是分层级的,上⾯已经做了简单的介绍,postman 是基于 nodejs 的所以,在nodejs ⾥可以⽤的语法⼤多也都⽀持,⽐如 JSON.par,这⾥主要介绍⼏种常⽤的⽅法:
// 检查 respon 的 statusCode 是 200
});
// 检查响应是 200,并且有 body,body 是⼀个 json
// asrt that the status code is 200
// asrt that the respon has a valid JSON body
});
// 定义⼀个超时时间,检查响应时间是否超时
let responTimeout = parInt(("responTimeout"));
if(responTimeout > 0){
});
}
// Convert XML body to a JSON object,使⽤postman 内置的 xml2Json 将 xml 转换为 json 对象
var jsonObject = xml2Json(responBody);
//Check for a JSON value
// 检查 json 对象中某⼀个值是否符合预期
var jsonData = pm.respon.json();
});
// 检查数组是否为空
expect([]).pty;
});
// 检查字符串是否为空
耶诞节
});
运⾏测试:
测试结果会显⽰出多个测试通过,多少失败的,哪些 asrtion 失败,你也可以看到具体的响应信息
使⽤命令⾏测试
postman 提供了⼀个 npm 包 newman,我们可以直接命令⾏运⾏测试,也可以在⾃⼰的程序⾥集成 npm 包,在程序⾥运⾏
npm install -g newman
使⽤导出 Collection,导出之后是⼀个 json ⽂件
newman run testCollection.json // 运⾏ testCollection 测试
newman run testCollection.json -d testData.json // -d 指定数据⽂件
newman run testCollection.json -d testData.json -r json // -d 指定数据⽂件,-r 指定 report 类型,默认是 `cli` 直接在命令⾏中输出测试结果
newman run testCollection.json -r cli,json // -d 指定数据⽂件,-r 指定 report 类型,默认是 `cli` 直接在命令⾏中输出测试结果,可以指定多个 reporter,json 会将运⾏结果保存到 json ⽂件中// collection 路径不仅⽀持本地路径,也⽀持 url
newman /collections/631643-f695cab7-6878-eb55-7943-ad88e1ccfd65-JsLv
⽰例:
在⾃⼰的程序中使⽤ newman 运⾏测试
const newman = require('newman'); // require newman in your project
// call newman.run to pass `options` object and wait for callback
newman.run({
collection: require('./sample-collection.json'),
reporters: 'cli'
}, function (err) {
if (err) { throw err; }
console.log('collection run complete!'); });
Reference