Skip to main content
 首页 » 编程设计

python之用 nose/fixture/webtest (amidoinitrite) 测试 cherrypy

2025年05月04日31lyj

我正在开发一个 CherryPy 应用程序,我想为它编写一些自动化测试。我选择使用 Nose 测试。该应用程序使用 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 做测试,这一切看起来很复杂。我想知道我是否按照作者的意图使用了提到的软件包,以及它是否过于复杂。

请您参考如下方法:

这看起来很像用于任何规模系统的常规测试胶水。换句话说,它并不过分复杂。

事实上,我建议在一个方面稍微复杂一些:我认为您会发现在每个子测试类中设置一个新数据库非常慢。更常见的做法是每次运行至少设置一次所有表,而不是每个类(class)设置一次。然后,您要么让每个测试方法为其自身创建所需的所有数据,和/或在一个事务中运行每个测试用例,然后将其全部回滚到 finally: block 中。