postman介绍与基础用法

一.postman版本:

    1.chrome插件版本:2017年不维护

    2.native版本:具有更好的扩展性,推荐使用

    3.区别:①native版本可以直接操作cookie,而chrome版本需要安装扩展;

                 ②native版本自带proxy,可以用来抓包;

                 ③有一些headers在chrome app上是受限的,比如Origin and User-Agent(浏览器版本)

                 ④只有native才有Don't follow redirects option(不去跟随重定向)的选项,可以测试301的状态码

                 ⑤native版本自带Postman console,用js写断言,可以打印看是否是正常进行的

 

二.postman安装:

    下载地址:https://www.getpostman.com/apps

    直接下一步安装

    点击最下方:take me straight to the app进入

    只支持http协议

 

三.发送api:

    文档:https://www.v2ex.com/p/7v9TEc53

    api地址:https://www.v2ex.com/api/topics/hot.json

    接口的格式:headers→Content-Type:

 

四.http请求的构成:起始行、Headers、Body

    

    1.起始行:三要素:

        ①一个http方法,一个动词(像GET、PUT或者POST)或者一个名词(像 HEAD或者OPTIONS),描述要执行的动作

        ②请求目标,通常是一个url,或者是协议、端口和域名的绝对路径,通常以请求的环境为特征

        ③http版本

    2.Headers:一串由key、value和冒号组成的不区分大小写的字符串。整个headers由一行组成。这一行可以相当长。里面信息可以当成配置项

    3.body:不是所有的请求都有body,例如GET、HEAD,有些请求将数据发到服务器以便更新数据:常见的情况是POST请求

 

五.http响应的构成:状态行、Headers、body

    

    1.状态行:

        ①协议版本

        ②状态码

        ③状态文本:一个简短的状态文本,帮助理解状态码的文本描述

    2.Headers:比较关注的字段(Set-Cookie)

    3.Body:不是所有的响应都有body,例如状态码201、204的响应,通常不会有body

    

六.断言:在http响应里断言:状态码、body的返回

    

 

七.Test功能:

    1.设置全局变量(例如存储cookie)

    2.设置环境变量(例如使脚本能够在正式环境与测试环境执行)

    3.拿到并处理请求的响应

    4.定义测试检查点和断言

    api文档:https://www.getpostman.com/docs/v6/postman/scripts/postman_sandbox_api_reference

    

    pm.test("Status code is 200", function () {

    pm.response.to.have.status(200);

 

});

 

八.set\get cookie

    set cookie:服务器返回respond,header里有个指示叫set cookie,然后客户端set cookie,最终cookie是保存在客户端。

    拿到cookie:

    

    get cookie:拿到保存在客户端里面的cookie

 

九.鉴权-token base application:

    用户名、密码登录,发请求给后台,后台返回一个token,以后所有的请求里用token去访问。

    1.获取token

    2.在header里设置token

    

 

十.变量:用两个大括号{{    }}表示变量

https://www.v2ex.com/api/nodes/show.json?name={{node_name}}

    

如果环境变量名与全局变量名重复,那么取环境变量的值(环境变量的值覆盖全局变量)

 

十一.Test中获取到环境变量的方法

 

十二.保存、运行collection

两个*号表示加粗(Markdown的语法)

 

数据驱动:

1.准备json脚本

 

2.修改代码:

 

3.修改run配置

 

十三.命令行运行

1.原因:在无UI界面的服务器上运行;可以在ci持续集成系统上运行

2.准备:①导出collection

             ②安装nodejs和npm

             ③安装newman

3.安装nodejs( LTS代表长期支持版本 ):https://nodejs.org/en/download/

    简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

    新版的Node.js已自带npm,安装Node.js时会一起安装,npm的作用就是对Node.js依赖的包进行管理,也可以理解为用来安装/卸载Node.js需要装的东西

    使用命令:node -v    npm-v    分别查看版本

4.安装newman:npm install newman --global

    输入newman -h查看提示信息

5.①点击“...”,点击export,选择v2,然后将导出的json与测试数据放到同一个文件夹下

   ②用cmd命令进入此目录下,运行如下:

    -d:导入数据

    -r:导出格式

 

十四.生成测试报告

CLI reporter:在命令行打印出一些结果,简洁

JSON reporter:可以直接存在MongoDB里,容易帮我们做持久化;也可以解出来存在关系型数据库里。

HTML reporter:方便我们在邮件或者其它通知系统里面发给其他人员

JUnit reporter:在ci里面做集成,结束后将结果解析放到jenkins

 

十五.导出

1.导出成python语言,选择Requests,支持python2与python3

自动生成的代码:

import requests

 

url = "https://www.v2ex.com/api/nodes/show.json"

 

querystring = {"name":"python"}

 

headers = {

    'Cache-Control': "no-cache",

    'Postman-Token': "0d37a526-063b-4603-bd8e-e731703b4a48"

    }

 

response = requests.request("GET", url, headers=headers, params=querystring)

 

print(response.text)

 

修改:

//python数组[],元组(),字典{}

 

import requests

import unittest

 

class V2EXTestCase(unittest.TestCase):

    def test_node_api(self):

        url = "https://www.v2ex.com/api/nodes/show.json"

        querystring = {"name":"python"}

        response = requests.request("GET", url, params=querystring).json()

 

if __name__ == '__main__':

    unittest.main()

 

数据驱动:

import requests

import unittest

 

class V2EXTestCase(unittest.TestCase):

    def test_node_api(self):

        url = "https://www.v2ex.com/api/nodes/show.json"

        for request in ["java", "python", "php"]:

            response = requests.request("GET", url, params={'name' : request}).json()

            print(response)

            self.assertEqual(response["name"], request)

 

if __name__ == '__main__':

    unittest.main()