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
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! –