Request库接口测试基本用法

本文介绍了Requests库接口测试的基本用法,包括基本请求方法、请求参数传递、HTTP请求头定制、Cookie设置、超时设置、文件上传、会话对象、HTTP接口授权设置、SSL证书验证、代理设置和流式请求。详细讲解了Session对象在模拟登录和保持状态中的作用,以及如何处理流式响应。
摘要由CSDN通过智能技术生成

Request库接口测试测基本用法

requests库内置了不同的方法来发送不同类型的http请求,用法如下所示

基本请求方法

import requests

base_url="http://httpbin.org"

#get请求方式
r=requests.get(base_url+'/get')

#发送post类型请求
r=requests.post(base_url+'/post')

#发送put类型请求
r=requests.put(base_url+'/put')

#发送delete类型的请求
r=requests.delete(base_url+'/delete')

#响应状态码
print(r.status_code)

请求参数传递

  • get参数传递,query string paramters方法
#get参数传递,query string paramters方法
param_data={'user':'zxw',
            'password':'666'}
r=requests.get(base_url+'/get',params=param_data)
print(r.url)
print(r.status_code)
  • post请求request body请求体中参数传递,默认from表单的形式
from_data={'user':'zxw',
           'password':'888'}
r=requests.post(base_url,'/post',data=from_data)
print(r.text)
print(r.status_code)

HTTP请求头定制

from_data={"user":"zxw",
           "password":"8888"
           }
header={'user-agent':'Mozilla/5.0',#设置代理伪装成浏览器
        "content-type":'application/x-www-from-urlencoded'#设置请求媒体类型
        }
r=requests.post(base_url+'/post',data=from_data,headers=header)
print(r.headers)#获取响应头信息
print(r.text)#获取响应内容
print(r.json())#将响应内容以json形式打印出来

Cookie设置

  • 添加一个url的cookie到浏览器,
#cookie设置,添加cookie
cookie={"user":"51zxw"}
r=requests.get(base_url+'/cookies',cookies=cookie)
print(r.text)
  • 获取一个url的cookie,应该是获取不到第一个上一个接口设置到的cookie的
r=requests.get(base_url+'/get')
print(r.cookies)
print(type(r.cookies))
#cookies转化为元组组成的列表
for key,value in r.cookies.items():
print(key+':'+value)

python requests库cookie的设置不同于jmeter和postman,jemter可以添加HTTP cookie管理器给所有该url的请求使用,而postman的cookie设置完之后是全局的,所有的该url的请求都可以使用。

超时设置

#一个请求的超时时间设置,单位s
r=requests.get(base_url+'/cookies',cookies=cookie,timeout=0.001)
print()
#超时响应异常
from requests import exceptions
try:
    response=requests.get(base_url+'/get',timeout=0.1)
except exceptions.Timeout as e:
    print(str(e))
else:
    print(response.text)

# raise requests.ConnectTimeout(e,request=requests.get(base_url+'/cookies',cookies=cookie,timeout=0.001))

文件上传

Requests可以使用参数files模拟提交一些文件数据,假如有的接口需要我们上传文件,我们同样可以利用它来上传,实现如下

#文件上传
file = {'file':open('test.png','rb')}
r=requests.post(base_url,+'/post',files=file)
print(r.text)

会话对象

Session对象存储特定用户会话所需要的属性配置信息,这样在应用程序的web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

比如你先进行了登录操作,然后打开个人中心详情页面,个人中心详情页面如何知道展示的是刚刚登录的这个用户的信息,那么这里就需要Session来存储相关的信息。

在接口测试过程中接口之间经常有依赖关系,比如下面这两个请求一个是设置Cookie,另外一个是获取cookie,在没有Session保存机制的情况下,第二个接口无法获取第一个接口设置的Cookie值。

  • cookie设置
#在没有Session保存机制的情况下,第二个接口无法获取第一个接口设置的cookie值
#在上一个接口中设置cookie,在下一个接口中获取cookie(获取不到)
r=requests.get(base_url+'/get')
print(r.cookies)
r=requests.post(base_url+'/post')
print(r.cookies)
  • session设置
#生成会话对象
s=requests.session()
#设置cookie
r=s.get(base_url+'/get',cookies=cookie)
print(r.text)
#获取cookie
r=s.get(base_url+'/get')
print(r.text)

所以,利用Session我们可以做到模拟同一个会话,而不用担心Cookies的问题,通常用于模拟登录成功后再进行下一步的操作。

HTTP接口授权设置

#权限认证
from requests.auth import HTTPBasicAuth,HTTPDigestAuth
#basic auth
basic_auth=HTTPBasicAuth('51zxw','888')
r=requests.get(base_url+'/get',auth=basic_auth)
print(r.text)
#digest auth
digest_auth=HTTPDigestAuth('51zxw','8888')
r=requests.get(base_url+'/get',auth=digest_auth)

SSL证书验证

Requests可以为HTTPS请求验证SSL证书,就像web浏览器一样。SSL验证默认是开启的,如果证书验证失败,Requests会会抛出SSLError,如果不想验证SSL证书则可以使用verify参数关闭验证SSL。

r=requests.get('https://www.12306.cn')
#关闭验证SSL
r=requests.get('https://www.12306.cn',verify=False)
print(r.text)

Tips: 12306 的证书是自己颁发给自己的,所以会出现认证失败。

代理设置

设置代理服务器

代理服务器位于客户端和访问互联网之间,服务器接收客户端的请求,然后代替客户端向目标网站发出请求,所有的流量路由均来自代理服务器的IP地址,从而获取到一些不能直接获取的资源。

对于有些接口,在测试的时候请求几次,能正常虎丘内容,但是一旦开始大规模频繁请求(如性能测试)服务器可能回来器验证,甚至直接把IP封掉。那么为了防止这种情况的发生,我们就需要设置代理来解决这个问你,在Reuests中需要用到proxies这个参数,在爬虫中或常用到代理

#设置代理服务器
proxie={'http':'http://219.141.153.41:80'}
r=requests.get(base_url+'get',proxies=proxie)
print(r.text)

流式请求

有一些接口的返回值比较特殊,不是单纯返回一个结果,二是多个结果,比如摸个查询接口,返回值为排行榜前10的商品信息。

例如:http://httpbin.org/stream/{num}接口,num表示返回结果集的数量,比如输入10则会返回10个结果

针对这种类型的接口我们对结果集的处理需要使用迭代的方法iter_lines()来处理,具体使用如下:

#流式请求接口
import json
r=requests.get(base_url+'/stream/10',stream=True)
#如果响应内容没有设置编码,设置响应内容编码为utf-8
if r.encoding is None:
    r.encoding='utf-8'
#对相应结果进行迭代处理
for line in r.iter_lines(decode_unicode=True):
    if line:
        data=json.loads(line)
        print(data['id'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小静砸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值