1.测试数据的分层
2.测试脚本的分层
3.测试用例的分层(场景设计)
4.工具类的定义(token、secret、datatime、name、pict for testdata)
5.数据驱动的管理(newman改造,数据服务化)
6.接口来源(charles、fiddler、yapi、f12、bridge=>har2postman)
7.版本控制
8.测试报告的管理
9.docker+jenkins
一、测试数据的优先级(数据分层机制):
postman允许用户在多个层级覆盖测试数据.png
如图展示了各种数据来源的crud,这是测试框架很好的范例.png
postman自带的Dynamic variables(随机数、日期、IP等数据的自动生成)
https://learning.postman.com/docs/writing-scripts/script-references/variables-list/
关于数据驱动的槽点(当使用csv进行数据驱动的时候,pm.iterationData.variables()读取到的value默认是string,所以当需要传输list、dictionary类型的数据时,需要作前置的search、split、参数重新赋值);
TODO:使用json文件进行参数化会是最方便的,无需做入参的规则制定和数据类型转换。最后,需要一个数据管理平台进行可视化的生成json数据的;
二、测试脚本的优先级(脚本分层机制)
如图展示了前置脚本、请求-响应、断言的优先级,具备hook,这是测试框架很好的范例.png
四、设置测试用例的执行顺序(单个场景)
postman.setNextRequest("Next Request");
1.不受前置脚本和断言脚本的限制,总之在当前脚本结束后运行
2.受当前运行的scope影响,在当前的folder或者collection中进行跳转
三、TODO: 自定义用例分层机制,实现测试用例的多场景组合;
四、公共方法的定义
//using env functions by eval
postman.setEnvironmentVariable("utils", () => {
var myFunction1 = (x,y) => {
return _.random(x, y);
}
var myFunction2 = () => {
let func1Result = myFunction1();
//do something else
}
return {
myPackage: {
myFunction1,
myFunction2
}
};
});
let utils = eval(pm.environment.get(utils))();
data = utils.myPackage.myFunction1(10,20); //calls myFunction1()
console.log(data);
utils.myPackage.myFunction2(); //calls myFunction2() which uses myFunction1()
测试数据的各种加密:
testdata为字符串类型;
base64加密:
var newtestdata = CryptoJS.enc.Utf8.parse(testdata);
var base64 = CryptoJS.enc.Base64.stringify(newtestdata);
md5加密:
var md5 = CryptoJS.MD5(testdata).toString();
rsa加密 => 最终获得token:
//pm.sendRequest:GET
//getting rsakey by requesting api
pm.sendRequest(pm.environment.get("url")+"/abcde", function (err, response) {
console.log(response.json());
pm.environment.set("rsaKey", response.json()['data']);
});
//pm.sendRequest:POST dorm-data
var public_key = '-----BEGIN PUBLIC KEY-----\n' +
pm.environment.get("rsaKey") + '\n' +
'-----END PUBLIC KEY-----';
console.log(public_key);
//getting rsa by requesting api
pm.sendRequest({
url: 'https://api.bejson.com/Bejson/Api/Rsa/pubEncrypt',
method: 'POST',
header: {
'Content-Type': 'multipart/form-data',
},
body: {
mode: 'formdata',
formdata: [
{key: "publicKey", value: public_key, disabled: false, description: {content:"", type:"text/plain"}},
{key: "encStr", value: "abcde", disabled: false, description: {content:"", type:"text/plain"}},
{key: "etype", value: "rsa2", disabled: false, description: {content:"", type:"text/plain"}}
]
}
}, function(err, response) {
console.log("rsa加密后", response.json());
pm.environment.set("rsa_pwd", response.json()["data"]);
});
//getting access_token by requesting api, username,password can be parameterized!
pm.sendRequest({
url: pm.environment.get("url")+'/abcde',
method: 'POST',
header: {
'content-type': 'multipart/form-data',
'mock': 'true'
},
body: {
mode: 'formdata',
formdata: [
{key: "username", value: pm.environment.get("username"), disabled: false, description: {content:"", type:"text/plain"}},
{key: "password", value: pm.environment.get("rsa_pwd"), disabled: false, description: {content:"", type:"text/plain"}},
// {key: "password", value: "123", disabled: false, description: {content:"", type:"text/plain"}}]
}
}, function(err, response) {
console.log(response.json());
pm.environment.set("token", response.json()["abcde"]);
});
TODO: 由于postman的pm.request/pm.set/pm.get/pm.xx,都是异步执行。
所以,我将其分别放到request的pre-requestscript>body>Tests三个同步的步骤中执行,以此每次获取到最新的token;或者是,将多个接口请求嵌套在pm.request中,但会造成代码不优雅的情况;
另外,将这些函数方法以字符串形式封装到公共方法类,使用eval进行调用会减少代码冗余、提升复用性;
TODO:在公共方法中定义自增ID、有效的时间段、符合要求的随机数等
五、postman data-driven的坑
csv的内容.png




import os
import pandas as pd
coding = 'utf-8-sig'
dir = r'.\testdata'
file_dir = dir
def run_coding():
for root, dirs, files in os.walk(file_dir, topdown=False):
for i in files:
files_name = os.path.join(root, i)
try:
df = pd.read_csv(files_name, encoding='gbk')
except Exception:
df = pd.read_csv(files_name, encoding='utf-8')
df.to_csv(files_name, encoding=coding,index=None)
print("ok:",files_name)
if __name__ == '__main__':
run_coding()
六、Postman Interceptor的安装
安装chrome扩展程序+postman bridge


MacOS/ Linux: $HOME/.postman
Windows: %USERPROFILE%.postman\
七、collection的版本控制
postman有版本控制是很好的点,当然,使用git来管理也是归宿
最后、postman-mixed
providing:collections+testcases+variables+environment variables+global variables+testdata's management(restful api) + report + cicd
网友评论