使用一个测试方法返回多个测试结果



在我把你们弄糊涂之前,让我澄清一下:我不是在要求用不同的参数运行单个测试方法。都清楚了吗?

我有一个测试在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()方法)。

相关内容

  • 没有找到相关文章

最新更新