Pytest结合allure插件生成alluer测试报告【详细实战篇】

一、Allure插件介绍

  Allure框架是一个灵活轻量级多语言测试报告工具,它不仅可以以WEB的方式展示简介的测试结果,而且允许参与开发过程的每个人从日常执行的测试中最大限度的提取有用信息。
    Allure报告简化了常见缺陷的统计:失败的测试可以分为BUG和被中断的测试,还可以配置日志、步骤、fixture、附件、计时、执行历史以及与BUG管理系统集成,所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能的掌握测试信息。

二、Allure环境搭建与安装

2.1 搭建步骤

1、安装和配置JDK

  • a.下载jdk: https://www.oracle.com/java/technologies/downloads/#java8
  • b.安装jdk,傻瓜式安装即可
  • c.配置环境变量
    • JAVA_HOME: C:\Program Files\Java\jdk1.8.0_301 # 这个是JDK的安装路径
    • PATH:%JAVA_HOME%\bin 或C:\Program Files\Java\jdk1.8.0_301\bin

2、安装Allure

  • a.安装pytest-allure库:pip install allure-pytest
  • b.下载allure并解压
    • 下载地址:https://github.com/allure-framework/allure2/releases/
  • c.下载完成后解压到任意目录
  • d.配置allure环境变量到PATH路径
    • 我的电脑-右击属性-高级系统设置-环境变量-编辑系统环境变量path-添加allure bin目录-点击确定
  • e.验证
    • cmd: allure

注意:
安装 allure 前提条件需要 Java1.8 的环境,因为allure 是基于 Java 的一个程序。
虽然allure已经解压并加到了环境变量中,但是执行allure --version会报下面错误
在这里插入图片描述

2.2 生成allure测试报告实例

import os
import pytest


if __name__ == '__main__':
    pytest.main(['-vs', '--alluredir', './tmp'])
    os.system('allure generate ./tmp -o ./report --clean')

1 、执行用例生成测试数据 pytest.main([‘-vs’,‘[测试文件.py]’,‘–alluredir’,‘./temp_jsonreport’])
因为allure生成的报告是json格式的,需要再转化成html格式的,所以会自动生成一个temp_jsonreport文件

2、生成测试报告 os.system(‘allure generate ./tmp -o ./report --clean’)

解释:

  • generate:生成allure的HTML报告
  • - -alluredir:是创建allure报告的路径
  • -o:是执行
  • -clean:是清除之前生成的报告

在这里插入图片描述

三、Allure与Pytest集成

allure除了支持Pytest自带的特性之外(fixture、parametrize、xfail、skip),自身也有非常强大的特性,下面来详细介绍。
在这里插入图片描述

3.1 allure特性-feature、storry、step

可以在报告中添加用例描述信息,比如:测试功能,子功能或场景,测试步骤以及测试附加信息

  • @allure.feature(“功能模块名称”):例如登录模块
  • @allure.story(“子功能模块”):例如输入正确用户名密码登录成功
  • @allure.step(“步骤”):测试步骤中的每个步骤,放在具体逻辑方法中
    • allure.stop(“步骤”):只能以装饰器的形式放在类或者方法上面
    • with allure.step:可以放在测试用例方法里面
  • allure.attach(“具体文本信息”)
    • 附加信息:数据、文本、图片、视频、网页等
import pytest
import allure


@allure.feature("登录")
class TestLogin:
    @allure.story("登录成功")
    def test_login_success(self):
        print("登录成功")


    @allure.story("密码错误")
    def test_login_failure(self):
        with allure.step("输入用户名"):
            print("输入用户名")
        with allure.step("输入密码"):
            print("输入密码")
        print("点击登录")
        with allure.step("登录失败"):
            assert '1' == 1
            print("登录失败")


    @allure.story("用户名密码错误")
    def test_login_failure_a(self):
        print("用户名或者密码错误,登录失败")



@allure.feature("注册")
class TestRegister:
    @allure.story("注册成功")
    def test_register_success(self):
        print("测试用例:注册成功")


    @allure.story("注册失败")
    def test_register_failure(self):
        with allure.step("输入用户名"):
            print("输入用户名")
        with allure.step("输入密码"):
            print("输入密码")
        with allure.step("再次输入密码"):
            print("再次输入密码")
        print("点击注册")
        with allure.step("注册失败"):
            assert 1 + 1 == 2
            print("注册失败")

if __name__ == '__main__':
    pytest.main(['-vs', '--alluredir', './tmp'])
    os.system('allure generate ./tmp -o ./report --clean')

生成报告:
在这里插入图片描述

3.2 allure特性—severity

有时候在上线前,由于时间关系,我们只需要把重要模块测试一遍,在这样的场景下我们怎么实现呢?主要有三种方法:

1. 可以使用pytest.mark来标记用例

@pytest.mark.webtest # 添加标签 

pytest -m "webtest"

2. 通过 allure.feature, allure.story来实现

pytest test_feature_story_step.py --allure-features "登录" //只运行登录模块
pytest test_feature_story_step.py --allure-stories "登录成功" //只运行登录成功子模块

3. 通过 allure.severity按重要性级别来标记,有5种级别:

  • Blocker级别:阻塞
  • Critical级别:严重
  • Normal级别:正常
  • Minor级别:不太重要
  • Trivial级别:不重要
import allure
import pytest

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_normalseverity_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/4 --allure-severities normal,critical
allure serve ./result/4

3.3 allure.attach()

可以在报告中附加文本、图片以及html网页,用来补充测试步骤或测试结果,比如错误截图或者关键步骤的截图。

import allure
import pytest

def test_attach_text():
    allure.attach("纯文本", attachment_type=allure.attachment_type.TEXT)

def test_attach_html():
    allure.attach("<body>这是一段htmlbody块</body>", "html页面", attachment_type=allure.attachment_type.HTML)

def test_attach_photo():
    allure.attach.file("test.jpg", name="图片", attachment_tye=allure.attachment_type.JPG)

3.3.1 pytest + selenium + allure报告

测试步骤:

打开百度
搜索关键词
搜索结果截图,保存到报告中
退出浏览器

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_steps_demo(test_data1):
    with allure.step("打开百度网页"):
        driver = webdriver.Chrome("D:/testing_tools/chromedriver85/chromedriver.exe")
        driver.get("http://www.baidu.com")

    with allure.step("搜索关键词"):
        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)
        allure.attach('<head></head><body>首页</body>', 'Attach with HTML type', allure.attachment_type.HTML)

    with allure.step("退出浏览器"):
        driver.quit()


在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

炫酷的腿毛!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值