• 13
  • 14
分享
  • API测试工具postman详解——软件测试圈
  • 恬恬圈 2021-04-23 15:32:23 字数 5007 阅读 2933 收藏 14

前言:

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。接口请求流程

1.jpg

一、get请求

GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上,所以,GET请求的请求头与请求参数如在接口文档中无特别声明时,可以不填。

2.jpg

GET响应:右上角显示响应HTTP状态码、请求的耗时。

3.jpg

需特别注意的是注意区别HTTP状态码与响应正文中的状态码,只有HTTP状态码是200时,才代表这个接口请求是正确的,这个是HTTP协议定义的,而响应正文的状态码,是程序员自已定义的,可以是200,也可以定义为其它值,是为了让接口使用者去区分正常数据与异常数据。

4.jpg

状态码与响应码不一致

二、POST请求

1、POST请求一:表单提交

先看下图POST表单提交示例:

5.jpg

上图示例中设置了请求方法,请求URL,请求参数,但没有设置请求头。有一个要明确的点是,请求头中的Content-Type与请求参数的格式之间是有关联关系的。

6.jpg

当选择x-www-form-urlencoded的参数方式后,postman自动的帮我们设置了Content-Type,所以不需要我们人工干预,这就是使用一款流行工具的好处,把一些基础点都帮我们处理了。

2、POST请求二:json提交

先看下图json提交示例:

7.jpg

上图中,当我们选择了JSON(application/json)时,postman同样帮我们自动设置了Content-Type,可以自行的去查看Headers.

3、post请求三:xml提交

先看下图XML提交示例:

8.jpg

上图中,当我们选择了XML(text/xml)时,postman同样帮我们自动设置了Content-Type,可以自行的去查看Headers.

4、post请求四:自行设置Content-Type

HTTP的POST请求的参数,都是放在请求正文中的,只是根据Content-Type来判断请求正文的格式,那么我们同样可以在表单提交时,选择raw,然后自行设置Content-Type为application/x-www-form-urlencoded。

9.jpg

post请求的参数

10.jpg

自行设置Content-Type

5、POST请求五:二进制文件提交

先看下图二进制文件示例:

11.jpg

二进制文件提交

Body下,选择binary,在这里你可以发送视频、音频、文本等文件。

三、postman断言

一个完整的接口测试,包括:请求->获取响应正文->断言,我们已经知道了请求与获取响应正文,下面来介绍如何用postman进行断言。

12.jpg

Tests

这个”Tests”就是我们需要处理断言的地方,postman很人性化的帮我们把断言所用的函数全给准备好了:

13.jpg

SNIPPETS

举例说明:首先设置一个断言场景,根据断言场景来举例说明Postman断言如何使用。

  1. 判断HTTP返回状态码为200;

  2. 判断响应正文中是否包含:"statusCode":200;

  3. 解析响应正文,并判断statusCode的值是200,message的值是”Success”;

第一步:在SNIPPETS中,往下拉,有一项”Status code:Code is 200”,这个就是为场景中的第 1 条准备的,判断HTTP返回状态码是否为200。点击这一项,可以看到在其左边,断言代码自动添加,见下图:

Status code

解释一下这句代码的意思:

tests["Status code is 200"]中的tests是一个内置对象,tests["Status code is 200"]是指为这个断言起个名称叫”Status code is 200”,这个名称可以自行修改。

responseCode.code === 200中的responseCode是内置对象,responseCode对象中有个属性是code,是指HTTP状态码的code,判断code是否为200.

综合起来,这句代码的意思是:名称为”Status code is 200”的断言中,判断responseCode对象的code属性值(HTTP状态码)是否为200。

第二步:同样在SNIPPETS中,找到一项”Response body:Contains string”,这个就是为场景中的第2条准备的,判断响应正文中的字段。点击后,在其左边,断言代码自动添加,见下图:

13.jpg

Contains string1

其中我们需要修改想要在响应报文中找到的内容:

tests["Body matches string"] = responseBody.has('"statusCode":200');    //对照第2条场景:判断响应正文中是否包含:"statusCode":200

15.jpg

Contains string2

第三步:我们需要解析JSON串了,所以,在SNIPPETS中找到”Response body:JSON value check”并点击,在其左边,断言代码自动添加,见下图:

16.jpg

JSON value check1

我们可以看出,这里面其实是JS代码,jsonData变量其实是解析完JSON后的对象,在JS中,一个JSON对象获取其属性的值,直接是用jsonData.value,于是,我们把代码给修改一下,来判断第3条场景:

tests["response statusCode"] = jsonData.statusCode === 200;  //判断statusCode的值是200

tests["response message"] = jsonData.message === 'Success';  //判断message的值是”Success”

17.jpg

JSON value check2

这样一来,我们可以看到一共有Tests的断言4个,点击Send,发送请求,在响应区内可以看到如下图:表示断言全部通过。

18.jpg

四、管理用例---Collections

Collections集合:也就是将多个接口请求可以放在一起,并管理起来。什么样的接口请求可以放在同一个collection里?

在这里告诉大家可以这样:一个工程一个Collection,这样方便查找及统一处理数据。

19.jpg

第一步:创建Collections

点击上图中的带+号的图标,输入Name:”demo”,Description:”demo for Collections”,点击Create按钮即创建成功一个Collections.

20.jpg

Create Collections

第二步:在Collections里添加请求

在右侧准备好接口请求的所有数据,并验证后,点击save按钮。

21.jpg

选择Collection及填写好Request name、Request description后,点击右下角的save to collection按钮,则该请求被添加到Collection中。

22.jpg

添加成功后,可在左侧列表中,collection中查看刚刚添加的请求。

23.jpg

第三步:Collection精细化---Folder

随着放入Collection的请求越来越多,混乱就又出现了,在找一个请求时,要找半天,于是将collection中的请求分门类别就很重要了,于是,在collection中就可以添加Folder了,将相同场景的请求放入同一个Folder中,于是就实现了模块化的管理了。

点击下图中的Add Folder后,即可创建Folder。

24.jpg

Add Folder按钮位置

添加上Folder name,即模块名称后,点击Create,创建成功一个Folder。

25.jpg

接下来,只需要把相同场景的请求拖入相同的Folder即可,这样就实现了模块化的管理了。模块化以后的结构:

26.jpg

第四步:运行Collection

将工程模块化的用例管理起来后,借着这个管理起来的东风,也可以将工程模块化的用例执行起来,即一次执行一整个collection里的用例,或者执行一个collection里的某一个Folder里的用例。

点击下图中的Run:

27.jpg

下图中的”Choose collection or folder”,如果选择demo,表示运行demo这一整个collection的用例,如果选择GET,即只运行demo下的GET模块下的用例。

Environment,即运行环境,是开发环境还是测试环境,需事先配置,大家可以下去自已尝试一下。

Iterations,即重复运行次数。会将选择好的collection中folder重复运行。

Delay,间隔时间。用例与用例间的间隔时间。

Data,外部数据加载,即用例的参数化,可以与Iterations结合起来用,实现参数化,也就是数据驱动。

Run Demo,点击运行,运行完成后,即可得出一个简易的聚合报告。

28.jpg

第五步:Collection运行参数化

在Iterations重复运行时,如果某个用例希望每次运行时,使用不同的数据,那么应该满足如下2个条件:

  1. 脚本中要用到数据的地方参数化,即用一个变量来代替,每次运行时,重新获取当前的运行数据。

  2. 需要有一个数据池,这个数据池里的数据条数,要与重复运行的次数相同。

Postman的runner给我们提供了Iterations的输入项,也提供了Data的文件选择项,也就是意味着数据池是一个外部文件。

如果Iterations里的值为2,那么,这个外部文件里也应该有两条数据,postman希望我们这个外部文件里的数据是一个json(当然也可以是其它

数据格式).

为了表示两条数据,这个json应该是一个list结构(如下图),同时,由于脚本要用到数据的地方需要参数化,需要变量,所以,每一条数据应该就是一个map,map的key对应脚本中的变量。

29.jpg

外部文件里的数据

上图中表示提供了一个msg的变量,每次运行对应不同的值,预示着在脚本中可以用到msg这个变量,那在脚本中如何用?

30.jpg

使用变量

如上图断言中用data.msg,其中data是个内置对象,即代表每一次运行的那个map数据,所以,可以用data.msg来获取每次运行的对应的值,当然,由于是个map,也可以用data[‘msg’]来获取对应的值。

五、设置环境变量

有时需要在不同的环境下跑相同的测试,此时可以通过设置环境变量来动态选择。点击右上角的设置按钮-Manage Environments:

31.jpg

填写该环境的名称:如测试环境,并在key和value中填写需要的键值。

32.jpg

add1

33.jpg

add2

使用这些键值的时候只需要加上两个花括号引用key,例如: {{url_base}}/admin/offer/

34.jpg

引用key

建立多个环境时,key通常都是相同的,只是value不同。创建好所有环境后,在跑用例的时候在右上角下拉列表选择需要的环境就可以了。

35.jpg

选择环境变量

六、身份验证Authentication

显示browser cookies,需要开启Interceptor。点击右上角的Interceptor 进行安装,并开启:

36.jpg

Interceptor

身份验证Authentication:

postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。

37.jpg

1、Basic Auth

填写用户名和密码,点击update request后,headers中自动添加Authorization。图中用户名和密码均使用的key变量:

38.jpg

Basic Auth

2、Digest Auth

要比Basic Auth复杂的多。使用当前填写的值生成authorization header。所以在生成header之前要确保设置的正确性。如果当前的header已经存在,postman会移除之前的header。

3、OAuth 1.0

postman的OAuth helper让你签署支持OAuth

1.0基于身份验证的请求。OAuth不用获取access token,你需要去API提供者获取的。OAuth 1.0可以在header或者查询参数中设置value。

4、OAuth 2.0

postman支持获得OAuth 2.0 token并添加到requests中。


作者:搁浅

原文链接:https://www.cnblogs.com/xiaoxi-3-/p/7839278.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   软件测试这个行业我见过工作5年依然是初级水平的功能测试,拿着不到1W的薪资,也见过1年时间达到高级自动化水平的大牛学霸!拿着25K的薪资。  影响你薪资的有两点!  一、你的技术水平高低直接决定你薪资的多少,工作时间长短并不能直接影响你的收入,只能说你工作时间短,项目经验不够丰富而已!但薪资照样可以很高!  二、你所在的城市会对薪资有一定的影响,首先一线城市肯定比二三线城市薪资要高,毕竟生活成本也高,其实也就差不多了!  因为我本人是在北京,所以我很清楚北京的行情,大概做1年的测试初级居多,功能测试居多,薪资7-12K都是合理的~二线城市6-10K是合理的,三线城市5-7K是合理的~  不...
            0 0 986
            分享
          •   从苹果(193.62,0.87,0.45%)官网获悉,苹果“我的照片流”服务今日正式关闭,“我的照片流”中将不再保留任何照片。用户如果想将拍摄的照片和视频在所有设备上都保持最新并储存在iCloud中,则可使用“iCloud照片”服务。  据悉,“MyPhotoStream”服务于2011年由史蒂夫?乔布斯作为iCloud的一部分推出,可以自动将一个设备上的照片和视频上传到另一个设备上,无需手动同步。这项功能不占用免费的5GBiCloud存储空间,但只能存储1000个文件,并且不支持全分辨率同步。  苹果公司后来推出了iCloudPhotoLibrary(现在称为iCloudPhotos),...
            0 0 892
            分享
          •   最近小编的好友小李来找我抱怨,抱怨的内容也很简单,小李和小马在同一个部门,做着差不多的工作,薪资待遇差不多都是6K。  不久前两人相继跳槽,入职了之后,小李和小马一打听,才知道小马现在的薪资竟然有11K,而小李跳槽后的薪资才堪堪7K,这巨大的落差让小李心里十分不服气,想着自己也不比他差,同样是跳槽,怎么薪资就差了这么多?  其实在工作经验和能力差不多的情况下,这里我们就不得不谈谈谈薪技巧,在换工作时,如何和新公司谈判薪酬福利,才能在有可能的范围内,争取到福利待遇的最大化呢?  把握薪资浮动的弹性  大家都知道,无论哪一家公司,对于薪资都是有上下幅度的,没有一个固定的值。所以,跳槽时,开口谈...
            0 0 1127
            分享
          •   Web应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现操作人员人为的错误,花费的时间成本也比较多。因此,将这些任务自动化,就可以消除人为因素。Selenium可以帮助我们自动完成验收测试,通过构建更严格的测试,从而使软件更为可靠也更易于维护。  Selenium 测试框架及用例编写。  Selenium是什么?  Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 是能够在一个或多个浏览器中执行这...
            0 0 1003
            分享
          • 关于软件测试的定义,不同学者有不同的观点,了解软件测试的定义,对于日后在工作中是很有帮助的,首先要明确测试的定义,所谓测试,就是以检验产品是否满足需求为目标。而软件测试,自然是为了发现软件(产品)的缺陷而运行软件(产品)比较标准的软件测试的定义是:在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估。IEEE 标准的定义:使用人工或自动的手段来运行或测定某个系统的过程,其目的在于检验;它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。对软件测试还有一些不同的定义。G.J.Myers给出的定义:“程序测试是为了发现错误而执行程序的过程”。这个定义被软件测试业界所认可,并经常被引用...
            0 0 1465
            分享
      • 51testing软件测试圈微信