前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python接口测试之Requests(七)

Python接口测试之Requests(七)

作者头像
无涯WuYa
发布2018-10-25 16:04:17
2.5K0
发布2018-10-25 16:04:17
举报
文章被收录于专栏:Python自动化测试

Requests:让HTTP服务人类!

OK,开始愉快的学习requests库吧,在python的标准库中,虽然提供了urllib,utllib2,httplib,但是做接口测试,requests真心好,正如官方说的,“让HTTP服务人类”,一言以蔽之,说明一切,关于它的方法论这里不是讨论的重点,重点是我们要开始学习它。

安装request库的方式非常简单,安装命令为:

pip install requests

这样就会自动下载并且按照成功,进入到python的命令行模式下,如果可以导入request,说明requests库已经安装好,见如下的截图:

在HTTP的请求中,我们知道,最常使用的分别有GET,PUT,DELETE,POST,通过request库也是可以实现的,见如下的代码:

代码语言:javascript
复制
#!/usr/bin/env python
#coding:utf-8

import requests

requests.get('https://github.com/timeline.json')
requests.put('http://httpbin.org/put')
requests.post('http://httpbin.org/post')
requests.delete('http://httpbin/ddelete')

事实上,每一个请求对应的参数是不同的,在这里我们有必要对每个请求的参数来了解并学习,先来看GET请求的参数,见源码部分:

GET请求中,第一个参数是url,第二个请求是params,第三个参数是字典,比如我们实现在百度阅读搜索无涯编写的《selenium-python自动化测试》,实现这样的一个过程请求的 url为:

http://yuedu.baidu.com/ebook/3c0077aaa32d7375a41780bb?_searchquery=selenium-python%D7%D4%B6%AF%BB%AF%B2%E2%CA%D4

那么通过代码实现的方式为:

代码语言:javascript
复制
#!/usr/bin/env python
#coding:utf-8

import requests

r=requests.get(url='http://yuedu.baidu.com/ebook/3c0077aaa32d7375a41780bb',params={'_searchquery':'selenium-python%D7%D4%B6%AF%BB%AF%B2%E2%CA%D4'})

print r.url

我们看请求的URL,见执行后的截图:

在GET请求中,我们把params的参数成为URL参数,也就是在URL中传递参数,事实上,在每一个GET的请求过程中,得看具体的请求过程。接下来我们来看POST请求的参数,见该部分的源码截图:

我们可以看到,在POST请求中,参数是URL,data,json以及字典,data其实就是以表单形式的数据,或者说我们只需要把一个字典给data作为参数来传递,来看这样的一个请求,请求的URL为:http://m.cyw.com/index.php?m=api&c=cookie&a=setcity,参数是城市的ID,然后返回这个城市,来看这样的一个POST请求,见实现的代码:

代码语言:javascript
复制
#!/usr/bin/env python
#coding:utf-8

import requests

r=requests.post(url='http://m.cyw.com/index.phpm=api&c=cookie&a=setcity',data={'cityId':438})

print r.json()

见返回的json数据,见截图:

事实上,在一个post请求中,这是一个简单的请求,在工作的时候,很多时候是登录成功后,返回一个token,然后后面的每一个请求都带这个参数token去请求,也就是说,在接口自动化测试中,首先要做的就是登录获取token这个参数,下来后面的请求把获取的这个参数token带上去请求或者操作系统的其他业务,下面来看实现这样的一个过程代码,实现的思路把登录写成一个方法,然后把token返回,再做下一个请求的时候,把token当作参数来传递,具体实现见如下的代码:

注释:如上的代码部分被红色的掩盖,希望理解,再如上的代码中,我们可以看到,登录成功后,返回了token,然后在执行其他接口的时候,直接把返回的token当作是参数来处理,但是有一点是必须得注意的,必须先登录,再执行登录后的接口,要不会提示错误的。

使用requests发送一个请求后,我们可以获取这个请求的响应内容,HTTP的状态码,以及URL,我们来看这样的一个过程,比如请求bing,我们获取text,stats_code,url和headers,见实现的代码:

代码语言:javascript
复制
#!/usr/bin/env python
#coding:utf-8

import requests

r=requests.get('http://www.bing.com')

print u'HTTP状态码:',r.status_code
print u'请求的URL:',r.url
print u'获取Headers:',r.headers
print u'响应内容:',r.text

见该代码执行后的结果:

在一个POST的请求中,很多时候,我们需要把获取的响应内容,进行反序列化成json字符串内容,来断言该接口是正确的还是错误的,我们不可能对所有获取的响应内容来进行做断言,这样是很不明智的,我们只会截取关键的信息来做断言,见下面一个网站的登录请求,以及获取的响应内容经过反序列化后的内容,见实现的源码:

事实上,经过反序列化很麻烦的,在requests库中有一个内置的JSON解码器,来帮助我们处理JSON数据,我们重构下刚才的代码,可以精简反序列化的过程,见代码:

什么是请求头,或者说在一个HTTP的请求中,headers充当了什么角色和它有什么作用,在https://en.wikipedia.org/wiki/Header_(computing)有很详细的解释,感兴趣的同学可以看下,headers分为二部分,一部分是request headers,另外部分是response headers,

见如下的截图:

Headers部分详细的信息可以见:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档