Python中调用父类方法的方式及其在接口自动化测试中的应用

调用父类方法的方式

在Python中,如果子类想要调用父类的方法,有以下三种常见的方式:

        ●  直接使用父类名.方法名 (self) 的形式,例如 Master.make_cake (self)。
        ●  使用 super (子类名,self).父类方法名 () 的形式,例如 super (Prentice, self).make_cake ()。这种方式适用于新式类,可以自动找到合适的父类方法。
        ●  使用 super ().父类方法名 () 的形式,例如 super ().make_cake ()。这种方式是第二种方式的简写,也适用于新式类,但不需要指定子类名和self。


如果子类重写了父类的构造方法(__init__),那么在子类的构造方法中,需要显式地调用父类的构造方法,否则父类的构造方法不会执行。调用父类的构造方法有两种方式:

        ●  使用 super (子类名,self).__init__ (参数) 的形式,例如 super (Person, self).__init__ (name)。
        ●  使用 父类名.__init__ (self, 参数) 的形式,例如 People.__init__ (self, name)。这种方式称为未绑定方法,需要手动给self传值。


如果涉及到多继承,那么super函数只能调用第一个直接父类的构造方法,如果要调用其他父类的构造方法,需要使用未绑定方法。

下面是一个简单的例子,演示了Python中调用父类方法的用法:

# 定义一个父类
class Animal:
    def __init__(self, name):
        self.name = name
        print(f"我是{self.name}")

    def run(self):
        print(f"{self.name}在跑")

# 定义一个子类
class Dog(Animal):
    def __init__(self, name, color):
        # 调用父类的构造方法
        super().__init__(name)
        self.color = color
        print(f"我的颜色是{self.color}")

    def bark(self):
        print(f"{self.name}在叫")

    def run(self):
        # 调用父类的run方法
        super().run()
        print(f"{self.name}跑得快")

# 创建一个子类对象
d = Dog("旺财", "黑色")
# 调用子类自己的方法
d.bark()
# 调用父类的方法
d.run()

输出结果为:

我是旺财
我的颜色是黑色
旺财在叫
旺财在跑
旺财跑得快

接口自动化测试中的应用

在接口自动化测试中,我们经常需要使用继承和多态的特性,来实现代码的复用和扩展。例如,我们可以定义一个基础的接口测试类,封装一些通用的方法,如发送请求、断言响应、记录日志等。然后,我们可以根据不同的接口需求,定义不同的子类,继承基础的接口测试类,并重写或添加一些特定的方法,如构造参数、处理数据、生成报告等。这样,我们就可以利用父类的方法,简化子类的代码,同时也可以根据子类的特点,定制化测试逻辑。

下面是一个简单的例子,演示了接口自动化测试中调用父类方法的用法:

# 导入requests库
import requests

# 定义一个基础的接口测试类
class BaseApiTest:
    # 定义一个构造方法,初始化基础的url和headers
    def __init__(self, base_url, headers):
        self.base_url = base_url
        self.headers = headers

    # 定义一个发送get请求的方法
    def get(self, path, params=None):
        # 拼接完整的url
        url = self.base_url + path
        # 发送get请求,并返回响应对象
        return requests.get(url, params=params, headers=self.headers)

    # 定义一个发送post请求的方法
    def post(self, path, data=None, json=None):
        # 拼接完整的url
        url = self.base_url + path
        # 发送post请求,并返回响应对象
        return requests.post(url, data=data, json=json, headers=self.headers)

    # 定义一个断言响应状态码的方法
    def assert_status_code(self, response, expected_code):
        # 获取实际的状态码
        actual_code = response.status_code
        # 判断实际的状态码是否等于期望的状态码
        assert actual_code == expected_code, f"状态码错误,期望为{expected_code},实际为{actual_code}"

    # 定义一个断言响应内容的方法
    def assert_content(self, response, expected_content):
        # 获取实际的响应内容
        actual_content = response.text
        # 判断实际的响应内容是否包含期望的内容
        assert expected_content in actual_content, f"响应内容错误,期望包含{expected_content},实际为{actual_content}"

# 定义一个子类,继承基础的接口测试类,用于测试百度搜索接口
class BaiduSearchApiTest(BaseApiTest):
    # 定义一个构造方法,调用父类的构造方法,初始化基础的url和headers
    def __init__(self):
        super().__init__("https://www.baidu.com", {"User-Agent": "Mozilla/5.0"})

    # 定义一个搜索的方法,调用父类的get方法,发送搜索请求,并返回响应对象
    def search(self, keyword):
        return self.get("/s", params={"wd": keyword})

    # 定义一个测试搜索的方法,调用搜索的方法,获取响应对象,并调用父类的断言方法,验证响应结果
    def test_search(self, keyword, expected_content):
        response = self.search(keyword)
        self.assert_status_code(response, 200)
        self.assert_content(response, expected_content)

# 创建一个子类对象
baidu = BaiduSearchApiTest()
# 调用测试搜索的方法,传入搜索关键字和期望的内容
baidu.test_search("python", "Python官网")

输出结果为:

无异常,测试通过
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值