学习网址:    https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dscpm/ff75b907-415d-4220-89ec-117a39805a6d

      https://www.runoob.com/http/http-methods.html

      https://blog.csdn.net/lihao21/article/details/51857385

      https://blog.csdn.net/u011655220/article/details/80285608

      https://2.python-requests.org//zh_CN/lat

正文:

Python中requests的开发哲学:

   Requests 是以 PEP 20 的箴言为中心开发的

  1. Beautiful is better than ugly.(美丽优于丑陋)
  2. Explicit is better than implicit.(直白优于含蓄)
  3. Simple is better than complex.(简单优于复杂)
  4. Complex is better than complicated.(复杂优于繁琐)
  5. Readability counts.(可读性很重要)
  6. 对于 Requests 所有的贡献都应牢记这些重要的准则。

Python接口测试框架搭建基本思路流程图:

利用python中的requests库或urllib.request库进行框架中需要用到的功能的调用以及实现。

在python中requests库的便利性以及包容性和可操作性都优于urllib.request库。

1. 发送http(https)请求

发送http(https)请求并构造一个url来获得一个response对象,由此来在以后的步骤中获取http(https)请求的响应结果,发送请求的方式有以下八种:

requests.get(‘url’, params=None, **kwargs)

#请求指定的页面信息,并返回实体主体

requests.post(‘url’, data=None, json=None, **kwargs)

#向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改

requests.put(‘url’, data=None, **kwargs)

#从客户端向服务器传送的数据取代指定的文档的内容

requests.delete(‘url’, **kwargs)

#请求服务器删除指定的页面

requests.head(‘url’, **kwargs)

#类似get,返回的响应中没有具体的内容,用于获取报头

requests.patch(url, data=None, **kwargs)

#回显服务器收到的请求,主要用于测试或诊断

Requests.options(‘url’,**kwargs)

#允许客户端查看服务器的性能

其中url为新request对象的url,params为要在request对象的查询字符串中发送的字典或者字节。Data参数为字典或元组列表、字节或类似文件的对象,此参数在request的响应正文中发送。Json参数为json数据,此数据在request的响应正文中发送。
集成输出用法为变量名.url。

2. 请求HTTP响应正文

一个http响应的格式大多为响应行/响应报头/(空行)响应正文。利用requests 库对此响应进行封装将其封装成一个response对象,在调用时可以从此对象中获取响应正文的内容。

利用response.text方法可以对响应的正文文本内容进行获取,使用方法为:

变量名.text

Requests库会自动对响应正文进行解码,若response.encoding为空,编码是通过chardet.detect方法(根据给定字节来进行猜测来返回它的编码,一般都是很准的)来进行获取的。当可以完全确定响应的编码方式,也可以先对response.encoding中的charset进行设置,然后再通过response.text获取响应正文,这时解码所得的响应正文就是charset的值了。

利用response.content可以获取响应正文中的二进制字节内容,如果响应正文的内容形式确定是一json串,则可以使用response.json()方法对响应正文进行json decode操作并返回一个字典项来对此json串进行解码翻译。

变量名.content

变量名.json

3. 返回并识别响应状态

在requests库中利用status_code()方法来对http请求响应的状态码进行标识,其使用方法为:

变量名.status_code

在对状态码进行标识后,利用raise_for_status方法对状态码进行状态识别,如果响应返回的是404一类,使用此方法会抛出异常,若返回的状态码为200,则使用此方法并不会抛出异常。此方法的使用格式为:

变量名.raise_for_status

 

4. 获得http响应结果的头部的相关信息或定制http请求的头部。

Requests库中的headers属性是一个字典,可以由此获得http响应结果的头部的相关信息,其使用方法为:

变量名.headers

Requests支持定制http请求的头部。为此,我们只需要构造一个字典,然后传给requests.get()的headers参数即可。

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

headers = {'user-agent': 'my-app/0.0.1'}

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

print r.text

http://httpbin.org/headers 这个链接可以输出请求的头部,由于我们修改了请求头的user-agent字段,所以会访问这个链接会返回:

{

“headers”: {

“Accept”: “/“,

“Accept-Encoding”: “gzip, deflate”,

“Host”: “httpbin.org”,

“User-Agent”: “my-app/0.0.1”

}

}

5. 发送post请求

http请求由请求行,请求报头,消息主体构成,若提交的数据类型为post型,服务端会根据请求头中的Content-Type字段来获取请求中的消息主体是用何种方式进行编码的,之后再对消息主体进行解体。消息主体具体的编码方式有三种:

application/x-www-form-urlencoded 
# 最常见post提交数据的方式,以form表单形式提交数据。

application/json 
# 以json串提交数据。

multipart/form-data 
# 一般使用来上传文件。

同时Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。还可以以json形式(传给data参数)和multipart形式(files参数)发送post请求。

6. 使用requests库可以轻松获取响应的cookies和设置请求的cookies

利用requests.cookies可访问响应带上的cookies,此方法为响应cookies的字典。使用格式为:

变量名.cookies

也可以发送带cookies的请求,直接将发送过去的url参数后加上此参数并赋值即可。

7. 请求超时

Requests允许对一个http请求设置超时的时间,只需要在requests.get()或者requests.post()方法的timeout参数设置一个值(单位为秒)即可,超出此请求响应时限系统就会抛出异常。

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

r = requests.get(url, timeout=0.001)

8. 异常处理

在发送http请求时,由于各种原因,requests可能会请求失败而抛出异常。常见的异常包括:

ConnectionError

# 由于网络原因,无法建立连接。

HTTPError

# 如果响应的状态码不为200,Response.raise_for_status()会抛出HTTPError 异常。

Timeout

# 超时异常。

TooManyRedirects

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

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

requests库写接口测试框架初学习的更多相关文章

  1. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  2. 使用Python的requests库进行接口测试——session对象的妙用

    from:http://blog.csdn.net/liuchunming033/article/details/48131051 在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有 ...

  3. 用python requests库写一个人人网相册爬虫

    担心人人网会黄掉,写个爬虫,把我的相册照片都下载下来.代码如下: # -*- coding: utf-8 -*- import requests import json import os def m ...

  4. 利用Requests库写爬虫

    基本Get请求: #-*- coding:utf-8 -*- import requests url = 'http://www.baidu.com' r = requests.get(url) pr ...

  5. vue框架初学习的基本指令

           学习地址:<ahref="https: cn.vuejs.="" org="" "="" targe ...

  6. 使用Python的requests库作接口测试——对HTTP动词的支持

    Requests提供了几乎所有HTTP动词的功能:GET,OPTIONS, HEAD,POST,PUT,PATCH和DELETE. 动词GET-查看提交信息 HTTP GET是一个幂等的方法,从给定的 ...

  7. 用Python的requests库作接口测试——对响应进行迭代

    使用 requests.Response.iter_lines() 方法,可以很方便地对流式API(例如 Twitter的流式API )的响应进行迭代. 简单地设置 stream 为 True 便可以 ...

  8. 用Python的requests库作接口测试——上传文件

    POST一个多部分编码(Multipart-Encoded)的文件 Requests使得上传多部分编码文件变得很简单: >>> url = 'http://httpbin.org/p ...

  9. 使用Python的requests库作接口测试——请求对象与响应对象

    任何时候调用requests.*()操作接口时,我们都在做两件事情: 1.构建一个Request对象,该对象被发送到服务器去请求或查询一些资源: 2.一旦requests得到一个从服务器返回的响应,就 ...

随机推荐

  1. 龙光集团地产跃居“中国房地产500强TOP28”

    3月20日,由中国房地产业协会.上海易居房地产研究院中国房地产测评中心联合主办的2019中国房地产500强测评成果发布会在北京成功举办.本次测评成果显示,龙光集团地产凭借综合实力,不仅成功跻身“中国房 ...

  2. html中title小图标的实现

    <link rel="icon" href="picture.ico" type="image/x-icon"/> 注意:图片的 ...

  3. Java内存溢出和内存泄露后怎么解决

    1.首先这里先说一下内存溢出和内存泄露的区别: 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但 ...

  4. leanote使用本地账户时,去掉待同步的小红点

    切换开发者工具,如下图,点击左上角的箭头图标,选取元素,直接选择小红点. 然后会看到小红点来自于resources/app/public/themes/default.css文件中2092行: .it ...

  5. awk 计算某一列的和

    awk 计算某一列的和 我需要通过nova list 显示所有虚拟机的cpu总和,即用awk计算某一列的综合 [root@control01 ~]# nla | awk -F '|' 'BEGIN{s ...

  6. JDK源码分析(8) StringBuffer & StringBuilder

    简介 StringBuffer与StringBuilder是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加 ...

  7. POJ 1848 Tree 树形DP

    题目大意: 给出一棵树,现在要往这棵树上加边,使得所有的点都在环中,且每个点只能属于一个环 题解: 考虑DP: \(dp[i][0]\)表示使\(i\)这颗子树的每个点都在环内需要加的最少边数. \( ...

  8. .NET常用开发框架汇总

    分布式缓存框架:Microsoft Velocity:微软自家分布式缓存服务框架.Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度.Redis:是一个高性能的KV数据 ...

  9. CDN-常用静态资源公共库

    js.css 等静态资源可以放在自己的服务器上,或者引用网络上的公共库使用(CDN) CDN 读取失败时从本地加载 <script src="https://code.jquery.c ...

  10. Maven 学习总结 (五) 之 持续集成、构建web应用

    持续集成的作用.过程和优势 简单说,持续集成就是快速且高频率地自动构建项目的所有源码,并为项目成员提供丰富的反馈信息. 快速:集成的速度要尽可能地快,开发人员不希望自己的代码提交半天之后才得到反馈. ...