Python 皮瑟斯。由于在execute()处发生错误,因此阻止执行validate()方法

Python 皮瑟斯。由于在execute()处发生错误,因此阻止执行validate()方法,python,unit-testing,Python,Unit Testing,我希望在execute()方法中,以我预期的方式,在出现问题时阻止执行testcase的validate()方法 我试着做如下事情: class MyTestCase(BaseTest): def execute(self): if somethingWentOK == False: self.addOutcome(BLOCKED) 通过validate()方法: def validate(self): if self.getOutc

我希望在
execute()
方法中,以我预期的方式,在出现问题时阻止执行testcase的
validate()
方法

我试着做如下事情:

class MyTestCase(BaseTest):
   def execute(self):
      if somethingWentOK == False:
            self.addOutcome(BLOCKED)
通过
validate()
方法:

   def validate(self):
      if self.getOutcome()!=BLOCKED:
           doValidationStuff()
      else:
           self.log.error("Something failed!!!")
但我得到的结果与我预期的不同:

2016-05-04 17:25:36,892 ERROR Testcase execution interrupted by previous errors!
2016-05-04 17:25:36,911 INFO
2016-05-04 17:25:36,933 INFO  Test duration 51.48 secs
2016-05-04 17:25:36,948 INFO  Test final outcome NOT VERIFIED
2016-05-04 17:25:36,950 INFO
2016-05-04 17:25:37,025 CRIT
2016-05-04 17:25:37,026 CRIT  Test duration: 51.60 (secs)
2016-05-04 17:25:37,026 CRIT
2016-05-04 17:25:37,026 CRIT  Summary of non passes and tests requiring inspection:
我以为我会得到一个
阻塞的
结果,而不是框架产生的
未验证的
结果


我知道我做了一些不正确的事情,因此对此的任何反馈都是值得赞赏的。

基本上,基本测试类有一个属性self.output,它是一个结果列表,可以按相反的优先顺序包含以下任何值-PASSED、INSPECT、NOTVERIFIED、FAILED、TIMEDOUT、DUMPEDCORE,阻止并跳过。在基本测试上调用addOutput()时,会在此列表中添加一个值

测试的总体结果是列表中优先级最高的条目,即如果列表包含[通过、失败、阻止],则总体结果被阻止。这是在基本测试上调用getOutput()时返回的结果。BLOCKED、DUMPEDCORE、TIMEDOUT和FAILED中的任何结果都被视为测试失败。在下面的示例中,我们将向结果列表添加一个阻塞项,然后在验证方法中检查结果列表中是否有阻塞项,如果有,则跳过验证

from pysys.constants import *
from pysys.basetest import BaseTest

class PySysTest(BaseTest):
    somethingWentOK=False
    def execute(self):
        if self.somethingWentOK == False:
            self.log.error("Adding BLOCKED outcome ...")
            self.addOutcome(BLOCKED)

    def validate(self):
        self.log.info("Performing validation ...")
        if not BLOCKED in self.outcome:
            self.doValidationStuff()
        else:
            self.log.error("Something failed!!!")

    def doValidationStuff(self):
        pass
。。。它在运行时给出以下输出

C:\code\pysys-examples\tests>pysys.py run
2016:05:04 18:33:54 INFO  ==============================================================
2016:05:04 18:33:54 INFO  Id   : test_001
2016:05:04 18:33:54 INFO  ==============================================================
2016:05:04 18:33:54 ERROR Adding BLOCKED outcome ...
2016:05:04 18:33:54 INFO  Performing validation ...
2016:05:04 18:33:54 ERROR Something failed!!!
2016:05:04 18:33:54 INFO
2016:05:04 18:33:54 INFO  Test duration: 0.02 secs
2016:05:04 18:33:54 INFO  Test final outcome:  BLOCKED
2016:05:04 18:33:54 INFO
2016:05:04 18:33:54 CRIT
2016:05:04 18:33:54 CRIT  Test duration: 0.04 (secs)
2016:05:04 18:33:54 CRIT
2016:05:04 18:33:54 CRIT  Summary of non passes:
2016:05:04 18:33:54 CRIT    BLOCKED: test_001
默认情况下,PySys在计算总体结果并完成测试之前执行整个测试,也就是说,它不像许多单元测试框架那样快速失败。在最新版本1.1中,有fail fast语义,例如,一旦结果添加到结果列表中,表明测试失败,测试将立即完成。您可以使用-b选项以fail fast语义运行pysys.py run命令,即

C:\code\pysys-examples\tests>pysys.py run  -b true
2016:05:04 18:36:25 INFO  ==============================================================
2016:05:04 18:36:25 INFO  Id   : test_001
2016:05:04 18:36:25 INFO  ==============================================================
2016:05:04 18:36:25 ERROR Adding BLOCKED outcome ...
2016:05:04 18:36:25 INFO  Aborting test due to abortOnError set to true ...
2016:05:04 18:36:25 INFO
2016:05:04 18:36:25 INFO  Test duration: 0.02 secs
2016:05:04 18:36:25 INFO  Test final outcome:  BLOCKED
2016:05:04 18:36:25 INFO
2016:05:04 18:36:25 CRIT
2016:05:04 18:36:25 CRIT  Test duration: 0.04 (secs)
2016:05:04 18:36:26 CRIT
2016:05:04 18:36:26 CRIT  Summary of non passes:
2016:05:04 18:36:26 CRIT    BLOCKED: test_001
在这种情况下,在validate()方法中不需要任何条件检查,因为它不会在添加阻止的结果时立即执行。如果您希望在默认情况下启用此选项,也可以在pysysproject.xml文件中进行设置

property name="defaultAbortOnError" value="true"

谢谢你,莫里,谢谢你的帮助。