首页 > 其他分享 >关键字 开发-15 mark标记用例

关键字 开发-15 mark标记用例

时间:2024-01-04 15:44:09浏览次数:28  
标签:case 15 name mark 用例 pytest test

pytest可以支持对用例自定义标记,可以把用例按自己的需要归类标记,比如按用例优先级,标记一些smoke冒烟测试用例。

1. mark标记基本实现

import pytest

@pytest.mark.smoke
def test_login1():
    print('test1')


@pytest.mark.smoke
def test_login2():
    print('test2')


def test_login3():
    print('test3')

执行:pytest .\test_study_mark.py -m smoke,它会只执行被smoke标记过的用例。

# 对测试类下的每个用例都会生效
@pytest.mark.dack
class TestRun:
    def test_a3(self):
        pass

    def test_a4(self):
        pass

import pytest

# 对整个测试模块下的用例全部标记
pytestmark = pytest.mark.aaa

# 对对测试类下的每个用例都会生效
@pytest.mark.dack
class TestRun:
    def test_a3(self):
        pass

    def test_a4(self):
        pass

@pytest.mark.smoke
def test_login1():
    print('test1')


@pytest.mark.smoke
def test_login2():
    print('test2')


def test_login3():
    print('test3')

执行:pytest .\test_study_mark.py -m aaa,它会对整个测试模块全部生效。

2. 动态添加pytestmark属性

给运行函数添加pytestmark属性,并且通过pytest.Mark动态构造mark。

import pytest


def test_login1():
    print('test1')

def test_login2():
    print('test2')

def test_login3():
    print('test3')

# 给函数动态加pytestmark属性
test_login1.pytestmark = [
    pytest.Mark(name='aaa',
                args=(),
                kwargs={}
                )
]

test_login1函数动态添加了pytestmark属性,于是执行:pytest .\test_study_mark.py -m aaa

3. 在yaml中实现mark

在yaml文件中实现mark标记用例,需要在用例函数执行之前就添加pytestmark属性,并且添加到用例函数中。yaml文件如下所示。

# testcase/test_login2.yml

config:
  name: 登录用例
  variables:
    username: "admin"
    password: "eaton@2023"

test_login2:
    name: 登录2
    mark: smoke
    api: api/login.yml
    extract:
      code1: $.code
      code2: body.code
      token: $.data.token
    validate:
      - eq: [$.code, "000000"]
      - eq: [status_code, 200]

test_login3:
    name: 登录3
    api: api/login.yml
    extract:
      code1: $.code
      code2: body.code
      token: $.data.token
    validate:
      - eq: [$.code, "000000"]
      - eq: [status_code, 200]

在收集用例名称和用例内容的后,收集mark关键字内容。

# utils/run.py

            # ------------------ 收集 用例 mark 关键字------------
            case_mark = []
            if 'mark' in case[case_name][0]:
                case_mark = case[case_name][0].get('mark', [])
                if isinstance(case_mark, str):
                    case_mark = [item.strip(' ') for item in case_mark.split(',')]
                elif isinstance(case_mark, int):
                    case_mark = [str(case_name)]
                log.info(f'mark用例标记: {case_mark}')
            # ------------------ 收集 用例 mark 关键字 end------------

收集mark之后,在向module中加入test函数之前,需先将pytestmark动态添加进用例函数中。于是。


            # 给用例函数f,添加pytestmark属性
            if case_mark:
                f.pytestmark = [
                    pytest.Mark(name=mark_name,
                                args=(),
                                kwargs={}) for mark_name in case_mark
                ]
                # ------为用例添加mark标记示例 end--------
            # 向 module中加入test 函数
            setattr(self.module, case_name, f)

执行:pytest testcase/test_login2.yml -m smoke,如图可知,2个用例,只执行了被mark标记的用例。

3.1 在config中添加mark,全用例生效

config 中 mark 关键字添加给模块属性,对每个用例都生效。


        # -------------mark 标记config 下整个yaml 中全部标记--------------#
        config_mark = self.raw.get('config').get('mark', [])
        if isinstance(config_mark, str):
            config_mark = [item.strip(" ") for item in config_mark.split(',')]
        elif isinstance(config_mark, int):
            config_mark = [str(config_mark)]
        if config_mark:
            pytest_m = [
                    pytest.Mark(name=mark_name,
                                args=(),
                                kwargs={}) for mark_name in config_mark
            ]
            log.info(f'收集到的config mark:{config_mark}')
        setattr(self.module, "pytestmark", pytest_m)
        # ---------mark end---------------#

        case = {}  # 收集用例名称和执行内容
# testcase/test_login2.yml

config:
  name: 登录用例
  mark: aaa
  variables:
    username: "admin"
    password: "eaton@2023"

test_login2:
    name: 登录2
    mark: smoke
    api: api/login.yml
    extract:
      code1: $.code
      code2: body.code
      token: $.data.token
    validate:
      - eq: [$.code, "000000"]
      - eq: [status_code, 200]

test_login3:
    name: 登录3
    api: api/login.yml
    extract:
      code1: $.code
      code2: body.code
      token: $.data.token
    validate:
      - eq: [$.code, "000000"]
      - eq: [status_code, 200]

执行用例:pytest .\testcase\test_login2.yml -m aaa

标签:case,15,name,mark,用例,pytest,test
From: https://www.cnblogs.com/dack-zt-deng/p/17945406

相关文章

  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延
    文章目录Flink系列文章一、watermark介绍1、watermark介绍2、Watermark策略简介3、使用Watermark策略4、处理空闲数据源5、自定义WatermarkGenerator1)、自定义周期性Watermark生成器2)、自定义标记Watermark生成器6、Watermark策略与Kafka连接器7、算子处理Watermark......
  • 15.明明是x86的sos为什么会报不是有效的Win32应用程序
    最近在分析一个dump的时候,遇到了%1不是有效的Win32应用程序。这个错误,输出如下:*************Pathvalidationsummary**************ResponseTime(ms)LocationDeferredSRV*C:\mysymbols*http://msdl......
  • macOS Big Sur 11.6.3 (20G415) 正式版 DMG、ISO、IPSW 下载
    本站提供的macOSBigSur软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。macOSBigSur11.6.3(20G415)也于今天(2022年1月27日)发布,本次同样为安全更新。11.6完整安装包终于在(9月)17日发布,今天更新所有格式。macOS......
  • Xcode 15 beta 6 (15A5219j) - Apple 平台 IDE
    Xcode15beta6(15A5219j)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发、测试和分发应用程序。通过增强的代码完成、交互式预览和实时动画,更快地编写和设计您的应用程序。使用......
  • Python pytest.main()运行测试用例
    前言前面一直使用命令行运行pytest用例,本篇来学下使用pytest.main()来运行测试用例pytest.main()args传一个list对象,list里面是多个命令行的参数plugins传一个list对象,list里面是初始化的时候需注册的插件不带参数运行importpytest#等同于命令行执行pytest#默认运行的是......
  • openstack——云计算、大数据、人工智能(15)
    一、互联网行业及云计算在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS、PAAS、SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用。给我们工作生活提供服务!1、互联网大事记1936年英国数学家A.M.Turing发明图灵机,为现代......
  • 3步建“多头”头寸,fpmarkets澳福建头寸就是这么简单
    交易中建立头寸就是这么简单,fpmarkets澳福今天分享 3步建“多头”头寸方法。首先,当一个相当大的头寸形成时,总会有一个趋势。交易本身只能通过不具信息性的市场交易量进行追踪。fpmarkets澳福认为当一个真实的交易量形成时,一个大投机者的头寸被分割成许多小订单,这就是为什么我们看......
  • Xcode 15 beta 7 (15A5229h) - Apple 平台 IDE
    Xcode15beta7(15A5229h)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发、测试和分发应用程序。通过增强的代码完成、交互式预览和实时动画,更快地编写和设计您的应用程序。使用......
  • STM32MP157D-DK1开发板Qt镜像构建
    上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能,如果要进行Qt开发,还需要重新构建带有Qt功能的镜像本篇就来介绍如何构建带有Qt功能的系统镜像,并在开发板中烧录构建的镜像。1Distribution包的构建STM32微处理器平台的STM32MPU嵌入式软件发行版支持......
  • 前端学习笔记202310学习笔记第一百贰拾叁天-nodejs-登录鉴权-JWT鉴权之15
    ......