其他测试框架 python 接口自动化封装了接口类,接口类继承了 send_requests 类,但是接口类中的具体方法调用不到 send_requests 类中方法的属性

子夜 · 2021年01月17日 · 最后由 杨伟民 回复于 2021年01月20日 · 2851 次阅读

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

  1. 封装了一个 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))
  1. 写了一个接口的类 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 这两个属性的,如下图:

在网上查了一下,说是没有用 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 的正确数据,这是为什么呀???

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

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

共收到 5 条回复 时间 点赞

请各位大神帮忙看看,有没有需要修改的地方,非常感谢!!

大神们帮帮忙,紧急求助

非常感谢大神指点,依照你的方法去掉这个->object 就可以了,非常感谢!!

if method == 'post' or method == 'POST' or method == 'Post': 和 elif method == 'get' or method == 'GET' or method == 'Get':这 2 段代码可以优化一下,统一改成 if method.upper() == 'POST': 以及 if method.upper() == 'GET':

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册