Os.system和mysql restore在python unittest中不起作用

问题描述 投票:0回答:1

我正在对将条目保存在数据库“ mydatabase”中的程序进行单元测试。因此,一旦我测试了每个功能,就需要还原数据库,以免影响其他测试。我试图使用os.system()编写一个mysql命令来还原。以下是程序的相关部分:

class testSql(unittest.TestCase):

    def setUp(self,
        dbName = "mydatabase",
        existingUser = "John",
        nonExistingUser = "thisnamedoesnotexist",
    ):
        os.system('mysql -u root -ppassword mydatabase < "mypath/schema.sql"')
        self.dbName = dbName
        self.existingUser = existingUser
        self.nonExistingUser = nonExistingUser

    def test_signUp(self):
        self.assertFalse(sql.userExists(self.nonExistingUser))
        sql.signUp(self.nonExistingUser,"password")
        self.assertTrue(sql.userExists(self.nonExistingUser))

但是,当我运行程序时,没有显示测试结果,而是仅查看mysql命令的结果,并且终端冻结,因此我无法输入任何内容并被迫将其关闭:[C0 ]

我尝试过的:使用os.system创建函数并调用它;导入具有该功能的文件;使用exec()函数执行带有该语句的文件;导入文件以执行该语句。

显然,os.system(“ mysql -u root -ppassword”)很好,但是还没有restore和dump命令。有谁知道如何解决此问题或以其他方式实现我的目标?

python mysql windows python-unittest os.system
1个回答
0
投票

好吧,我发现问题是当用户已经存在时,我没有提交数据库,这导致连接没有关闭,而当我尝试创建另一个数据库(即使用mysql命令)时,后者永远等到第一个结局。

为了避免这种情况:提交或关闭与数据库的连接,或者在创建另一个与数据库的连接之前关闭游标(或使用相同的游标进行还原)。

© www.soinside.com 2019 - 2024. All rights reserved.