unittest和pytest代码学习实践
时间: 2024-02-01 12:04:03 浏览: 118
unittest和pytest都是Python中常用的单元测试框架,用于测试代码的正确性和可靠性。下面将分别介绍它们的代码学习实践。
一、unittest
1. 测试框架初始化
```
import unittest
class TestDemo(unittest.TestCase):
def setUp(self):
# 测试用例执行前的初始化操作
pass
def tearDown(self):
# 测试用例执行后的清理操作
pass
def test_demo(self):
# 测试用例
pass
if __name__ == '__main__':
unittest.main()
```
2. 测试用例编写
```
import unittest
class TestDemo(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 2, 3)
def test_subtract(self):
self.assertEqual(3 - 2, 1)
if __name__ == '__main__':
unittest.main()
```
3. 断言方法
unittest提供了多种断言方法,常用的有以下几种:
- assertEqual(a, b):判断a是否等于b
- assertNotEqual(a, b):判断a是否不等于b
- assertTrue(x):判断x是否为True
- assertFalse(x):判断x是否为False
- assertIn(a, b):判断a是否在b中
- assertNotIn(a, b):判断a是否不在b中
- assertIs(a, b):判断a是否是b
- assertIsNot(a, b):判断a是否不是b
4. 测试套件
测试套件是由多个测试用例组成的集合,可以通过TestSuite类来创建测试套件。
```
import unittest
class TestAdd(unittest.TestCase):
def test_add1(self):
self.assertEqual(1 + 2, 3)
def test_add2(self):
self.assertEqual(2 + 3, 5)
class TestSubtract(unittest.TestCase):
def test_subtract1(self):
self.assertEqual(3 - 2, 1)
def test_subtract2(self):
self.assertEqual(5 - 3, 2)
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestAdd())
suite.addTest(TestSubtract())
unittest.TextTestRunner().run(suite)
```
二、pytest
1. 基本用法
```
def test_add():
assert 1 + 2 == 3
def test_subtract():
assert 3 - 2 == 1
```
2. 参数化测试
```
import pytest
@pytest.mark.parametrize('a, b, expected', [
(1, 2, 3),
(2, 3, 5),
])
def test_add(a, b, expected):
assert a + b == expected
```
3. fixture
fixture是pytest中的一个重要概念,可以用来提供测试用例所需要的资源。比如,我们可以通过fixture来创建数据库连接、打开浏览器等。
```
import pytest
import requests
@pytest.fixture()
def url():
return 'http://www.example.com'
def test_request(url):
response = requests.get(url)
assert response.status_code == 200
```
4. mark
mark是pytest中的一个标记机制,可以用来标记某些测试用例,方便对其进行筛选和执行。
```
import pytest
@pytest.mark.smoke
def test_add():
assert 1 + 2 == 3
@pytest.mark.regression
def test_subtract():
assert 3 - 2 == 1
```
pytest支持自定义mark,比如我们可以通过以下方式自定义一个slow mark:
```
import pytest
def pytest_configure(config):
config.addinivalue_line(
"markers", "slow: mark test as slow"
)
@pytest.mark.slow
def test_add():
assert 1 + 2 == 3
```
阅读全文