在Python中,魔法方法(也称为特殊方法)是一些特殊命名的方法,它们允许你定制类的行为。虽然这些方法不直接应用于接口自动化测试,但它们可以用来增强测试框架的功能。
__init__ 方法
实际使用场景: 初始化测试环境。
import unittest
import requests
class TestAPI(unittest.TestCase):
def __init__(self, methodName='runTest'):
super().__init__(methodName)
self.base_url = 'http://api.example.com'
def test_get_users(self):
response = requests.get(self.base_url + '/users')
self.assertEqual(response.status_code, 200)
setUp 方法
实际使用场景: 设置每个测试方法前的准备工作。
import unittest
import requests
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_get_users(self):
response = requests.get(self.base_url + '/users', headers=self.headers)
self.assertEqual(response.status_code, 200)
tearDown 方法
实际使用场景: 清理每个测试方法后的资源。
import unittest
import requests
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def tearDown(self):
# 清理资源
pass
def test_get_users(self):
response = requests.get(self.base_url + '/users', headers=self.headers)
self.assertEqual(response.status_code, 200)
__str__ 方法
实际使用场景: 改变测试类的字符串表示形式,便于调试。
import unittest
import requests
class TestAPI(unittest.TestCase):
def __str__(self):
return "API Test Suite"
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_get_users(self):
response = requests.get(self.base_url + '/users', headers=self.headers)
self.assertEqual(response.status_code, 200)
__repr__ 方法
实际使用场景: 改变测试类的表示形式,便于调试。
import unittest
import requests
class TestAPI(unittest.TestCase):
def __repr__(self):
return ""
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_get_users(self):
response = requests.get(self.base_url + '/users', headers=self.headers)
self.assertEqual(response.status_code, 200)
__eq__ 方法
实际使用场景: 自定义对象的相等性比较,可用于测试对象的等价性。
import unittest
import requests
class Response:
def __init__(self, status_code):
self.status_code = status_code
def __eq__(self, other):
return self.status_code == other.status_code
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_get_users(self):
response = Response(200)
self.assertEqual(response, Response(200))
__lt__ 方法
实际使用场景: 自定义对象的小于比较,可用于排序或测试对象间的大小关系。
import unittest
import requests
class Response:
def __init__(self, status_code):
self.status_code = status_code
def __lt__(self, other):
return self.status_code < other.status_code
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_compare_responses(self):
response1 = Response(200)
response2 = Response(404)
self.assertTrue(response1 < response2)
__len__ 方法
实际使用场景: 自定义对象的长度,可用于测试数据结构的大小。
import unittest
import requests
class ResponseList:
def __init__(self, responses):
self.responses = responses
def __len__(self):
return len(self.responses)
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_response_list_length(self):
response_list = ResponseList([Response(200), Response(404)])
self.assertEqual(len(response_list), 2)
__iter__ 方法
实际使用场景: 自定义迭代行为,可用于循环遍历对象集合。
import unittest
import requests
class ResponseList:
def __init__(self, responses):
self.responses = responses
def __iter__(self):
return iter(self.responses)
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_response_list_iteration(self):
response_list = ResponseList([Response(200), Response(404)])
for response in response_list:
self.assertGreaterEqual(response.status_code, 200)
__getitem__ 方法
实际使用场景: 自定义索引访问行为,可用于通过索引访问对象集合。
import unittest
import requests
class ResponseList:
def __init__(self, responses):
self.responses = responses
def __getitem__(self, index):
return self.responses[index]
class TestAPI(unittest.TestCase):
def setUp(self):
self.base_url = 'http://api.example.com'
self.headers = {'Content-Type': 'application/json'}
def test_response_list_index_access(self):
response_list = ResponseList([Response(200), Response(404)])
self.assertEqual(response_list[0].status_code, 200)