浅谈Pytest中的marker

没有注册marker

  • 我们写一个简单的测试
# test_demo.py
import pytest @pytest.mark.login
def test_demo():
assert True
  • 你运行的话会有如下提示
test_demo.py:4: PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
@pytest.mark.login -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
  • 上面两个文档值得你的仔细阅读

注册marker方式一:pytest.ini

  • 新建一个文件pytest.ini(在哪里创建?你应该要知道,跟你的项目结构有关),写入如下内容
[pytest]
markers:
login: login test demo
  • 再次运行就不会有PytestUnknownMarkWarning

注册marker方式二:pytest_configure

  • 创建一个conftest.py

    def pytest_configure(config):
    config.addinivalue_line(
    "markers", "login: login test demo"
    )
  • 效果是一样的

带marker运行

  • 通过命令行参数-m即可

  • 比如现在有这个case

    import pytest
    
    @pytest.mark.login
    def test_demo1():
    assert True @pytest.mark.logout
    def test_demo2():
    assert True
  • contest.py

    def pytest_configure(config):
    config.addinivalue_line("markers", "login: login test demo",)
    config.addinivalue_line("markers", "logout: logout test demo")# 注意一个marker要写一个addinivalue_line
  • 运行的时候带上-m login即可选择登录用例进行测试

  • 而-m的语法还比较复杂,可以参考-k的

    general:
    -k EXPRESSION
    only run tests which match the given substring expression. An expression is a python evaluatable
    expression where all names are substring-matched against test names and their parent classes.
    Example: -k 'test_method or test_other' matches all test functions and classes whose name
    contains 'test_method' or 'test_other', while -k 'not test_method' matches those that don't
    contain 'test_method' in their names. -k 'not test_method and not test_other' will eliminate the
    matches. Additionally keywords are matched to classes and functions containing extra names in
    their 'extra_keyword_matches' set, as well as functions which have names assigned directly to
    them. The matching is case-insensitive.
    -m MARKEXPR   only run tests matching given mark expression.For example: -m 'mark1 and not mark2'.

关于marker的其他

  • 查询markers

    pytest --markers
    
    # 能查到当前注册的markers

  • 命令行参数--strict-markers

    pytest.main(['-sv','--strict-markers',__file__])   # 强制markers必须要注册
  • 或者放pytest.ini中

    [pytest]
    addopts = --strict-markers
  • 会产生如下信息

    =================================== ERRORS ====================================
    ________________________ ERROR collecting test_demo.py ________________________
    'login' not found in `markers` configuration option
    =========================== short test summary info ===========================
    ERROR test_demo.py
    !!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
    ============================== 1 error in 0.08s ===============================

  • marker是pytest中pick用例的多种方式之一(-m),其他pick用例的方式比如-k,--allure的几个

      --allure-severities=SEVERITIES_SET
    --allure-epics=EPICS_SET
    --allure-features=FEATURES_SET
    --allure-stories=STORIES_SET
    --allure-ids=IDS_SET Comma-separated list of IDs.
    --allure-link-pattern=LINK_TYPE:LINK_PATTERN

pytest中处理warning的方式考虑单独开个章节讲下 TODO

浅谈Pytest中的marker的更多相关文章

  1. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  2. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  3. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  4. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  5. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  6. 浅谈iOS中的userAgent

    浅谈iOS中的userAgent   User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...

  7. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  8. 浅谈sql中的in与not in,exists与not exists的区别

    转 浅谈sql中的in与not in,exists与not exists的区别   12月12日北京OSC源创会 —— 开源技术的年终盛典 »   sql exists in 1.in和exists ...

  9. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  10. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

随机推荐

  1. Day04:Java数据类型

    Java的数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 什么是变量 变量:可以变化的量. 在Java中每个变量都必须先申明这个变量是什么类型 Stri ...

  2. TDSQL-C 真·秒级启停:连接断了,又没断

    你听过多少款无服务器架构(Serverless)数据库? 什么是Serverless呢?简单理解,Serverless 分为 FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Baa ...

  3. Xtrabackup使用帮助

    目录 1.安装工具 2.下载后上传到需要备份的服务器 全备 1.安装完成后我们进行数据库备份执行以下命令 2.查看备份的数据 3.进入数据库,删除一个测试库 4.删除school库 5.备份数据目录 ...

  4. KubeEdge的云边协同设计原理

    1.云端组件与K8s Master的关系 cloudCore和K8s master,非侵入的映射 2.EdgeController详解 -边缘节点管理 -应用状态元数据云边协同 3.DeviceCon ...

  5. 7. PyQt5 中的多线程的使用(下)

    专栏地址 ʅ(‾◡◝)ʃ 紧接着上一节, 这一节具体介绍 图形化界面 如何给 任务线程传递数据 7.1 from form import Ui_Form from PyQt5.QtWidgets im ...

  6. 干电池升压5V,功耗比较低

    干电池升压5V,功耗10uA PW5100干电池升压5V芯片 输出电容: 所以为了减小输出的纹波,需要比较大的输出电容值.但是输出电容过大,就会使得系统的 反应时间过慢,成本也会增加.所以建议使用一个 ...

  7. 把时间沉淀下来 | Kagol 的 2022 年终总结

    现代管理学之父德鲁克在其经典著作<卓有成效的管理者>中对时间有一段精妙的论述,其要点如下: 时间是一项限制因素,任何生产程序的产出量,都会受到最稀有资源的制约,而时间就是其中最稀有的资源. ...

  8. 深度学习GPU加速配置方法

    深度学习GPU加速配置方法 一.英伟达官方驱动及工具安装 首先检查自己的电脑驱动版本,未更新至最新建议先将驱动更新至最新,然后点击Nvidia控制面板 2.在如下界面中点击系统信息,点击显示可以看见当 ...

  9. Qt的进程间通信,以服务器的形式,手把手教你VS上进行Qt的COM、ActivedQt Server的开发,比保姆还保姆(一)

    Qt的进程间通信,以Active服务器的形式,手把手教你VS上进行Qt的COM.ActivedQt Server的开发,比保姆还保姆 写在前面,文中的ID有部分对不上,因为我中途改了一下,我建议你在实 ...

  10. JavaScript:对象:如何复制一个对象?浅拷贝与深拷贝

    回顾一下,我们对传参的讨论,对象的传参是引用传递,我们传递的是对象数据所在的内存地址: 那么无论我们怎么去赋值,所有变量指向的都是同一块内存: 如上图所示,无论我去使用哪个变量去操作对象的属性,改变的 ...