首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python的夹具模块生成夹具数据

用Python的夹具模块生成夹具数据
EN

Stack Overflow用户
提问于 2012-11-20 19:48:53
回答 1查看 3.3K关注 0票数 6

我第一次使用了夹具模块,试图获得更好的夹具数据集,以便使我们的功能测试更加完整。

我发现夹具模块有点笨重,我希望有更好的方法来做我正在做的事情。这是Python2.7中的一个Flask/SQLAlchemy应用程序,我们使用鼻子作为测试运行程序。

所以我有一组员工。员工有自己的角色。有几个页面具有相当复杂的权限,我想确保这些页面都经过了测试。

我创建了一个DataSet,它包含每种类型的角色(我们的应用程序中大约有15个角色):

代码语言:javascript
复制
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

我想要做的是编写一个功能测试,只检查正确的人可以访问一个页面。(实际的权限要复杂得多,我只是想给您看一个玩具示例。)

就像这样:

代码语言:javascript
复制
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)

是否有一种方法来生成夹具数据,以便我的开发人员不必记得每次添加角色时都要向夹具添加一行?我们有所有角色的规范列表作为配置在应用程序的其他地方,所以我有。

我不喜欢任何这个或固定模块,所以我很高兴听到建议!

EN

回答 1

Stack Overflow用户

发布于 2018-05-18 08:44:00

一种选择是使用男孩来创建测试数据。

  • 假设您相应地保留和更新了一个角色列表(稍后将使用),如下所示: 角色= ROLE_ENGINEER,ROLE_ADMIN,ROLE_MANAGER,
  • 让我们为Employee表创建一个工厂: 从EmployeeFactory(factory.alchemy.SQLAlchemyModelFactory):类导入角色类导入工厂: sqlalchemy_session = Employee sqlalchemy_session= session username = factory.Sequence(lambda n: U‘’User %d‘% n) #其他属性.#现在角色选择角色=factory.fuzzy.FuzzyChoice(角色) FuzzyChoice方法接受一个选项列表,并从这个列表中进行随机选择。 现在,这将能够根据需要创建任意数量的Employee对象。
  • 使用工厂: 从factory.location import EmployeeFactory def test_only_admin_can_see_this_page():EmployeeFactory.create_batch(size=100)中为session.query( employee ).all()登录(Employee)和self.app.test_request_context('/'):response = self.test_client.get(ADMIN_PAGE) if employee.role == ROLE_ADMIN eq_(200,response.status_code)其他: eq_(401,response.status_code)注销(雇员) 分解:
代码语言:javascript
复制
- `EmployeeFactory.create_batch(size=100)` Creates 100 `Employee` objects in the test session.
- We can access those objects from the factory `session`.

有关将factory_boy与SQLAlchemy:https://factoryboy.readthedocs.io/en/latest/orms.html?highlight=sqlalchemy#sqlalchemy一起使用的更多信息。

特别是在会话管理方面要小心:https://factoryboy.readthedocs.io/en/latest/orms.html?highlight=sqlalchemy#managing-sessions

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13480955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档