我已经在我的基本页面上写了几个函数,并且正在尝试在我的测试中调用它。但是,如果其中一个功能失败,测试不会进一步进行。我如何使用selenium python来实现这个功能,以便测试能够继续运行并在稍后发出错误。执行测试用例2如果测试用例1发生故障等等,用Python 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
将永远不会被调用。这是正确的行为。如果即使assertTrue
失败,仍然要assertIsInstance
被调用,那么您应该创建一个新的test_*
方法并将assertIsInstance
移动到该方法。
一般而言,您应该只有一个assert*
每test_*
。这将帮助您将其限制为仅测试一个概念。如果这三个断言只测试一个概念,那么这是可以的,因为您会知道在代码中何处去解决这个小问题。如果assertTrue
测试一段代码,并且assertIsInstance
测试另一段代码,则它们应该位于两个单独的test_*
方法中。
如果你有6个测试案例和你没有看到的6个周期或F
然后别的异常正在发生的组合。如果是这种情况,请更新您的问题与错误,以便我们可以解决这个问题。
我明白你的观点。非常感谢你 –
很好的单元测试建议,但我不认为它回答了OP的问题。 –
@Chiragverma这实际上帮助你并回答你的问题吗?你的测试实际上没有完成,或者这有助于你理解为什么他们中途失败? – Noah
我已经使用以下方法来实现此目的。这是正确的方法吗?
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()
是的,这是正确的想法。您不需要调用超类'setUp'或'tearDown'方法。默认的实现实际上什么都不做。我不确定'BaseTestCase'是什么。如果这是你的一个类,并且你想要做多重继承,那很好。否则,你只需要扩展'unittest.TestCase'。如果使用django,你可以扩展'django.test.TestCase'。 – Noah
- 1. python中的测试用例
- 2. 并行运行测试用例python
- 3. 如何重用python测试用例类
- 4. 故障测试流星例如
- 5. Android测试用例等待回调
- 6. python否则如果和相等测试
- 7. c#测试异步任务 - 测试用例忽略等待 - NullReferenceException
- 8. Python中的测试用例使用Doctest
- 9. 如何在发布测试用例结果时添加测试用例
- 10. QUnit测试测试用例
- 11. 运行多个JUnit测试 - 如果故障发生一次
- 12. 生成JUnit测试用例
- 13. JUnit生产测试用例
- 14. 测试用例的生成
- 15. 生成测试用例
- 16. Python类中的测试用例
- 17. 在python单元测试用例
- 18. 从另一个python文件执行一个硒测试用例
- 19. Selenium Webdriver测试用例 - 测试用例没有按顺序执行
- 20. 测试完成后生成Android JUnit测试用例的结果
- 21. 从Excel执行测试用例
- 22. QTest执行测试用例两次
- 23. 执行Openstack-Rally测试用例
- 24. Evosuite:执行测试用例失败
- 25. 执行单个测试用例django_webtest
- 26. 执行BizUnit 4.0 XML测试用例
- 27. Python鼻子测试示例
- 28. Python的单元测试和动态创建测试用例
- 29. 在Python中测试鼻子的测试用例
- 30. 硒测试套件:故障切换测试执行
TestCase类里面有多少'test_ *'函数? – Noah
在我的测试中有6 –
如果其中一个失败,是否所有六个测试函数都运行? – Noah