本次主要讲如何使用python中的requests库完成接口自动化测试,讲解的方法主要是get,post,put,delete,我将对比postman一一讲解
- Get
request.get(url, params, kwargs)
百度网站举例:
import requests
res = requests.get('https://www.baidu.com/') #获取到的res对象
print(res.text) #获取网页的响应内容
res.text #获取网页的响应内容
res.status_code #状态码
res.encoding #编码方式
res.json() #json形式展示请求到的内容
上面代码的res的对象该如何理解呢?
我们可以理解为在该次get请求中获取到的所有的信息都包含在了res这个对象中,我们只需要使用其他的方法一条一条的按照规律把咱们想要的信息取出来就ok了
注意:
网站必须带着http或者https,举个错误的事例:
我们在对比一下postman中get请求
其中响应内容就是我们用requests.text中获取到的内容一致
这时大家可能会有疑问,为什么我见到的url地址为啥那么长,那到底是为啥捏,比如:
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A4%A9%E6%B0%94&fenlei=256&rsv_pq=b1744de80006b207&rsv_t=a639bfAHWMurw1IqGUSMPnOaVTog5aqp24%2FYiC4NUDXtN39LkoERrWa2nxQ&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=7&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=1238&rsv_sug4=4018
其实,get请求传参都是已拼接字符串的形式进行传递就是?后的值,都是xx=xx的形式,那些看不懂的就是已一定的形式进行了加密,那我们代码如何实现呢?
对比postman,大家就都理解了
带参数的请求方式我们可以使用
参数必须使用字典格式,举例:
import requests
params = {
'name':'Tom',
'age':18
}
res = requests.get('https://www.baidu.com', params=params)
print(res.url)
此时我们可以看到请求的参数被拼接到了url之后,这时就达到了我们的目的
- Post
requests.post(url, data, json, kwargs)
post请求比get请求多了一种传递参数的方式那就是把参数放在请求体中,那么Postman中在什么位置呢?
postman也提供了诸多方式传递,那么我们讲一下如何在请求体中传递参数。
那么data和json又有什么区别呢?
data | 要发送到请求体中的字典、元祖、字节、或文件对象 |
---|---|
json | 要发送到请求体中的json数据 |
因为没有现成的接口,我只将一下用法
具体用法:
import requests
url ='https://www.baidu.com/'
data = {
"sessionId": 'sessionid',
"queryText": '111'
}
res = requests.post(url=url,data=data)
此时的data数据类型为data,虽然看上去与json格式相同,但本质是不同的。
错误案例:
import requests
url ='https://www.baidu.com/'
data = {
"sessionId": 'sessionid',
"queryText": '111'
}
res = requests.post(url=url,json=data) #会报错 会报错 会报错
那么我们如何规避掉这个情况呢?我们需要把数据手动转化为json格式
import requests
import json
url ='https://www.baidu.com/'
data = {
"sessionId": 'sessionid',
"queryText": '111'
}
data = json.dumps(data) #把数据转化为json格式
res = requests.post(url=url,data=data)
此时我们就可以使用data替代post方法中的参数json,这样即使是我们用data也可以传json数据了
- Put
requests.post(url, data, kwargs)
put使用方法与post使用方法无二,参考post方法,不在具体说明
- Delete
requests.post(url, kwargs)
使用delete方法删除url后,获取状态码为204表示删除成功。
当然工作中会把代码进行封装
import requests
import json
class Runmain(object):
def m_get(self, url, data=None):
res = requests.get(url=url, params=data)
return json.dumps(res.text)
def m_post(self, url, data=None):
res = requests.post(url=url, data=data)
return json.dumps(res.text)
def is_run(self, method, url, data=None):
if method == 'get':
return self.m_get(url, data)
else:
return self.m_post(url, data)
if __name__ == '__main__':
url = 'https://www.baidu.com/'
data = {
}
run = Runmain()
print(run.is_run('get', url))