我在一个类中包含一组python / selenium / unittest测试:
class TestProject(unittest.TestClass):
def test001_create_project(self):
...
def test002_project_wizard_page1(self, projectName, projectDescription):
....
def test003_project_wizard_page2(self):
....
def test004_project_wizard_finish(self):
....
我需要按照上面的顺序在一个块中运行测试方法,因为它们遍历我的Web应用程序上的向导。但是,我希望能够将各种参数传递给testName,projectDescription等测试方法。 使用unittest,如何运行一组可能10次迭代的测试,将不同参数传递给test002_project_wizard_page1?
答案 0 :(得分:3)
您的编号测试实际上只是单个测试的一部分。 应定义为单独测试的是使用参数集的函数。
class TestProject(unittest.TestCase):
def _create_project(self):
...
def _page1(self, projectName, projectDescription):
...
def _page2(self):
...
def _finish(self):
...
def _run(self, name, descr):
self._create_project()
self._page1(name, descr)
self._page2()
self._finish()
def test001(self):
self._run("foo", "do foo")
def test002(self):
self._run("bar", "do bar")
# etc
一个可以减少部分样板的有趣模块是ddt
project。
import ddt
@ddt.ddt
class TestProject(unittest.TestCase):
def _create_project(self):
...
def _page1(self, projectName, projectDescription):
...
def _page2(self):
...
def _finish(self):
...
@ddt.data(
("foo", "do foo"),
("bar", "do bar"),
# etc
)
@ddt.unpack
def test_run(self, name, descr):
self._create_project()
self._page1(name, descr)
self._page2()
self._finish()
答案 1 :(得分:0)
对我来说,看起来你想在模板下测试,使用不同的参数。代码如下:
import unittest
class TestProject(unittest.TestClass):
def mytest001_create_project(self):
...
def mytest002_project_wizard_page1(self, projectName, projectDescription):
....
def mytest003_project_wizard_page2(self):
....
def mytest004_project_wizard_finish(self):
....
def mytest_in_order(self, project_name, project_description):
self.mytest001_create_project()
self.mytest002_project_wizard_page1(project_name, project_description)
self.mytest003_project_wizard_page2()
self.mytest004_project_wizard_finish()
def test_in_batch(self):
project_names = ['a', 'b']
project_descriptions = ['aa', 'bb']
for project_name, project_description in zip(project_names, project_descriptions):
self.mytest_in_order(project_name, project_description)
答案 2 :(得分:0)
查看Eli Bendersky博客上的Python unit testing: parametrized test cases帖子。它说明了
您无法轻易地从外部将参数传递给unittest.TestCase。
但是,它提供了class ParametrizedTestCase(unittest.TestCase)
的实现,可用于向unittest.TestCase
类添加参数。这将解决您的参数问题,我相信,每个单独的测试方法都已按顺序运行。
答案 3 :(得分:0)
你有什么理由不能使用pytest吗?它provides this functionality out of the box。