15 days of Postman - for testers Day 01

15 days of Postman - for testers Day 01
Photo by Rubaitul Azad / Unsplash

Postman 15天测试人员徽章挑战

之前看postman日志的时候,发现了这个挑战.之前一直用,但是没有仔细研究过.
有了一个系统的培训还是值得参与一下.

所以,就走起吧~

只能说年前不忙

Day 01 : API client

开始之前可以通过测试感受一下自己的水平

Postman Skills
Recommended Postman skills for testers

具体的操作流程并不复杂,我是推荐按照文档一步一步操作一下,最麻烦的其实是看不明白英文文档....翻译容易带上关键字一起翻译有一些诡异,中英文对比着看还行.

看到他的test验证非常能帮助我理解一些平时不知道该怎么写的case,笔记一下

有几个有意思的,哈哈哈

我是非常推荐使用cURL的,跟研发经常互相扔cURL导入postman查看问题,方便快捷.

let的使用/js的格式

变量的声明基本都用的是let.看了一下文档,作用域不一样,还没太整明白.

人家一丢丢都没有写...而我,java基本语法200年学习者,分号和空格是我最后的倔强

调用其他脚本

let folder = collection.item.find(fol => {return fol.name === "API client"})

pm.test("Request body updated", () => {
    let request = folder.item.find(req => {return req.name === "echo"})
    pm.expect(request.request.body.raw, 'check payload').does.not.include("hello world!")
    pass += 1
})

先声明了这个collection里的文件夹

通过 requset调用,找文件夹中这个脚本.

对工作空间/collections/文件夹/脚本属性的检查

一般肯定用不上,但是可以作为平台日常检查,万一有手欠的呢.....还有就是互相调用万一谁手欠改名字,也可以拯救一下.

// 代码没啥逻辑关系,堆砌
let workspace = pm.response.json().workspace
let name = workspace.name.toLowerCase()
pm.expect(workspace.visibility).equals("public")

let collection = pm.response.json().collection
pm.expect(collection.info.name).equals("Day 01: API client")

可视化结果

可视化的结果,非常可爱.通过"pm.visualizer.set(template)"

// visualization for test results
let template  
if (pass == totalToPass) {
    template = ` passing!
        <br />
        <img src="https://media1.giphy.com/media/Dkf37ayTUExQ4/giphy.gif?cid=ecf05e4742btni80eyov8aqcpjhvc4hyxc36covy0r33xvy0&rid=giphy.gif&ct=g" />
    `
} else {
    template = ` please try again
        <br />
        <img src="https://media3.giphy.com/media/fqst7AVqF6AVLlYklE/giphy.gif?cid=ecf05e47mv96rgygl6w4fenzomwqqeh17p5pvcsgenuyxsbo&rid=giphy.gif&ct=g" />
    `
}
pm.visualizer.set(template)

当你的结果全部通过的时候[目前发现case的图还不一样,好可爱

如果你有失败的时候

非常可爱...虽然我一般用不上....

第一个case代码见下

// counter for passed tests
let pass = 0
let totalToPass = 5

let collection = pm.response.json().collection

pm.test("If you have any failures, review the failed test results or ask for support in the community forum. Remember to save your changes if you update the collection.", () => {
    pm.expect(true);
    pass += 1
});

pm.test("Status code is 200", () => {
    pm.response.to.have.status(200);
    pass += 1
});

pm.test("Correct collection returned", () => {
    pm.expect(collection.info.name).equals("Day 01: API client")
    pass += 1
})

let folder = collection.item.find(fol => {return fol.name === "API client"})

pm.test("Request body updated", () => {
    let request = folder.item.find(req => {return req.name === "echo"})
    pm.expect(request.request.body.raw, 'check payload').does.not.include("hello world!")
    pass += 1
})

pm.test("API key secure", () => {

    let apiKey = collection.variable.find(item => { return item.key === "postman_api_key"})
    pm.expect(apiKey.value, 'API key visible under Initial value').does.not.include("PMAK")
    pass += 1
})

// visualization for test results
let template
if (pass == totalToPass) {
    template = ` passing!
        <br />
        <img src="https://media1.giphy.com/media/Dkf37ayTUExQ4/giphy.gif?cid=ecf05e4742btni80eyov8aqcpjhvc4hyxc36covy0r33xvy0&rid=giphy.gif&ct=g" />
    `
} else {
    template = ` please try again
        <br />
        <img src="https://media3.giphy.com/media/fqst7AVqF6AVLlYklE/giphy.gif?cid=ecf05e47mv96rgygl6w4fenzomwqqeh17p5pvcsgenuyxsbo&rid=giphy.gif&ct=g" />
    `
}
pm.visualizer.set(template)

传说中的徽章