python学习笔记-22. allure框架学习

python学习笔记-22. allure框架学习



前言

一、allure介绍

  • allure是一个轻量级、灵活的、支持多语言的测试报告工具
  • 多平台的、奢华的report框架
  • 可以为dev/qa提供详尽的测试报告、测试步骤、log
  • 可以为管理层提供high level统计报告
  • java语言开发,支持pytest,javaScript、php、ruby等
  • 可以集成到jenkins

二、allure安装

windows安装:

  • github下载安装包,下载地址:https://github.com/allure-framework/allure2/releases
  • 解压安装包->进入bin目录->奴性allure.bat
  • 把bin目录加入PATH环境变量

Mac安装:

  • brew install allure

allure官网地址:http://allure.qatool.ru/
文档地址:https://docs.qameta.io/allure/#

安装完成后运行:allure --version,显示版本号即为安装正常

生成测试报告分为2步:

  • 第一步:pytest --alluredir=/tmp/my_allure_results,把生成的测试数据放在指定目录下
  • 第二步:allure serve /tmp/my_allure_results,使用allure插件将测试数据转换为测试报告

三、pytest-allure插件

系统allure安装完成后,在项目中安装allure-pytest

pip install allure-pytest

allure-pytest主要用来生成测试结果数据,为后续allure生成测试报告,提供数据支撑

测试数据生成命令:

# alluredir后面跟的路径即为测试数据的生成路径
pytest --alluredir=/tmp/my_allure_results

四、allure报告生成

1. allure简单使用

生成测试报告分为2步:

  • 第一步:pytest --alluredir=/tmp/my_allure_results,把生成的测试数据放在指定目录下
  • 第二步:allure serve /tmp/my_allure_results,使用allure插件将测试数据转换为测试报告

实例:

  • 新建test_allure.py
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')
  • 生成测试数据:
    项目下执行:
pytest test_allure.py --alluredir=./result/1

执行完成后在项目的result目录下会生成文件夹1,里面包含4个json文件,即测试结果数据

  • 根据测试结果数据生成测试报告:
    执行如下命令,生成报告,并且使用默认浏览器打开
allure serve ./result/1

执行完成后打开如下页面:
在这里插入图片描述

2. allure其他生产报告的方式

  • 根据测试结果数据生产测试报告至指定目录,不打开:
allure generate ./result/1 -o ./report/1 --clean

执行完成后项目的repot目录下生成1的文件夹,即测试报告的前端目录

  • 根据测试报告文件夹,使用allure开启web服务,在浏览器中打开测试报告
allure open -h 127.0.0.1 -p 8883 ./report/1

执行后打开本地8883端口的测试报告,如下:
在这里插入图片描述

五、allure常用的特性

allure的常用特性:

  • @allure.feature: 功能名称
  • @allure.story: 子功能名称
  • @allure.step: 步骤细节
  • @allure.attach: 具体文本信息

1. feature与story

feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中behaviore中显示,相当于testsuite

story相当于对应这个功能或模块下的不同场景,分支功能,属于feature之下的结构,报告在feature中显示,相当于testcase

import pytest
import allure

# feature,添加功能名称
@allure.feature("登录")
class TestLogin():
    # story,添加模块名称
    @allure.story("测试用例1:登录成功")
    def test_login_success(self):
        print("这是登录: 测试用例1, 登录成功!")
        pass

    @allure.story("测试用例2:登录失败")
    def test_login_failure(self):
        print("这是登录: 测试用例2, 登录失败!")
        pass

    @allure.story("测试用例3:用户名缺失")
    def test_login_miss_name(self):
        print("这是登录: 测试用例3, 用户名缺失")
        pass

    @allure.story("测试用例4:密码缺失")
    def test_login_miss_pwd(self):
        with allure.step("测试步骤1:点击用户名"):
            print("请输入用户名")
        with allure.step("测试步骤2:点击密码"):
            print("请输入密码")
        print("点击登录")
        with allure.step("点击登录后登录失败"):
            assert '1' == 1
            print("登录失败")
        pass

    @allure.story("测试用例5:登录失败-1")
    def test_login_failure_1(self):
        print("这是登录: 测试用例5, 登录失败_1")
        pass

执行测试结果数据生成命令:

pytest test_allure.py --alluredir=./result/3

执行测试报告生产命令并打开测试报告:

allure serve ./result/3

打开后查看测试报告,功能模块、子模块及测试步骤成功显示:
在这里插入图片描述

运行指定feature用例:

pytest test_allure.py --allure-features '登录'

运行指定story用例:

pytest test_allure.py --allure-stories '测试用例2:登录失败'

2. step

  • 测试过程中的每个步骤,一般放在具体的逻辑方法中
  • 可以放在关键步骤中,在报告中显示
  • 在app、web自动化测试中,建议每切换一个页面作为一个step

使用方法:

  • @allure.step(): 只能以装饰器的形式放在类或方法上面
  • with allure.step(): 可以放在测试用例方法里面,但是测试步骤的代码需要被该语句包含

3. issue、testcase

  • 关联测试用例
import allure


@allure.link("http://www.baidu.com")
def test_with_link():
    print("这是一条添加了链接的测试")
    pass

执行用例并打开测试报告:

pytest test_allure_link.py --alluredir=./result/4
allure serve ./result/4

执行结果如下:
在这里插入图片描述

指定链接名字:

import allure
@allure.link()
def test_with_link("www.baidu.com", name="这是链接名字"):
	print("这是一条添加了链接的测试")
	pass

执行结果如下:
在这里插入图片描述

链接到用例库对应的测试用例上:

import allure


@allure.link("http://www.baidu.com", name="这是一个链接名字")
def test_with_link():
    print("这是一条添加了链接的测试")
    pass

# 定义用例地址
TEST_CASE_LINK = "http://testlink.test.com/case"


@allure.testcase(TEST_CASE_LINK, "登录测试用例")
def test_with_testcase_link():
    print("这是一条登录测试用例,链接到测试用例管理系统中")
    pass


执行结果如下:
在这里插入图片描述

  • 关联bug
import allure

#第一个参数为BUG的编号
@allure.issue('140', '这是一个issue')
def test_with_issue_link():
	pass

执行命令:

# 链接后的大括号宇issue中的第一个参数对应
pytest test_allure_link.py --allure-link-pattern=issue:http://www.zentao.com/issue/{} --alluredir=./result/6

allure serve ./result/6

执行结果如下:
在这里插入图片描述

3. severity

severity用来标准测试用例的级别

  • Trivial: 不重要
  • Minor: 不太重要
  • Normal: 正常问题
  • Critical: 严重
  • Bocker: 阻塞

使用方法:在方法、函数和类前添加注解:

@allure.severity(allure.severity_level:TRIVIAL)

执行时:

pytest -v -s filename.py --allure-severities normal,critical

在文件test_allure_severity.py示例:

import allure

def test_with_no_severity_label():
    pass

@allure.severity(allure.severity_level.TRIVIAL)
def test_with_trivial_severity():
    pass

@allure.severity(allure.severity_level.NORMAL)
def test_with_normal_severity():
    pass

@allure.severity(allure.severity_level.NORMAL)
class TestClassWithNormalSeverity(object):

    def test_inside_the_normal_severity_test_class(self):
        pass

    @allure.severity(allure.severity_level.CRITICAL)
    def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self):
        pass

执行命令,生成并打开报告:

pytest test_allure_severity.py --alluredir=./result/7 --allure-severities normal,critical

allure serve ./result/7

执行结果:
在这里插入图片描述

4. attach

自动化测试添加图片或html

操作指导:

  • 测试报告添加网页

    • allure.attach(body, name, attachment_type, extension)
    • allure.attach(‘首页’),这是错误也的结果信息
    • allure.attachment_type.HTML
  • 测试报告中添加图片

    • allure.attach.file(source, name, attachment_type, extension):
    • allure.attach.file(“./result/b.png”, attachment_type=allure.attachment_type.PNG)
  • 纯文本示例

import allure


def test_attach_text():
    allure.attach("这是一个文本", attachment_type=allure.attachment_type.TEXT)

执行:

pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8

执行结果:
在这里插入图片描述

  • html示例:
import allure


def test_attach_html():
    allure.attach("<body>这是一个htmlbody</body>", "html测试", attachment_type=allure.attachment_type.HTML)

执行:

pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8

执行结果如下:
在这里插入图片描述

  • img图片示例:
import allure


def test_attach_img():
    allure.attach.file("./img/1649936265933.jpg", name="这是一个图片", attachment_type=allure.attachment_type.JPG)

执行:

pytest test_allure_severity.py --alluredir=./result/8
allure serve ./result/8

执行结果如下:
在这里插入图片描述

六、allure+pytest+selenium实战演示

import allure
import pytest
from selenium import webdriver
import time

@allure.testcase("http://www.github.com")
@allure.feature("百度搜索")
@pytest.mark.parametrize('test_data1', ['allure', 'pytest', 'unittest'])
def test_strps_demo(test_data1):
    with allure.step("打开浏览器"):
        driver = webdriver.Chrome("/Users/gaozeyu/tools/chromedriver")
        driver.get("http://www.baidu.com")
        driver.maximize_window()

    with allure.step(f"输入搜索词:{test_data1}"):
        driver.find_element_by_id("kw").send_keys(test_data1)
        time.sleep(2)
        driver.find_element_by_id("su").click()
        time.sleep(2)

    with allure.step("保存图片"):
        driver.save_screenshot("./result/b.png")
        allure.attach.file("./result/b.png", attachment_type=allure.attachment_type.PNG)

    with allure.step("关闭浏览器"):
        driver.quit()

运行结果如下:

在这里插入图片描述


总结

allure框架总结:

  • allure生成报告的2部操作:

    • 生成测试数据:pytest filename.py alluredir=./resultdir
    • 生成测试报告并打开:allure serve ./resultdir
  • allure的一些特性

    • feature: 标记测试模块
    • story:标记测试子模块
    • step:标记测试步骤名称
    • testcase:标记测试用例地址
    • issue:标记BUG地址
    • severity: 标记用例等级
    • attach:添加html、文本、图片视频等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔-tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值