python + requests接口自动化测试框架

前言

Requests:是用python语言基于urllib编写的,采用的是Apache2Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。

一、安装

1、通过pip安装

pip install requests

2、通过国内源下载(方法1 下载慢 或者 报错 情况下)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

题外话:
直接加镜像源地址的方法
国内源:
新版ubuntu要求使用https源(要注意)

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

简单的我们就不讲了,直接进入主题常用的
【尾部有小惊喜哦】

二、模拟get请求

import requests
response=requests.get("url主机字符串")
#可以使用print(response.content.decode('utf-8')),response.content是二进制模式,可以下载视频之类的,如果想看的话需要decode成utf-8格式。而response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。如果想用text方法并解决乱码问题,可以通过如下代码实现:

response.encoding = 'utf-8'
print(response.text)

三、模拟带参数的get请求

import requests
#写法一:
response = requests.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET")
print(response.content.decode('utf-8'))

#写法二:
data = {'grant_type':'client_credential','appid':'APPID','secret':'APPSECRET'}
response = requests.get("https://api.weixin.qq.com/cgi-bin/token", params=data)
print(response.content.decode('utf-8'))

四、自定义请求头

import requests
data = {'wd':'詹姆斯'}
headerinfo = {'UserAgent':'Mozilla/5.0(Macintosh;IntelMacOSX10_13_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36',
      'Accept-Encoding':'gzip,deflate,br',                                                                                       
      'AcceptLanguage':'zhCN,zh;q=0.9',
      'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
}
response=requests.get('https://www.baidu.com/s', params=data, headers=headerinfo)
print(response.content.decode('utf-8'))

五、模拟post请求

import requests
import json
url = "https://api.weixin.qq.com/cgi-bin/tags/create"
data = {'access_token':'token值'}  # token值为之前获取access_token的值
info = {'tag':{'name':'广东'}}
headers = {'Content-Type':'application/json'}  #发送json数据必带的头部信息
response = requests.post(url, params=data, data=json.dumps(info), headers=headers)
print(response.content.decode('utf-8'))

备注:json.dumps()用于将dict类型的数据转成json格式编码的字符串

通过上个例子,可以知道,post请求的请求参数是通过data方式来传递的。Post的请求参数一般有form表单、json数据、文件等。

用requests模块处理方式如下:
form表单(使用dict类型传输):

postResponse = requests.post(url, data={'key':'value'})

Json数据:
方式一:(需要使用json模块)

jsonParams = {'key':'value'}
headers = {'Content-Type':'application/json'}
postJsonResponse = requests.post(url, headers=headers, data=json.dumps(jsonParams))

方式二:

jsonParams = {'key':'value'}
headers = {'Content-Type':'application/json'}
postJsonResponse = requests.post(url, headers=headers, json=jsonParams)

响应包括响应行、响应头、响应正文内容,这些返回的响应信息都可以通过Requests模块获取。这些获取到的响应内容也是接口测试执行得到的实际结果。

获取响应行:

r = requests.get("https://www.baidu.com")
print(r.status_code)#响应状态码
print(r.reason)#响应信息

获取响应头:

print(r.headers)#获取响应头 返回的是dict类型,可以继续使用get获取指定的值

获取其它响应信息:

print(r.url)#获取请求地址
print(r.cookies)#获取cookies
print(r.encoding)#获取响应的编码格式

依据不同响应正文内容的情况
Requests模块有四种不同的处理方式:
响应内容:

r = requests.get('https://www.baidu.com')
print(r.text)

Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码。r.text使用后乱码的几率很大,可以先用r.encoding属性来改变编码,
如下所示:

r = requests.get('https://www.baidu.com')
r.encoding = 'utf-8'
print(r.text)

二进制响应内容:
对于非文本请求,r.content能以字节的方式访问请求响应体。且Requests模块会自动为你解码gzip和deflate传输编码的响应数据。

使用r.content处理普通的响应返回:

r=requests.get('https://www.baidu.com')
print(r.content.decode('utf-8'))

使用r.content下载图片文件:

from PIL import Image
from io import BytesIO


r = requests.get('https://www.baidu.com/img/bd_logo1.png')
img = Image.open(BytesIO(r.content))
img.save('test.png')

JSON响应内容:
Requests中有一个内置的JSON解码器r.json(),处理返回的JSON数据。使用后,会把返回的数据作为一个python中的json数据对象看待。如果JSON解码失败,r.json()就会抛出一个异常。

六、设置代理

普通代理:

import requests


proxies = {"http":"http://127.0.0.1:9743","https":"https://127.0.0.1:9743"}
response = requests.get("https://www.taobao.com", proxies=proxies)

包含用户名和密码:

import requests

proxies = {"http":"http://user:password@127.0.0.1:9743/"}
response = requests.get("https://www.taobao.com", proxies=proxies)

七、超时设置

Requests模块可以设置接收数据的超时时间,超出设定的时间还没有数据返回,就抛出异常。超时设置有两种类型表达:float、tuple

import requests

respone01 = requests.get('https://www.baidu.com', timeout=0.0001)  #代表接收数据的超时时间
respone02 = requests.get('https://www.baidu.com', timeout=(0.1,0.2))  #0.1代表链接超时,0.2代表接收数据的超时时间(单位是秒)

如果远端服务器很慢,你可以让Request永远等待,传入一个None作为timeout值

八、重定向设置

在请求url时,服务器会自动把我们的请求重定向,可以使用r.history来查看重定向。如果不想进行自动重定向,可以用参数allow_redirects关闭。

r = requests.get("http://www.360buy.com")
print(r.history)
r = requests.get("http://www.360buy.com", allow_redirects=False)

九、session处理

部分接口需要先登录网址,才能有权限进行调用,这时可以使用到session
具体操作是:先使用网站的登录api进行登录,得到session后,然后用该session来请求其它的接口。
示例代码如下:

s = requests.Session()
login_data = {'form_email':'youremail@example.com','form_password':'yourpassword'}
s.post("http://pythontab.com/testLogin", login_data)
r = s.get('http://pythontab.com/notification/')

十、请求中携带cookies

对于某些网站,登录然后从浏览器中获取cookies,以后就可以直接拿着cookie登录了,无需输入用户名密码。

import requests

Cookies={'user_session':'value'}
response = requests.get('https://github.com/settings/emails', cookies=Cookies)

十一、异常处理

遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError异常。
如果HTTP请求返回了不成功的状态码,Response.raise_for_status()会抛出一个HTTPError异常。
若请求超时,则抛出一个Timeout异常。
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException。

import requests
from requests.exceptions import ReadTimeout,ConnectionError,RequestException


try:
   response = requests.get("http://httpbin.org/get", timeout=0.5)
   print(response.status_code)
except ReadTimeout:
   print('Timeout')
except ConnectionError:
   print('Connectionerror')
except RequestException:
   print('Error')

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python的unittest库提供了一种基于单元测试测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittest与requests库搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittest与requests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittest和requests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittest与requests库搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittest与requests库搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittest和requests库的读者来说,是一篇非常有价值的文章。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值