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

2024-05-29 09:43:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经设置了一个CI测试服务器,我们在那里调用python -m teamcity.unittestpy file.py。这个文件.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 '

Tags: 文件namepytestimportpackageargparseargs
1条回答
网友
1楼 · 发布于 2024-05-29 09:43:38

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

相关问题 更多 >

    热门问题