如果测试用例1失败,则使用Selenium Python执行测试用例2

时间:2015-11-27 00:42:56

标签: python selenium

我在我的基页中写了几个函数,我试图在我的测试中调用它。但是,如果其中一个功能失败,则测试不会更进一步。我如何使用selenium python实现这一点,以便测试继续运行并在以后给出错误。

2 个答案:

答案 0 :(得分:0)

在使用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移动到该方法。

一般情况下,每assert*只应有一个test_*。这将帮助您将其限制为仅测试一个概念。如果这三个断言只测试一个概念,这是可以的,因为你会知道在你的代码中去哪里修复那个小东西。如果assertTrue测试一段代码而assertIsInstance测试另一段代码,则应该使用两种不同的test_*方法。

如果您有6个测试用例而且您没有看到6个句点或F的组合,则会发生其他异常情况。如果是这种情况,请使用错误更新您的问题,以便我们解决问题。

答案 1 :(得分:0)

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

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()