python也可以进行接口测试,并且比工具更加灵活多变,借助第三方库requests,下载方式:cmd终端输入 pip install requests
接口请求方式存在多种,get,post,put,delete等,目前企业中用的最多的为get及post请求,我们这里也主要介绍如何使用python+requests进行post和get请求:
Get请求
import requestsapiurl="http://39.107.96.138:3000/api/v1/topics"'''请求接口'''输入参数resonse=requests.get(url=apiurl)print(resonse.status_code)# response.content ---响应值(数据流类型)# response.text ---响应值(字符串类型)# response.json() ---响应值(字典类型,只能是接口才能这个方法)# print(respone.content)#response1.elapsed.total_seconds() ----获取接口耗
以上可以看到一个简单的get请求,并未传入任何参数及请求头信息,以及列举了一些获取响应信息的代码。如果我们的接口需要传入参数以及请求头信息该怎么办:
resonse=requests.get(url=apiurl,params={"page":2,"limit":3},header={'Content-Type':'application/json'})
我们直接在请求后面的括号中进行参数的传递即可,具体详情可参考requests的文档介绍。
对于返回的数据,我们可以对其进行格式的变化,以便于我们进行使用及提取相关信息:
#json与字符串与字典的转换import json#字符串转换成字典类型dict1=json.loads(string1)#字典类型转换成json字符串(python无json数据类型,实际为str类型)json1=json.dumps(dict1)
Post请求
res=requests.post('http://39.107.96.138:3000/api/v1/topics', json={"accesstoken":"dhsfdretret","title":"心仪的小姐姐和别人跑了","tab":"share","content":"真的好难受啊"})print(res.status_code)if res.status_code == 200: print("新建成功")else: print("失败")
实际我们看到只是请求方式进行了改变,一级传参的关键字变了一下,post中传参可以使用data=,也可以使用json=,具体情况具体使用,json=多只参数以json字符串格式进行传递,data=多用来进行字典格式传递,具体格式变换也可以使用json.loads()等方法进行变换,对返回来的数据进行判断断言,以确保我们用例的执行成功与否。
Cookies设置
我们都知道有些接口是需要cookie进行传递才可进行请求,那么我们不能每请求一次都需要进行收到获取页面的cookie,那么我们如何进行cookie的设置呢:------>>>requests.session()
sessions = requests.session()res=sessions.post('http://39.107.96.138:3000/api/v1/topics', json={"accesstoken":"dhsfdretret","title":"心仪的小姐姐和别人跑了","tab":"share","content":"真的好难受啊"})print(res.status_code)
以上我们可以看到直接设置sessions,然后进行登录接口请求,里面的cookie会自动set到sessions中,后续直接使用sessions请求即可。
若无登录接口返回cookie,公司有自动的获取cookie接口,可以使用cookie自带的RequestsCookieJar()方法set值:
sessions = requests.session()c = requests.cookies.RequestsCookieJar()c.set('cookie_key1','cookie_value1') # set获取的cookie值c.set('cookie_key2','cookie_key2') # # set获取的cookie值sessions.cookies.update(c) # 更新sessionsres=sessions.post('http://39.107.96.138:3000/api/v1/topics', json={"accesstoken":"dhsfdretret","title":"心仪的小姐姐和别人跑了","tab":"share","content":"真的好难受啊"})print(res.status_code)
接口常见问题:
1,若接口存在重定向,如何查看重定向前的请求信息(requests自动处理重定向)?
response.history #list类型for i in response.history: print(i.url) print(i.status_code) print(i.heasers["Location"]) 获取定向的地址 如何设置接口重定向不处理?response = requests.get(url,allow_redirects=False) #allow_redirects参数设置
2,url中带有中文编码转换?(requests请求时自动转换)
from urllib.parse import quote,unquotea = '零基础Python自动化'b = quote(a) #编码c = unquote(b) #解码