簡體   English   中英

使用Python的fixture模塊生成夾具數據

[英]Generating fixture data with Python's fixture module

我是第一次使用夾具模塊,試圖獲得更好的夾具數據,這樣我就可以使我們的功能測試更加完整。

我發現夾具模塊有點笨重,我希望有更好的方法來做我正在做的事情。 這是Python 2.7中的Flask / SQLAlchemy應用程序,我們使用nose作為測試運行器。

所以我有一套員工。 員工有角色。 有幾個頁面具有相當復雜的權限,我想確保這些頁面經過測試。

我創建了一個具有每種角色類型的DataSet(我們的應用程序中大約有15個角色):

class EmployeeData(DataSet):

  class Meta:
    storable = Employee

  class engineer:
    username = "engineer"
    role = ROLE_ENGINEER

  class manager:
    username = "manager"
    role = ROLE_MANAGER

  class admin:
    username = "admin"
    role = ROLE_ADMIN

我想做的是編寫一個功能測試,只檢查合適的人可以訪問頁面。 (實際的權限更復雜,我只是想給你一個玩具示例。)

像這樣的東西:

def test_only_admin_can_see_this_page():

  for employee in Employee.query.all():
    login(employee)

    with self.app.test_request_context('/'):
    response = self.test_client.get(ADMIN_PAGE)
    if employee.role == ROLE_ADMIN
      eq_(200, response.status_code)
    else:
      eq_(401, response.status_code)

    logout(employee)

有沒有辦法生成燈具數據,所以我的開發人員不必記得每次添加角色時都要在燈具上添加一行? 我們將所有角色的規范列表作為應用程序中其他位置的配置,所以我有。

我沒有結合任何這個或夾具模塊,所以我很高興聽到建議!

一個選項是使用factory_boy來創建測試數據。

  • 假設您保留並相應地更新了一個角色列表(稍后將使用),如下所示:

     roles = [ROLE_ENGINEER, ROLE_ADMIN, ROLE_MANAGER, ...] 
  • 讓我們為Employee表創建一個工廠:

     import factory from somewhere.in.the.app import roles class EmployeeFactory(factory.alchemy.SQLAlchemyModelFactory): class Meta: model = Employee sqlalchemy_session = session username = factory.Sequence(lambda n: u'User %d' % n) # Other attributes ... # Now the role choice role = factory.fuzzy.FuzzyChoice(roles) 

    FuzzyChoice方法獲取一個選項列表,並從該列表中隨機選擇。
    現在,這將能夠按需創建任意數量的Employee對象。

  • 使用工廠:

     from factory.location import EmployeeFactory def test_only_admin_can_see_this_page(): EmployeeFactory.create_batch(size=100) for employee in session.query(Employee).all(): login(employee) with self.app.test_request_context('/'): response = self.test_client.get(ADMIN_PAGE) if employee.role == ROLE_ADMIN eq_(200, response.status_code) else: eq_(401, response.status_code) logout(employee) 

    分解:

    • EmployeeFactory.create_batch(size=100)在測試會話中創建100個Employee對象。
    • 我們可以從工廠session訪問這些對象。

有關在SQLAlchemy中使用factory_boy的更多信息: https ://factoryboy.readthedocs.io/en/latest/orms.html?highlightlight = sqalchemy #sqlalchemy。
特別要注意會話管理: https//factoryboy.readthedocs.io/en/latest/orms.html?highlight = sqlalchemy_managing-sessions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM