文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 单双下划线方法在接口自动化中的高级用法(_、__)

2024-11-29 19:15

关注

使用场景:

在一个 HTTP 请求客户端类中封装一个内部方法,该方法用于处理请求的响应。

这个方法只应该在类的内部使用,不应该被外部直接调用。

import requests
class HttpClient:
    def __init__(self, base_url):
        self.base_url = base_url
    def _handle_response(self, response):
        if response.status_code != 200:
            raise Exception(f"Request failed with status {response.status_code}")
        return response.json()
    def get(self, endpoint):
        url = f"{self.base_url}/{endpoint}"
        response = requests.get(url)
        return self._handle_response(response)
client = HttpClient("https://api.example.com")
data = client.get("/resources")
print(data)

注意事项:

_handle_response 方法是内部使用的,不应从类外部直接调用。

确保处理所有可能的异常情况。

使用双下划线 __ 来实现初始化逻辑

使用场景:

在接口测试类中,使用 __init__ 方法来设置基本的测试配置,比如 URL、认证信息等。

import requests
class TestAPI:
    def __init__(self, base_url, auth_token):
        self.base_url = base_url
        self.auth_token = auth_token
    def test_get_resources(self):
        headers = {'Authorization': f'Bearer {self.auth_token}'}
        response = requests.get(f"{self.base_url}/resources", headers=headers)
        assert response.status_code == 200
test_api = TestAPI("https://api.example.com", "my-token")
test_api.test_get_resources()

注意事项:

确保 __init__ 方法设置了必要的初始化参数。

注意处理可能的认证失败情况。

使用双下划线 __ 来实现字符串表示

使用场景:

在接口测试结果类中,使用 __str__ 方法来自定义输出格式,便于查看测试结果。

class TestResult:
    def __init__(self, passed, message):
        self.passed = passed
        self.message = message
    def __str__(self):
        status = "Passed" if self.passed else "Failed"
        return f"{status}: {self.message}"
result = TestResult(True, "All tests passed")
print(result)

注意事项:

__str__ 方法应返回易于理解的字符串。

确保测试结果的格式清晰明了。

使用双下划线 __ 来实现布尔值转换

使用场景:

在测试结果类中,使用 __bool__ 方法来判断测试是否通过。

class TestResult:
    def __init__(self, passed, message):
        self.passed = passed
        self.message = message
    def __bool__(self):
        return self.passed
result = TestResult(True, "All tests passed")
assert bool(result), "Test should pass."

注意事项:

__bool__ 方法应返回布尔值。

注意处理边缘情况,如未完成的测试等。

使用单下划线 _ 来封装内部属性

使用场景:

在接口测试类中,使用单下划线 _ 来标记内部使用的属性,如认证信息。

class TestAPI:
    def __init__(self, base_url, auth_token):
        self.base_url = base_url
        self._auth_token = auth_token
    def test_get_resources(self):
        headers = {'Authorization': f'Bearer {self._auth_token}'}
        response = requests.get(f"{self.base_url}/resources", headers=headers)
        assert response.status_code == 200
test_api = TestAPI("https://api.example.com", "my-token")
test_api.test_get_resources()

注意事项:

单下划线 _ 标记的属性不建议从类外部直接访问。

确保在类内部正确使用这些属性。

使用双下划线 __ 来实现类的实例化

使用场景:

在测试框架中,使用 __new__ 方法来控制类的实例化过程,例如,只允许创建一个实例。

class SingletonTestFramework:
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(SingletonTestFramework, cls).__new__(cls)
        return cls._instance
framework = SingletonTestFramework()
another_framework = SingletonTestFramework()
assert framework is another_framework

注意事项:

__new__ 方法用于控制实例的创建过程。

注意单例模式的实现细节。

使用双下划线 __ 来实现格式化输出

使用场景:

在测试报告类中,使用 __format__ 方法来自定义输出格式。

class TestReport:
    def __init__(self, name, result):
        self.name = name
        self.result = result
    def __format__(self, format_spec):
        if format_spec == "short":
            return f"{self.name}: {self.result}"
        return f"{self.name}: {self.result} (full report)"
report = TestReport("Test Name", "Passed")
print(f"{report:short}")

注意事项:

__format__ 方法应支持不同的格式化选项。

注意处理格式化字符串的解析。

使用双下划线 __ 来实现比较操作

使用场景:

在测试结果类中,使用 __eq__ 方法来自定义相等性比较。

class TestResult:
    def __init__(self, passed, message):
        self.passed = passed
        self.message = message
    def __eq__(self, other):
        if isinstance(other, TestResult):
            return self.passed == other.passed and self.message == other.message
        return False
result1 = TestResult(True, "All tests passed")
result2 = TestResult(True, "All tests passed")
assert result1 == result2

注意事项:

__eq__ 方法应正确比较对象的内容。

注意处理不同类型的对象之间的比较。

使用双下划线 __ 来实现对象的删除

使用场景:

在测试框架中,使用 __del__ 方法来清理资源,如关闭连接。

import requests
class TestFramework:
    def __init__(self, session):
        self.session = session
    def __del__(self):
        self.session.close()
session = requests.Session()
framework = TestFramework(session)
del framework

注意事项:

__del__ 方法用于对象销毁时的资源清理。

注意处理异常情况下的资源释放。

使用双下划线 __ 来实现对象的复制

使用场景:

在测试配置类中,使用 __copy__ 和 __deepcopy__ 方法来自定义浅拷贝和深拷贝行为。

import copy
class TestConfig:
    def __init__(self, name, settings):
        self.name = name
        self.settings = settings
    def __copy__(self):
        return TestConfig(self.name, self.settings.copy())
    def __deepcopy__(self, memo):
        return TestConfig(self.name, copy.deepcopy(self.settings, memo))
config = TestConfig("Test Config", {"key": "value"})
shallow_copy = copy.copy(config)
deep_copy = copy.deepcopy(config)
config.settings["key"] = "changed"
assert config.settings["key"] == "changed"
assert shallow_copy.settings["key"] == "changed"
assert deep_copy.settings["key"] == "value"

注意事项:

__copy__ 和 __deepcopy__ 方法用于自定义复制行为。

注意处理复杂数据结构的复制。

来源:测试开发学习交流内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯