python-requests
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
接口测试一般以用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试。接口测试适用于为其他系统提供服务的底层框架系统和中心服务系统,主要测试这些系统对外部提供的接口,验证其正确性和稳定性。
最简单的应用就是,使用Web http的方式,为APP提供数据接口,这些接口具有一定的动态性,采用传入一定的参数,接口通过参数获取不同的数据返回给使用者,参数传入的方式有GET和POST方式两种,使用浏览器可以直接模拟GET请求,但是POST请求却无能为力,只能编写脚本测试,这就导致接口测试非常麻烦。
get请求
http://xqtesting.sxl.cn/article?id=1
以?号为分界线
前面:请求地址,get请求的地址
后面:请求的参数,多个参数,用&连接
post请求
表单的提交
用户名和密码
安全性,两者一样,没太大区别
安装requests包
get请求:
import requests import json print("\n=========get请求==========") #接口说明:https://www.juhe.cn/docs/api/id/65 #接口地址 url = "http://v.juhe.cn/laohuangli/d" #字典类型,参数 params = {"key":"711bc6362b3179f5a28de7fd3ee4ace","date":"2016-5-14"} #请求头,有就写,没有就空着 headers = {} print("GET请求url=",url) print("GET请求参数=",params) #完成请求,并且接受响应 #请求地址,请求参数,请求头,params,headers固定写法 #请求完毕后,获得相应,定义一个变量r,接收相应信息 r = requests.get(url,params = params,headers = headers) print("GET请求获取响应状态码=",r.status_code) print("GET请求获取响应头=",r.headers) #获取相应头中的某一项,用字典的key取value print("GET请求获取响应头中的某一项=",r.headers["Content-Type"]) print("GET请求获取响应结果(json类型)=",r.text) #转换为python类型,json包的响应结果,调用json(),转换成python类型 json_r = r.json() print("GET请求响应结果(python类型,供后续使用)=",json_r)
结果:
GET请求url= http://v.juhe.cn/laohuangli/d
GET请求参数= {'key': '711bc6362b3179f5a28de7fd3ee4ace', 'date': '2016-5-14'}
GET请求获取响应状态码= 200
GET请求获取响应头= {'X-Powered-By': 'PHP/5.6.23', 'Content-Type': 'application/json;charset=utf-8', 'Set-Cookie': 'aliyungf_tc=AQAAAHe3sTarLg8A0jdJ3zUfNGI3TRp5; Path=/; HttpOnly', 'Connection': 'keep-alive', 'Etag': 'aac7930e0d20f08eefe02f6d5dd045fe', 'Date': 'Mon, 19 Jun 2017 16:57:48 GMT', 'Transfer-Encoding': 'chunked'}
GET请求获取响应头中的某一项= application/json;charset=utf-8
GET请求获取响应结果(json类型)= {"resultcode":"101","reason":"错误的请求KEY!","result":null,"error_code":10001}
GET请求响应结果(python类型,供后续使用)= {'resultcode': '101', 'reason': '错误的请求KEY!', 'error_code': 10001, 'result': None}
POST请求有两种格式:
主要通过'content-Tpye'字段去判断
1、key-value的格式'content-Tpye':'application/x-www-form-urlencoded'
2、标准json格式'content-Tpye':'application/json'
POST,key-value格式请求:
url = "http://v.juhe.cn/laohuangli/d" params = {"key":"711bc6362b3179f5a28de7fd3ee4ace","date":"2016-5-14"} headers = {} print("POST请求URL=",url) data = params print("POST请求参数",data) #def post_kv(url,data,headers): r = requests.post(url,data = data,headers = headers) print("POST请求获取响应状态码:",r.status_code) print("POST请求获取响应头:",r.headers) print("POST请求获取响应结果(json类型)=",r.text) #json类型转换为python类型 json_r = r.json() print("POST请求相应结果(python类型,供后续使用)=",json_r)
结果:
POST请求URL= http://v.juhe.cn/laohuangli/d
POST请求参数 {'key': '711bc6362b3179f5a28de7fd3ee4ace', 'date': '2016-5-14'}
POST请求获取响应状态码: 200
POST请求获取响应头: {'Etag': '55826f3e9cb13da564e47935fb7fbfd9', 'Set-Cookie': 'aliyungf_tc=AQAAAOHVz3s47QMA0jdJ3z7XDASQBO5a; Path=/; HttpOnly', 'Connection': 'keep-alive', 'Date': 'Mon, 19 Jun 2017 17:17:56 GMT', 'Transfer-Encoding': 'chunked', 'X-Powered-By': 'PHP/5.6.23', 'Content-Type': 'application/json;charset=utf-8'}
POST请求获取响应结果(json类型)= {"resultcode":"101","reason":"错误的请求KEY!","result":null,"error_code":10001}
PSOT-josn格式请求:
url = "http://v.juhe.cn/laohuangli/d"
params = {"key":"e711bc6362b3179f5a28de7fd3ee4ace","date":"2016-5-14"}
headers = {}
print("psot请求URL=",url)
data = params
print("POST请求参数,python类型",data)
#python类型转化为json类型,请求是以标准的json格式传输的,必须要通过json.dumps()转换
data = json.dumps(data)
print("POST请求数据,josn类型=",data)
r = requests.post(url,data = data,headers = headers)
print("POST请求获取响应状态码:",r.status_code)
print("POST请求获取响应头:",r.headers)
print("POST请求获取响应结果(json类型)=",r.text)
json_r = r.json()
print("POST请求相应结果(python类型,供后续使用)=",json_r)
结果:
========psot_json请求=========
psot请求URL= http://v.juhe.cn/laohuangli/d
POST请求参数,python类型 {'date': '2016-5-14', 'key': 'e711bc6362b3179f5a28de7fd3ee4ace'}
POST请求数据,josn类型= {"date": "2016-5-14", "key": "e711bc6362b3179f5a28de7fd3ee4ace"}
POST请求获取响应状态码: 200
POST请求获取响应头: {'Connection': 'keep-alive', 'Content-Type': 'application/json;charset=utf-8', 'Etag': '063d270dc44003f39cf480b7ec6ff843', 'Set-Cookie': 'aliyungf_tc=AQAAANssxgrAIwYA0jdJ33n7c5zL73Y4; Path=/; HttpOnly', 'X-Powered-By': 'PHP/5.6.23', 'Transfer-Encoding': 'chunked', 'Date': 'Mon, 19 Jun 2017 17:25:28 GMT'}
POST请求获取响应结果(json类型)= {"resultcode":"101","reason":"错误的请求KEY!","result":null,"error_code":10001}
传入参数的类型转换
#python类型转换为json类型
data = json.dumps(data)
#json类型转换为python类型
json_r = r.json()