我正在开发一个CherryPy应用程序,我想为它编写一些自动化测试。我选择使用nosetests。该应用程序使用sqlalchemy作为db后端,因此我需要使用fixture包来提供固定数据集。我也想做网络测试。以下是我将它们放在一起的方式:
我在文件中有一个辅助函数init_model(test = False)
,其中创建了所有模型。它连接到生产或测试(如果test == True或cherrypy.request.app.test == True)数据库并调用create_all
然后我为这样的测试创建了一个基类:
class BaseTest(DataTestCase):
def __init__(self):
init_model(True)
application.test = True
self.app = TestApp(application)
self.fixture = SQLAlchemyFixture(env = models, engine = meta.engine, style = NamedDataStyle())
self.datasets = (
# all the datasets go here
)
现在我通过创建BaseTest的子类并调用self.app.some_method()
这是我第一次在python中进行测试,所有这些看起来都非常复杂。我想知道我是否正在使用提到的包作为他们的作者的意图,如果它不是过于复杂。
答案 0 :(得分:1)
对于任何规模的系统来说,这看起来都像普通的测试胶。换句话说,它并不过分复杂。
事实上,我建议在一个方面稍微复杂一些:我认为你会发现在每个子测试类中设置一个新的数据库非常慢。更常见的是,每次运行至少设置一次所有表,而不是每个类一次。然后,您可以让每个测试方法创建它所需的所有数据,和/或在事务中运行每个测试用例并将其全部回滚到finally:
块中。