PsotMan介绍和使用

Postman介绍

Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件。其主要功能包括:

  • 模拟各种HTTP requests

从常用的 GET、POST 到 RESTful 的 PUT 、 DELETE …等等。 甚至还可以发送文件、送出额外的 header。

  • Collection 功能(测试集合)

Collection 是 requests的集合,在做完一個测试的時候, 你可以把這次的 request 存到特定的 Collection 里面,如此一來,下次要做同样的测试时,就不需要重新输入。而且一个collection可以包含多条request,如果我们把一个request当成一个test case,那collection就可以看成是一个test suite。通过collection的归类,我们可以良好的分类测试软件所提供的API.而且 Collection 还可以 Import 或是 Share 出來,让团队里面的所有人共享你建立起來的 Collection。

  • 人性化的Response整理

一般在用其他工具來测试的時候,response的内容通常都是纯文字的 raw, 但如果是 JSON ,就是塞成一整行的 JSON。这会造成阅读的障碍 ,而 Postman 可以针对response内容的格式自动美化。 JSON、 XML 或是 HTML 都會整理成我们可以阅读的格式

  • 内置测试脚本语言

Postman支持编写测试脚本,可以快速的检查request的结果,并返回测试结果

  • 设定变量与环境

Postman 可以自由 设定变量与Environment,一般我们在编辑request,校验response的时候,总会需要重复输入某些字符,比如url,postman允许我们设定变量来保存这些值。并且把变量保存在不同的环境中。比如,我們可能会有多种环境, development 、 staging 或 local, 而这几种环境中的 request URL 也各不相同,但我们可以在不同的环境中设定同样的变量,只是变量的值不一样,这样我们就不用修改我们的测试脚本,而测试不同的环境。

安装Postman

Postman作为一个chrome的插件,你可以打开chrome,在chrome webstore里面找到。当然,如果是在国内,你需要翻墙,否则的话,你只能百度一下,搜索postman的安装包自己安装到chrome上。这里需要提一下的是,你可以不用打开chrome而直接使用Postman,具体的方法是:

选项->更多工具->扩展程序

详细信息->创建快捷方式->‘全部勾上’ 
 
这样你就可以在任何地方启动你的Postman了

Postman sending requests

安装好之后,我们先打开Postman,可以看到界面分成左右两个部分,右边是我们后头要讲的collection,左边是现在要讲的request builder。在request builder中,我们可以通过Postman快速的随意组装出我们希望的request。一般来说,所有的HTTP Request都分成4个部分,URL, method, headers和body。而Postman针对这几部分都有针对性的工具。

URL

要组装一条Request, URL永远是你首先要填的内容,在Postman里面你曾输入过的URL是可以通过下拉自动补全的哦。如果你点击Params按钮,Postman会弹出一个键值编辑器,你可以在哪里输入URL的Parameter,Postman会帮你自动加入到URL当中,反之,如果你的URL当中已经有了参数,那Postman会在你打开键值编辑器的时候把参数自动载入

Headers

点击’Headers’按钮,Postman同样会弹出一个键值编辑器。在这里,你可以随意添加你想要的Header attribute,同样Postman为我们通过了很贴心的auto-complete功能,敲入一个字母,你可以从下拉菜单里选择你想要的标准atrribute

Method

要选择Request的Method是很简单的,Postman支持所有的Method,而一旦你选择了Method,Postman的request body编辑器会根据的你选择,自动的发生改变

Request Body

如果我们要创建的request是类似于POST,那我们就需要编辑Request Body,Postman根据body type的不同,提供了4中编辑方式:

  • form-data
  • x-www-form-urlencoded
  • raw
  • binary

(我们这里是可以传文件的哦)

演示

我这里创建一条发送给google geocode的request,看看是啥结果:

注意,在URL里面我使用了变量googleMaps,并用{{}}调用它,这里是类似于AngulaJs的语法(果然是同一家人),其返回值是:http://maps.googleapis.com/maps/api/geocode/json。而这个变量我是定义在我的环境GoogleApiTest里面的。这部分的内容会在接下来的文章里面讲到。

点击了Send之后,可以在Postman上直接看到response的内容,内容很漂亮,Postman根据内容检索自动按JSON的格式显示出来,同时我们可以清楚的看到status code和花费的时间。

用PostMan进行测试

我们已经知道如何用Postman组装并发送消息,那我们如何根据需求用Postman来做测试呢?在这开始之前,我们先来看看Postman的左边面板:

这里包含了History和Collection,我们可以在History里面看到我们曾经发送过的HTTP Request, 我们可以很方便的通过点击上面的项重新构建我们的request。而右边的Request Builder面板上,还有两个按钮,Pre-request Script和Tests。

  • Pre-request Script 
    定义我们在发送request之前需要运行的一些脚本,应用场景主要是设置全局变量和环境变量
  • Tests 
    定义发送Request之后,需要用脚本检测的内容,也就是Test case的内容。

这里的的Tests是我们关键。

Test

打开Tests,我们可以看到窗口分成两部分,一部分是左边的代码窗口和右边的Snippet窗口,点击对应的snippet,postman会在左边的窗口为我们生成对应的代码,在下面的图中,我选择了“Response body: is equal to a String”和“Response time is less than 200ms”,可以看到Postman在代码窗口为我加载对应的语句,这里我把希望的responseBody改成了“No valid parameters!!”. 
这样我就完成一条简单的测试用例:

  • 当HTTP Get request没有带任何参数的时候,希望response的body返回字符串“No valid parameters!!”
  • responseTime小于200ms

Variables and Environment

另外,这里大家可以看到在URL输入框中,我使用了{{myLocalHost}},那我们如何定义变量呢,首先,我们得创建一个Environment,点击Environment那个button(在这里是“SampleEnv”那个button,因为我将其选择我当前使用的Environment)

在Postman里面:

  • Environements包含global Environment,即全局的Environment,里面定义的变量在任何地方地方都可以看到
  • local Environment, 里面定义的变量只有在当前Environment里面才可以看到,这里,我定义了一个“SampleEnv”
  • Environment可以被share,通过你的postman账号或者google账号
  • Environment可以通过文件import

点击之后,选择Manage Environments。若要新建,选择Add。若要编辑global Environment, 选择Globals

我们来看看我已经创建好的SampleEnv,这里只创建了一个变量myLocalHost,也就是我们之前看到的在URL里的那个变量,这个变量在URL里可以用,在test script里面可以用,任何其他地方你都可以通过{{}}符号获得它的值。

这里稍微举例一下变量的好处,比如你把APP部署在自己的机器上时使用的域名是localhost,而部署在服务器上时,域名就是具体的服务器ip。为了在两种不同环境上测试你的API,你在构建request的时候就需要输入不同的url,但如果你使用了变量,你就可以使用变量来复用你的url,你只需在不同的environment里面给url赋不同的值,那你的request就完全不需要变。同理,在tests里面也是一样的。这里就不赘述

Collection

定义好了test case (写好的Request和定义好结果检查tests),我们就需要运行,你可以简单点击send按钮查看结果,但这时候你不会明显的看到测试的结果,你需要把这条request加入到collection当中。我们先创建一个collection:

在弹出的窗口中创建你的collection,命名为你test suite的名字:

创建collection之后,把已经写好的request(test case)保存到collection(test suite)当中。

  • 点击save,把Request Name改成你的test case的名字,比如“test_NoParameter_Expect_WarningInfo”;
  • save to exist collection,选择之前创建好的collection, “TestParameters”;

点击窗口中的save之后我们就可以在左界面上看到我们的这个collection和collection中的request了:

点击 ‘>’按钮(点击了之后会变成 ‘<’),我们就会看到弹出的窗口中有一个‘Run’,运行一下,就会弹出一个collection runner的窗口。点击一下start test,你就可以看到运行的结果,这里我选择了运行100次,在左边窗口你还可以看到之前的运行记录:

加入我把App的接口改为:

 @Override
protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException,
IOException
{
if( request.getParameter( "name" ) != null )
{
response.getWriter().print( "lex" );
}
else
{
response.getWriter().print( "No valid parameters???" );
}
}
 

这会导致response body的比较不匹配 No valid parameters??? != No valid parameters!!

那你就会看到 Body is correct case是FAIL的.

用Postman生成Request代码

Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来测试你的接口,那这时候是不是Postman就没有用武之地了? 
我来个你share一个小技巧吧,管不管用你说的算。 
假设我现在要这样来测我的接口: 
我们要设置用户名和密码: 
 
我们要设置参数和Header: 
 
如果让你写代码来生成这个HTTP Request是不是感觉有点麻烦? 如果你也是个懒人,就打开Postman,配好你想要的HTTP Request,然后点击上图中的Generate Code吧,在弹出的窗口里面,你可以看到这条Request在各种语言里面的对应写法,比如Java OK HTTP: 

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("http://maps.googleapis.com/maps/api/geocode/json?Address=%E4%B8%AD%E5%9B%BD%E5%9B%9B%E5%B7%9D%E6%88%90%E9%83%BD%E5%B8%82%E5%A4%A9%E5%8D%8E%E4%B8%80%E8%B7%AF&sensor=true")
.get()
.addHeader("accept", "application/xml")
.addHeader("cache-control", "no-cache")
.addHeader("pragma", "text/cmd")
.addHeader("postman-token", "6f00b02c-419f-9b98-f2d3-942ddd1ba081")
.build(); Response response = client.newCall(request).execute();

比如JavaScript AJAX:

var settings = {
"async": true,
"crossDomain": true,
"url": "http://maps.googleapis.com/maps/api/geocode/json?Address=%E4%B8%AD%E5%9B%BD%E5%9B%9B%E5%B7%9D%E6%88%90%E9%83%BD%E5%B8%82%E5%A4%A9%E5%8D%8E%E4%B8%80%E8%B7%AF&sensor=true",
"method": "GET",
"headers": {
"accept": "application/xml",
"cache-control": "no-cache",
"pragma": "text/cmd",
"postman-token": "c7d566f4-0e21-9680-e47f-667b3e65280d"
}
} $.ajax(settings).done(function (response) {
console.log(response);
});
 

常用工具说明--强大的PostMan的更多相关文章

  1. Java后端开发常用工具

    Java后端开发常用工具推荐: 俗话说,工欲善其事,必先利其器.不过初学时候不大建议过度依赖IDE等过多工具,这会让自己的编程基础功变得很差,比如各种语法的不熟悉,各种关键字比如synchronize ...

  2. C#(Net)软件开发常用工具汇总,提高你的开发效率

    C#(Net)软件开发常用工具汇总,提高你的开发效率 写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用技术文章. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是 ...

  3. 给c++程序员的一份礼物——常用工具集

    给c++程序员的一份礼物——常用工具集 [声明]如需复制.传播,请附上本声明,谢谢.原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓&quo ...

  4. 初识Selenium以及Selenium常用工具的简单介绍

    一.为什么要学习自动化测试? 在互联网行业中敏捷开发小步快跑,快速迭代,测试环节中回归测试任务大繁琐,手工测试容易漏测,自动化测试可以提高测试效率保证产品质量. 二.学习的层次模型 1.单元自动化测试 ...

  5. commons-lang3-3.2.jar中的常用工具类的使用

    这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用. 1.StringUtils工具类 可以判断是否是空串,是否为null,默认值设置等操作: /** * StringUt ...

  6. 【常用软件】木木的常用软件点评(2)------VC程序员常用工具篇

     摘自:http://blog.csdn.net/liquanhai/article/details/7215045 木木的常用软件点评(2)------VC程序员常用工具篇 分类: VC++经验总结 ...

  7. 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍

    C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...

  8. 【Java基础】Java开发过程中的常用工具类库

    目录 Java开发过程中的常用工具类库 1. Apache Commons类库 2. Guava类库 3. Spring中的常用工具类 4. 其他工具 参考 Java开发过程中的常用工具类库 1. A ...

  9. Windows 常用工具 & 开发工具 & Chrome插件 & Firefox 插件 & 办公软件

    常用工具 1.FastStone 8.0 2.印象笔记 3.Chrome 4.Beyond Compare 5.Everything 6.有道词典 7.文本编辑软件 EditPlus UltraEdi ...

随机推荐

  1. c# 求两个数中最大的值

    1.三元运算符: class Program { static void Main(string[] args) { ,); Console.WriteLine("最大数:{0}" ...

  2. [国家集训队] tree Ⅱ

    bzoj2631(权限题...):链接 落咕:链接 考察的是LCT维护链上信息. 但是这个题不一样的是又有加法又有乘法...(有木有想到落咕的模板--线段树2qwq) 因为乘法的运算优先度比加法高,所 ...

  3. 【05】循序渐进学 docker:系统资源和网络

    写在前面的话 在上一篇学习 Dockerfile 的时候其实还有几个相当重要得关键中没有谈到,但没关系,在后面的内容会单独提出来一个一个的学习.这里就先谈谈关于资源的控制个容器的网络~ 资源限制 其实 ...

  4. 514. Freedom Trail

    In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...

  5. Hibernate根据方言dialect动态连接多数据库

    Hibernate根据方言dialect动态连接多数据库 由于最近需要在web项目中动态链接不同地址的数据库,且要链接的子数据库的信息在总数据库(即web项目的主数据库)的表中,所以动手写了一个类. ...

  6. Codeforces Round #549 (Div. 2)B. Nirvana

    B. Nirvana time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. [Winter Vacation] 语文实词虚词练习册答案

    下载通道: [120个文言文实词小故事] [18个文言文虚词小故事] 120个文言文实词小故事 爱   楚人爱(宠爱)其子,虽爱(吝惜)钱财,于其子之求而无不应.其子成人,有陶氏之风独爱(喜爱)菊,众 ...

  8. 代理服务器和NAT技术

    一.代理服务器 所谓“代理”,就是代而劳之的意思.代理服务器就是代理网络用户去取得网络信息,形象的说:它是网络信息的中转站,使得一个网络终端和另一个网络终端不直接进行相连,代理网络用户去取得信息.主要 ...

  9. SpringMVC 的初理解

    项目中用到了jetty,springboot两种构建服务器的方式,jetty是一种嵌入式的方式,部署启动都很灵活,springboot最大的优点就是很多配置文件都自己集成好了,虽然用了这么多好的框架, ...

  10. P4093 [HEOI2016/TJOI2016]序列

    题目链接 题意分析 我们假设每一个数都有一个变动范围\([L_i,R_i]\) 那么我们令\(dp[i]\)表示以\(i\)结尾的最长不下降子序列的长度 那么就是\(dp[i]=max\{dp[j]+ ...