在运行测试用例之前如何让pytest问?

时间:2015-05-07 18:50:54

标签: python pytest

我有以下Django管理脚本,它尝试运行我的所有测试用例,对于每个测试用例,用户可以选择运行或不运行该特定情况。我正在使用reuse-db选项,因为您会看到。这样做的问题是pytest每次调用test_时都会尝试将前缀pytest.main()添加到数据库名称。所以,在第二次调用时,我看到了这个错误:

  

django.db.utils.OperationalError:致命:数据库" test_test_vgmdash"不存在

我没有在循环的第一次迭代中得到这个错误(是的,我选择' y'对于两次迭代)。

所以,我有两个问题"

  1. 有没有办法让python问我是否应该运行给定的TestCase,并对所有测试用例重复一遍?
  2. 我有没有办法使用pytest发现来获取TestCases列表?我知道我可以使用内省库,但pytest已经这样做了。
  3. 这里的代码不能正常工作:

    class Command(BaseCommand):
        def handle(self, *args, **options):
            all_cases = (
                'TestContractNotifications',
                'TestContracts',
                'TestContractReviews',
                'TestDnD',
                'TestItemImport',
                'TestUnitCalculations',
                'TestAuth',
                'TestAccess',
                'TestDataAnalysis',
                'TestProspectAnalyzer',
                'TestDistReports')
    
            assert(len(args) <= 1)
            settings.PYTEST = True
            arg_str = "-s --tb=short --maxfail=1 --ipdb --nomigrations"
            choice = raw_input_choices("Reuse test DB?", ['y', 'n'], 'y')
            if choice == 'y':
                arg_str += "--reuse-db "
            if args:
                arg_str += "-k %s" % args[0]
                pytest.main(arg_str)
            else:
                for test_case in all_cases:
                    raw_input_choices("Run %s?" % test_case,
                                         ['y', 'n'], 'y')
                    if choice == 'y':
                        pytest.main("%s -k %s" % (arg_str, test_case))
    

0 个答案:

没有答案