美文网首页
PostMan进阶——测试脚本的编写

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

作者: 金融测试民工 | 来源:发表于2020-06-25 14:31 被阅读0次

    \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);

    })

    相关文章

      网友评论

          本文标题:PostMan进阶——测试脚本的编写

          本文链接:https://www.haomeiwen.com/subject/tetrfktx.html