概述
python模拟数据库 There are plenty of tutorials on the internet on using unittest but something I couldn’t find while doing a project was a tutorial on how to mock a database for testing. 互联网上有很多关于使用unittest的教程,但是我在做项目时找不到的东西是关于如何模拟数据库进行测试的教程。 I believe a similar method can be used for pytest as well. 我相信pytest也可以使用类似的方法。 When doing continual testing as the software is developed or improved upon, testing has to be done to ensure expected functionality. There may be methods or functions that can alter the data in the database. When testing these functions, it’s best to use a separate database. It’s most definitely not recommended to use the production database while testing. 在开发或改进软件时进行连续测试时,必须进行测试以确保预期的功能。 可能存在一些方法或函数可以更改数据库中的数据。 测试这些功能时,最好使用单独的数据库。 绝对不建议在测试时使用生产数据库。 When testing is automated it’s not possible to manually change the database that each function is using. So, it’s necessary to patch in the test database to the production database. For that, we use the patch function available in the mock package. This is available in the Python standard library, available as unittest.mock, but for this tutorial, we’ll be using the mock package. 自动进行测试时,无法手动更改每个功能正在使用的数据库。 因此,有必要将测试数据库修补到生产数据库。 为此,我们使用了模拟包中提供的补丁功能。 这在Python标准库中可用,可作为unittest.mock获得,但是在本教程中,我们将使用模拟包。 You need the unittest package, patch from mock, and a mysql connector. 您需要unittest软件包,来自模拟的补丁和mysql连接器 。 I have two central functions that directly connect to the database, so all the patching will be done to these functions. 我有两个直接连接到数据库的中央功能,因此将对这些功能进行所有修补。 The above code is part of the production code. Therefore the config information in it will be of the production database. 上面的代码是生产代码的一部分。 因此,其中的配置信息将来自生产数据库。 During testing, we will be patching the config variable with the details of the test database. 在测试过程中,我们将使用测试数据库的详细信息来修补config变量。 So, with that out of way, let’s look at how we can set up the mock database. 因此,让我们看看如何设置模拟数据库。 For this, you need to have a MySQL server running on the system you wish to run the test on. Every time a test suite is run, a temporary database is created and once the tests are completed, it is dropped. 为此,您需要在要运行测试的系统上运行MySQL服务器。 每次运行测试套件时,都会创建一个临时数据库,一旦测试完成,就将其删除。 First the imports 首先进口 Here utils is the code given above named as utils.py 这里utils是上面给出的名为utils.py的代码 Since you’ll probably need to use the same test database for several test cases, it is easier to create a superclass. This superclass itself needs to be a subclass of the unittest.TestCase class. 由于您可能需要针对多个测试用例使用相同的测试数据库,因此创建超类更加容易。 该超类本身必须是unittest.TestCase类的子类。 Through this, MockDB class inherits four methods1. SetUpClass()2. SetUp()3.TearDownClass()4.TearDown() 通过这种方式,MockDB类继承了四个方法。 SetUpClass()2。 SetUp()3.TearDownClass()4.TearDown() These methods will help us “setup” a temporary database and “teardown” that database at the end. 这些方法将帮助我们“设置”一个临时数据库,并在最后“拆除”该数据库。 SetUp() method runs before every test within a single class or test case. TearDown() method runs after every test within that test case. These are instance methods. SetUp()方法在单个类或测试用例中的每个测试之前运行。 TearDown()方法在该测试用例中的每个测试之后运行。 这些是实例方法。 SetUpClass() and TearDownClass() are class methods. They run once for a single test case. That is, SetUpClass() will run before all the tests in the relevant test case and TearDownClass() will run after all the tests are done. SetUpClass()和TearDownClass()是类方法。 它们针对单个测试用例运行一次。 也就是说,SetUpClass()将在相关测试用例中的所有测试之前运行,而TearDownClass()将在所有测试完成之后运行。 You can choose to use either of these two methods depending on the requirement. If you need the database to set up for each test then the first method is best suited for you. If you can manage with the database being set up only once then the second method is better suited. One thing to note is that the first method will result in slower tests. Depending on the number of tests you have, it will continue to become slower. The second method in comparison will be significantly faster. For this tutorial, I’ll be using the second method. 您可以根据需要选择使用这两种方法之一。 如果您需要为每个测试设置数据库,则第一种方法最适合您。 如果您只能管理一次数据库,那么第二种方法更合适。 需要注意的一件事是,第一种方法将导致测试速度变慢。 根据您进行的测试数量,它会继续变慢。 相比之下,第二种方法将明显更快。 对于本教程,我将使用第二种方法。 First, we define our database connection. Then we check if the database is already created and drop it if it has been. 首先,我们定义数据库连接。 然后,我们检查数据库是否已创建,如果已经创建,则将其删除。 Afterwards, we create the database, create the necessary tables and insert data to those tables. 然后,我们创建数据库,创建必要的表并将数据插入到这些表中。 Once setting up the test database is done, we need to create a config variable with the test database information to patch the production database. 完成测试数据库的设置后,我们需要使用测试数据库信息创建一个配置变量来修补生产数据库。 testconfig holds the details of the test database. mock_db_config is used to patch the config variable in the utils file with testconfig. Since these are dictionaries, patch.dict is used. testconfig包含测试数据库的详细信息。 mock_db_config用于通过testconfig修补utils文件中的config变量。 由于这些是字典,因此使用patch.dict。 Next, we need the tearDownClass method. All this needs to do is drop the test database. 接下来,我们需要tearDownClass方法。 所有需要做的就是删除测试数据库。 Here is the entire MockDB class. 这是整个MockDB类。 Once MockDB class is done, we can inherit this class to create test cases. 完成MockDB类后,我们可以继承该类以创建测试用例。 We’ll write tests to test the functions in utils.py. 我们将编写测试以测试utils.py中的功能。 We need to import the file we are planning to test, the MockDB class and patch from import 我们需要导入我们计划测试的文件,MockDB类和来自导入的补丁 When using the patch for the config variable, the following has to be used, 将补丁用于config变量时,必须使用以下内容, Any code that is executed within this, will use the patched config variables. 在其中执行的任何代码都将使用修补的配置变量。 Here is the completed test_utils code with some sample tests 这是带有一些示例测试的完整的test_utils代码 I hope this provided you with a basic understanding of how to use a mock database for testing with unittest. This tutorial is aimed at providing users with a foundation on mocking a database for testing. Your implementation of this will depend on factors such as the use of an ORM for example. 我希望这使您对如何使用模拟数据库进行unittest测试有基本的了解。 本教程旨在为用户提供模拟数据库以进行测试的基础。 您对此的实现将取决于诸如使用ORM之类的因素。 Tests I have written using this method can be found here 我使用这种方法编写的测试可以在这里找到 The entire source code of the project I used this type of testing can be found here 我使用这种类型的测试的项目的完整源代码可以在这里找到 翻译自: https://medium.com/swlh/python-testing-with-a-mock-database-sql-68f676562461 python模拟数据库 要求 (Requirements)
配置 (Setting up)
创建MockDB类 (Creating the MockDB class)
import mysql.connector
from mysql.connector import errorcode
from unittest import TestCase
from mock import patch
import utilsclass MockDB(TestCase):
创建SetUpClass方法 (Creating the SetUpClass method)
补丁配置 (Patching config)
创建TearDownClass方法 (Creating the TearDownClass method)
MockDB类 (MockDB Class)
测试中 (Testing)
import utils
from mock_db import MockDB
from mock import patchwith self.mock_db_config:
样例代码 (Sample Code)
最后
以上就是风中悟空为你收集整理的python模拟数据库_使用模拟数据库进行Python测试 要求 (Requirements) 配置 (Setting up) 创建MockDB类 (Creating the MockDB class) 创建SetUpClass方法 (Creating the SetUpClass method) 创建TearDownClass方法 (Creating the TearDownClass method) MockDB类 (MockDB Class) 测试中 (Testing) 样例代码 (Sam的全部内容,希望文章能够帮你解决python模拟数据库_使用模拟数据库进行Python测试 要求 (Requirements) 配置 (Setting up) 创建MockDB类 (Creating the MockDB class) 创建SetUpClass方法 (Creating the SetUpClass method) 创建TearDownClass方法 (Creating the TearDownClass method) MockDB类 (MockDB Class) 测试中 (Testing) 样例代码 (Sam所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复