学会这些pytest-Allure常用特性allure.attach、allure.step、fixture、environment、categories

allure.attach

allure.attach用于在测试报告中添加附件,补充测试结果。附件格式可以是txt、jpg等,附件内容通常是测试数据、截图等。

allure.attach提供了两种方法:allure.attach()allure.attach.file()

allure.attach()

作用:在测试报告中生成指定内容、名称、类型的附件

语法:allure.attach(body, name=None, attachment_type=None, extension=None)

参数说明:

  1. body,需要显示的内容,也可以理解为写入附件的内容
  2. name,附件名称
  3. attachment_type,附件类型,如csv、jpg、html 等,由allure.attachment_type提供
  4. extension:附件扩展名,不常用

allure.attach.file()

作用:向测试用例中上传附件

语法:allure.attach.file(source, name=None, attachment_type=None, extension=None)

参数说明:source为文件路径,其他参数与allure.attach()参数一致。

在UI自动化测试中,会经常用到这个方法来上传用例执行的截图。

示例

test_login.py

复制代码
  1. import allure

  2. import pytest

  3. import requests

  4. import json

  5. data = [("lilei", "123456"), ("hanmeimei", "888888"), ("xiaoming", "111111")]

  6. ids = ["username:{}-password:{}".format(username, password) for username, password in data]

  7. @allure.epic("xx在线购物平台接口测试")

  8. @allure.feature("登录模块")

  9. class TestLogin:

  10. @allure.story("用户登录")

  11. @allure.title("登录")

  12. @pytest.mark.parametrize("username, password", data, ids=ids)

  13. def test_login(self, username, password):

  14. headers = {"Content-Type": "application/json;charset=utf8"}

  15. url = "http://127.0.0.1:5000/login"

  16. _data = {

  17. "username": username,

  18. "password": password

  19. }

  20. allure.attach(

  21. body="用户名-{},密码-{}".format(username, password),

  22. name="登录参数",

  23. attachment_type=allure.attachment_type.TEXT

  24. )

  25. res = requests.post(url=url, headers=headers, json=_data).text

  26. res = json.loads(res)

  27. assert res['code'] == 1000

  28. @allure.story("用户退出登录")

  29. @allure.title("退出登录")

  30. def test_logout(self):

  31. '''这条测试用例仅仅只是为了举例说明allure.attach.file的使用'''

  32. print("退出登录,并截图")

  33. # 截图路径

  34. testcase_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

  35. source_path = testcase_path + "/screenshot/logout.jpg"

  36. allure.attach.file(

  37. source=source_path,

  38. name="退出登录后截图",

  39. attachment_type=allure.attachment_type.JPG

  40. )

  41. assert True

上述代码中使用了@pytest.mark.parametrize(),Allure能够很好的支持@pytest.mark.parametrize()进行参数化。

run.py

复制代码
  1. if __name__ == '__main__':

  2. pytest.main(['testcase/test_login.py', '-s', '-q', '--alluredir', './result'])

  3. os.system('allure generate ./result -o ./report --clean')

运行run.py,测试报告结果展示如下:

allure.attach()结果:

allure.attach.file()结果:

从结果可以看出来,两种方法都在报告中对应的测试用例中展示了附件内容。

allure.attach()结果还可以看出来,Allure能够很好的支持@pytest.mark.parametrize()进行参数化

with allure.step

上一篇文章我们使用了装饰器@allure.step()标记函数使之成为测试步骤,而在测试函数/方法中,我们还可以通过with allure.step()的方式标记测试步骤。

它们之间的区别在于,@allure.step()用于标记通用函数,当这个被标记的函数被调用后,会插入步骤说明并展示在Allure报告中。

而with allure.step()则是将普通的代码标记为测试步骤,执行到这段代码时则会在Allure报告中展示步骤说明。

我们在上面代码的基础上,加入with allure.step(),示例如下:

复制代码
  1. import allure

  2. import pytest

  3. import requests

  4. import json

  5. data = [("lilei", "123456"), ("hanmeimei", "888888"), ("xiaoming", "111111")]

  6. ids = ["username:{}-password:{}".format(username, password) for username, password in data]

  7. @allure.epic("xx在线购物平台接口测试")

  8. @allure.feature("登录模块")

  9. class TestLogin:

  10. @allure.story("用户登录")

  11. @allure.title("登录")

  12. @pytest.mark.parametrize("username, password", data, ids=ids)

  13. def test_login(self, username, password):

  14. headers = {"Content-Type": "application/json;charset=utf8"}

  15. url = "http://127.0.0.1:5000/login"

  16. _data = {

  17. "username": username,

  18. "password": password

  19. }

  20. # 第一步,请求登录接口

  21. with allure.step("请求登录接口"):

  22. allure.attach(

  23. body="用户名-{},密码-{}".format(username, password),

  24. name="登录参数",

  25. attachment_type=allure.attachment_type.TEXT

  26. )

  27. res = requests.post(url=url, headers=headers, json=_data).text

  28. res = json.loads(res)

  29. # 第二步,获取返回参数进行断言

  30. with allure.step("断言"):

  31. assert res['code'] == 1000

测试报告结果展示如下:

代码中插入的测试步骤如上图中的标记所示。

fixture

pytest的fixture函数可以实现setup、teardown的功能,而Allure会跟踪每个fixture的调用情况,详细显示调用了哪些fixture和参数以及调用顺序。

我们在上面代码的基础上,加入fixture函数,示例如下:

复制代码
  1. import allure

  2. import pytest

  3. import requests

  4. import json

  5. @pytest.fixture(scope="class", autouse=True)

  6. def fixture_demo(request):

  7. print("连接数据库")

  8. def finalizer():

  9. print("关闭数据库")

  10. request.addfinalizer(finalizer)

  11. data = [("lilei", "123456"), ("hanmeimei", "888888"), ("xiaoming", "111111")]

  12. ids = ["username:{}-password:{}".format(username, password) for username, password in data]

  13. @allure.epic("xx在线购物平台接口测试")

  14. @allure.feature("登录模块")

  15. class TestLogin:

  16. @allure.story("用户登录")

  17. @allure.title("登录")

  18. @pytest.mark.parametrize("username, password", data, ids=ids)

  19. def test_login(self, username, password):

  20. headers = {"Content-Type": "application/json;charset=utf8"}

  21. url = "http://127.0.0.1:5000/login"

  22. _data = {

  23. "username": username,

  24. "password": password

  25. }

  26. # 第一步,请求登录接口

  27. with allure.step("请求登录接口"):

  28. allure.attach(

  29. body="用户名-{},密码-{}".format(username, password),

  30. name="登录参数",

  31. attachment_type=allure.attachment_type.TEXT

  32. )

  33. res = requests.post(url=url, headers=headers, json=_data).text

  34. res = json.loads(res)

  35. # 第二步,获取返回参数进行断言

  36. with allure.step("断言"):

  37. assert res['code'] == 1000

测试报告结果展示如下:

从结果可以看出来,Allure测试报告展示了用例调用的fixture函数信息。多个fixture函数被调用及其执行顺序的展示,这里不做过多说明。

environment

在Allure报告的首页可以展示此次测试执行的环境信息 (如测试环境、测试人员、被测系统版本号、系统配置环境等),这需要通过创建environment.properties或environment.xml进行配置,并把文件放置在--alluredir指定的文件夹中 (博主这里即result文件夹)。

environment.properties示例如下:

复制代码
  1. system=win

  2. python=3.7.7

  3. version=1.0.1

  4. host=127.0.0.1

environment.xml

复制代码
  1. <environment>

  2. <parameter>

  3. <key>system</key>

  4. <value>win</value>

  5. </parameter>

  6. <parameter>

  7. <key>python</key>

  8. <value>3.7.7</value>

  9. </parameter>

  10. <parameter>

  11. <key>version</key>

  12. <value>1.0.1</value>

  13. </parameter>

  14. <parameter>

  15. <key>host</key>

  16. <value>127.0.0.1</value>

  17. </parameter>

  18. </environment>

生成报告后首页展示ENVIRONMENT信息如下:

categories

Allure报告中有一栏叫Categories,即分类,用于展示测试结果,默认只显示两类缺陷结果:

  1. Product defects 产品缺陷(测试结果:failed)
  2. Test defects 测试缺陷(测试结果:error/broken)

如下图所示

如果想要缺陷分类显示更丰富,我们可以通过创建categories.json文件进行自定义缺陷分类,并把文件放置在--alluredir指定的文件夹中 (即同environment.properties放在同一目录中)。

categories.json示例如下:

  1. [

  2. {

  3. "name": "Passed tests",

  4. "matchedStatuses": ["passed"]

  5. },

  6. {

  7. "name": "Ignored tests",

  8. "matchedStatuses": ["skipped"]

  9. },

  10. {

  11. "name": "Infrastructure problems",

  12. "matchedStatuses": ["broken", "failed"],

  13. "messageRegex": ".*bye-bye.*"

  14. },

  15. {

  16. "name": "Outdated tests",

  17. "matchedStatuses": ["broken"],

  18. "traceRegex": ".*FileNotFoundException.*"

  19. },

  20. {

  21. "name": "Product defects",

  22. "matchedStatuses": ["failed"]

  23. },

  24. {

  25. "name": "Test defects",

  26. "matchedStatuses": ["broken"]

  27. }

  28. ]

参数说明:

  • name:分类名称
  • matchedStatuses:测试用例的运行状态,默认["failed", "broken", "passed", "skipped", "unknown"]
  • messageRegex:测试用例运行的错误信息,默认是 .* ,通过正则去匹配
  • traceRegex:测试用例运行的错误堆栈信息,默认是 .* ,同样通过正则去匹配

执行后会在报告的Categories中展示,首页CATERORIES栏展示如下:

Categories页面展示:

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关推荐
古希腊掌握嵌入式的神1 小时前
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
网络·物联网·网络协议·tcp/ip·udp
爱写代码的小朋友2 小时前
华三交换机配置常用命令
运维·服务器·网络
wangjun51592 小时前
jenkins 参数化发布到服务器 publish over ssh、label、Parameterized publishing
服务器·ssh·jenkins
愚润求学2 小时前
【Linux】Linux权限
linux·服务器·语法
半句唐诗2 小时前
设计与实现高性能安全TOKEN系统
前端·网络·安全
低头不见2 小时前
一个服务器算分布式吗,分布式需要几个服务器
运维·服务器·分布式
麻芝汤圆2 小时前
使用 MapReduce 进行高效数据清洗:从理论到实践
大数据·linux·服务器·网络·数据库·windows·mapreduce
赋创小助手2 小时前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
郑梓妍3 小时前
ubuntu改用户权限
服务器·网络·数据库
老六ip加速器3 小时前
如何改电脑网络ip地址:一步步指导
网络·网络协议·tcp/ip