python中类的封装调用_python 接口自动化封装了接口类,接口类继承了 send_requests 类,但是接口类中的具体方法调用不到 send_requests 类中方法的属性...

本文探讨了在Python接口自动化测试中遇到的问题,即一个名为BaseApi的类封装了HTTP请求方法,而Alarm类继承BaseApi并尝试在其方法中调用send_request。尽管在IDE中提示无法访问response对象的.json()和.status_code属性,但实际上在运行时能够正确获取这些属性的值。作者对这一现象感到困惑,并寻求解释。
摘要由CSDN通过智能技术生成

各位大神,能否指点一下,python 接口自动化的问题,非常感谢,问题如下:

封装了一个 base_api 的类,里面封装了 post, get 方法,在如下:

class BaseApi(object):

# log = logger()

def post_request(self, url, data, header, file=None):

res = None

if file != None:

res = requests.post(url=url, data=data, headers=header, verify=False)

else:

res = requests.post(url=url, data=data, headers=header, files=file, verify=False)

return res

def send_request(self, method: object, url: object, header: object, data: object = None, file: object = None) -> object:

url = api_root_url_prd + url

try:

if method == 'post' or method == 'POST' or method == 'Post':

res = self.post_request(url, data, header, file=None)

elif method == 'get' or method == 'GET' or method == 'Get':

res = self.get_request(url, header, data)

else:

return "request传参错误"

return res

except Exception as e:

logger.error("请求方法报错{}".format(e))

写了一个接口的类 Alarm,Alarm 类继承了 base_api 类,接口 Alarm 类中写了一个增加 Alarm 的方法 post_add_alarm,这个方法中调用了 BaseApi 类中的 send_request 方法, 代码如下:

class Alarm(BaseApi):

def post_add_alarm(self, headers, data):

"""

添加报警配置

:param headers:

:param data:

:return: 自定义关键字返回结果result

"""

response = self.send_request("POST", "/alarmRule/addRule", headers, data)

json_result = response.json()

status_code = response.status_code

print("json_result = " + json_result)

print("status_code = " + status_code)

问题 1:在上面的代码中我写了这句话 json_result = response.json() 和 status_code = response.status_code, 但是实际中我写代码的时候,self.send_request() 返回值 response 是调用不到.json() 和.status_code 这两个属性的,也就是说我写 response.的时候,是自动补全方法属性列表中是没有 json 和 status_code 这两个属性的,如下图:

cb613660749754a19897b62221c5c208.png

在网上查了一下,说是没有用 super 这个超类方法,是调用不到父类中的私有属性的,但是我用了 super 子类还是没能调用到 json 和 status_code,这是怎么回事?

问题 2:虽然 response 点不出我要的属性,那我现在强行写了这两句话 json_result = response.json() 和 status_code = response.status_code,然后写了两行打印语句,看看输出的结果是不是正确,结果出乎意料的是,虽然 response 的属性列表中显示不出.json() 和.status_code,但是我的子类 Alarm 中的 post_add_alarm 方法,确实实际调用到了父类 BaseApi 中的私有属性.json() 和.status_code,打印结果 print("json_result = " + json_result) 和 print("status_code = " + status_code) 是竟然是正确的,返回了 status_code = 200 和 json_result 的正确数据,这是为什么呀???

附上我的代码目录结构,如下图:

bac7fbc784e3023671dcdf1257830128.png

请各位大神,指点一下,小弟谢谢拉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值