PostMan进阶——测试脚本的编写

\bullet 预处理脚本(Pre-request script)

\bullet 断言脚本(Tests script)


预处理脚本(Pre-request script)

        请求之前添加的脚本,我们称为预处理(Pre-request Script) ,预处理脚本与Jmeter的前置处理器类似,主要作用就是一些初始化的功能

请求本身的问题,但是“请求前后的动作”是怎么处理的?

比如在发送一个请求前,需要获取当前系统时间戳,这就需要用到Pre-request Script的知识。请求返回响应结果后,如何自动判断响应是否正确?这就需要用到Tests的知识。

postman支持javascript,允许测试人员给请求和集合添加动态行为,通过使用javascript脚本,可以构建包含动态参数的请求,在请求之间传递数据。可以在下面两个事件流中添加javascript脚本。

1、在请求发送前,添加作为“Pre-request Script”选项下的预处理脚本

2、在收到响应后,添加测试脚本进行断言、流程控制

可以将预处理和测试脚本添加到一个集合、一个文件、一个请求中。

1、为集合添加脚本

2、为文件添加脚本

3、为请求添加脚本

在Postman中,单个请求的脚本执行顺序如图

1、与请求相关联的预请求脚本将在请求发送之前执行

2、与请求关联的测试脚本将在接收响应之后执行。

对于集合中的每个请求按顺序执行

1、与集合相关的预请求脚本将在集合中的每个请求之前运行

2、与文件夹相关联的预请求脚本将在文件夹中的每个请求之前运行。

3、与集合相关的测试脚本将在集合中的每个请求之后运行。

4、与文件夹关联的测试脚本将在该文件夹中的请求之后运行。

对于集合中的每个请求,脚本总是按照下面的层次结构运行:集合级脚本、文件夹级脚本、请求级脚本。此执行顺序适用于预请求和测试脚本。为了验证其正确性,可以创建这样一个集合,其中包含一个文件夹和两个请求。


2 测试脚本

        预处理脚本,指在请求发送之前执行的脚本。如果想在请求发送时包含当前时间戳或者一个随机的字符,前端加密等,在这个场景下使用前置脚本。例如,要在请求头中包含一个时间戳,可以设置一个环境变量,其值从函数返回。

        预处理脚本将被执行,并且timestampHeader的值将被赋值给变量{{timestampHeader}}。body中通过使用{{timestampHeader}}来传递变量。

pm.environment.set("timestampHeader", Date.now())

Postman准备了常用脚本实例,这些脚本能够满足大多数接口测试的需求,接下来,一起认识一下它们,Postman在右侧区域列出了常用脚本。

演试案例:

准备接口

打开“Postman Console”

了解console.log()

接口描述:

Postman Console窗口输出内容的顺序体现了脚本执行的顺序,Pre-request Script请求中的脚本先执行,然后才发送接口的请求

设置变量、获取变量值脚本

1、设置一个全局变量

pm.globals.set("variable_key", "variable_value");

2、设置一个环境变量

pm.environment.set("variable_key", "variable_value")

3、获取一个全局变量

pm.globals.get("variable_key")

4、获取一个环境变量

pm.environment.get("variable_key")


演试案例:

演试内容:Postman在右侧区域列出了常用脚本的演试

通过console.log输出globals、environment当前的环境变量,Postman Console窗口的输出情况。

清除变量的脚本

1、清除一个全局变量

pm.globals.unset("variable_key")

2、清除一个环境变量

pm.environment.unset("variable_key")


发送请求的脚本

1、发送一个请求

pm.sendRequest()


断言脚本(Tests script)

    响应之后添加的脚本,称为测试脚本(Tests Script),即断言脚本,测试脚本主要用于接口断言,类似LoadRunner工具中的检查点、Jmeter中的断言功能。需要使用javascript语言为每个请求编写测试脚本。

测试脚本相关方法:

1、检查响应体中是否包含一个字段

pm.expect(pm.response.text()).to.include("指定的内容")

2、将xml格式额响应体转换程Json对象

varJson=xml2JSON(responseBody)

3、检查响应体等于一个字符串

pm.response.to.have.body("指定的内容")

4、检测响应体的JSON值

varJSON=pm.response.JSON();//将结果转换程json格式

pm.expect(JSON.value).to.eql(“目标数”);

5、检测响应体中包含某个header

pm.response.to.have.header("Content-Type")

6、检查响应时间,要求小于100ms

pm.expect(pm.response.responseTime).to.be.below(100);

7、要求该接口响应码为200

pm.varibles.get("指定状态码")

8、要求响应状态中包含某个字符

pm.response.to.have.status("OK")

9、要求status code符合某个条件

pm.expect(pm.response.code).to.be.oneOf([200,201,202])


    关于postman测试脚本中接口返回结果比较复杂的断言,且需要对多个值进行断言的情况,通过一个示例说明。

    假如该接口mock出参如下:

{

    "data": {

        "periodType": "测试内容5e67",

        "prdCode": "测试内容civx",

        "insuranceEffDate": "测试内容r7b0",

        "packages": [

            {

                "dutyDetail": [

                    "string1",

                    "string2",

                    "string3",

                    "string4",

                    "string5"

                ],

                "frontAmount": "测试内容5x44",

                "planName": "测试内容5j1w"

            }

        ],

        "empName": "测试内容vc2q",

        "policyHolder": {

            "insurerName": "测试内容4v25",

            "insurerEmail": "测试内容6i9w",

            "insurerBirthday": "测试内容7343",

            "insurerSex": "测试内容h324",

            "insurerIdno": "测试内容c34l",

            "insurerMobileNo": "测试内容k4o2"

        },

        "orderNo": "测试内容79jw",

        "empNo": "测试内容m287",

        "insuranceMatuDate": "测试内容cqd7",

        "premium": 11803,

        "prdName": "测试内容4f3l",

        "validCodeImg": "测试内容h14c",

        "orderStatus": 77672,

        "underWriteDate": "测试内容o5cg",

        "insuredList": [

            {

                "insurerMobileNo": "测试内容j722",

                "insurerIdType":"测试内容l5q4",

                "insurerBirthday":"测试内容475p",

                "insurerSex": "测试内容6l14",

                "insurerName": "测试内容whjd",

                "relationShipCode":"测试内容2l4p",

                "insurerIdno": "测试内容81ne"

            }

        ],

        "period": 21461

    },

    "responseCode": "测试内容595b",

    "responseMsg": "测试内容hu4x"

}

    我们需要断言其中的多个字段,可如下断言:

pm.test("检查响应体中的值", function(){

   var responsebody = pm.response.json();

   pm.expect(responsebody.data.packages[0].dutyDetail[0]).to.eql("string1");

   pm.expect(responsebody.data.insuredList[0].insurerMobileNo).to.eql("测试内容31vn");

   console.log(responsebody.data.insuredList[0].insurerMobileNo);

})

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