[英]testing postgres db python
我不明白如何測試我的存儲庫。
我想確保我真的將所有參數保存到數據庫中,當我執行我的SQL語句時,我真的收到了我應該的。
但是,我不能在unittest case的setUp
方法中放置"CREATE TABLE test_table
”,因為它將被多次創建(同一測試用例的測試並行運行)。 所以,只要我在同一個類中創建需要在同一個表上工作的2個方法,它就不起作用(表的名稱沖突)
同樣,我不能把"CREATE TABLE test_table"
setUpModule
,因為現在表創建了一次,但是由於測試是並行運行的,所以沒有什么能阻止多次將同一個對象插入到我的表中,從而打破了unicity約束一些領域。
同樣,我不能在每個方法中"CREATE SCHEMA some_random_schema_name"
,因為我需要為給定的數據庫全局“SET search_path TO ...”,因此並行運行的每個方法都會受到影響。
我看到的唯一方法是為每個測試創建"CREATE DATABASE"
,並使用唯一的名稱,並建立與每個數據庫的invidual連接..這看起來非常浪費。 有沒有更好的辦法?
另外,我不能在內存中使用SQLite,因為我需要測試PostgreSQL。
對此最好的解決方案是使用testing.postgresql
模塊。 這將在用戶空間中觸發數據庫,然后在運行結束時再次刪除它。 您可以將以下內容放在unittest套件中 - 在setUp
, setUpClass
或setUpModule
- 取決於您想要的持久性:
import testing.postgresql
def setUp(self):
self.postgresql = testing.postgresql.Postgresql(port=7654)
# Get the url to connect to with psycopg2 or equivalent
print(self.postgresql.url())
def tearDown(self):
self.postgresql.stop()
如果您希望數據庫在測試之間/之后保持base_dir
,您可以使用base_dir
選項運行它來設置目錄 - 這將阻止它在關閉后被刪除:
name = "testdb"
port = "5678"
path = "/tmp/my_test_db"
testing.postgresql.Postgresql(name=name, port=port, base_dir=path)
在測試之外,它還可以用作上下文管理器,在退出with塊時它將自動清理和關閉:
with testing.postgresql.Postgresql(port=7654) as psql:
# do something here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.