HTTP接口测试 | 如何使用Python中的Requests库

2020-02-14  本文已影响0人  金融测试民工

     我们接着上一篇的内容,这篇将讲完如何使用Python中的Requests库进行基础的HTTP接口测试。

Cookie

    如果某个响应中包含一些 cookie,你可以快速查看它们:

url ='http://example.com/some/cookie/setting/url'

r = requests.get(url)

>>> r.cookies['example_cookie_name']                    //'example_cookie_value'

    要想发送你的cookies到服务器,可以使用 cookies 参数:

url ='http://httpbin.org/cookies'

cookies = dict(cookies_are='working')

r = requests.get(url, cookies=cookies)

>>> r.text                                                        //'{"cookies": {"cookies_are": "working"}}'

    Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

jar = requests.cookies.RequestsCookieJar()

jar.set('tasty_cookie','yum', domain='httpbin.org', path='/cookies')

jar.set('gross_cookie','blech', domain='httpbin.org', path='/elsewhere')

url ='http://httpbin.org/cookies'

r = requests.get(url, cookies=jar)

>>> r.text                                                            //'{"cookies": {"tasty_cookie": "yum"}}'

设置超时时间

    你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

>>>requests.get('http://github.com', timeout=0.001)

Traceback (most recent call last):

File"<stdin>", line 1,in

requests.exceptions.Timeout:HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

注意

    timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

重定向与请求历史

    默认情况下,除了 HEAD, Requests 会自动处理所有重定向。可以使用响应对象的 history 方法来追踪重定向。Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过 allow_redirects 参数禁用重定向处理:

r = requests.get('http://github.com', allow_redirects=False)

>>> r.status_code                                                //301

>>> r.history                                                        //[]    

    如果你使用了 HEAD,你也可以启用重定向。

其他错误与异常

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读