• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

requests 封装

开发技术 开发技术 2周前 (06-10) 13次浏览
requests:我对reqeusts的理解是,requests库是用来发送http请求的,里面封装了多种方法,get、post等,用requests做接口测试很方便,可以大量节约工作时间。由于目前我工作中只接触了get和post两种请求方式,所以只封装这两种方法,后续有需求再封装其他的。
第一步先安装requests  使用pip安装 :pip install requests
 
创建目录结构如下
  requests 封装
话不多说,直接上代码。代码里面的注释写的比较详细,也有一些心得在里面。后续会逐步整理出整个测试框架的全部面貌,包含封装requests,excel测试数据管理,封装访问excel类,封装连接数据库的类,等等。总之就是一个完整的接口自动化测试框架,我会比较详细的写注释,尽量让新手朋友能看懂。
 
 
# -*- coding: utf-8 -*-

'''
@Author: liangkun
@Time : 2021/3/17 4:56 下午
'''

#导入requests 库,requests库是python用来发送接口请求的库。
import requests
import json



#创建类
class BaseRqeuest:
'''
为什么要再封装一次reqests
1.你要是直接用request.get()也行,但是requests发送请求后有很多返回内容,每条用力执行的时候都要调用返回内容,很烦。
text:获取接口返回值的文本格式
json():获取接口返回值的json()格式
status_code:返回状态码(成功为:200)
headers:返回完整的请求头信息(headers['name']:返回指定的headers内容)
encoding:返回字符编码格式
url:返回接口的完整url地址
我们身为测试人员,需要的是json格式的返回内容,用来断言,我们每次调用requests的时候,直接返回json格式的内容就好了

2.接口请求方式不同,有get、post等(本人工作中就接触过这两种),由于自动化测试数据驱动比较火,也比较高大上,(我所理解的数据驱动就是,把测试用例跟代码分开,这样接口有改动的时候,直接修改excel表格中的内容就好。)
由于用到excel管理测试用例,在写接口测试用例的时候一般都会在用例中标明是get请求,或者是post请求,我们写代码的时候,每次都要去看下这个接口是get还是post,然后再用requests.get或者.post。这样会比较烦
所以,封装了run_main函数,主要的功能就是判断请求方式是get还是post,是那个就调用那个方法。写代码的时候就不用频繁的去看自动化测试用例了。
'''


#封装send_post方法,用来发送post请求
def send_post(self, url, data, header=None, file=None, cookie=None):
'''
封装post请求
url:接口地址
data:接口参数
header:接口请求头,考虑到有些接口没有用到header,或者用的cookie,或者不使用header也能调通接口,所以直接用header默认等于空(header=None)
file:用来上传文件的,同header一样,有些接口用不到,所以默认等于空
cookie:cookie 跟token一样,不一定能用到,所以cookie默认等于空
'''
response = requests.post(url=url, data=data, headers=header, files=file, cookies=cookie)
#接口返回内容用res变量来存储
res = response.text
#直接返回整个接口内容
return res
#封装send_get方法,用来发送get请求
def send_get(self, url, data, header=None, file=None, cookie=None):
'''
封装get请求
url:接口地址
data:接口参数
header:接口请求头,考虑到有些接口没有用到header,或者用的cookie,或者不使用header也能调通接口,所以直接用header默认等于空(header=None)
file:用来上传文件的,同header一样,有些接口用不到,所以默认等于空
cookie:cookie 跟token一样,不一定能用到,所以cookie默认等于空
'''
response = requests.get(url=url, params=data, headers=header, files=file, cookies=cookie)
#接口返回内容用res变量来存储
res = response.text
#直接返回整个接口内容
return res

def run_main(self, method, url, data, headers=None, file=None, cookie=None):
'''
封装执行方法
判断执行方法是GET如果是GET使用send_get方法,如果不是使用send_post方法。
'''
#判断接口请求方法,拿到内容后,调用upper()方法将数据改成大写(在excel里写case的时候,容易大小写混着写,不太好判断,所以一致转换成大写)
if method.upper() == "GET":
res = self.send_get(url, data, headers, file, cookie)
else:
res = self.send_post(url, data, headers, file, cookie)
try:
#将json转换为字典,方便后续遍历操作
res = json.loads(res)
except:
print('结果是一个text')
#返回整个字典
return res


if __name__ == "__main__":
url = 'https://www.baidu.com/'
data = {'access_token':'123456'}
request = BaseRqeuest()
res = request.run_main('get', url= url, data = data)
print(res)

程序员灯塔
转载请注明原文链接:requests 封装
喜欢 (0)