在大规模的自动化测试框架中,测试用例的数量通常非常庞大。为了有效地管理这些测试用例,一种常用的技术是使用测试标签(或标记)。测试标签可以帮助你快速定位和执行特定类别的测试,比如回归测试、冒烟测试或性能测试。在Python中,我们可以通过unittest框架的自定义属性或pytest的标记(markers)来实现这一点。
🌟 实例一:使用unittest的自定义属性
import unittest
class TestAPI(unittest.TestCase):
@property
def test_tags(self):
return ['unit']
def test_login(self):
self.assertTrue(True)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestAPI)
for test in suite:
print(f'Test: {test.id()}, Tags: {getattr(test, "test_tags", [])}')
🌟 实例二:使用unittest的setUpClass方法
import unittest
class TestAPI(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.test_tags = ['functional']
def test_api_functionality(self):
self.assertTrue(True)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestAPI)
for test in suite:
print(f'Test: {test.id()}, Tags: {getattr(test.__class__, "test_tags", [])}')
🌟 实例三:使用pytest的标记
import pytest
@pytest.mark.smoke
def test_smoke():
assert True
if __name__ == '__main__':
pytest.main(['-m', 'smoke'])
🌟 实例四:多标记
import pytest
@pytest.mark.regression
@pytest.mark.smoke
def test_regress_and_smoke():
assert True
if __name__ == '__main__':
pytest.main(['-m', 'smoke or regression'])
🌟 实例五:标记整个测试类
import pytest
@pytest.mark.performance
class TestPerformance:
def test_performance(self):
assert True
if __name__ == '__main__':
pytest.main(['-m', 'performance'])
🌟 实例六:使用标记过滤器
import pytest
@pytest.mark.long_running
def test_long_running():
assert True
if __name__ == '__main__':
pytest.main(['-m', 'not long_running'])
🌟 实例七:标记参数化的测试
import pytest
@pytest.mark.parametrize("input, expected", [(1, 1), (2, 2)])
@pytest.mark.functional
def test_parametrized(input, expected):
assert input == expected
if __name__ == '__main__':
pytest.main(['-m', 'functional'])
🌟 实例八:动态标记
import pytest
def pytest_collection_modifyitems(items):
for item in items:
if 'login' in item.name:
item.add_marker(pytest.mark.smoke)
if __name__ == '__main__':
pytest.main()
🌟 实例九:使用自定义标记插件
# conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption('--tag', action='store', default='all', help='run tests with specified tag')
def pytest_collection_modifyitems(config, items):
selected_tag = config.getoption('tag')
if selected_tag != 'all':
skip_tag = pytest.mark.skip(reason=f'not running tests with tag {selected_tag}')
for item in items:
if selected_tag not in [mark.name for mark in item.iter_markers()]:
item.add_marker(skip_tag)
# test_example.py
import pytest
@pytest.mark.smoke
def test_smoke():
assert True
if __name__ == '__main__':
pytest.main(['--tag', 'smoke'])
🌟 实例十:利用标记进行测试报告定制
import pytest
def pytest_terminal_summary(terminalreporter):
passed_smoke_tests = terminalreporter.stats.get('passed', [])
smoke_tests = [item for item in passed_smoke_tests if 'smoke' in [mark.name for mark in item.keywords]]
print(f'\nSmoke Tests Passed: {len(smoke_tests)}')
if __name__ == '__main__':
pytest.main()
以上实例展示了如何在Python的unittest和pytest框架中使用测试标签。测试标签的引入使得测试的选择性和组织性更强,特别是在大型项目中,这可以显著提高测试的效率和效果。
如果你正在寻找一个更系统的方式来管理你的自动化测试,考虑将测试标签纳入你的测试策略中。它们不仅可以帮助你更好地组织测试,还能在构建持续集成/持续部署(CI/CD)流程时提供灵活性。
如果你对Python编程和自动化测试感兴趣,记得关注我们的微信订阅号,获取更多实用的编程技巧和自动化测试指南。🚀
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。