iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >全网非常详细的pytest配置文件
  • 827
分享到

全网非常详细的pytest配置文件

2024-04-02 19:04:59 827人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录更改默认命令行选项注册标记来防止拼写错误指定pytest的最低版本号指定pytest忽略某些目录指定测试目录更改测试搜索的规则python_classesPython_files

说到配置,大家可能想到的是不经常更改的内容,比如Django里的settings.py文件,或者我们做自动化的时候,把测试环境的域名和正式环境的域名放到一个配置文件里,所有的接口都从这个文件里读取。这样,如果有一天,我们的域名变了,我们只需要更改配置里的域名就可以了。pytest里也有几个配置文件。

  • pytest.ini:pytest的主配置文件,可以改变pytest的默认行为,有很多可配置的选项。
  • conftest.py:是本地的插件库,其中的hook函数和fixture将作用于该文件所在的目录以及所有子目录。
  • __init__.py:每个测试子目录都包含该文件时,那么在多个测试目录中可以出现同名测试文件。
  • tox.ini:它与pytest.ini类似,只不过是tox的配置文件,你可以把pytest的配置都写在tox.ini里,这样就不用同时使用tox.ini和pytest.ini两个文件

更改默认命令行选项

我们之前已经用过pytest命令行选项了,比如-v/--verbose可以输出详细信息,-l/--showlocals可以查看失败测试用例里堆栈中的局部变量。你也许经常要用到某些参数,又不想重复输入,这时可以使用pytest.ini文件里的addopts设置。

[pytest]
addopts = -rsxX -l --tb=short --strict

--rsxX表示pytest报告所有测试用例被跳过、预计失败、预计失败但实际通过的原因。-l表示pytest报告所有失败测试的堆栈中的局部变量。--tb=short表示简化堆栈回溯信息,只保留文件和行数。--strict选项表示禁止使用未在配置文件中注册的标记。

我们有个test_two.py文件,里面有如下代码

def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 55

def test_answer1():
    assert inc(4) == 5

我们没有添加如上命令执行一遍

再去pytest.int里添加上上面的代码,在去执行一遍

注册标记来防止拼写错误

在前面我们学过,自定义标记可以简化测试工作,让我们用指定的标记运行某个测试子集。但是,标记很容易拼错,比如把@pytest.mark.smoke拼成@pytest.mark.somke,默认情况下。这不会引起程序错误。pytest会以为这是你创建的另一个标记。为了避免拼写错误。可以在pytest.ini文件里注册标记

[pytest]
markers =
    smoke: Run the smoke test functions for tasks project
    get: Run the test functions that test tasks.get()

修改test.two.py

import pytest
def inc(x):
    return x + 1

@pytest.mark.smoke
def test_answer():
    assert inc(3) == 55

@pytest.mark.post
def test_answer1():
    assert inc(4) == 5

标记注册好后,可以通过pytest --markers来查看

没有注册的标记不会出现在--markers列表里。如果使用了--strict选项,遇到拼写错误的标记或未注册的标记就会报错。

pytest.ini里写如下代码

[pytest]
markers =
    smoke: Run the smoke test functions for tasks project
    get: Run the test functions that test tasks.get()

上面的代码我们在执行的时候,把smoke故意写错了,也没有报错,只是给我们一个警告,只需要我们在ini里注册下就不会有警告了

在去修改pytest.ini里的代码

[pytest]
addopts = -rsxX -l --tb=short --strict
markers =
    smoke: Run the smoke test functions for tasks project
    get: Run the test functions that test tasks.get()

我们在ini里加上了addopts = -rsxX -l --tb=short --strict 这句代码之后,如果我们拼错了就会报错

指定pytest的最低版本号

有些功能是随着pytest版本的更新而加入到里面的,如果我们不想用比较低的版本,可以在配置里指定最低的版本号。

minversion选项可以指定运行测试用例的pytest的最低版本。

[pytest]
minversion = 4.0

如果使用了老版本的pytest运行该测试,就会得到一个错误信息。

指定pytest忽略某些目录

pytest执行测试搜索时,会递归遍历所有子目录,包括某些你明知道没必要遍历的目录。遇到这种情况,你可以使用norecurse选项简化pytest的搜索工作。

norecurse的默认设置是 .* build dist CVS -darcs {arch}和 *.egg。因为有 .*,所以将虚拟环境命名为.venv是一个好注意,所有以.(点)开头的目录都不会被访问。如果不是以.(点)开头,那么需要把它加入norecursedirs里。比如我想忽略test_001目录

[pytest]
norecursedirs = .* venv test_001 *.egg dist build

先来看下目录结构

test_one.py

import pytest
def test_case_01():
    assert 0 == 0

def test_case_02():
    assert 0 == 0

test_one.py

test_first

import pytest
def inc(x):
    return x + 1

@pytest.mark.smoke
def test_answer():
    assert inc(3) == 55

@pytest.mark.post
def test_answer1():
    assert inc(4) == 5

test_first

如果我们不指定norecursedirs就会执行djanGotest目录下的所有文件

指定norecursedirs

[pytest]
norecursedirs = .* venv test_001 *.egg dist build
addopts = -rsxX -l --tb=short --strict
markers =
    smoke: Run the smoke test functions for tasks project
    get: Run the test functions that test tasks.get()
    smoek: run
    post: Run post

也可以指定多个目录

[pytest]
norecursedirs = .* venv test_001 test_002 *.egg dist build

指定测试目录

norecuredirs告诉pytest哪些路径不用访问,而testpaths则指示pytest去哪里访问。testpaths是一系列相对于根目录的路径,用于限定测试用例的搜索范围。只有在pytest未指定文件目录参数或测试用例标识符时,该选项才有作用

如果我们只想执行test_001下的测试用例,则可以把test_001放到testpaths里

[pytest]
testpaths = test_001

那如果我既指定了testpaths和norecursedirs ,而且两个是一样的,结果会怎样

[pytest]
testpaths = test_001
norecursedirs = .* venv test_001  *.egg dist build

从运行结果可以看出,如果两个都指定,且冲突的话,是按照指定的testpaths执行的,是不是因为testpaths在上面的原因导致的?我们换一下顺序

[pytest]
norecursedirs = .* venv test_001  *.egg dist build
testpaths = test_001

从上面两次的运行结果可以看出,如果既指定了testpaths和norecursedirs ,而且两个是一样的,则是按照testpaths执行的

更改测试搜索的规则

pytest根据一定的规则搜索并运行测试,标准的测试搜索规则如下。

  • 从一个或多个目录开始查找。你可以在命令行指定文件名或目录名。如果未指定,则使用当前目录
  • 在该目录和所有子目录下递归查找测试模块
  • 测试模块是指文件名为test_*.py或*_test.py的文件
  • 在测试模块中查找以test_开头的函数名。
  • 查找名字以Test开头的类,其中,首先筛选掉包含__init__函数的类,在查找类中以Test_开头的类方法

以上是标准的测试搜索规则,你也可以更改它们

python_classes

通常pytest的测试搜索规则是寻找以Test*开头的测试类,而且这个类不能有__init__()函数。但是,如果把测试类命名为<something>Test或<something>Suite怎么办?python_classes就可以解决这个问题。

[pytest]
python_classes = *Test Test* *Suite

这个设置允许我们像下面这样给类取名

class DeleteSuite():
    def test_delete_1(self):
        pass
    def test_delete_2(self):
        pass

我们修改test_001目录下的test_onne.py文件

class DeleteSuite():
    def test_delete_1(self):
        assert True

    def test_delete_2(self):
        assert False

先不添加python_classes执行一下

然后我们添加上python_classes执行一下

[pytest]
python_classes = *Test Test* *Suite

python_files

像pytest_classes一样,python_files可以更改默认的测试搜索规则,而不是仅查找以test_*开头的文件和以*_test结尾的文件

假设你的测试文件统一命名为check_<something>.py。你不必重命名所有的测试文件,只要在pytest.ini文件里增加一行配置即可

[pytest]
python_files = test_* *_test check_*

我们将test_one.py改为check_one.py在执行

[pytest]
python_files = test_* *_test check_*
python_classes = *Test Test* *Suite

python_functions

python_functions与之前的两个设置类似,它只是用来测试函数和方法的命名。more规则以test_*开头。如果想添加check_*,则只需要添加一行配置

[pytest]
python_functions = test_* check_*

修改test_one.py下的代码

class DeleteSuite():
    def check_delete_1(self):
        assert True

    def check_delete_2(self):
        assert False
[pytest]
python_functions = test_* check_*
python_files = test_* *_test check_*
python_classes = *Test Test* *Suite
addopts = -rsxX -l -v --tb=short --strict

禁用XPATH

设置xfail_strict = true将会使那些被标记为@pytest.mark.xfail但实际通过的测试用例也被报告为失败

[pytest]
xfail_strict = true

很难理解是吧!!!喝杯茶,我给你给个栗子吃

test_one.py代码如下,可以看到,我们有两个测试用例,都是标记的预期失败,但其中一个是会成功,一个是失败的,我们不加xfail_strict = true来执行一下

import pytest

@pytest.mark.xfail()
def test_answer():
    assert 5 == 5

@pytest.mark.xfail()
def test_answer1():
    assert 5 != 5

可以看到有一个通过了,有一个失败了,但是我们如果想把标记为预期失败的,不管结果是成功还是失败都标记为失败,则要在配置里加xfail_strict = true

[pytest]
xfail_strict = true

这样两个用例就都是失败的

到此这篇关于全网非常详细的pytest配置文件的文章就介绍到这了,更多相关pytest配置文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 全网非常详细的pytest配置文件

本文链接: https://www.lsjlt.com/news/119369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 全网非常详细的pytest配置文件
    目录更改默认命令行选项注册标记来防止拼写错误指定pytest的最低版本号指定pytest忽略某些目录指定测试目录更改测试搜索的规则python_classespython_files...
    99+
    2024-04-02
  • pytest配置文件pytest.ini的详细使用
    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行 非test文件 pytest里面有些文件是...
    99+
    2024-04-02
  • Centos7 防火墙配置详解(非常详细!)
    Centos7 防火墙配置详解(非常详细) 一. zone的概念1.1 预定义的zone1.2 将interface和source划分到某个zone1.3 zone配置文件 二. Service的概念2.1 service配置文...
    99+
    2023-08-19
    服务器 网络安全 centos
  • Spring配置文件的详细介绍
    目录 1. Spring的配置文件的命名 2. Spring配置文件中有什么 3. set注入 4. 构造注入 1. Spring的配置文件的命名 答:Spring的配置文件是放在resources文件夹下面的,一般我们都会给他起一个...
    99+
    2023-09-18
    spring set注入 构造注入 bean标签 java
  • djangosettings.py配置文件的详细介绍
    配置文件如下,下面对配置文件进行一一解释 """ Django settings for film1_manager project. Generated by 'django-a...
    99+
    2024-04-02
  • 详细介绍Spring的配置文件
    目录1. Spring的配置文件的命名2. Spring配置文件中有什么3. set注入4. 构造注入1. Spring的配置文件的命名 答:Spring的配置文件是放在resour...
    99+
    2022-11-13
    Spring 配置文件
  • pytest配置文件pytest.ini的具体使用
    目录前言pytest.ini的内容构成配置项markers配置项testpaths配置项addopts前言 说到配置,大家可能想到的是不经常更改的内容,比如Django里的setti...
    99+
    2024-04-02
  • Redis配置文件redis.conf的详细分析
    这篇文章主要介绍了Redis配置文件redis.conf的详细分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文章目录一、常用的三十条配置...
    99+
    2024-04-02
  • redis配置文件中常用配置详解
    此次安装的版本为: 5.0.3 [root@localhost local]# redis-server --version Redis server v=5.0.3 sha=0...
    99+
    2024-04-02
  • MyBatis全局配置文件详解
    目录MyBatis全局配置文件settings设置typeAliases类型命名存在的问题:@Alias("")environments环境transactionManager事务管...
    99+
    2024-04-02
  • 文件上传漏洞(全网最详细)
    目录 前言 文件上传漏洞介绍 文件上传漏洞危害 文件上传漏洞满足条件 文件检测流程 CTFSHOW 151关-170关 151关:前端验证绕过 152关:后端校验 Content-Type 校验文件格式 153关:filename字段文件...
    99+
    2023-10-10
    安全 web安全 php
  • SpringBoot详细讲解多个配置文件的配置流程
    目录配置文件加载顺序验证前期准备验证配置文件加载顺序验证属性互补总结一般情况下,springboot默认会在resource目录下生成一个配置文件(application.prope...
    99+
    2024-04-02
  • Linux常用的配置文件保存位置大全
    这篇文章主要介绍“Linux常用的配置文件保存位置大全”,在日常操作中,相信很多人在Linux常用的配置文件保存位置大全问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux常用的配置文件保存位置大全”的疑...
    99+
    2023-06-13
  • 非常详细的Java异常处理机制知识整理大全
    目录异常的基本概念:Error与Exception:运行时的异常和非运行时的异常常见的运行时异常:常见的非运行异常:Java异常处理:try/catch/finally执行情况:tr...
    99+
    2022-11-13
    简述java异常处理机制 java中异常处理机制的原理和应用 java异常处理机制包括哪些
  • SpringBoot超详细讲解yaml配置文件
    目录1.文件类型A.properties配置文件类型B.yaml基本语法数据类型2.配置提示1.文件类型 A.properties配置文件类型 同以前properties用法一样 B...
    99+
    2024-04-02
  • SpringBoot配置文件格式详细介绍
    目录一、application.properties配置文件二、yml和yaml配置文件配置格式(1)普通属性(2)数组属性(3)注意事项idea添加配置文件三、生效优先级一、app...
    99+
    2024-04-02
  • SpringBoot详细讲解yaml配置文件的用法
    目录1.基本语法2.数据类型3.代码测试4.开启补全提示1.基本语法 key: value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不...
    99+
    2024-04-02
  • 超全!Python中常见的配置文件写法
    为什么要写配置文件这个固定文件我们可以直接写成一个 .py 文件,例如 settings.py 或 config.py,这样的好处就是能够在同一工程下直接通过 import 来导入当中的部分;但如果我们需要在其他非 Python 的平台进行...
    99+
    2023-05-14
    Python 配置文件
  • 超全!Python 中常见的配置文件写法
    为什么要写配置文件在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁。这个固定文件我们可以直接写成一个 .py 文件,例如 s...
    99+
    2023-05-14
    Python 配置文件
  • yolov5模型配置yaml文件详细讲解
    目录以models/yolov5s.yaml为例我们一个一个来解释:补充:模型 yaml 文件中第四参数解释总结 yolov5的代码模型构建是通过.yaml文件实现的,初次...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作