我试图通过使用输入和输出文件调用另一个python脚本,使用subprocess_check.call()自动化一些测试用例。我有约。 10个输入文件。例如,当我开始测试时,第一个和第二个文件已成功测试,但在第三个文件中,我收到错误,脚本终止。我想要的是,如何从终止它的地方运行我的脚本?我不想从头开始。我只是想从我收到错误的情况继续我的测试。在更正输入文件后,从这个文件开始,我想运行脚本直到结束。
有什么想法吗?
答案 0 :(得分:0)
所以,这不是涉及代码的问题,所以你得到一般答案,而不涉及代码。
问题的解决方案要求您保留协议。该协议必须在测试过程的整个生命周期内存在。
因此,必须有一些地方可以写入关于测试状态,这个地方必须确保持久性。可能是什么?对,就是文件系统。跟踪测试的最简单的地方是文件系统。
以下是您可能希望如何实现此操作的一个非常简单的示例:对于成功的每个测试用例,将文件写入当前工作目录,表示此测试成功。然后,在您的测试过程调用某个测试之前,请检查是否存在此类文件,并在找到该文件时跳过测试。我们假设您的输入文件具有不同的基本名称(例如A
,B
,...,)。然后,您可以在当前工作目录中使用名为B.success
的文件,以指示不再需要对其进行测试。
答案 1 :(得分:-1)
我认为我有一个准确的答案,不使用此任务的子进程(除非你真的必须)。
假设要测试的脚本的格式为
script1.py
import sys
def main1(args):
#do something awesome with args
return some_cool_value
if __name__ == "__main__":
filename = sys.argv
main1(filename)
那么你正在做的是使用subprocess来评估它的输出,当你可以做的是以下内容时:
main_test.py
from script1 import main1 # you may want to rename main is you have loads of scripts
def test__main(filenames):
for name in filenames:
try:
result1 = main1(name)
# do something with result
print "file "+ name+ " processed successfully!"
except:
print "file "+ name+ " not processed successfully!"
if __name__ == "__main__":
filenames = sys.argv
main(fienames)
并记录哪些文件在处理时成功,因此您可以在必要时在正确的位置重新启动。
我想工作流程是这样的:
python main_test.py passingfile1 corruptedfile2
>>> file passingfile1 processed successfully
>>> file corruptedfile2 not successfully processed
然后你可以从corruptedfile2重新运行脚本。
通常我会尽量避免使用subprocess调用python脚本,并且只在没有其他接口的情况下才将它用于已编译的二进制文件