2015-06-11 149 views
1

对不起,它发布之前,我想...Python:终止一个导入的脚本而不会终止导入的脚本

我有一吨硒测试,我想过夜运行。但是,到目前为止,每个测试都要求我登录到服务器(这很慢 - 大约需要整个测试的一半时间)。我试图通过使用相同的IE驱动程序来避免这种情况。当我有一个严重失败的测试时,我想停止那个特定的测试并继续前进。但是,我似乎无法立即杀死所有的测试。

例如,下面是简化我有(我在这里粘贴代码太多其他)问题的脚本:

# Wrapper.py: 
driver = webdriver.Ie() 
try: 
    import test1 
    test1.setup(driver) 
except Exception as e: 
    print e 

try: 
    import test2 
    test2.setup(driver) 
except Exception as e: 
    print e 

try: 
    import test3 
    test3.setup(driver) 
except Exception as e: 
    print e 


# test1.py 
def setup(driver): 
    # do stuff in test1 

# test2.py 
def setup(driver): 
    # do stuff in test2 

# test3.py 
def setup(driver): 
    # do stuff in test3 

这可能看起来愚蠢,而且很舒服,所以可以,但它可以让我使用一个常用的IE浏览器运行多个Selenium测试。但是,有时候需要杀死一个测试(无论是严重错误还是太多错误)。这通常是用做:

sys.exit(0) 

然而,使用test2.py为例,使用该命令将杀害test2.py脚本和wrapper.py脚本;我希望它只能杀死test2,让我继续测试3。这与有一个批处理文件可以分别调用每个测试并等待前一个完成相似。但是,在批处理文件中,驱动程序不能像每个驱动程序一样被传入。

我使用:

Python 2.7 
Windows 7 64-bit 
Selenium 2.44 

回答

0

通常你会通过返回假

# test2.py 
def setup(driver): 
    # do stuff in test2 
    if should_fail: 
     return False 
    ... 
    return True 

但其完全有可能提前终止测试我没有正确理解你的问题......

另一种选择是提出例外

def setup(driver): 
    assert ContitionIsTrue,"Failed Condition Check!" 

这将被您的异常处理程序捕获

+0

aha!这个断言对我正在尝试做的事情起作用。谢谢 – user2869231