前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python接口自动化——Requests

Python接口自动化——Requests

作者头像
清风穆云
发布2021-08-09 11:22:39
7890
发布2021-08-09 11:22:39
举报
文章被收录于专栏:QA一隅

概述

前面我们介绍了接口测试工具:Postman和Jmeter。利用接口测试工具上手使用虽然容易,但是还是不够灵活。例如需要界面上各种配置,有时还需限定的语言脚本来辅助(Postman限定使用Js,Jmeter限定使用Java

因此,如果我们直接使用自己熟悉的语言编写代码来进行接口测试将会更加灵活方便,这里我们将使用Python来进行接口测试。

Requests

进行接口测试需要发送HTTP请求,Python最基础的 HTTP 库有 Urllib、Httplib2、Requests、Treq 等,这里我们推荐使用Requests库来进行接口测试。

Requests 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。目前很多Python爬虫也使用Requests库。

官方文档摘要

Requests 口号为:“让 HTTP 服务人类”

Requests中文文档

Requests github项目主页

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

用户见证

Twitter、Spotify、Microsoft、Amazon、Lyft、BuzzFeed、Reddit、NSA、女王殿下的政府、Amazon、Google、Twilio、Mozilla、Heroku、PayPal、NPR、Obama for America、Transifex、Native Instruments、Washington Post、Twitter、SoundCloud、Kippt、Readability、以及若干不愿公开身份的联邦政府机构都在内部使用。

功能特性

  • Keep-Alive & 连接池
  • 国际化域名和 URL
  • 带持久 Cookie 的会话
  • 浏览器式的 SSL 认证
  • 自动内容解码
  • 基本/摘要式的身份认证
  • 优雅的 key/value Cookie
  • 自动解压
  • Unicode 响应体
  • HTTP(S) 代理支持
  • 文件分块上传
  • 流下载
  • 连接超时
  • 分块请求
  • 支持 .netrc(用户配置脚本文件)

Requests安装

使用pip安装命令如下:

代码语言:javascript
复制
pip install requests

安装检测

打开cmd窗口,输入python 然后导入requests 如果安装成功没有任何提示

代码语言:javascript
复制
import requests

如果提示如下内容则说明安装失败

代码语言:javascript
复制
ImportError: No module named 'requests'

如果没有安装pip的参考:Python 安装与配置

Requests 基础应用

发送不同类型HTTP请求

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

request_basic.py

代码语言:javascript
复制
import requests

base_url='http://httpbin.org'

#发送GET类型的请求
r=requests.get(base_url+'/get')
print(r.status_code)

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

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

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

执行结果,200是状态码表示发送请求成功。

代码语言:javascript
复制
200
200
200
200

参数传递

传递URL参数

一般在GET请求中我们使用查询字符串(query string)来进行参数传递,在requests库中使用方法如下:

request_basic.py

代码语言:javascript
复制
import requests

base_url='http://httpbin.org'

param_data={'user':'zxw','password':'666'}
r=requests.get(base_url+'/get',params=param_data)
print(r.url)
print(r.status_code)

执行结果

代码语言:javascript
复制
C:\Python35\python.exe D:/api_test/requests_api_test/params.py
http://httpbin.org/get?user=zxw&password=666
200
Process finished with exit code 0
传递body参数

在Post请求中,一般参数都在请求体(Request body)中传递,在Requests中用法如下:

代码语言:javascript
复制
form_data = {'user': 'zxw', 'passwd': '8888'}
r=requests.post(base_url+'/post',data=form_data)
print(r.text)

执行结果:

代码语言:javascript
复制
{
	"args": {},
	"data": "",
	"files": {},
	"form": {
		"passwd": "8888",
		"user": "zxw"
	},
	"headers": {
		"Accept": "*/*",
		"Accept-Encoding": "gzip, deflate",
		"Connection": "close",
		"Content-Length": "20",
		"Content-Type": "application/x-www-form-urlencoded",
		"Host": "httpbin.org",
		"User-Agent": "python-requests/2.18.4"
	},
	"json": null,
	"origin": "110.52.4.225",
	"url": "http://httpbin.org/post"
}

请求头定制

如果你想为请求添加 HTTP 头部,只要简单地传递一个 dictheaders 参数就可以了。

用法如下:

代码语言:javascript
复制
form_data = {'user': 'zxw', 'passwd': '8888'}
header={'user-agent':'Mozilla/5.0'}
r=requests.post(base_url+'/post',data=form_data,headers=header)
print(r.text)

返回值

代码语言:javascript
复制
{
	"args": {},
	"data": "",
	"files": {},
	"form": {
		"passwd": "8888",
		"user": "zxw"
	},
	"headers": {
		"Accept": "*/*",
		"Accept-Encoding": "gzip, deflate",
		"Connection": "close",
		"Content-Length": "20",
		"Content-Type": "application/x-www-form-urlencoded",
		"Host": "httpbin.org",
		"User-Agent": "Mozilla/5.0"
	},
	"json": null,
	"origin": "110.52.2.106",
	"url": "http://httpbin.org/post"
}

Tips:很多爬虫程序都会定制headers来避免被封,如下面爬取知乎页面元素就设置了请求头。

代码语言:javascript
复制
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
}
r = requests.get("https://www.zhihu.com/explore",headers=headers)
print(r.text)

响应内容

当请求发送成功之后,我们可以获取响应内容。如响应状态码,响应头信息、响应体内容。

代码语言:javascript
复制
form_data = {'user': 'zxw', 'passwd': '8888'}
header={'user-agent':'Mozilla/5.0'}
r=requests.post(base_url+'/post',data=form_data,headers=header)

#获取响应状态码
print(r.status_code)
#获取响应头信息
print(r.headers)
#获取响应内容
print(r.text)
#将响应的内容以Json格式返回
print(r.json())

返回结果

代码语言:javascript
复制
200
{'Access-Control-Allow-Origin': '*', 'Content-Length': '342', 'Access-Control-Allow-Credentials': 'true', 'Content-Type': 'application/json', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.8.1', 'Date': 'Wed, 18 Jul 2018 06:33:55 GMT', 'Via': '1.1 vegur'}
{"args":{},"data":"","files":{},"form":{"passwd":"8888","user":"zxw"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"20","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"Mozilla/5.0"},"json":null,"origin":"110.52.2.106","url":"http://httpbin.org/post"}

{'files': {}, 'origin': '110.52.2.106', 'json': None, 'data': '', 'url': 'http://httpbin.org/post', 'headers': {'User-Agent': 'Mozilla/5.0', 'Content-Length': '20', 'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'Connection': 'close', 'Accept-Encoding': 'gzip, deflate'}, 'form': {'passwd': '8888', 'user': 'zxw'}, 'args': {}}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • Requests
    • 官方文档摘要
    • Requests安装
    • Requests 基础应用
      • 发送不同类型HTTP请求
        • 参数传递
          • 传递URL参数
          • 传递body参数
        • 请求头定制
          • 响应内容
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档