pythontox和py.test:如何只运行单个测试而不是整个测试套件

pythontox和py.test:如何只运行单个测试而不是整个测试套件,python,django,testing,pytest,tox,Python,Django,Testing,Pytest,Tox,我是Django的新手,正在测试,所以请容忍我 试图在终端上运行我在Django项目中开发的代码的新测试,但不幸的是,我继承了几个测试失败(通过在我之前分析提交,已经确认了这一点)。我正在尝试运行/修复我的测试/代码。没有修复所有的失败测试(至少现在没有)。今天,我们通过在主项目文件夹中运行tox来运行测试,tox最终使用不同的数据库调用py.test(在开发/生产中,我们使用Postgresql,但对于测试,我们使用SQLite)。这是tox.ini配置 [tox] envlist = uni

我是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\u 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个冒号而不是点来分隔方法名和类
  • 还必须删除“-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…

我怀疑它会起作用。
tox
把参数放在哪里?你指的是什么参数?tox应该把
test\u file\u name\u放在哪里。py:TestClassName.test\u method\u name
-e py27
非常重要!否则,我认为tox使用Python3,它为我的测试所在的文件提供了“ERROR:InvocationError”。不幸的是,建议没有完全起作用:(请检查问题的“更新1”)。不幸的是,您的建议没有完全起作用:(请检查问题的“更新1”)。
tox -e $TOXENV -- test1.py test2.py…