使用PostMan进行API自动化测试

 

PostMan支持写测试用例的,之前使用PostMan仅限于修改Header,添加Body发送请求,从来没有考虑过拿PostMan来进行测试,感觉发现了新大陆。

发送一个请求

这是PostMan最基础的一个用法,用来发送一个请求。可以设置HeaderBody等信息。

 

Collections

我们可以将每次发送的请求进行保存,方便下次请求该接口时,直接调用即可,如果保存请求的话,会被保存到一个Collections里去,类似一个集合。PostMan提供了方法,能够一键运行整个Collections中所有的请求。

然后我们就可以在需要的时候,直接运行集合中所有的请求了。

保存请求记录的时候,在下边选择对应的Collection即可

HTTP请求转换为爬虫代码

http请求的时候硬拼代码实在有点累,其实Postman工具可以直接把Postman请求生成对应的代码

 

抓包的网络请求怎么转成Postman 请求?可以用Chrome开发者工具来解决,首先打开需要的网站,我们以https://haojia.m.smzdm.com/tianmaoquan/ 为例,将其调至手机模式(本网站是一个移动web)

然后,到开Network,接着刷新一下页面观察网络请求.

 

我们可以发现其中请求如下图:

很明显这就是我们要的请求了接着选中对应的请求右键 Copy - Copy as cURL

 

然后大概拿到了下文一串cURL命令:

curl 'https://haojia.m.smzdm.com/tianmaoquan/get_data?category=zonghe&order=CouponConsumeCount&sort=&page=1&keyword=' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,da;q=0.7' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://haojia.m.smzdm.com/tianmaoquan/' -H 'Cookie: __ckguid=k3u6YR5FixgKfa62bIyUga6; _ga=GA1.2.679944293.1516270199;device_id=17532887221516270201203456ed594c266fd84551f01a413af71d5a6f;smzdm_user_source=875817C616D1ED42EB82F39DFE768D0B;__gads=ID=3e3801168e373540:T=1518695168:S=ALNI_MZfywByvg_Ynjo4BpUmdXH30U9wOg;wt3_eid=%3B999768690672041%7C2152247098000283145%232152247111500241744;__jsluid=78d672b28c72540c578b65d9e9ca98cb;_ga=GA1.3.679944293.1516270199;zdm_qd=%7B%7D;_gid=GA1.2.1251205158.1523178568;from=wap;Hm_lvt_9b7ac3d38f30fe89ff0b8a0546904e58=1522470824,1523178567,1523178905; Hm_lpvt_9b7ac3d38f30fe89ff0b8a0546904e58=1523178914' -H 'Connection: keep-alive' --compressed

放命令行跑一下能看到正常返回:接着我们回到Postman,选择Import

 

切到 Paste Raw Text,cURL命令扔进去

 

点击一下Import,完整的请求自动导入了.

 

发送请求试一下,结果如下:

然后选择“code”将请求转换为代码,如下图,可以选择不同语言形式的代码

 

开始API测试

1测试脚本位置

PostMan针对请求编写的测试脚本,在Tests这个位置,采用的是JavaScript语法,右侧是一些预先配置的代码片段。我们可以在Pre-request Script中编写脚本,用于在发送请求前执行。

 

2一些简单的语法

PostMan也提供了一种断言,来帮助做一些验证。

 tests['Status code is 200'] = responseCode.code === 200

 tests['Data length >= 10'] = JSON.parse(responseBody).data.length >= 10

赋值为true即表示通过,false为失败。
tests的直接赋值作用比较局限,如果在脚本中进行一些其他异步操作,则需要用到pm.test了。

 setTimeout(() => {

   pm.test("test check", function () {

     pm.expect(false).to.be.true

   })

 })

只用上边的tests赋值+pm.test/pm.expect已经能够满足我们的需求了,其余的一些只是在这之上的语法糖而已。

各种语法示例

在测试脚本中发送请求

我们可以在拿到一个API返回结果后,根据该结果发送一些新的请求,然后添加断言。

let responseJSON = JSON.parse(responseBody)

  

 // 获取关注的第一个用户,并请求他的用户信息

 pm.sendRequest(responseJSON[0].url, function (err, response) {

   let responseJSON = response.json()

  

   pm.test('has email', function () {

     pm.expect(responseJSON.email).is.be.true // 如果用户email不存在,断言则会失败

   })

 });

如果我们有一些动态接口要进行测试,可以尝试这种写法。
一级接口返回List
二级接口根据ListID进行获取对应信息。

如何处理大量重复的断言逻辑

针对单个API,去编写对应的断言脚本,这个是没有什么问题的。但是如果是针对一个项目的所有API去编写,类似于判断statusCode这样的断言就会显得很冗余,所以PostMan也考虑到了这点。在我们创建的Collection以及下层的文件夹中,我们可以直接编写针对这个目录下的所有请求的断言脚本。

这里的脚本会作用于目录下所有的请求。这样我们就可以将一些通用性的断言挪到这里了,在每个请求的Tests下编写针对性的断言脚本。

3变量的使用

PostMan提供了两种变量使用,一个是global,一个是environment

global

代码操作的方式:

1 pm.globals.set("variable_key", "variable_value") // set variable

2 pm.globals.get("variable_key") // get variable

3 pm.globals.unset("variable_key") // remove variable

点击“Environments quick look”就是右边那个眼睛的图标,然后点击globals模块的“edit

设置完后我们就可以这样使用了基本上在所有的可输入的地方我们都能够使用这些变量。

environment

环境变量,这个是权重比global要高一些的变量,是针对某些环境来进行设置的值。操作方式与global类似。在发起一个请求,或者一键发送所有请求时,我们可以勾选对应的环境,来使用不同的变量。

在针对大量API测试时,拿environment来设置一个domain将是一个不错的选择。
这样在请求中我们只需这样写即可:

1 {{domain}}/res1

2 {{domain}}/res2

3

4 domain: https://api.github.com

猜你喜欢

转载自www.cnblogs.com/tester-l/p/9047284.html