退出一个 Python 程序(从一个函数)并获得成功的 运行 结果

Exit a Python Program (From a Function) with a Successful Run Result

我正在尝试退出一个 Python 测试用例,我是 运行 一个成功的 运行 结果。我有一个程序使用我创建的函数来查看 table 是否包含标识符。

def test_LogsIdentifiersApache(driver, url):
        loginToWebsite(driver, url).confirmLoginAndUnlocked()
        driver.get(url('/LogsPage/'))
        selectIdentifier(driver, "gdm-simple-greeter")

在该函数中 [位于不同的文件],它在 table 中搜索标识符。如果它找到它,那么它会做一些其他检查和 returns 到 运行 测试用例。如果它没有在 table 中找到标识符,那么它会向屏幕发送一条消息,通知测试人员该标识符不在 table 中并成功退出 运行 .

def selectIdentifier(driver, identifier):
    << Code to search for identifier here >>

    # If identifier not found, print message to window & exit test case with successful run
    if isIdentifierPresent == False:
        print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
        return

当我在测试用例中包含所有代码时,使用 'return' 效果很好。一旦我开始创建函数,测试就会停止并成功退出 运行。我明白 'return' 使它 return 到测试用例并继续 运行ning,这是我不想要的。相反,我想 .. (1) 打印未找到标识符的消息,并且 .. (2) 退出此函数 [并且测试用例为 运行] 并成功 运行 & 继续 运行测试套件。我怎样才能做到这一点?此外,如果重要的话,这个测试用例 运行 直接来自带有 'py.test' 命令的文件夹,而不是来自测试套件文件。

如果你在 Python 3,你可以使用 sys.exit() 出去。也许是这样的?

if isIdentifierPresent == False:
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
else:
    print("Hooray!")
    sys.exit()

我发现最好的方法是定义一个异常 class:

class noIdentifier(Exception):
    pass

现在修改代码如下:

if isIdentifierPresent == False:
    print "\nNOTICE: IDENTIFIERS OBJECT \""+identifier+"\" NOT LISTED IN TABLE"
    raise noIdentifier("<Optional message>")

在测试套件中,将测试用例调用包装在 try except:

try:
    testCase()
except noIdentifier:
    pass

我相信还有其他方法可以做到这一点。不过我觉得这真的很方便。

编辑:要使用可选消息,

try:
    testCase()
except noIdentifier as e:
    print e.message # or use print str(e)