我从另一个question开始,建议在fixtures
中使用pytest
我正在尝试确定fixtures
是否可以驻留在独立类中。网上的示例将它们作为独立函数或从另一个类继承
我的用例
为什么我需要它们独立?
我有一个可以连接到外部目录服务器(例如LDAP)的类。此类将具有fixtures
来创建/删除目录服务器中的对象。
多个LDAP测试类应该能够使用ExternalDirectory
类并连接到不同的LDAP目录服务器
- external_server.py
import ldap
import pytest
class ExternalDirectory(object):
def __init__(self, creds):
self.connection = #connect to LDAP server
@pytest.fixture
def create_user(self):
user = []
def _create_user(self, user_name):
#create user in ldap
user.append(user_name)
yield _create_user
#delete user list
#More fixtures of such kind
def utility_method1(self):
# some util method
#More such util methods
测试类将使用此类
- test_ldap_users.py
import ExternalDirectory
class TestLdapUser(object):
@classmethod
def setup_class(cls):
#Fetch credentials from some YAML
cls.ldap_connection = ExternalDirectory(creds)
def test_ldap_user_create(self, <need-to-call-create-user-fixture-here>):
create_user('some-user-name')
...
问题
但是我无法在测试用例中调用此灯具。实际上,我什至不知道该如何称呼他们:)
替代方法
继承ExternalDirectory
类。但是然后,我需要删除__init__
并将其移至setup_class
的{{1}},然后在ExternalDirectory
中调用setup_class
。
替代方法的局限性
在TestLdapUser
的{{1}}方法中创建的connection
属性对于每个LDAP测试类都不是唯一的
问题
什么是处理此问题的好方法?
答案 0 :(得分:0)
我目前正在使用一种方法,但我不喜欢它
<VirtualHost *:80>
ServerName emp.lcl
DocumentRoot "c:/wamp64/www/emp"
<Directory "c:/wamp64/www/emp/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
RewriteEngine on
RewriteRule "^/api/employee/search/(.*)$" "/api/employee.py"
</Directory>
</VirtualHost>
为什么我不喜欢它?
我需要为不同的服务器创建多个LDAP对象,因此我希望实现class LDAPFixtures(object):
@classmethod
def setup_class(cls, init_data):
cls.connection = LDAPConnectionInit(init_data)
@pytest.fixture
def create_and_delete_ou(self):
ou_list = []
def _create_organizational_unit(ou_name):
# Code to create an OU
ou_list.append(ou_name)
yield _create_organization_unit
# Code to delete OU
class TestLDAPConnections(LDAPFixtures):
def test_ou_1(self, create_and_delete_ou):
# Do something
...
# Now call the fixture
create_and_delete_ou(random_ou_name)
# Continue to do something and conclude the test
,为每个LDAP连接创建多个对象,然后从该对象调用固定装置。
因此,我需要继承关系而不是继承关系。所以像这样的东西会很酷
__init__