setUpClass & tearDownClass
setUpClass and tearDownClass are class methods that run once
before and after all tests in a class. They are useful for expensive setup operations
that don't need to repeat for every test.
Basic Usage
import unittest
class TestAPI(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.server = start_test_server()
cls.base_url = cls.server.url
@classmethod
def tearDownClass(cls):
cls.server.shutdown()
def test_get_users(self):
response = requests.get(f"{self.base_url}/users")
self.assertEqual(response.status_code, 200)
def test_post_user(self):
response = requests.post(
f"{self.base_url}/users",
json={"name": "Alice"}
)
self.assertEqual(response.status_code, 201)
Execution Order
# For a class with 3 tests:
# 1. setUpClass() โ runs ONCE
# 2. setUp() โ runs for test 1
# 3. test_first() โ test 1
# 4. tearDown() โ cleanup for test 1
# 5. setUp() โ runs for test 2
# 6. test_second() โ test 2
# 7. tearDown() โ cleanup for test 2
# 8. setUp() โ runs for test 3
# 9. test_third() โ test 3
# 10. tearDown() โ cleanup for test 3
# 11. tearDownClass() โ runs ONCE
Important Notes
- Must be decorated with
@classmethod. - Access class-level attributes via
cls, notself. - If
setUpClassfails, all tests in the class are skipped. - Use for expensive operations: database connections, server startup, large file creation.
Key Takeaway
Use setUpClass/tearDownClass for one-time setup shared across all
tests in a class. They run as classmethods and are ideal for expensive operations.