自動化測試 - Repository Pattern 的使用與介紹
在自動化測試案例中,往往第一步是為這些測試案例準備測試資料。測試資料的來源可能來自於某個檔案、某個資料庫或呼叫某支 API 請求的結果。使用 Repository 設計模式可以將資料的操作抽象化成建立(Create)、讀取(Read)、更新(Update)、刪除(Delete),而不會因為資料來源的實體不同而有不同的操作函式。
User
使用者資料的表示將是一個名為 User 的資料類別,其中包含一些個人資訊,例如電子郵件、使用者名稱。
import dataclasses
@dataclasses.dataclass
class User:
email: str = ""
username: str = ""
Generic Repository Design Pattern
Repository 設計模式的概念是將資料存取邏輯隱藏在業務程式碼之外。隱藏細節使程式碼更易於閱讀、維護。對於自動化測試框架,它使您甚至可以輕鬆地更改資料存取技術。通過抽象層,程式碼閱讀者不需要知道測試資料來自何處。閱讀者可以專注於測試案例。Repository 應該支援 CRUD,即建立(Create)、讀取(Read)、更新(Update)、刪除(Delete)。這是每個持久性儲存應支援的四個基本功能。
class UsersRepository:
def __init__(self):
self.users = []
def add(self, user: User):
"""新增使用者"""
self.users.append(user)
def get(self, email: str) -> Union[User, None]:
"""根據 email 取得使用者"""
for user in self.users:
if user.email == email:
return user
return None
def update(self, email: str, new_user_data: User):
"""根據 email 更新使用者資訊"""
for index, user in enumerate(self.users):
if user.email == email:
self.users[index] = new_user_data
return True
return False
def delete(self, email: str):
"""根據 email 刪除使用者"""
for index, user in enumerate(self.users):
if user.email == email:
del self.users[index]
return True
return False
該類別創建一個列表來儲存使用者資料。它提供 CRUD 操作,將幫助我們將一批測試使用者建立到記憶體中。
UserFactory
通常會搭配使用 Factory 將資料物件建立出來,下面的範例示範了一個呼叫者會怎麼是使用 Factory 將使用者物件產生出來。
class UserFactory:
def __init__(self, repo: UsersRepository):
self.repository = repo
def generate_users(self, count: int) -> List[User]:
active_users = self.repository.all_users()
UserFactory Usage
範例中一次產生 5000 個使用者資料,通常會在效能測試準備測試資料的時候,呼叫下列的程式碼。
user_factory = UserFactory(UsersRepository())
user_factory.generate_users(count=5000)
結論
通過 Repository 設計模式,我們可以輕鬆地準備測試資料,閱讀程式碼時,並不需要知道實作細節,只需要使用 CRUD 的函式,就可以對資料作操作,使測試過程更有簡單和易於閱讀。
如果你對於自動化測試有興趣,請訂閱我的部落格,可以獲得最新的文章。
Comments ()