我已经设置了一个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 '
虽然这不是理想的解决方案,但我可以访问环境变量,并在测试生成中读取这些变量以正确处理状态。TeamCity中的构建代理可以定义这些,这适用于我的用例。你知道吗
相关问题 更多 >
编程相关推荐