pytest中allure特性

news2025/7/8 19:07:09

在这里插入图片描述


一、@allure.step

allure报告最重要的一点是,它允许对每个测试用例进行非常详细的步骤说明
通过 @allure.step() 装饰器,可以让测试用例在allure报告中显示更详细的测试过程
step() 只有一个参数,就是title,你传什么,在allure上就显示什么

1、代码实例1

conftest.py

#encoding=utf-8

import allure
import pytest
from selenium import webdriver

@allure.step('打开浏览器')
def fixture_step():
    driver=webdriver.Chrome("C:\Program Files\Google\Chrome\Application\chromedriver.exe")
    driver.implicitly_wait(10)
    return driver


@pytest.fixture(scope='function')
def my_fixture():
    #打开浏览器
    driver=fixture_step()
    yield driver
    driver.close()

test_login.py

#encoding=utf-8
import time

import pytest
import allure
from selenium import webdriver


@allure.step("打开页面")
def passing_step0(driver):
    driver.get('https://test-saas.izuche.com/#/Login')

@allure.step("切换到账号密码登录tab")
def switch_tab_step1(driver):
    el=driver.find_element_by_xpath('//span[text()="账号密码登录"]')
    el.click()

@allure.step("输入用户名")
def input_user_step2(driver):
    el = driver.find_element_by_xpath('//input[@id="userNames"]')
    el.send_keys('yanzhilong')

@allure.step("输入密码")
def input_pwd_step3(driver):
    el = driver.find_element_by_xpath('//input[@type="password"]')
    el.send_keys('12345678')


@allure.step("输入验证码")
def input_code_step4(driver):
    el=driver.find_element_by_xpath('//input[@placeholder="请输入验证码"]')
    el.send_keys('1111')

@allure.step("选择组织")
def select_step5(driver):
    driver.find_element_by_xpath('//input[@placeholder="请选择"]').click()
    time.sleep(1)
    el=driver.find_element_by_xpath('//span[text()="北京分公司"]')
    el.click()
    time.sleep(1)

@allure.step("点击登录")
def click_step6(driver):
    el=driver.find_element_by_xpath('//button[contains(@class,"login_submit")]')
    el.click()


class TestLogin:

    def test_login(self,my_fixture):
        driver=my_fixture
        passing_step0(driver)
        switch_tab_step1(driver)
        input_user_step2(driver)
        input_pwd_step3(driver)
        input_code_step4(driver)
        select_step5(driver)
        click_step6(driver)
        assert 1==1



if __name__ == '__main__':
    pytest.main()

run.py

import pytest
from common.send_email import send_report
import datetime
from time import strftime
now=datetime.datetime.now()
now=now.strftime("%Y-%m-%d_%H_%M_%S")

if __name__ == '__main__':
    #生成简单的测试报告
    # pytest.main(["--html=reports/report.html"])
    #生成allure报告,加上--clean-alluredir解决JSON文件生成冗余问题
    pytest.main(["--alluredir=./reports/allure",
                 "./testcases/login",
                 # "-m smoke",
                 "--clean-alluredir",
  
                 ])

    # 将JSON文件转换成HTML格式的测试报告(生成JSON文件路径:./report/allure 生成HTML报告路径:./report/html)
    os.system("allure generate ./reports/allure -o ./reports/html --clean")


    # send_report(report_name=f'{now}'+'test.html')
    # send_report(report_name='D:\\project_development\\api_pytest\\reports\\2022-11-01_00_40_49test.html')

    # 打开测试报告
    os.system("allure serve ./reports/allure")

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

2、使用总结

参数:title,表示step的名称,可以直接展示在测试报告里
特点:可以嵌套使用,也可以外部调用
使用场景:主要用于场景用例的组织,使用多条功能点用例组合成场景用例(允许使用外部的用例)

二、allure.attach

功能:测试报告可以显示许多不同类型的附件,这些附件可以补充测试、步骤或fixture结果

@allure.attach(’arg1’,’arg2’,’arg3’):
参数详解:
arg1:附件
arg2:附件名称
arg3:类型(支持:HTML,JPG,PNG,JSON,OTHER,TEXTXML)

案例2:代码

# encoding=utf-8
import allure
import pytest
import logging
import random
import time

@pytest.mark.smoke
class TestMenus:

    @allure.title('测试用例1')
    @pytest.mark.skipif(24<8,reason='版本不匹配')
    @pytest.mark.smoke
    def test_menu1(self):
        file_png = open('testcases/menus/test.jpg', mode='rb').read()
        allure.attach(file_png, 'file_png', allure.attachment_type.JPG)
        logging.info('执行测试用例1')
        assert 2 == 2

    @allure.title('测试用例2')
    @pytest.mark.smoke
    def test_menu2(self):
        logging.info('执行测试用例2')
        assert 1 == 1

    @allure.description(
    """
    多行测试说明
    使用allure.description装饰器.
    没什么特别的地方,视项目情况而用
    """)
    @allure.title('测试用例3')
    def test_menu3(self):
        logging.info('执行测试用例3')
        assert 2 == 2


if __name__ == '__main__':
    pytest.main()

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

三、@allure.title()

可以使测试用例标题更具可读性(可以为汉字)
可以和Parameterize参数化及fixture结合使用
用法:@allure.title(“msg”)

案例3不加@allure.title():代码

# encoding=utf-8
import allure
import pytest
import logging
import random
import time

@pytest.mark.smoke
class TestMenus:


    @pytest.mark.skipif(24<8,reason='版本不匹配')
    @pytest.mark.smoke
    def test_menu1(self):
        logging.info('执行测试用例1')
        assert 2 == 2


    @pytest.mark.smoke
    def test_menu2(self):
        logging.info('执行测试用例2')
        assert 1 == 1


    def test_menu3(self):
        logging.info('执行测试用例3')
        assert 2 == 2


if __name__ == '__main__':
    pytest.main()

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

案例4加@allure.title():代码:

# encoding=utf-8
import allure
import pytest
import logging
import random
import time

@pytest.mark.smoke
class TestMenus:

    @allure.title('测试用例1')
    @pytest.mark.skipif(24<8,reason='版本不匹配')
    @pytest.mark.smoke
    def test_menu1(self):
        logging.info('执行测试用例1')
        assert 2 == 2

    @allure.title('测试用例2')
    @pytest.mark.smoke
    def test_menu2(self):
        logging.info('执行测试用例2')
        assert 1 == 1

    @allure.title('测试用例3')
    def test_menu3(self):
        logging.info('执行测试用例3')
        assert 2 == 2


if __name__ == '__main__':
    pytest.main()

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

不使用allure.title()装饰器,报告默认展示的是用例函数名,可读性较差,

四、allure.description()

1、作用

为测试用例添加详细描述,并展示到测试报告内,可以提高测试报告的可读性,使报告更加直观,通俗易懂

2、语法

主要有三种语法,如下:

1、在测试用例下使用"““xxxx””"添加描述
2、使用@allure.description()装饰器
3、使用@allure.description_html()装饰器,添加HTML描述(添加HTML描述和attach装饰器用法一致)

案例5:代码

# encoding=utf-8
import allure
import pytest
import logging
import random
import time

@pytest.mark.smoke
class TestMenus:

    @allure.title('测试用例1')
    @pytest.mark.skipif(24<8,reason='版本不匹配')
    @pytest.mark.smoke
    def test_menu1(self):
        logging.info('执行测试用例1')
        assert 2 == 2

    @allure.title('测试用例2')
    @pytest.mark.smoke
    def test_menu2(self):
        logging.info('执行测试用例2')
        assert 1 == 1

    @allure.description(
    """
    多行测试说明
    使用allure.description装饰器.
    没什么特别的地方,视项目情况而用
    """)
    @allure.title('测试用例3')
    def test_menu3(self):
        logging.info('执行测试用例3')
        assert 2 == 2


if __name__ == '__main__':
    pytest.main()

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


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux------网络基础1

文章目录计算机网络的发展历程网络协议计算机网络分层体系结构局域网通信的原理IP地址和 MAC地址的区别计算机网络的发展历程 简单的了解一下就行&#xff0c;图就不提供了。 1&#xff0c;最开始&#xff0c;计算机之间是相互独立的&#xff0c;不能沟通交流。 2&#xff0c;…

第02章_MySQL的数据目录

第02章_MySQL的数据目录1. MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录2. 数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示1. MySQL8的主要目录结构 [rootatguigu01 ~]# find / -name mys…

React中的useEffect(副作用)

目录 useEffect(副作用)介绍 useEffect(副作用)各种写法的调用时刻 1.写法一&#xff1a;没有依赖项时 父组件给子组件传值&#xff1a; 2.写法二:依赖项中有监听的值时 3.写法三&#xff1a;依赖项为空数组时 4.写法4&#xff1a;清除副作用写法(假如副作用是一个定时器,…

【C++】string类的模拟实现

文章目录一、string类的构造、拷贝构造、赋值重载以及析构1.构造函数2.拷贝构造3.swap问题4.赋值重载5.析构函数二、常用接口1.c_str2.[]3.迭代器和范围for4.size和capacity三、插入1.reserve和resize2.push_back3.append4.5.insert四、删除1.erase2.clear五、查找1.find六、运…

Nginx

What is Nginx&#xff1f; Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格&#xff0c;以统一资源描述符&#xff08;Uniform Resources Identifier&#xff09;URI 或者统一资源定位符&#xff08;Uniform Resources Locator&#xff09;URL 作为沟通依据&…

基于51单片机的多功能时钟温度计proteus仿真原理图

本系统是由AT89S52单片机为控制核心&#xff0c;具有在线编程功能&#xff0c;低功耗&#xff0c;能在3V超低压环境中工作&#xff1b;时钟电路由内部时钟电路外接晶振提供&#xff0c;它是一种高性能、低功耗、带RAM的可随时调整时钟电路&#xff0c;工作电压为3V&#xff5e;…

数据中台与大数据、数据仓库、数据湖、BI的区别

一、什么是数据中台 数据中台是一种将企业沉睡的数据变成数据资产&#xff0c;持续使用数据、产生智能、为业务服务&#xff0c;从而实现数据价值变现的系统和机制。通过数据中台提供的方法和运行机制&#xff0c;形成汇聚整合、提纯加工、建模处理、算法学习&#xff0c;并以…

电源管理ISL95869HRTZ、ISL95808HRZ概述、规格和应用

ISL95869完全符合英特尔IMVP9规范&#xff0c;并为处理器的主输入轨道电源提供了完整的解决方案。它提供了一个电压调节器(VR)与两个集成和一个外部门驱动器。VR可以配置为3-&#xff0c;2-或1-相位&#xff0c;提供最大的灵活性。虚拟现实采用串行控制总线SVID (serial contro…

es环境搭建

1.es与es-head的搭建 1.1 es7.6.2 每个es都是自成一个集群&#xff0c;不同于solar还需要zk来搭建集群 1.1.1 下载安装 https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-2 因为占用内存实在是太大了&#xff0c;我在服务器上装了运行不起来&#xff…

Flameshot源码编译方法

一、简介 Flameshot是一款功能强大但易于使用的屏幕截图软件&#xff0c;中文名称火焰截图。Flameshot 简单易用并有一个CLI版本&#xff0c;所以你也可以从命令行来进行截图。Flameshot 是一个Linux发行版中完全免费且开源的截图工具。 二、在线安装 在线安装方法很简单&…

java基于web的自行车租赁系统ssh

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 课题研究的意义 1 1.3 课题的目标 2 1.4 研究内容与章节安排 2 第2章 可行性分析 3 2.1 经济可行性 3 2.2 技术可行性 3 2.3 操作可行性 4 2.4法律可行性 4 2.5业务流程分析…

win10实现nfs文件共享II

文章目录&#xff08;一&#xff09;在服务器A设置共享目录&#xff08;二&#xff09;在客户端B安装nfs,挂载目录&#xff08;一&#xff09;在服务器A设置共享目录 步骤1&#xff1a;在D盘新建目录“nfs”,将其目录设置为共享目录。 步骤2&#xff1a;点击权限&#xff0c;设…

税票贷产品的准入与额度判断有哪些逻辑

近两周&#xff0c;番茄风控的课程中&#xff0c;涉及的税票贷产品课程干货满满。 今天我们再跟大家讲一下关于税票贷中风控的核心准入策略与额度判断有哪些逻辑是需要关注的&#xff1f; 先来说下税务的数据&#xff0c;然后再来讲下发票类型的数据。 一.关于税务的风控准入策…

PCB Layout爬电距离、电气间隙如何确定-安规

PCB Layout爬电距离、电气间隙如何确定 爬电距离&#xff1a;沿绝缘表面测得的两个导电零部件之间或导电零部件与设备防护界面之间的最短路径。 电气间隙&#xff1a;在两个导电零部件之间或导电零部件与设备防护界面之间测得的最短空间距离。即在保证电气性能稳定和安全的情况…

Redis真没那么难,这份大佬实战笔记也太可了,吹爆

Redis的技术全景 Redis一个开源的基于键值对&#xff08;Key-Value&#xff09;NoSQL数据库。使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀&#xff0c;并提供多种语言的API。 我们要首先理解一点&#xff0c;我们把Redis称为KV数据库&#xff0c;键值对数据…

图解LeetCode——775. 全局倒置与局部倒置(难度:中等)

一、题目 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < nnums[i] > nums[j]局部倒置 的数目等于满足下述条件的下标 i 的…

【Opencv实战】识别水果的软件叫什么?一款超好用的识别软件分享,一秒鉴定(真是活~久~见~啊)

导语 Hello&#xff0c;大家好呀&#xff01;我是木木子吖&#xff5e; 一个集美貌幽默风趣善良可爱并努力码代码的程序媛一枚。 听说关注我的人会一夜暴富发大财哦——不信你试试&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&…

redis(二)

一、短信登录 1.1导入黑马点评项目 导入黑马点评项目 首先&#xff0c;导入课前资料提供的SQL文件 其中的表有&#xff1a; tb_user&#xff1a;用户表tb_user_info&#xff1a;用户详情表tb_shop&#xff1a;商户信息表tb_shop_type&#xff1a;商户类型表tb_blog&#xf…

Golang入门(1)—— helloworld 初体验

没有多少雄心壮志&#xff0c;就是想在B站上跟一个视频&#xff0c;写一个helloworld 。 还是老配方&#xff0c;还是IDEA&#xff0c;简单的下载了一个go插件之后&#xff0c;就可以new go文件了。然后根据提示下载了一个最新的go版本&#xff0c;设置好环境变量。写了如下&am…

Redis事务相关源码探究

文章目录Redis事务源码解读1、MULTI 声明事务2、命令入队3、EXEC 执行事务4、WATCH 监听变量Redis事务源码解读 源码地址&#xff1a;https://github.com/redis/redis/tree/7.0/src 从源码来简单分析下 Redis 中事务的实现过程 1、MULTI 声明事务 Redis 中使用 MULTI 命令来…