我希望在validate()
方法中以我预期的方式阻止执行我的测试用例的execute()
方法...
我试图做类似以下的事情:
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:
我以为我会得到BLOCKED
结果,而不是框架产生的NOT VERIFIED
结果......
我知道我做的事情不合适,所以对此的任何反馈都可以理解。
答案 0 :(得分:1)
基本测试类有一个属性self.outcome,它是一个结果列表,可以包含反向优先顺序中的任何以下值 - PASSED,INSPECT,NOTVERIFIED,FAILED,TIMEDOUT,DUMPEDCORE,BLOCKED和SKIPPED。在基本测试上调用addOutcome()时,可以向此列表添加值。
测试的总体结果是列表中具有最高优先级的条目,即如果列表包含[PASSED,FAILED,BLOCKED],则整体结果为BLOCKED。这是在基础测试上调用getOutcome()时返回的内容。 BLOCKED,DUMPEDCORE,TIMEDOUT,FAILED中的任何结果都被视为表示测试失败。在下面的示例中,应该执行您想要的操作,我们将BLOCKED添加到结果列表中,然后在validate方法中检查结果列表中是否存在BLOCKED条目,如果是,则跳过验证。
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中,存在快速语义失败,因此只要将结果添加到表示测试失败的结果列表中,测试就会立即完成。您可以使用-b选项,即;
,使用fail fast语义运行到pysys.py运行命令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()方法中进行任何条件检查,因为一旦添加了BLOCKED结果,它就不会被执行。如果您希望在默认情况下启用此功能,则还可以在pysysproject.xml文件中进行设置。
property name="defaultAbortOnError" value="true"