2013-04-08 1 views
13

J'ai un problème lors de l'exécution des tests unitaires pytest avec pyDev. J'essaie d'effectuer un test unitaire avec un module partagé et un finaliseur qui devrait être exécuté après le dernier test. Mais lors de l'exécution du test unitaire dans pyDev, il n'utilise pas la même instance mais crée deux instances différentes. L'exemple fonctionne correctement dans la console ou lorsqu'il est démarré à partir d'un script dans pydev. J'utilise la plate-forme Python 2.7.3, pytest-2.3.4, pyDev 2.7.3.2013031601, Eclipse 4.2 sur Win7.PyDev exécutant un test d'unité pytest avec un équipement partagé par le module échoue

J'ai essayé l'exemple de http://pytest.org/latest/fixture.html

La sortie de pydev est:

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027F9080> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027FF3C8> 

La sortie de la console est:

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 

Quel est le comportement attendu. Qu'est-ce que je fais mal??

le code utilisé est conftest.py:

import pytest 
import smtplib 

@pytest.fixture(scope="module") 
def smtp(): 
return smtplib.SMTP("merlinux.eu") 

Le code de test dans test_smtplib.py:

# content of test_module.py 
def test_ehlo(smtp): 
    response = smtp.ehlo() 
    assert response[0] == 250 
    assert "merlinux" in response[1] 
    assert 0 # for demo purposes 

def test_noop(smtp): 
    response = smtp.noop() 
    assert response[0] == 250 
    assert 0 # for demo purposes 

Exécution du test de script avec:

import pytest,os 
os.chdir("[path_to_tests]/tests") #your file location 
pytest.main(['-s', 'test_smtplib.py']) 

Toutes les suggestions et merci beaucoup pour votre aide!

+0

Avez-vous configuré votre IDE PyDev pour utiliser le lanceur de test ** py.test ** (* Fenêtre -> Préférences -> PyDev -> PyUnit -> Test Runner *)? –

+0

Oui, PyDev Test Runner est sélectionné. – MBaumann

+0

Non, pas le * PyDev Test Runner *, vous devriez également avoir la possibilité de choisir le *** Py.test ** Test Runner * -> regardez: http://up.picr.de/14054750vh.jpg –

Répondre

1

Je n'ai pas d'éclipse mais j'ai regardé le code source de Pydev et pytest. pytest n'utilise pas le multitraitement par défaut mais il le fera si vous avez installé xdist. Peut-être l'avez-vous? Ou peut-être Eclipse l'a-t-il installé?

Si le système est toujours disponible, pouvez-vous essayer de définir l'option ci-dessous dans vos paramètres pytest? Il indique simplement à pytest d'utiliser un processus lors de l'utilisation de xdist as documented here.

-n=1 ou peut-être préférera -n 1

Si cela ne fonctionne, cela ne devrait pas y travailler mais pourriez-vous pas essayer? Utilisez l'option ci-dessous dans les options pytest comme précédemment (pas dans les options du module de test pydev) pour activer le test au niveau du module. C'est une option de test de pydev, donc je suppose que cela provoquera une erreur, mais peut-être que d'autres codes qui utilisent cette option l'utiliseront.

--split_jobs=module ou encore peut-être --split_jobs module

1

On dirait que c'est un bug de longue date sur le côté pydev. Je viens de le fixer et soumis une demande de traction à Pydev, voir https://github.com/fabioz/Pydev/pull/120. En attendant, vous pouvez probablement supprimer le petit changement et l'appliquer à votre version installée de pydev, ce qui permet d'effectuer correctement les pydev/pytest avec la portée.

+0

Juste appliqué le correctif. Il sera disponible dans la compilation de nuit sous peu (et la prochaine version avec le correctif sera PyDev 3.5.0) –

Questions connexes