繁体   English   中英

如果测试用例1失败,则执行测试用例2,依此类推,例如Selenium Python

[英]Execute test case 2 if test case 1 fails and so on with Selenium Python

我在基本页面上写了一些函数,并且我正在尝试在测试中调用它。 但是,如果其中一项功能失败,则测试不会继续进行。 我如何使用Selenium python实现此目的,以便测试保持运行并在以后给出错误。

在使用unittest.TestCase类或django.test.TestCase类的Python单元测试中,应为要测试的每个逻辑概念创建一个test_*函数。 单元测试应该仅出于一个原因而失败。 出于一种原因可以采用多种方法进行测试是可以的,但是测试应该仅出于一种原因而失败。

测试类可能如下:

from django.test import LiveServerTestCase
from selenium import webdriver

class FooTestCase(LiveServerTestCase):
    def setUp(self):
        self.browser = webdriver.Firefox()
        [...]

    def tearDown(self):
        self.browser.quit()
        [...]

    def test_thing_one(self):
        self.browser.get(self.live_server_url)
        self.assertIn('My Title', self.browser.title)

    def test_thing_two(self):
        [...]
        self.assertTrue(foobar)

在此类中,有2个test_*函数。 当您运行此测试用例并且都通过时,您将看到类似于以下的输出:

..
-------------------------------
Ran 2 tests in 0.213s

它告诉我们它进行了两次测试。 请注意,它也有两个句点。 每次测试一个。 期限表示测试通过。 都通过了。 如果第一次测试失败,我们将看到:

F.
===============================
FAIL: test_thing_one (mytests.FooTestCase)
-------------------------------
Traceback (most recent call last):
# stack trace here
AssertionError: (rest of error)
-------------------------------
Ran 2 tests in 0.213s

FAILED (failures=1)

这次,其中一个时期已被字母F代替。仍然有一个时期代表已通过测试。 请注意,F是第一个。 这意味着, test_thing_one第一次运行和失败,即使失败了test_thing_two仍然正常运行和通过。

test_thing_one我们可以使用以下多个断言:

def test_thing_one(self):
    [...]
    self.assertIn(x, bar_list)
    self.assertTrue(something)
    self.assertIsInstance(a, b)

现在,如果assertTrue失败test_thing_one将停止在点和assertIsInstance将永远不会被调用。 这是正确的行为。 如果你仍然想assertIsInstance ,即使被称为assertTrue失败,那么你应该创建一个新的test_*方法和移动assertIsInstance该方法。

通常,每个test_*仅应有一个assert* test_* 这将帮助您将其限制为仅测试一个概念。 如果这三个断言仅测试了一个概念,那么就可以了,因为您将知道在代码中的位置以修复这一小问题。 如果assertTrue测试一个代码段,而assertIsInstance测试另一代码段,则它们应位于两个单独的test_*方法中。


如果您有6个测试用例,但没有看到6个周期或F的组合,则说明发生了其他异常情况。 如果是这种情况,请使用错误更新您的问题,以便我们解决该问题。

我使用以下方法来实现此目的。 这是正确的方法吗?

class mytest(BaseTestCase, unittest.TestCase):

    def setUp(self):
        super(mytest, self).setUp()



    def test_one(self):
        # content


    def test_two(self):
        # content

    def test_three(self):
       # content

    def test_four(self):
        # content

    def test_five(self):
        # content

    def test_six(self):
        # content        


    def tearDown(self):
        super(mutest, self).tearDown()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM