如何使用文件夹通配符在特定位置发现测试?

时间:2014-10-29 18:28:52

标签: python django

我的测试目录设置如此 -

tests/
    unit/
        views.py
    integration/
        services.py

是否可以指定我想运行所有单元测试或集成测试而无需对应用程序名称进行硬编码?我正在努力做一些像--pattern='**/tests/unit/*.py'这样的事情。

2 个答案:

答案 0 :(得分:3)

使用glob模块

import glob
print glob.glob("tests/unit/*.py")

然后你可以从那里手动传递文件....但我不确定这实际上是你在寻找...

类似这样的事情

<强> run_tests.py

import glob
files = glob.glob("*/tests/unit/*.py")
os.system("admin.py runtests "+" ".join(files))

答案 1 :(得分:0)

我最终做了以下事情 -

#!/usr/bin/env python

from app import test_settings
from django.core.management import call_command
import django
import os
import sys

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.test_settings')
django.setup()

# We only suppose 'unit' and 'integration' tests
test_type = sys.argv[1] if len(sys.argv) == 2 else 'unit'
for app_name in test_settings.CUSTOM_APPS:
    try:
        module = '{}.tests.{}'.format(app_name, test_type)
        __import__(module)
        print('Module \'{}\' exists. Running {} tests...'
              .format(module, test_type))
        call_command('test', module, verbosity=2, failfast=True, pattern='*.py')
    except ImportError:
        print('Module \'{}\' doesn\'t exist. Checking next...'.format(module))