Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果测试用例1失败,则使用Selenium Python执行测试用例2,以此类推_Python_Selenium - Fatal编程技术网

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

如果测试用例1失败,则使用Selenium Python执行测试用例2,以此类推,python,selenium,Python,Selenium,我已经在我的基本页面中编写了一些函数,我正试图在测试中调用它。但是,如果其中一个功能失败,测试将不再继续。如何使用selenium python实现这一点,以便测试继续运行,并在稍后给出错误 在使用unittest.TestCase类或django.test.TestCase类进行Python单元测试时,应该为要测试的每个逻辑概念创建一个test.*函数。单元测试失败的原因只有一个。为了一个原因有多种测试方法是可以的,但是测试应该只因为一个原因失败 测试等级可如下所示: from django.

我已经在我的基本页面中编写了一些函数,我正试图在测试中调用它。但是,如果其中一个功能失败,测试将不再继续。如何使用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)
def test_thing_one(self):
    [...]
    self.assertIn(x, bar_list)
    self.assertTrue(something)
    self.assertIsInstance(a, b)
在这个类中有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\u thing\u one
首先运行并失败,即使它失败
test\u thing\u two
仍然正常运行并通过

test\u thing\u one
中,我们可以使用多个断言,如下所示:

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)
def test_thing_one(self):
    [...]
    self.assertIn(x, bar_list)
    self.assertTrue(something)
    self.assertIsInstance(a, b)
现在,如果
assertTrue
测试失败,那么将在该点停止,并且永远不会调用
assertIsInstance
。这是正确的行为。如果即使
assertTrue
失败,仍希望调用
assertsinstance
,则应创建一个新的
test.*
方法,并将
assertsinstance
移动到该方法

通常,每个
test.*
只能有一个
assert*
。这将帮助您将其限制为仅测试一个概念。如果这三个断言只测试一个概念,这是可以的,因为您将知道在代码中去哪里修复这一小问题。如果
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()

您的TestCase类中有多少个
test.*
函数?在我的测试中,如果其中一个失败,是否所有六个测试函数都会运行?不是。如果某个问题失败,它就会停止。您介意更新您的问题以包括错误,以便我们了解它失败的地方吗?很好的单元测试建议,但我认为它不能回答OP的问题。@Chiragverma这确实帮助了您并回答了您的问题吗?你的测试是否真的没能完成,或者这有助于你理解为什么部分考试没有通过?@Noah,我已经发布了答案。是的,它确实帮助了我,但我想确定这是正确的approach@Chiragverma鉴于您未将此答案标记为已接受,我想知道答案中是否有遗漏的内容。我怎样才能帮你回答你的问题?@Noah,对不起,你的回答很有帮助。是的,这是正确的想法。您不需要调用超类
setUp
tearDown
方法。默认实现实际上什么都不做。我不确定什么是
BaseTestCase
。如果这是您的一个类,并且您希望执行多重继承,那么这很好。否则,您只需要扩展
unittest.TestCase
。如果使用django,您将扩展
django.test.TestCase