Pytest三种配置文件

news2025/1/20 21:49:28

😎😎原文出自:测个der,博主的公众号,格式美观一些。

配置介绍

pytest 的主配置文件,可以改变 pytest 的默认行为,执行 pytest -h,这里有很多配置均可用于 pytest.ini配置

(venv) D:\Python_test\pythonpp\pytest_>pytest -h

[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:

  markers (linelist):   Markers for test functions
  empty_parameter_set_mark (string):
                        Default marker for empty parametersets
  norecursedirs (args): Directory patterns to avoid for recursion
  testpaths (args):     Directories to search for tests when no files or directories are given on the command line
  filterwarnings (linelist):
                        Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings.
  usefixtures (args):   List of default fixtures to be used with this project
  python_files (args):  Glob-style file patterns for Python test module discovery
  python_classes (args):
                        Prefixes or glob names for Python test class discovery
  python_functions (args):
                        Prefixes or glob names for Python test function and method discovery
  disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):
                        Disable string escape non-ASCII characters, might cause unwanted side effects(use at your own risk)
  console_output_style (string):
                        Console output: "classic", or with additional progress information ("progress" (percentage) | "count")
  xfail_strict (bool):  Default for the strict parameter of xfail markers when not given explicitly (d


to see available markers type: pytest --markers
to see available fixtures type: pytest --fixtures
(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option

输入pytest -h其实不止这些命令,我只是截取出本章最主要的部分。

配置案例

# pytest.ini
[pytest]
# 命令行执行参数
addopts = -vs
# 排除目录
norecursedirs = no_Case
# 默认执行目录
testpaths = ./
# 执行规则-class
python_classes = Test*
# 执行规则-py 文件
python_files = test*
# 执行规则-function
python_functions = test*
# xfail 标志规则
xfail_strict = false
# 自定义注册标志
markers =
    login: 登陆类标志
    information: 信息页
    index: 首页

pytest.ini 中最好不要用中文,如果使用的话,请将文件编码改成 gbk ,否则还请删除ini配置文件中的中文。

目录结构

此处建议新建一个环境,如果你的pytest本就是一个新环境,没有其他的东西,可以不用新建。因为环境包如果过多,会对运行造成干扰。

pytest_
 Case
  test_a.py
 no_Case
  test_b.py
 pytest.ini
 run.py

pytest.ini上面已经展示了,看看run.py:

import pytest

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

就是执行入口,本章我们不用命令执行了。此外还有两个目录就是Case跟no_Case,放用例的地方,

命令样式讲解

addopts

[pytest]
addopts = -vs
# ---等价于---
pytest.main(["-vs"])

addopts可以接收很多了参数,换句话说main中能接收的参数,此处都能写。

目录规则

# 排除目录
norecursedirs = no_Case
# 默认执行目录
testpaths = ./

如果你发现目录不论怎么改都没有生效(能检测到用例),那么就请按照你上面所说重新弄一个环境。如果环境OK了,可以检测到目录了,会报错:拒绝访问亦或者ERROR No escaped character,亦或者norecursedirs的目录用例运行了,那么都可以归结于目录路径写错了。 当然,你可以通过控制默认执行目录达到排除目录的效果。

用例执行规则

# 执行规则-class
python_classes = Test*
# 执行规则-py 文件
python_files = test*
# 执行规则-function
python_functions = test*

当然,pytest默认设置的也是class检测Test开头,用例是test,我们也能换成自己想要的样式:

class Qing_A:

    def qing_a(self):
        print("我是清安")

    def qing_b(self):
        print("我是拾贰")

那么pytest.ini因该如何写呢:

# pytest.ini
[pytest]
# 命令行执行参数
addopts = -vs
# 排除目录
norecursedirs = no_Case
# 默认执行目录
testpaths = ./
# 执行规则-class
python_classes = Qing*
# 执行规则-py 文件
python_files = test*
# 执行规则-function
python_functions = qing*

py文件命名此处我就没改,可以自己试试,类与函数用例我是改了。除了这样还可以:

# 执行规则-class
python_classes = Qing* *Qing
# 执行规则-py 文件
python_files = test*
# 执行规则-function
python_functions = qing* *test

代码出仅需要添加:

class B_Qing:
    def b_test(self):
        print("我是b用例")

就能检测到自定义的用例了,看看结果:

Case/test_a.py::Qing_A::qing_a 我是清安
PASSED
Case/test_a.py::Qing_A::qing_b 我是拾贰
PASSED
Case/test_a.py::B_Qing::b_test 我是b用例
PASSED

注意点

用例检测这里,如果你写了py,class,function,那么它会看着这样的逻辑进行检测,如果python_files都没有检测到了,剩下的python_classes以及python_functions也就不能进行了。其次是python_classes如果有则优先检测,如果没有则检测python_functions。

自定义标志

  1. pytest.ini 中最好不要用中文,如果使用的话,大家要将文件编码改成 gbk

  2. 标志名称没有限制,建议大家参考模块命名,要有业务含义,不要随心而写

  3. 所有的自定义标志,建议大家在 pytest.ini 中进行统一管理和通过命令参数--strict-markers 进行授权(pytest 其实不强制)

  4. pytest 中的 markers 配置,相当于我们对业务的一种设计归类,尤其是大项目时非常重要

# 自定义注册标志
markers =
    login: 登陆类标志
    information: 信息页
    index: 首页
import pytest

@pytest.mark.login
class Qing_A:

    def qing_a(self):
        print("我是清安")

    @pytest.mark.information
    def qing_b(self):
        print("我是拾贰")

@pytest.mark.index
class B_Qing:
    def b_test(self):
        print("我是b用例") 

那么如何运行指定的标志呢:

[pytest]
# 命令行执行参数
addopts = -vs -m login
# 或者
addopts = -vs -m  "not login"
# 或者
addopts = -vs -m "login or index"
"""not login结果示例"""
Case/test_a.py::Qing_A::qing_a 我是清安
PASSED
Case/test_a.py::Qing_A::qing_b 我是拾贰
PASSED

乱码问题

有些人的情况或许跟我一样,pytest.ini输入的中文是乱码或者读取出来的是乱码,这时候可以在设置中的:

修改成GBK即可。

小结

关于并未完全讲完的一些参数可以来这里直接CTRL + F搜索:API引用 — pytest documentation 一定是pytest.ini文件吗?其他的配置文件不行吗。官方介绍到还有.toml,tox.ini,setup.cfg,其中setup.cfg是不被推荐使用的,官方文档这样说道:

💥警告 用法 setup.cfg 除非用于非常简单的用例,否则不推荐使用。 .cfg 文件使用不同于 pytest.ini 和 tox.ini 这可能会导致难以追踪的问题。如果可能,建议使用后一个文件,或者 pyproject.toml ,以保存pytest配置。

关于toml配置文件

[tool.pytest.ini_options]
addopts = "-vs -m login"
norecursedirs = "no_Case"
testpaths = "./"
python_classes = "Qing* *Qing"
python_files = "test*"
python_functions = "qing* *test"
xfail_strict = "false"
markers = ["login:登陆类标志", "information:信息页", "index:首页"]

如上是改写的pytest.ini配置文件的。写法上有些不一样,注意点即可。此外关于官网的介绍,其实其他地方也可以改成类似于markers的写法:

[tool.pytest.ini_options]
addopts = "-vs -m login"
norecursedirs = "no_Case"
testpaths = "./"
python_classes = ["Qing*","*Qing"]
python_files = "test*"
python_functions = ["qing*","*test"]
xfail_strict = "false"
markers = ["login:登陆类标志", "information:信息页", "index:首页"]

关于tox.ini配置文件

[pytest]
addopts = -vs --strict-markers -m "not index"
norecursedirs = no_Case
testpaths = ./
python_classes = Qing* *Qing
python_files = test*
python_functions = qing* *test
xfail_strict = false
markers =
    login: "login info"
    information: "information"
    index: "index"

此处我删除了中文,是因为GBK编码问题,不想处理了,直接删除采用英文省事。 假如你实在解决不论编码问题,就采用全英文吧。

 

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

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

相关文章

HarmonyOS鸿蒙学习笔记(16)Canvas入门使用

Canvas入门指南1、Canvas代码结构2、简单案例2.1 fillStyle和fillRect 绘制蓝色矩形2.2 strokeRect和strokeStyle 绘制红色边框2.3 lineCap的使用2.4 lineJoin的使用2.5 closePath的使用3、参考资料1、Canvas代码结构 在使用Canvas的时候,需要向初始化RenderingCon…

第四十七讲:IPv6基础知识

一、IPv6网络元素及概念 IPv6的网络元素如下图所示。 节点:任何运行IPv6的设备,包括路由器和主机(甚至还将包括PDA、冰箱、电视等)。邻节点:连接到同一链路上的节点。这是一个非常重要的概念,因为IPv6的邻…

JS面试题--this指向+面试题

this其他补充 内置函数的绑定思考 01_一些函数的this分析 // 1.setTimeout原理 // function hySetTimeout(fn, duration) { // fn.call(window) // }// hySetTimeout(function() { // console.log(this) // window // }, 3000)// setTimeout(function() { // console.l…

EEG论文阅读和分析:《Differential entropy feature for EEG-based emotion classification》

论文阅读《Differential entropy feature for EEG-based emotion classification》 论文的核心是提出差分熵作为特征,并且对差分差分熵和比例差分熵等特征进行对比研究。 算法流程步骤: 采样过程: A.预处理 根据受试者的压力反应&#xf…

零基础转行软件测试可行吗?

如今,随着人们对软件质量的要求越来越高,软件测试已经成为最热门的IT行业之一。不少非科班出身的转业者也纷纷开始观望这个行业,因此不少人会问,零基础转行软件测试有前途吗?答案显而易见,如果你想成为最炙…

【C语言】数据类型(基本类型、构造类型、类型转换)

⏰打卡:DAY1 🏆今日学习目标:数据类型(基本类型、构造类型、类型转换) ✨个人主页:颜颜yan_的个人主页 🎉专栏系列:从0开始学C语言 文章目录前言基本类型整型浮点型字符型构造类型数…

Mybatis学习——增删改(mysql8.0)

目录 一、配置文件 (一)添加mybatis依赖: (二)resources资源目录的配置 1.database.properties文件的设置 2.mybatis-config.xml文件的设置 二、引入原始类 三、DogDao接口,定义增删改功能 (一)单条数据增删改 1.新增 2.删除 3.修改 (二)多条…

Makefile详细教程

Makefile详细教程 我编写本指南是因为我永远无法完全理解 Makefile。 他们似乎充斥着隐藏的规则和深奥的符号,提出简单的问题并没有得到简单的答案。 为了解决这个问题,我花了几个周末的时间坐下来阅读所有关于 Makefile 的内容。 我已将最关键的知识浓…

【链表】leetcode206.反转链表(C/C++/Java/Js)

leetcode206.反转链表1 题目2 思路2.1 双指针法(迭代)2.2 递归法2.2.1 递归--从前往后翻转指针指向2.2.2 递归--从后往前翻转指针指向3 代码3.1 C版本(迭代)3.2 C版本(迭代递归)3.3 Java版本(迭…

【OpenDDS开发指南V3.20】第十章:Java Bindings

介绍 OpenDDS提供JNI绑定。Java应用程序可以像C++应用程序一样使用完整的OpenDDS中间件。 有关入门的信息,包括先决条件和依赖项,请参阅$DDS_ROOT/java/INSTALL文件。 Java版本9和更高版本使用Java平台模块系统。要在这些Java版本中使用OpenDDS,请将MPC特性Java_pre_jpms…

QT Echarts 联动共享数据表图 使用详解

Echarts是百度的一款可视化界面开发的平台,里面的地图以及数据可视化内容十分丰富,适合用于一些大屏数据显示项目或者一些ui界面开发。每一个ECharts图表使用一个无边框的QWebView来展示,这样多个不同类型的ECharts图表就是多个封装不同类型E…

kettle 筛选数据 并根据关键字段去重 设计

文章目录前言kettle 筛选数据 并根据关键字段去重 设计实现:1、配置sqlite 数据库链接2、先从test表里抽取数据3、将表输入查询的数据插入到excel里4、将筛选出来的数据根据id去重5、插入本地excel6、ETL 整体效果:7、测试:前言 如果您觉得有用的话,记得给博主点个赞…

安全轻量化股票看盘盯盘软件需要实现的功能和基本要求是什么?

有很多投资者是上班族的,因此是不能无时无刻盯盘看盘的,那么为了解决这个问题就需要用上轻量化股票看盘盯盘软件,那么一个安全的轻量化股票看盘盯盘软件需要具备哪些功能和基本要求呢?接下来小编为大家分析分析! 1.一定…

小试跨平台局域网文件传输工具NitroShare,几点感想

随着电脑系统国产化的推进,单位用的OA系统已转移到国产电脑上了,但是国产电脑上的操作系统基于Linux,软件商店里可选的应用软件还不够多,功能也还有待提高。为了提高处理效率,经常需要把文件从国产电脑传到Windows平台…

信息收集过程WAF绕过详解

今天继续给大家介绍渗透测试相关知识,本文主要内容是信息收集过程WAF绕过详解。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未…

浅析数据中心机架配电母线的应用及监控

摘要:本文先分析配电母线槽创新点和优势,然后结合湛江数据中心302机房母线槽建设对配电母线槽和列头柜两种供电方式进行经济效益对比,最后总结推广应用建议,以期为相关工程技术人员提供参考。 关键词:机架配电母线&a…

【动态路由和导航守卫】一.动态路由;二.路由中的查询参数;三.命名路由;四.命名视图;五.声明式导航 编程式导航;六.导航守卫

目录 一.动态路由 1.什么是动态路由? 2.动态路由如何进行参数的传递: (1)如何设置URL地址中的参数:/url/:参数名 (2)在组件中接收参数:this.$route.params.参数名 3.$route和$r…

最新版android-studio无法安装Lombok插件?魔改后可任意安装版本教程(附已魔改下载地址)

🤵‍♂️ 个人主页: 奇怪的守护神 👨‍💻 作者简介:十年全栈开发经验,团队负责人。喜欢钻研技术,争取成为编程达人 🎖️! 🗺️学海无涯苦作舟,🛤️…

【自学Python】Python字符串(string)

Python字符串(string) Python字符串(string)教程 字符串是一个不可改变的字节序列。字符串可以包含任意的数据,但是通常是用来包含可读的文本。 Python字符串(string) Python 字符串定义有五种形式,使用单引号、双引号、三个单引号 、三个双引号以及…

胡凡 《算法笔记》 上机实战训练指南 chap3 入门模拟: 3.2 查找元素

胡凡 《算法笔记》 上机实战训练指南 chap3 入门模拟: 3.2 查找元素 文章目录胡凡 《算法笔记》 上机实战训练指南 chap3 入门模拟: 3.2 查找元素【PAT B1041】考试座位号【PAT B1004】成绩排名【PAT B1028】人口普查解决过程(cpp)AC代码python实现AC代码pycode1pycode2未AC代码…