我是新手,因此非常感谢任何指导 我有一个目录结构:
/testcases
__init__.py, testcases_int/
tc1.py,tc2.py,__init__.py,run.py
我的目的是运行每个tc1.py,tc2.py .. tc(x).py(x =将根据需要添加新文件)run.py 我在run.py和tcx.py中有现有代码:
#!/usr/bin/env python
import os,glob,subprocess
for name in glob.glob('tc*.py'):
cmd = 'python name'
subprocess.call(cmd)
#!/usr/bin/env python
import os,fabric,sys
class tc(object):
def __init__(self):
.....
def step1(self):
.....
def step2(self):
.....
def runner(self):
self.step1()
self.step2()
但是我不打算像上面那样运行它,而是想将tc(x).py的类导入run.py并调用' runner'每个tc(x).py类的方法
我可以将tc1.py,tc2.py中的每一个静态导入run.py,但是这个目录会随着tc(x).py文件的增长而继续增长,因此我希望每次执行run.py时: - 它将动态加载所有tc(x).py - 实例化tc(x).py的类 - 调用其跑步者'方法
非常感谢提前
答案 0 :(得分:0)
现在是查看unittest
和nose
模块以处理测试的好时机。两者都提供了基于(除其他外)文件名称自动发现新测试的简单方法。例如,所有以tc
或test_
开头的文件。
答案 1 :(得分:0)
我建议像payhima所说的那样查看unittest(和类似的)模块,但是如果你想这样做,下面的内容并不是特别优雅,但是如果你能做的话可以用于我的有限测试将运行脚本放在testcases目录中。
testcases/
|-- run.py
`-- tests
|-- __init__.py
|-- tc1.py
`-- tc2.py
run.py
import tests
from tests import *
for tc in tests.__all__:
getattr(tests,tc).tc().runner()
__init__.py
import glob, os
modules = glob.glob(os.path.dirname(__file__)+"/tc*.py")
__all__ = [ os.path.basename(f)[:-3] for f in modules ]
答案 2 :(得分:0)
在main run方法中,您可以从目录中获取所有文件 How to list all files of a directory? 在循环中使用这样的东西:
for class_name in list_:
import class_name
runner_method = getattr(class_name, "runner", None) # if it staticmethod
if callable(runner_method):
runner_method()
或者您可以使用__all__
中的__init__.py
来使用import *