2013-10-07 7 views
1

J'ai des tests Python que je cours avec Nose. Un exemple est la suivante:Appeler une méthode depuis une autre classe en Python

class Logout(unittest.TestCase): 

    def report_pass_fail(self): 
     #code 

    def setUp(self): 
     #code 

    def test_Logout(self): 
     #code 

    def tearDown(self): 
     #code 

Parce que j'ai une très grande quantité de tests et parce que je veux créer une architecture de code modulaire .... je voudrais avoir les méthodes report_pass_fail, et le décorticage intérieur SEtUP une séparez le fichier (module) et appelez-les simplement si nécessaire dans la classe du test.

Je ne suis pas très expérimenté en POO. J'ai essayé plusieurs combinaisons mais sans succès. Comment pourrais-je faire cela?

Le module I créé est la suivante:

import json, httplib, base64, unittest, sys 
from selenium import webdriver 
import className 
from creds import config, sauce_hub 

class Fixtures(unittest.TestCase): 
    def report_pass_fail(self): 
     base64string = base64.encodestring('%s:%s' % (config['username'], config['access-key']))[:-1] 
     result = json.dumps({'public': 'true', 'passed': sys.exc_info() == (None, None, None)}) 
     connection = httplib.HTTPConnection("saucelabs.com") 
     connection.request('PUT', '/rest/v1/%s/jobs/%s' % (config['username'], self.wd.session_id), result, headers={"Authorization": "Basic %s" % base64string}) 
     result = connection.getresponse() 
     return result.status == 200 

    def setUp(self): 
     desired_capabilities = webdriver.DesiredCapabilities.FIREFOX 
     desired_capabilities['version'] = '4' 
     desired_capabilities['platform'] = 'Linux' 
     desired_capabilities['name'] = className.getName(self) 
     desired_capabilities['record-video'] = False 

     self.wd = webdriver.Remote(desired_capabilities=desired_capabilities, 
            command_executor="http://" + config['username'] + ":" + config['access-key'] + sauce_hub) 
     self.wd.implicitly_wait(10) 

    def tearDown(self): 
     self.wd.quit() 

et son utilisation dans le fichier de test est quelque chose comme ceci:

import unittest 
from fixture_module import Fixtures 
#is_alert_present(wd) 

#credentials 



class DeleteLectureFromCoursePanel(Fixtures,unittest.TestCase): 

    import fixture_module 

    f = fixture_module.Fixtures() 
    f.report_pass_fail() 

    f.setUp() 

    def test_DeleteLectureFromCoursePanel(self): 
     success = True 
     wd = self.wd 
     wd.find_element_by_link_text("Delete").click() 
     self.assertEqual("Are you sure?", wd.switch_to_alert().text) 
     wd.switch_to_alert().accept() 
     self.assertTrue(success) 

    f.tearDown() 


if __name__ == '__main__': 
    unittest.main() 

Il semble ok et il n'y a pas d'erreur dans PyCharmIDE mais quand je exécutez-le à partir de la console, il dit:

ValueError:no such test method in <class 'fixture_module.Fixtures'> : runTest 

Répondre

2

Vous compliquez beaucoup plus que nécessaire être. Si votre DeleteLectureFromCoursePanel hérite de Fixtures, il déjà obtient les méthodes définies dans cette classe. Ils seront appelés automatiquement par le coureur de test, et il n'y a aucune raison pour que vous les appeliez manuellement (surtout dans le corps de la classe comme ça).

Vous n'avez pas non plus besoin d'hériter de TestCase. Vous obtenez déjà par Fixtures.

+0

Bonjour Daniel et merci pour la réponse! J'ai supprimé l'héritage de TestCase du DeleteLectureFromCoursePanel et j'ai supprimé l'importation et l'instanciation dans la classe de test. Maintenant, cela fonctionne comme je le voulais. Les méthodes sont appelées automatiquement. Je pense que j'ai maintenant une meilleure compréhension de la POO en Python. Merci encore! –

Questions connexes