我有一个运行所有测试的模块testrun.py
。其中一项测试是SWStatus
,以便
class HWStatus(myTest):
check = []
def __init__(self):
super(SWStatus, self).__init__()
def setup(self):
return
def work(self):
"""
some functionality to calculate the value of i
i is either 10 or 20
"""
if i == 10:
status = True
else:
status = False
check.append(status)
要运行此测试,我会执行python testrun.py SWStatus
,它会给我结果。
我已经创建了HWStatus
测试,以便它会运行SWStatus
次测试10次。
class HWStatus(myTest):
def __init__(self):
super(SWStatus, self).__init__()
def setup(self):
return
def work(self):
for i in xrange(10):
args = ['python', 'testrun.py', 'SWStatus']
p = subprocess.Popen(args)
while p.poll() != 0:
time.sleep(amount_of_time)
当我执行testrun.py HWStatus
时,它会运行SWStatus
10次。
我在这里面临两个问题。
我希望得到10个值的check
列表。这样每次它都会附加True
或False
,具体取决于逻辑。但是因为我从SWStatus
开始运行HWStatus
,所以check
每次都会被初始化为空列表。所以即使我正在做check.append(status)
,我只得到一个值。我应该如何解决这个问题?
我的第二个问题是,即使check
未从work
继承,我仍然可以通过HWStatus
HWStatus
方法访问SWStatus
列表1}}?
我可以这样做:
class HWStatus(myTest):
def __init__(self):
super(SWStatus, self).__init__()
def setup(self):
return
def work(self):
for i in xrange(10):
args = ['python', 'testrun.py', 'SWStatus']
p = subprocess.Popen(args)
while p.poll() != 0:
time.sleep(amount_of_time)
print "List of 10",check
答案 0 :(得分:0)
继承不会影响python中的成员可见性;只要它们在词法范围内,python中的所有变量都是可见的。
您运行测试的方式(在单独的进程中)会创建SWStatus.check
的不同副本。当您启动一个新进程时,您将创建一个运行它的单独内存区域。因此,在您的代码中创建了11个SWstatus.check
变量副本,没有人可以看到任何其他内容。
我怀疑你想要做的是并行运行测试,在这种情况下,最好让测试将其状态作为退出状态返回......
import sys
if __name__ == 'main':
t = SWStatus()
sys.exit(not t.work())
但是,如果绝对需要在同一地址空间中运行所有测试,则可以使用线程而不是进程。但是,您需要使用类似Queue
的内容来协调对内存的并发访问。