unittest.py:
sys.exit(not result.wasSuccessful())
...where wasSuccessful() corresponds to this line:
def wasSuccessful(self):
"Tells whether or not this result was a success"
return len(self.failures) == len(self.errors) == 0
Now suppose you build your own test runner, most notably if you're running Selenium to launch multiple browsers:
"""
_environments = [
# Firefox runs faster than IE7, so check first even though our customers use the latter browser more.
{'platform' : "WINDOWS",
'browserName' : "firefox",
'version' : "3.6"
},
{'platform' : "WINDOWS",
'browserName' : "iexplore",
'version' : "7"
},
]
def run_suite(self, suite, **kwargs):
r = None
for env in _environments:
print "Running %s" % env
# We need Django nose to run XML coverage outputs on Hudson. For multiple browser support, we need
# to change the --xunit-file parameter.
if hasattr(settings, 'NOSE_ARGS'):
nose_utils.swap_nose_args(suite, env)
selenium_cfg.current_env = env
test = super(SeleniumTestSuiteRunner, self).run_suite(suite, **kwargs)
if not r:
r = test
else:
r.failures.append(test.failures)
r.errors.append(test.errors)
If we try to use the code above as the test-runner, Hudson always will trigger a build failure. Why? Well it turns out whate need to make sure is that we use extend() instead of append(). If we use append(), we appending multiple lists within a list (i.e.):>>> a = [] >>> a.append([]) >>> a [[]] >>> a.append([]) >>> a [[], []]
The fix is shown below.
52 52 if not r: 53 53 r = test 54 54 else: 55 r.failures.append(test.failures) 56 r.errors.append(test.errors) 55 r.failures.extend(test.failures) 56 r.errors.extend(test.errors) 57 57
No comments:
Post a Comment