测试之旅Ⅱ-接口测试(Python requests)

接口测试

Python有很多模块都可以发送HTTP请求,包括原生的模块http.client,urllib2等,第三方模块requests等,都封装了发送HTTP请求的方法。这里为了使用方便,便于理解,我们选用requests模块。

requests模块的安装

打开操作系统的命令行窗口输入

pip install requests

pip包管理工具就会自动安装requests模块及其相关模块,然后就可以引入该模块,使用该模块提供的方法了。

import requests

一个简单的试验

刚刚安装好是不是已经迫不及待地进行使用了呢,接下来我们用一个小例子初识requests。

import requests
res= requests.get("http://www.baidu.com")
print(res.status_code)

运行上述代码,我们可能会得到如下结果:
运行结果截图1
证明我们已经请求成功。第一行我们对requests包进行了引入,以让我们可以使用其方法,第二行我们通过GET方法请求百度网站信息并将返回结果赋值给res,第三行我们将res这个结果对象的status_code状态码打印出来。那我们又是如何知道我们请求成功了呢?下面列举一些常见的HTTP状态码。

  • 200 请求成功
  • 404 请求的资源不存在
  • 500 内部服务器错误

若想了解更多,请自行百度。

一些简单的讲解

通过上面那个简单的小例子可以看出,requests模块的使用是相当简洁的,我们可以调用其中的请求方法轻易地对网站进行请求,而参数最少应该是请求的网站地址,不然它怎么知道你想请求谁呢?正如这样:

requests.get("http://www.baidu.com")

当然你也可以这样:

requests.post("http://www.nicerwu.cn")
requests.put('http://www.nicerwu.cn', data = {'key':'value'})
requests.delete('http://www.nicerwu.cn')
requests.head('http://www.nicerwu.cn')
requests.options('http://www.nicerwu.cn')

显然这样的请求有些过于简单,我们往往需要在请求中携带参数。

requests.get("https://www.imooc.com/search/?words=vuejs")

类似这样在请求的地址后面打上一个问号,跟上你要携带的参数当然可以,事实上GET方法携带参数的本质正是如此。不过当参数多而复杂时,这显然不是最好的解决办法。requests模块为我们提供了一个参数params。以字典键值对的方式携带参数,就像这样:

requests.get("https://www.imooc.com/search/", params={'words': 'vuejs'})

或者这样:

Skey = {'words': 'vuejs'}
res= requests.get("https://www.imooc.com/search/", params= Skey)

将最终请求的url打印出来:

print(res.url)

运行结果截图2
结果正如我们前面所说,requests模块帮我们进行了处理,本质上最终还是请求了这个地址。

几个常用返回对象属性

  • res.headers 获取返回的头部信息
  • res.text 获取返回的主体
  • res.cookies 获取返回的cookie
  • res.status_code 获取返回的状态码

请求发出后,requests模块会基于HTTP头部对响应的编码作出有根据的推测,当我们使用res.text时,requests模块会自动使用其推测的编码,你可以使用res.encoding来对它进行改变。

给你的请求,加点伪装

通常我们使用伪造头部信息对自己的请求进行一些简单的伪装,就像如果我想把我的请求伪装成一个手机发出的,我可以这样:

import requests
url = "http://www.baidu.com"
header = {"User-Agent": "Android/H60-L01/4.4.2/"}
res = requests.get(url, headers = header)

错误和异常

  • 遇到网络问题(如:DNS 查询失败、拒绝连接等)Requests 会抛出一个 ConnectionError

  • 如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。

  • 若请求超时,则抛出一个 Timeout 异常。

  • 若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

  • 所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值