使用不同配置运行相同测试

5 投票
3 回答
692 浏览
提问于 2025-04-16 12:27

我有一些Python代码,用来抽象数据库和它上的业务逻辑。这段代码已经通过单元测试进行了测试,但现在我需要在不同的数据库(比如MySQL、SQLite等)上测试这段代码。

请问,使用不同配置来运行相同测试的默认方法是什么?我的目标是确保这个抽象层在不同的数据库上都能正常工作。如果有帮助的话,我正在使用nosetests来运行测试,但似乎它缺少“测试套件”的概念。

祝好。

3 个回答

-1

使用 --attrib 插件,然后在命令行中输入

1. nosetests -s -a 'sqlite'
2. nosetests -s -a 'mysql'
-1

Nose支持测试套件,只需要导入并使用unittest.TestSuite。实际上,nose可以很高兴地运行任何使用标准库中的unittest模块编写的测试,所以测试不需要按照nose的风格来写,nose测试运行器也能找到它们。

不过,我觉得你可能需要的不仅仅是测试套件的支持,想要进行你所说的那种测试,还需要更多关于你应用的细节才能真正解决这个问题。

1

我喜欢在有多个相似测试的情况下使用 测试夹具。在Python中,使用Nose这个工具时,我通常会把它实现为一个公共的测试模块,然后被其他模块导入。比如,我可能会用以下的文件结构:

db_fixtures.py:

import unittest

class BaseDB(unittest.TestCase):
  def testFirstOperation(self):
    self.db.query("Foo")
  def testSecondOperation(self):
    self.db.query("Blah")      

database_tests.py:

import db_fixtures

class SQliteTest(db_fixtures.BaseDB):
  def setUp(self):
    self.db = createSqliteconnection()

class MySQLTest(db_fixtures.BaseDB):
  def setUp(self):
    self.db = createMySQLconnection()

这样做会在MySQL和SQLite上运行BaseDB中定义的所有测试。需要注意的是,我把db_fixtures.py命名成这样,以确保它不会被Nose运行。

撰写回答