执行测试用例时,有的时候我们希望能够更加灵活的指定执行某些测试用例,pytest支持我们通过使用marker装饰器@pytest.mark来实现这个需求,而allure也同样提供了三种类似的方法来实现这个需求。
allure的三种方式:
- BDD(行为驱动开发)的风格标记:Epics、Features、Stories;
- Severity标签;
- 自定义标签;
BDD markers:
allure提供的两个装饰器:@allure.feature和@allure.story,可以将我们的用例根据Feature和Story分类,通过将name使用epic_ 开头的前缀就能够指定Feature和Story属于哪一个epic。
举个栗子:
# file_name: test_allure_tag_BDD.py import pytest import allure def test_without_any_annotations_that_wont_be_executed(): """ 没有任何注解 :return: """ pass @allure.story('epic_1') def test_with_epic_1(): """ 通过指定name为epic_前缀的方式来指定story属于哪一个epic :return: """ pass @allure.story('story_1') def test_with_story_1(): """ 指定该测试用例属于的story :return: """ pass @allure.story('story_2') def test_with_story_2(): """ 指定该测试用例属于的story :return: """ pass @allure.feature('feature_2') @allure.story('story_2') def test_with_story_2_and_feature_2(): """ 指定该测试用例属于的feature和story :return: """ pass if __name__ == '__main__': pytest.main(['-s', 'test_allure_tag_BDD.py'])
可以通过下面命令行选项来指定想要执行的测试用例集,如果命令行选项的值有多个就用逗号分隔:
- --allure-epics
- --allure-features
- --allure-stories
比如:
上面截图中可以看到我们通过指定--allure-stories为story_1、story_2来指定运行用例,结果中可以看到我们只执行了用例属于story_1和story_2的测试用例。
上面截图中,指定--allure-features为feature_2,--allure-stories为story_2,运行结果中能看到只运行了用例属于feature_2和story_2的测试用例。
Severity markers:
使用@allure.severity来标识测试用例的严重等级,严重等级是allure.severity_level枚举中的一个。
用例等级:
allure划分用例等级为5个:
- blocker:阻塞缺陷(功能未实现,无法下一步)
- critical:严重缺陷(功能点缺失)
- normal:一般缺陷(边界情况,格式错误)
- minor:次要缺陷(界面错误与ui需求不符)
- trivial:轻微缺陷(必须项无提示,或者提示不规范)
举个栗子:
file_name: test_allure_tag_severity.py import pytest import allure def test_with_no_severity_label(): """ 不定义任何severity标签 :return: """ pass @allure.severity(allure.severity_level.TRIVIAL) def test_with_trivial_severity(): """ 定义severity标签为TRIVIAL :return: """ pass @allure.severity(allure.severity_level.NORMAL) def test_with_normal_severity(): """ 定义severity标签为NORMAL :return: """ pass @allure.severity(allure.severity_level.NORMAL) class TestClassWithNormalSeverity(object): """ 定义类的severity标签为NORMAL """ def test_inside_the_normal_severity_test_class(self): pass @allure.severity(allure.severity_level.CRITICAL) def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self): pass if __name__ == '__main__': pytest.main(['-s', 'test_allure_tag_severity.py'])
severity装饰器可以用在函数、方法和类上面。
通过使用--allure-severities 命令行选项指定运行哪些测试用例,如果命令行选项的值有多个就用逗号分隔。
比如: