gpt4 book ai didi

Python tox 和 py.test : how to run just a single test rather than the whole test suite

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:46 25 4
gpt4 key购买 nike

我是 Django 和测试的新手,所以请多多包涵。

尝试在终端上运行我在 Django 项目中开发的代码的新测试,但不幸的是我继承了几个测试失败(已经通过分析我之前的提交确认)。我正在尝试运行/修复我的测试/代码。不修复所有失败的测试(至少现在不是)。今天我们通过在主项目文件夹中运行 tox 来运行测试,tox 最终调用 py.test,使用不同的数据库(在开发/生产中我们使用 Postgresql ,但对于测试,我们使用 SQLite)。这是tox.ini配置

[tox]
envlist = unit
skipsdist = True

[testenv:unit]
deps = -rrequirements/test.txt
commands =
bash -c 'TESTING_DB=db.sqlite3 python manage.py initdb --settings telessaude.settings.test'
py.test -n 4

passenv = *
setenv =
DJANGO_SETTINGS_MODULE=telessaude.settings.test
whitelist_externals =
/bin/bash

[flake8]
max-line-length = 110

[pytest]
setenv=
DJANGO_SETTINGS_MODULE=telessaude.settings.test
python_files = **/tests.py **/tests/*.py **/tests.py
norecursedirs = requirements .tox media

这是我的测试,位于 ~/project_name/servicos/tests.py

# encoding: utf-8
from fluxos.tests import BaseFluxoTestCase
from core.tests import BaseTestCase
from servicos.models import Estomatologia


class EstomatologiaTestCase(BaseTestCase):

def testa_formata_campos(self):
estomato = Estomatologia()
return_value = estomato.formata_campos()
self.assertEquals(return_value['comorbidades_paciente'], '')

...

我应该如何处理 tox 或 py.test 来运行这个新创建的测试?谢谢!


更新 1:不幸的是,建议的答案没有用。当我按照 phd 和 Windsooon 的建议运行单个测试时,tox 似乎没有运行任何测试。我编写了一个失败的测试(故意),当我使用 tox 命令运行所有测试时,错误显示:

    def test_formata_campos_para_estomatologia(self):
estomatologia = Estomatologia()
retorno = formata_campos(estomatologia)
> self.assertIn('objetivos', retorno) E AssertionError: 'objetivos' not found in {'comorbidades_paciente': '', 'tempo_transcorrido': '', 'sinais_e_sintomas_locais': ''}

但是当我只单独运行测试时,测试通过了!我得到这个结果:

tox -e py27 -- servicos.tests:FormatacaoDeCamposTestCase.test_formata_campos_para_estomatologia
py27 installed:
py27 runtests: PYTHONHASHSEED='3025337440'
______________________________________________________________ summary ______________________________________________________________
py27: commands succeeded
congratulations :)

在互联网上搜索,我发现我必须有 {posargs} 否则 tox 将忽略我提供给它的任何内容。但是,只有我的命令的第二行会使用它。第一行将测试数据库设置为 SQLite(用于测试的更快的数据库集)。这可能是 tox 上的错误吗?关于如何解决这个问题的任何想法?


更新 2:@phd 的答案是最接近的,但我必须调整一些东西:

  • 需要使用 2 个冒号而不是一个
  • 必须使用 2 个冒号而不是点来分隔方法名和类
  • 还必须删除“-e”参数,因为我的 tox.ini 文件中没有设置该环境。

最终命令如下所示:

tox -- folder1/folder2/file_name.py::ClassName::test_method_name

最佳答案

您应该准备 tox.ini 以接受命令行参数并将它们传递给 pytest:

[testenv:…]
commands =
py.test -n 4 {posargs}

之后您可以传递尽可能少或尽可能多的参数:

tox -e $TOXENV -- test1.py test2.py…

关于Python tox 和 py.test : how to run just a single test rather than the whole test suite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com