2017-08-29 156 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

執行