1. 前言

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

2. allure的标记装饰器

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

3. BDD标记装饰器

提供了三个装饰器

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

4. 栗子一(story+feature)

4.1 测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. __title__ =
  5. __Time__ = 2020-04-19 14:27
  6. __Author__ = 小菠萝测试笔记
  7. __Blog__ = https://www.cnblogs.com/poloyy/
  8. """
  9. import allure
  10. def test_without_any_annotations_that_wont_be_executed():
  11. pass
  12. @allure.story('epic_1')
  13. def test_with_epic_1():
  14. pass
  15. @allure.story('story_1')
  16. def test_with_story_1():
  17. pass
  18. @allure.story('story_2')
  19. def test_with_story_2():
  20. pass
  21. @allure.feature('feature_2')
  22. @allure.story('story_2')
  23. def test_with_story_2_and_feature_2():
  24. pass

4.2 无标记装饰器

我们先看看没有设置标记装饰器时,allure报告是咋样的
image.png
image.png

4.3 添加装饰器

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

4.4 知识点

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

5. 栗子二

5.1 前言

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

5.2 测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. __title__ =
  5. __Time__ = 2020/10/27 19:44
  6. __Author__ = 小菠萝测试笔记
  7. __Blog__ = https://www.cnblogs.com/poloyy/
  8. """
  9. import os
  10. import allure
  11. import pytest
  12. @pytest.fixture(scope="session")
  13. def login_fixture():
  14. print("=== 前置登录 ===")
  15. @allure.step("步骤1")
  16. def step_1():
  17. print("操作步骤---------------1")
  18. @allure.step("步骤2")
  19. def step_2():
  20. print("操作步骤---------------2")
  21. @allure.step("步骤3")
  22. def step_3():
  23. print("操作步骤---------------3")
  24. @allure.epic("epic 相当于总体描述")
  25. @allure.feature("测试模块")
  26. class TestAllureALL:
  27. @allure.testcase("https://www.cnblogs.com/poloyy/", '测试用例,点我一下')
  28. @allure.issue("https://www.cnblogs.com/poloyy/p/12219145.html", 'Bug 链接,点我一下')
  29. @allure.title("用例的标题")
  30. @allure.story("story one")
  31. @allure.severity("critical")
  32. def test_case_1(self, login_fixture):
  33. """
  34. 小菠萝测试笔记地址:https://www.cnblogs.com/poloyy/
  35. """
  36. print("测试用例1")
  37. step_1()
  38. step_2()
  39. @allure.story("story two")
  40. def test_case_2(self, login_fixture):
  41. print("测试用例2")
  42. step_1()
  43. step_3()
  44. @allure.epic("另一个 epic")
  45. @allure.feature("查找模块")
  46. class TestAllureALL2:
  47. @allure.story("story three")
  48. def test_case_3(self, login_fixture):
  49. print("测试用例3")
  50. step_1()
  51. @allure.story("story four")
  52. def test_case_4(self, login_fixture):
  53. print("测试用例4")
  54. step_3()
  55. if __name__ == '__main__':
  56. pytest.main(['-s', '-q', '--alluredir', './allure'])
  57. os.system('allure generate -c -o ./allure-report')
  58. os.system('allure open ./allure-report')

5.3 allure 报告

image.png
image.png

6. 总结

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

6.1 提出问题

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

6.2 自问自答

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

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

6.3 举栗子

  1. # 只运行 epic 名为 test 的测试用例
  2. pytest --alluredir ./report/allure --allure-epics=test
  3. # 只运行 feature 名为 模块 的测试用例
  4. pytest --alluredir ./report/allure --allure-features=模块
  5. # 只运行 story1、story2 的测试用例(也可以不用=号 空格就行了哦)
  6. pytest tests.py --allure-stories story1,story2
  7. # 指定 feature+story
  8. pytest tests.py --allure-features feature2 --allure-stories story2