学习网址:    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. 四、Jedis操作Redis

    前言:  原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis. 在这里要使用jedis操作red ...

  2. [GoogleBlog]new-approach-to-china

    https://googleblog.blogspot.com/2010/01/new-approach-to-china.html

  3. Hackers' Crackdown UVA - 11825 (状压dp)

    给出n个电脑,每个电脑连着n个服务,然后每个电脑都连着m个邻电脑,如果当前的电脑某个服务被断开了,相邻的电脑的服务也会被断开,每个电脑都只能操作一次,问你最多可以让多少种服务被断开.一种服务被断开的条 ...

  4. MATLAB模型预测控制(MPC,Model Predictive Control)

    模型预测控制是一种基于模型的闭环优化控制策略. 预测控制算法的三要素:内部(预测)模型.参考轨迹.控制算法.现在一般则更清楚地表述为内部(预测)模型.滚动优化.反馈控制. 大量的预测控制权威性文献都无 ...

  5. linux下编译visp库

    #下载源码git clone "https://github.com/lagadic/visp.git"#work目录mkdir work#build目录mkdir build#c ...

  6. 【洛谷P1659】啦啦队排练

    题目大意:给定一个长度为 N 的字符串,求前 K 个长度为奇数的回文子串的长度的乘积是多少. 题解:利用回文自动机,将所有长度的回文串和个数求出来,按照长度排序进行模拟即可. 代码如下 // luog ...

  7. mysql 在visual studio中的配置

    视图-->其他窗口-->服务器资源管理器-->数据连接-->右键添加连接 servername:localhost username:root password:123456 ...

  8. Java第二次实训

    package fsafsa; import java.util.Scanner; public class fafas { public static void main(String[] args ...

  9. (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal

    Given an n-ary tree, return the postorder traversal of its nodes' values. For example, given a 3-ary ...

  10. Linux安装Oracle JDK替换OpenJDK详解

    转自http://www.lsychina.com/howto_install_oracle-jdk_replace_openjdk_on_linux.html 众所周知,由于Oracle公司的JDK ...