Python -m unittest 带有用于测试生成的参数

Python -m unittest with arguments for test generation

我在调用 python -m teamcity.unittestpy file.py 的地方设置了一个 CI 测试服务器。这个 file.py 然后加载一个 JSON 文件并生成大量测试,这些测试完全可以从该 JSON 文件自定义。该系统完全按照预期工作,并在过去 2 周内进行了测试。

现在我们决定改变我们的 CI 过程,不再假设我们要测试哪些包(构建的软件),因此测试生成现在应该可以适应我想要的扩展喜欢调用 python -m teamcity.unittestpy file.py -package packagename 来指定构建哪个包以及允许生成哪些测试。

我知道不使用 -m unittest discover 很常见,然后 argparse 被证明是一个易于使用的模块来实现此行为。但是,我坚持使用我们测试套件的 -m teamcity.unittestpy 调用。

这是我目前的状态:

#general imports stuff

#new argparse imports
import sys
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-package') #package argument. -p foo would generate the 'foo' tests defined in 'foo' folder


class CriticalSessionTests(unittest.TestCase):
    pass

def test_generator():
    def test(self):
        #testdefinition
        self.assertTrue(True)
    return test

def init(options, args):
    PACKAGE = options.p #can be None which would mean NO TESTS                     
    if PACKAGE is not None:
        cwdpath = os.getcwd() 
        path = cwdpath + '\' + PACKAGE

        #load json file
        #iterate over files in package folder and generate additional tests  

        #generate tests like:
        test_name = "test_TC_{}_{}".format(filename, idx)
        test = test_generator()
        setattr(CriticalSessionTests, test_name, test) 

options, args = parser.parse_known_args() 
init(options, args)
if __name__ == '__main__':
    if is_running_under_teamcity():
        runner = TeamcityTestRunner()
    else:
        runner = unittest.TextTestRunner()
    unittest.main(testRunner=runner, argv=sys.argv[:1] + args)

现在,请记住我的实际测试生成工作正常。我的实际问题是,由于 -m teamcity.unittestpy 调用的限制,我无法将参数传递给该系统,需要解决它。

我将非常感谢有关如何构建被调用的包装器的代码片段的指针,以便我可以定义参数。或者任何其他指针都非常受欢迎。

编辑: 如果人们想知道这些错误:

python -m unittest tests.py -package a
usage: python.exe -m unittest [-h] [-v] [-q] [--locals] [-f] [-c] [-b]
                              [-k TESTNAMEPATTERNS]
                              [tests [tests ...]]
python.exe -m unittest: error: unrecognized arguments: -package a

如果我在 Python 文件中将其定义为 package(注意没有 '-'),则会发生以下错误:

python -m unittest tests.py package a
ERROR: package (unittest.loader._FailedTest)
ImportError: Failed to import test module: p
Traceback (most recent call last):
  File "C_path\unittest\loader.py", line 154, in loadTestsFromName
    module = __import__(module_name)
ModuleNotFoundError: No module named 'package '

虽然这绝不是理想的解决方案,但我可以访问环境变量并在测试生成中从中读取这些变量以正确处理状态。 TeamCity 中的构建代理可以定义这些,这适用于我的用例。