2017-08-29 2 views
0

ont défini le fichier Cases.py avec la suite défini:Python: Utilisez fixation pour 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()) 

fichier 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) 

Idée: Faire la même suite d'une par une avec différentes sessions de l'utilisateur. Mais le projecteur ne s'exécute que si le paramètre autouse=True

Comment rendre un appareil exécutable sans autouse=True et d'exécuter la même suite avec une configuration différente?

Répondre

0

Enfin je solution trouvée que je cherchais, pourrait être utile pour quelqu'un:
crochet Utilisé avec la ligne de commande args

fichier 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) 

fichier 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) 

Maintenant, via la commande d'exécution de la ligne de commande (dans le répertoire racine du projet) python -m pytest Cases.py -s -v -n auto --users all

suite de tests sera exécuté avec connexion comme user1, après sera exécuté avec connexion comme user2