[英]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.