Allure是一个轻量级、灵活、支持多语言平台的report框架,不仅能生成好看易读的测试报告,还能针对的特别需求生成high level的测试统计报告,本文主要介绍Python语言和Allure结合Pytest测试框架生成测试报告的一些基本语法和用法。
Allure官方文档请参考:https://docs.qameta.io/allure/
本文以Windows环境作示例。
pip install allure-pytest
如此,allure的环境就准备好了。
pytest --alluredir = /tmp/my_allure_results
#/tmp/my_allure_results即你要存放测试结果的路径
allure serve /tmp/my_allure_results
#/tmp/my_allure_results即上一步存放的测试结果的路径
OK,环境和语法都掌握了,现在来做个简单的尝试,代码就参考allure官方文档里给的示例。
import pytest
def test_success():
"""this test succeeds"""
assert True
def test_failure():
"""this test fails"""
assert False
def test_skip():
"""this test is skipped"""
pytest.skip('for a reason!')
def test_broken():
raise Exception('oops')
新建一个python文件,然后在命令行中到该文件所在的路径下,执行测试文件,比如我的python文件命名为Test_BlogAllure.py
pytest Test_BlogAllure.py --alluredir=./AllureResult/1
# pytest后加文件名称运行指定测试用例
命令执行完毕后,项目路径下会出现几个json文件,即测试结果
接下来,执行命令生成测试报告
allure serve ./AllureResult/1
就会根据上一步的测试结果生成测试报告并在默认浏览器打开如下图
可以看到,一共四个测试用例,一个成功,一个跳过,一个失败,一个有异常,这四种状态在测试报告中都有对应的标识
steps直译过来就是步骤,在Allure支持的众多功能中,也有这么一个功能,可以根据tester的需求在具体的某个执行步骤中使用装饰器标记出该步骤,并且显示在测试报告中。
另外,step通常会和with一起使用,用来方便区分不同的step代码片段
@allure.step("Discription")
with allure.step("Description"):
# 代码片段
Attachments即附件,用该方法可以把多种不同类型的附件添加到测试结果中并显示在测试报告里,两种常用的用法:
allure.attach(body,name,attachment_type,extension)
allure.attach.file(source,name,attachment_type,extension)
# body--要写入文件的原始内容
# name--文件名的字符串
# attachment_type--附件的类型
# extension--扩展名
# source--文件路径
Description在allure装饰器中使用,能够让tester添加更多的描述性信息以便阅读测试报告的人能更直观全面地了解测试结果,常用的两个方法:
@allure.description_html("""HTML代码片段""")
# 可以在描述中直接添加一段HTML代码来提供UI更加友好的描述信息
@allure.description("""Descriptions""")
title装饰器也是为了测试结果更可读,不仅可以在title内容中添加纯文本,还可以传入相关变量进行描述
@allure.title("title name")
allure装饰器还提供了三种方法,可以将bug链接,用例链接,管理系统等和测试报告集成到一起
@allure.link("Link address",name="address name")
# 可添加任何需要添加的链接
@allure.issue()
# bug(bug管理平台)链接,在测试报告中会自动在链接旁添加一个bug图标
@allure.testcase()
# 测试用例(用例管理平台)链接
这两个装饰器一般会在测试用例方法以功能来分的时候使用,feature就表示是什么功能,story的意思更接近于一个测试场景,二者都可以在描述信息中添加相应的变量
这里需要提一下,关于feature和story关系,一般来说呢,feature是基于整个功能层面的描述,层级在story之上,而story可以理解为某一个feature的用户场景
@allure.story("descriptions")
@allure.feature("descriptions")
下面将会用Python+allure来写一段没有什么实际意义只为说明allure装饰器用法的代码作为演示。
import pytest
import allure
@allure.title("title:功能层级的title")
@allure.feature("登录模块")
class TestLogin():
@allure.title("title:登录成功测试用例")
@allure.story("Story:登录成功")
@allure.link("www.baidu.com",name="测试用例地址")
@allure.description("这是一个测试用例描述")
def test_login_success(self):
print("登录成功测试用例")
pass
@allure.title("title:登录失败测试用例")
@allure.story("Story:登录失败")
@allure.description_html("""
这是一个用HTML来描述的测试用例
Firstname
Lastname
Age
William
Smith
50
Vasya
Jackson
94
""")
def test_login_fail(self):
with allure.step("点击用户名"):
print("输入用户名")
with allure.step("点击密码"):
print("输入错误的密码")
with allure.step("点击登录"):
print("点击登录")
print("登录失败测试用例")
# 把部分HTML放到测试报告附件中
allure.attach('登录失败', 'Attach with HTML type',attachment_type=allure.attachment_type.HTML)
pass
@allure.title("title:登录时用户名缺失测试用例")
@allure.story("Story:用户名缺失")
def test_lossUserName(self):
print("用户名缺失测试用例")
pass
@allure.title("title:登录时密码缺失测试用例")
@allure.story("Story:密码缺失")
def test_lossPassword(self):
print("缺失密码测试用例")
pass
执行完测试用例生成测试报告如下图
在suites维度中,直接以测试文件的名称来显示测试的整体情况,点击show all即可查看具体情况:
如图可知,一共四个方法,每个方法中的title装饰器直接显示在左侧列表标题中,选中某个测试方法,会在右边展示具体内容。比如description_html方法添加的HTML片段会直接被编译为网页的形式展示出来。
再看Test body,下面的每个小单元对应的就是step装饰器中标记的步骤。
回到首页,点击feature维度下的show all按钮,这边是以功能–用户场景的维度来展示测试报告的,内容还和上面的suite维度展示的测试报告相同。