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