pytest(22):allure标记之 @allure.epic()、@allure.feature()、@allure.story() 的详细使用

前言

  • 前面几篇文章主要介绍了allure的特性,这篇文章我们就来讲下allure的标记用法
  • 有时候我们写pytest的时候,会用到 @pytest.mark 但并不会显示在allure报告上
  • 而allure也提供了三种类型的标记装饰器,它们是可以显示在allure报告上的

 

allure的标记装饰器

  • BDD样式的标记装饰器
  • 优先级(严重程度)标记装饰器
  • 自定义标记装饰器

BDD标记装饰器

提供了三个装饰器

  • @allure.epic:敏捷里面的概念,定义史诗,往下是 feature
  • @allure.feature:功能点的描述,理解成模块往下是 story
  • @allure.story:故事,往下是 title
  • @allure.title:标题

实例1

测试代码

import allure


def test_without_any_annotations_that_wont_be_executed():
pass


@allure.epic('epic_1')
def test_with_epic_1():
pass


@allure.story('story_1')
def test_with_story_1():
pass


@allure.story('story_2')
def test_with_story_2():
pass


@allure.feature('feature_2')
@allure.story('story_2')
def test_with_story_2_and_feature_2():
pass

添加装饰器

加了 @allure.feature 和 @allure.story 之后的 allure 报告

知识点

  • story 是 feature 的子集,当测试用例有 @allure.feature、@allure.story 时,在报告上会先显示 feature,点开之后再显示 story【可以想象成,安徒生童话(feature)有很多个童话故事(story)】
  • 如果不加 @allure.feature、@allure.story 时,在Behaviors栏目下,测试用例都不会分类显示,当用例多的时候可能看的花里胡哨

实例2

前言

这里应用了包括前面所讲的全部装饰器

测试代码

import os

import allure
import pytest


@pytest.fixture(scope="session")
def login_fixture():
print("=== 前置登录 ===")


@allure.step("步骤1")
def step_1():
print("操作步骤---------------1")


@allure.step("步骤2")
def step_2():
print("操作步骤---------------2")


@allure.step("步骤3")
def step_3():
print("操作步骤---------------3")


@allure.epic("epic 相当于总体描述")
@allure.feature("测试模块")
class TestAllureALL:

@allure.testcase("https://www.cnblogs.com/lhTest/p/15131751.html", '测试用例,点我一下')
@allure.issue("https://www.cnblogs.com/lhTest/p/15131751.html", 'Bug 链接,点我一下')
@allure.title("用例的标题")
@allure.story("story one")
@allure.severity("critical")
@allure.description('描述')
def test_case_1(self, login_fixture):

print("测试用例1")
step_1()
step_2()

@allure.story("story two")
def test_case_2(self, login_fixture):
# 不会执行login_fixture
print("测试用例2")
step_1()
step_3()


@allure.epic("另一个 epic")
@allure.feature("查找模块")
class TestAllureALL2:
@allure.story("story three")
def test_case_3(self, login_fixture):
# 不会执行login_fixture
print("测试用例3")
step_1()

@allure.story("story four")
def test_case_4(self, login_fixture):
# 不会执行login_fixture
print("测试用例4")
step_3()


if __name__ == '__main__':
# pytest执行allure命令不用加=号正常是--alluredir=路径,单独执行test_allure4.py这个文件
pytest.main(['-s', '-q','test_allure4.py' ,'--alluredir', './allure'])
os.system('cd ..')
os.system('cd pythondemo/test_allure0816')
os.system('allure serve ./allure')

allure 报告

 

 

总结

倘若是用 pytest+allure 写项目,又想用 @pytest.mark.xxx 来给不同的用例添加标记的话,可以尝试用 @allure.feature、@allure.story 替换,毕竟可以显示在报告上

 

提出问题

用命令行方式运行时,可以指定运行某个story、feature、epic吗?

 

自问自答

当然可以,跟 @pytest.mark.xxx 指定标签运行的方式没啥区别,添加下面的命令行参数就行

  • --allure-epics
  • --allure-features
  • --allure-stories

例子

# 只运行 epic 名为 test 的测试用例
pytest --alluredir ./report/allure --allure-epics=test

# 只运行 feature 名为 模块 的测试用例
pytest --alluredir ./report/allure --allure-features=模块

# 只运行 story1、story2 的测试用例(也可以不用=号 空格就行了哦)
pytest tests.py --allure-stories story1,story2

# 指定 feature+story
pytest tests.py --allure-features feature2 --allure-stories story2
posted @ 2021-08-19 10:30  Tester-**  阅读(1454)  评论(0编辑  收藏  举报