Python factory_boy 生成測試資料

看一百次夜空里的深蓝發表於2024-06-01

factory_boy庫中的工具,用於在測試中生成模擬資料:
  1. Sequence: 用於生成一個唯一的序列。每次呼叫時,它都會返回一個新的值。這對於生成唯一的欄位(如使用者名稱或電子郵件地址)非常有用。例如,factory.Sequence(lambda n: f'user{n}@example.com')將生成一個唯一的電子郵件地址。
  2. FuzzyChoice: 用於從給定的迭代器(如列表或元組)中隨機選擇一個元素。例如,FuzzyChoice(['red', 'blue', 'green'])將隨機選擇一個顏色。
  3. FuzzyInteger: 用於生成一個在給定範圍內的隨機整數。例如,FuzzyInteger(1, 100)將生成一個在1到100之間的隨機整數。
  4. FuzzyText: 用於生成一個隨機字串。你可以指定長度和字符集。例如,FuzzyText(length=12)將生成一個長度為12的隨機字串。
  5. SubFactory: 用於在一個工廠中建立另一個工廠的例項。這對於建立具有複雜關係的模型非常有用。例如,如果你有一個User模型和一個Profile模型,其中Profile模型有一個User的外來鍵,你可以使用SubFactory在ProfileFactory中建立一個User例項。
這是一個例子:

 1 class UserFactory(factory.Factory):
 2     class Meta:
 3         model = User
 4 
 5     username = factory.Sequence(lambda n: f'user{n}')
 6     email = factory.Sequence(lambda n: f'user{n}@example.com')
 7 
 8 class ProfileFactory(factory.Factory):
 9     class Meta:
10         model = Profile
11 
12     user = factory.SubFactory(UserFactory)
13     bio = factory.FuzzyText()

在這個例子中,每次你建立一個ProfileFactory例項時,它都會自動建立一個新的UserFactory例項並將其賦值給Profileuser欄位。

相關文章