使用
官方教程:https://docs.qameta.io/allure
入门
想要看到allure报告,需要做2个步骤: 1、pytest执行时关联allure:pytest命令带上--alluredir 结果存放目录
或--alluredir=结果存放目录
; 2、打开执行报告:allure serve 结果存放目录
文件目录如下:
test_allure.py文件代码如下:
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6def test_add_positive():assert 1 + 3 == 4def test_add_negative():assert -1 + -3 == -4
main.py文件代码如下:
import osimport pytest import timeif __name__ == '__main__':#使用pytext-html生成测试报告# pytest.main(['-v','--html=测试报告.html','./'])#使用allure生成测试报告pytest.main(["./","-sv", "--alluredir", "./report/temp_jsonreport"])os.system("allure generate ./report/temp_jsonreport -o ./report/html --clean")'''具体:1、"./"这个是你测试用例的路径,比如我的所有的测试用例都在这个文件夹下,这个文件下又有很多每个用例的文件夹,那你如果想执行所有的用例就写到"./"这个路径就可以了,如果是想要执行这个文件下的某个用例,就写到具体的那个文件的路径。2、-s表示结果显示。-v表示显示详细用例2、"--alluredir"这个是创建allure报告的路径。3、-o是执行,--clean是清除之前生成的报告。main.py整理好了,可以执行main文件,用例执行完成后,在report文件夹下会有两个文件夹:html、temp_jsonreport。在html这个文件夹下,找到index.html文件,这个就是我们生成的测试报告,右键用浏览器打开就可以看到了。'''
执行后的效果如下:
allure报告如下:
效果如下:
allure装饰器
allure提供了一些装饰器,比较常用的如下:
@Epic:用于定义测试用例所属的史诗(Epic)级别,通常用于对测试用例进行分类和组织。 @Feature:用于定义测试用例所属的特性(Feature)级别,通常用于对测试用例进行更详细的分类和组织。 @Story:用于定义测试用例所属的故事(Story)级别,通常用于对测试用例进行更详细的描述和组织。 @Severity:用于定义测试用例的严重程度,可以是BLOCKER、CRITICAL、NORMAL、MINOR或TRIVIAL等级别。 @Description:用于为测试用例添加描述信息,可以提供更详细的说明和背景信息。 @Step:用于定义测试用例中的一个步骤,可以在报告中展示每个步骤的执行情况和结果。 @Attachment:用于添加附件到测试报告中,可以是截图、日志文件等。 @Link:用于添加链接到测试报告中,可以是相关文档、需求或其他资源的链接。 @Issue:用于添加缺陷或问题的链接到测试报告中。 @TmsLink:用于添加测试管理系统(Test Management System)中的链接到测试报告中。
方法
参数值
参数说明
@allure.epic(*epics)
epic描述
定义项目,当由多个项目时使用,一般传参一个字符串,表示项目名称。往下时feature
@allure.feature(*features)
分支
用例按照模块区分(类似于一个业务分了几个步骤/功能),一般传参一个字符串,表示分支名称。
@allure.story(*stories)
故事
类似于场景(即一个功能分为几个方面去验证),一般传参一个字符串,表示场景名称。
@allure.title(test_title)
用例标题
给指定的用例设置名称,在测试报告中,展示的用例名称不是函数名称,是设置的test_title
@allure.testcase(url, name=None)
用例相关链接
设置用例存放的地址,方便访问对应用例详情,name不为None时,文本显示为name,否则显示用例所在url
@allure.issue(url, name=None)
缺陷地址
对应缺陷管理系统里的缺陷地址,用法于testcase的类似
@allure.description(test_description)
用例描述
test_description参数里说明了当前用例的详细内容,比如说前置条件、验证场景、预期结果等需要关注的内容
@allure.link(url, link_type='link', name=None)
定义连接
用于定义一个需要在测试报告中展示的连接,url和name参数逻辑与
allure.testcase()
的一致,link_type默认是link,可为issue、test_case,设置为issueallure.attach(body, name=None,attachment_type=None,extension=None)
按照附件形式添加展示
将python对象按照指定的附件类型展示在报告中,可支持的attachment_type(附件类型)在
allure.attachment_type
中allure.attach.file(source, name=None, attachment_type=None, extension=None)
添加附件
将文件按照指定的附件类型读取并展示到报告中,可支持的attachment_type(附件类型)在
allure.attachment_type
中
1、@allure.epic(*epics)和@allure.feature(*features)
在`pytest`中,使用Allure报告来增加测试报告的信息量是一种常见做法。`@allure.epic()`注解用于标识测试用例属于哪个较高层次的特性或者功能模块,比如一个项目被划分为多个模块或者服务,每个模块或服务可以视为一个`epic`。
在pytest中使用Allure报告时,`@allure.epic`和`@allure.feature`注解(或装饰器)用于组织和分类测试用例,帮助生成更加结构化和详细的测试报告。
示例:
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import allure import pytest# 使用@allure.epic装饰器来标注测试用例属于哪个"Epic" @allure.epic("用户管理") class TestUserManagement(object):# 使用@allure.feature装饰器来进一步细分"Epic"下的功能@allure.feature("添加用户")def test_add_user(self):# 添加用户的测试代码assert True, "添加用户功能,断言成功"@allure.feature("删除用户")def test_delete_user(self):# 删除用户的测试代码assert True, "删除用户功能,断言成功"@allure.epic("订单管理") class TestOrderManagement(object):@allure.feature("创建订单")def test_create_order(self):# 创建订单的测试代码assert True, "创建订单功能,断言成功"@allure.feature("取消订单")def test_cancel_order(self):# 取消订单的测试代码assert True, "取消订单功能,断言成功"
结果如下:
2、@allure.story(*stories)和@allure.Step()
在`pytest`中结合`allure`进行测试报告生成时,`@allure.story(*stories)`注解用于为测试用例指定一个或多个故事(即功能模块或用户故事),以便在报告中更好地组织和分类测试。这能帮助团队理解测试的目的和覆盖的功能范围。
在pytest中使用allure注解可以帮助我们更好地组织和报告测试结果。`@allure.story(*stories)`用于将测试用例归类到不同的故事(或用户故事)中,而`@allure.step()`用于在测试中注明每个小步骤或操作,以增强测试报告的可读性和详细程度。
示例代码:
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import allure import pytest@allure.epic("用户管理") @allure.feature("登录功能") @allure.story("登录成功") def test_login_success():with allure.step("步骤1: 打开登录页面"):# 假设这里是打开登录页面的操作open_login_page()with allure.step("步骤2: 输入用户名和密码"):# 假设这里是输入用户名和密码的操作input_credentials(username="user", password="password")with allure.step("步骤3: 点击登录按钮"):# 假设这里是点击登录按钮的操作click_login_button()with allure.step("步骤4: 验证登录成功"):# 假设这里是验证登录成功的操作assert login_successful()@allure.epic("用户管理") @allure.feature("登录功能") @allure.story("登录失败") def test_login_failure():with allure.step("输入无效的用户名和密码"):# 假设测试登录失败的逻辑assert login_failed()def open_login_page():passdef input_credentials(username, password):passdef click_login_button():passdef login_successful():# 假设登录成功return Truedef login_failed():# 假设登录失败return False
如图:
3、@allure.title(test_title)和@allure.description(test_description)
在`pytest`中使用`allure`注解组件的`@allure.title(test_title)`和`@allure.description(test_description)`可以帮助我们在生成的测试报告中添加更丰富的信息,让测试的目的和细节更加清晰。
通过`@allure.title`和`@allure.description`注解,你的Allure报告将会包含每个测试用例的标题和详细描述,
源码:
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import pytest import allure@allure.title("测试登录功能") @allure.description(""" 这个测试用例会测试登录功能,包括如下几点: 1. 输入正确的用户名和密码可以成功登录。 2. 输入错误的密码将不能登录。 """) def test_login_success():assert True # 代表登录成功的逻辑@allure.title("测试产品添加功能") @allure.description("这个测试用例验证是否能成功添加一个新产品到系统中") def test_add_product():assert True # 代表添加产品成功的逻辑
如图:
4、@Severity
在pytest中,使用Allure报告可以通过各种注解(装饰器)来丰富测试报告的内容,增加可读性和详细程度。`@allure.severity`是其中一个重要的注解,用于指定测试用例的重要性或严重性等级。Allure框架定义了几个不同的严重性等级,包括`blocker`、`critical`、`normal`、`minor`和`trivial`。
源码:
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import pytest import allure# 定义测试类 @allure.feature("登录功能") class TestLogin:# 设置测试的严重性为严重(critical)@allure.severity(allure.severity_level.CRITICAL)@allure.story("登录成功")def test_login_success(self):with allure.step("步骤1:输入正确的用户名和密码"):# 这里模拟输入操作passwith allure.step("步骤2:点击登录按钮"):# 这里模拟点击操作passwith allure.step("步骤3:验证是否登录成功"):# 这里模拟验证操作assert True # 假设验证成功# 设置测试的严重性为较低(minor)@allure.severity(allure.severity_level.MINOR)@allure.story("忘记密码链接")def test_forget_password_link(self):with allure.step("检查忘记密码链接是否存在"):# 假设检查到链接存在assert True
在这个例子中,定义了一个测试类`TestLogin`,它包含两个测试方法。每个测试方法使用`@allure.severity`装饰器指定了测试用例的重要性等级。 -`test_login_success` 这个测试用例使用了`allure.severity_level.CRITICAL`来标记,意味着这是一个关键的、严重的测试,它的成功运行对项目非常重要。 -`test_forget_password_link` 这个测试用例则被标记为`allure.severity_level.MINOR`,表示它的重要程度较低。 通过这种方式,当生成Allure测试报告时,可以很容易地看到每个测试用例的重要性等级,从而快速识别关键问题所在。
5、@allure.testcase(url, name=None)
在pytest中使用Allure进行测试报告生成时,`@allure.testcase`注解可以为测试用例提供一个链接到测试用例或需求说明的功能,这对于追踪测试的覆盖率和理解测试背景非常有用
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import pytest import allure# 假设一个外部的测试用例或需求文档URL TEST_CASE_LINK = "https://www.example.com/your-test-case-or-requirement"@allure.testcase(TEST_CASE_LINK, '测试用例标题或名称') def test_example_function():"""一个示例测试函数,演示如何使用@allure.testcase注解"""# 假设的测试逻辑assert 1 == 1 # 假设这是一个测试断言
如图:
6、@allure.issue(url, name=None)
在pytest中使用Allure报告生成工具时,可以通过`@allure.issue`注解为测试用例添加关联的问题跟踪链接。这对于将测试结果和问题跟踪系统(如JIRA、GitHub issues等)链接起来非常有用,使得从测试报告中直接定位到问题的具体记录变得可行。
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库import allure import pytest@allure.issue('https://github.com/issues/1', name='点击此处查看问题详情') def test_with_issue_link():"""一个带有问题跟踪链接的测试案例"""assert True # 一个简单的断言@allure.issue('https://github.com/issues/2') def test_with_issue_link_no_name():"""一个带有问题链接但没有指定名称的测试案例"""assert 1 == 1 # 又一个简单的断言
在这个示例中,`test_with_issue_link`测试函数通过`@allure.issue`被装饰,指定了一个问题跟踪链接及其名称。而`test_with_issue_link_no_name`只指定了问题链接,没有名称。
7、@allure.link(url, link_type='link', name=None)
在Pytest中使用`allure.link()`注解可以帮助我们在测试报告中添加指向外部资源的链接,比如文档或者问题跟踪链接。这样可以方便地从报告中跳转到相关的在线资源。`allure.link()`提供了一种自定义链接的方式
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 # 引入pytest和allure import pytest import allure# 使用allure.link注解添加外部链接 @allure.link("https://www.testallure.com", name="TestAllure Link") def test_with_external_link():"""这个测试包含了一个到外部网站的链接。"""# 模拟一个断言assert True
8、@allure.attach(body, name=None,attachment_type=None,extension=None)
将python对象按照指定的附件类型展示在报告中,可支持的attachment_type(附件类型)在
allure.attachment_type
中如何使用`@allure.attach()` 在pytest测试中附加数据到Allure报告中。这个例子会进行一个简单的字符串比较测试,并在测试过程中生成一个文本附件添加到Allure报告中。
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import allure import pytest# 使用装饰器定义一个测试用例 @allure.title("验证字符串附加功能") def test_string_comparison_with_attachment():a = "Hello"b = "World"# 假如我们想要附上一些额外的信息,比如变量a和b的值allure.attach(a, name="String A", attachment_type=allure.attachment_type.TEXT)allure.attach(b, name="String B", attachment_type=allure.attachment_type.TEXT)# 执行一次简单的断言比较assert a == b, "a 和 b 不相等"
在报告中,你会看到测试用例名下有“Attachments”部分,里面包含了两个附件:“String A”和“String B”,点击它们可以查看具体的内容。
9、@allure.attach.file(source, name=None, attachment_type=None, extension=None)
使用`@allure.attach.file`的示例,这个函数用于将文件作为附件添加到Allure测试报告中
首先在当前目录下创建了一个文本文件`example.txt`,然后通过`allure.attach.file`函数将这个文件添加为测试报告的一部分。函数参数中`name`是附件显示的名称,在Allure报告中会用到;`attachment_type`指定附件的类型(在这个例子中是文本);`extension`指定文件的扩展名。
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入所需的库 import allure import pytest# 定义测试函数 def test_attach_file():# 假定这里有一些测试逻辑...# 添加一个文件作为附件with open("example.txt", "w") as f:f.write("这是一个附件文件的示例内容")allure.attach.file("example.txt", name="示例附件", attachment_type=allure.attachment_type.TEXT, extension="txt")# 假定测试成功完成assert True
10、@Attachment
在`pytest`中使用`@allure.attachment`装饰器可以帮助我们将测试用例中的一些额外信息(如日志、截图或文件)附加到测试报告中。这对于调试和测试结果分析非常有用。
import allure import pytest# 定义一个附加文本信息的函数 @allure.attachment('这是附加的文本内容', attachment_type=allure.attachment_type.TEXT) def attach_text(content):return content# 定义一个截图附加函数(假设是截图,这里只是演示,实际使用时需替换为实际的截图代码) @allure.attachment('这是附加的截图', attachment_type=allure.attachment_type.PNG) def attach_screenshot(screenshot):return screenshot# 测试用例 def test_with_attachments():# 附加一些文本attach_text("这是一段示例文本。")# 附加一个“截图”attach_screenshot(b"This is a mock screenshot") # 实际使用时,请确保这里是图片的byte内容
11、@TmsLink
在pytest中使用@TmsLink注解需要在测试用例中使用@allure.link注解可以将测试用例关联到指定的TMS系统中。
# -*-coding: Utf-8 -*- # @File : test_allure.py # author: 石明亮 # Time:2024/3/6 # 导入必需的库 import pytest import allure@allure.link("http://www.example.com/test_case_001") def test_case_001():assert 1 == 1@allure.link("http://www.example.com/test_case_002") def test_case_002():assert 2 == 2@allure.link("http://www.example.com/test_case_003") @allure.link("http://www.example.com/test_case_004") def test_case_003():assert 3 == 3