2017-08-29 158 views
0

中定义了Cases.py文件,定义套件:的Python:使用夹具unittest.TextTestRunner.run()

import unittest 
import pytest 

from adminzone_tests.Clients import TestClients 

def collect_suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClients) 
    return suite 

@pytest.mark.usefixtures('admin_session') 
def run(): 
    unittest.TextTestRunner(verbosity=2).run(collect_suite()) 

@pytest.mark.usefixtures('client_session') 
def run(): 
    unittest.TextTestRunner(verbosity=2).run(collect_suite()) 

conftest.py文件:

import pytest 

from base.Common import Common 
from base.Users import Users 


@pytest.fixture(scope='session') 
def admin_session(request): 
    Users.users('admin') 

    def admin_session_teardown(): 
     Common.logout() 
    request.addfinalizer(admin_session_teardown) 

@pytest.fixture(scope='session') 
def client_session(request): 
    Users.users('client') 

    def client_session_teardown(): 
     Common.logout() 
    request.addfinalizer(client_session_teardown) 

理念:通过一个与执行相同的一个套件不同的用户会话。 但夹具只要有PARAM autouse=True

如何使灯具可执行没有autouse=True并运行相同的套房配有不同的设置执行?

回答

0

终于让我找到的解决方案,我一直在寻找,可以为别人有用:
使用钩带命令行参数

conftest.py文件:

import pytest 

def pytest_addoption(parser): 
# adding command line arg --user 
parser.addoption('--users', action='append', default=['user1']) 

def pytest_generate_tests(metafunc): 
    if 'users' in metafunc.fixturenames: 
     us = set(metafunc.config.option.users) 
     if not us: 
      us = ['user1'] 
     elif 'all' in us: 
      us = ['user2', 'user1'] 
     else: 
      us = list(us) 
     metafunc.parametrize('users', us, scope='session') 

@pytest.yield_fixture(scope='session', autouse=True) 
def define_users(request, users): 
    # Execute login here, as example called function with param of user_type 
    login(users) 

def teardown(): 
    # Execute logout here 
    logout() 
    request.addfinalizer(teardown) 

Cases.py文件:

import unittest 

suite = unittest.TestSuite() 

def collect_suite(): 
    suite.addTest(TestClass1) 
    # adding more test classes here 

def run(): 
    unittest.TextTestRunner(verbosity=2).run(suite) 

现在通过命令行执行命令(在项目的根目录中) python -m pytest Cases.py -s -v -n auto --users all

测试套件将作为登录被user1执行后,将与登录为user2

执行