我第一次使用了夹具模块,试图获得更好的夹具数据集,以便使我们的功能测试更加完整。
我发现夹具模块有点笨重,我希望有更好的方法来做我正在做的事情。这是Python2.7中的一个Flask/SQLAlchemy应用程序,我们使用鼻子作为测试运行程序。
所以我有一组员工。员工有自己的角色。有几个页面具有相当复杂的权限,我想确保这些页面都经过了测试。
我创建了一个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)是否有一种方法来生成夹具数据,以便我的开发人员不必记得每次添加角色时都要向夹具添加一行?我们有所有角色的规范列表作为配置在应用程序的其他地方,所以我有。
我不喜欢任何这个或固定模块,所以我很高兴听到建议!
发布于 2018-05-18 08:44:00
一种选择是使用男孩来创建测试数据。
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对象。- `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
https://stackoverflow.com/questions/13480955
复制相似问题