使用nose/fixture/webtest测试cherrypy (amidoinitrite)

2 投票
1 回答
583 浏览
提问于 2025-04-16 10:39

我正在开发一个CherryPy应用程序,想为它写一些自动化测试。我选择使用nosetests来实现这个目标。这个应用程序使用sqlalchemy作为数据库后端,所以我需要用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中做测试,感觉这一切都很复杂。我想知道我是否按照这些包的作者所期望的方式在使用它们,以及这样做是否过于复杂。

1 个回答

1

这看起来就像是一个普通系统的测试代码,没什么特别复杂的。

其实,我建议在某个方面稍微增加一点复杂度:我觉得你会发现每个子测试类都新建一个数据库会非常慢。通常的做法是每次运行时至少设置一次所有的表,而不是每个类都设置一次。然后,你可以让每个测试方法自己创建它需要的数据,或者把每个测试用例放在一个事务中执行,在最后用finally:块把所有的内容回滚。

撰写回答