在我把你们弄糊涂之前,让我澄清一下:我不是在要求用不同的参数运行单个测试方法。都清楚了吗?
我有一个测试在Python (Django,但不相关),基本上…
- 启动http服务器,
- 启动Selenium,在此服务器上打开一个网页, 通过Selenium加载并运行一套JavaScript测试(通过Jasmine)
- 收集结果,如果有测试失败则失败
我想让每个Jasmine规范的输出在Python单元测试输出中作为单独的条目可见(具有自己的名称)?通过Selenium从Javascript中提取它是简单的部分,但我不知道如何将它与UnitTest机器连接。
期望代码看起来像(伪代码):
class FooPageTest(TestCase):
def setUp(self):
# start selenium, etc
def run(self, result):
self.run_tests()
for test_name, status, failure_message in self.get_test_results():
if status:
result.add_successful_test(test_name)
else:
result.add_failed_test(test_name, failure_message)
预期输出:$ python manage.py test FooPageTest -v2
first_external_test ... ok
second_external_test ... ok
third_external_test ... ok
一个问题:测试用例的数量和名称只有在实际运行测试后才会知道。
有可能使unittest2
服从我的意愿吗?如何?
听起来您有多个外部测试要运行,并且您希望通过Python单元测试单独报告每个测试的结果。我想我会这样做:
class FooPageTest(TestCase):
@classmethod
def setUpClass(cls):
# start selenium, etc
cls.run_tests()
@classmethod
def getATest(cls, test_name):
def getOneResult(self):
# read the result for "test_name" from the selenium results
if not status:
raise AssertionError("Test %s failed: %s" % (test_name, failure_message)
setattr(cls, 'test%s' test_name, getOneResult)
for test_name in get_test_names():
FooPageTest.getATest(test_name)
这个方法做了两件我认为很好的事情:
- 当测试将通过测试发现运行时运行测试,而不是在模块导入时运行
- 每个selenium测试生成一个Python测试。
要使用它,您需要定义get_test_names(),它读取将要运行的测试的名称。您还需要一个函数来从selenium结果中读取每个单独的结果,但听起来您必须已经有了一种方法(get_test_results()方法)。