反射:python内置方法主要用来调用方法和获取属性值,语法为getattr(object,"function")
,第一个参数为对象名,第二个参数为该对象中函数名或属性值
class MyClass:
def say_hello(self):
print("Hello, world!")
obj = MyClass()
# 使用getattr()函数获取方法,并调用它
method = getattr(obj, "say_hello")
method() # 输出: Hello, world!
解包:将(数组,字典,集合)里面的参数拆解一一传入对应变量,可以通过 ** 运算符来实现这种解包,定义一个字典
request_data = {
"url": "https://baidu.com",
"method": "GET",
"headers": {
"User-Agent": "Mozilla/5.0"
},
"timeout": 10,
"verify_ssl": True
}`,
然后定义一个函数,定义需要传入的各种形参
def process_request_data(url, method, headers, **kwargs):
print("URL:", url)
print("Method:", method)
print("Headers:", headers)
print("Other data:", kwargs)`
然后通过**符号解包完成调用process_request_data函数
process_request_data(**request_data)
上面热身结束,下面就开始利用python的反射和解包实现http请求:
准备请求参数:
# 组装请求参数
request_data = {
"url": new_url,
"params": params,
"data": data, # 字典
"headers": headers
}
选择请求方式,这里我用的excel做的数据化驱动,在excel中已经填写好请求方式了:
method = ExcelData["method"]
self.kw是作者关键字封装实例化后的变量,然后发送http请求:
res = getattr(self.kw, method)(**request_data)
actualResult为需要提取的响应字段,然后提取响应:
msg = self.kw.get_response(res.text, ExcelData["actualResult"])
__json_extractor为作者封装的json提取器,最后进行断言:
if ExcelData['expectResult'] == msg:
value = MSG_OK
# 进行json提取
self.__json_extractor(ExcelData, res.text)