À présent vous avez des tests multiples et vous sentez probablement que vous avez bien progressé. Pourtant, il existe d'autres manières d'améliorer encore l'efficacité de votre code — vous pouvez remarquer que vous avez dû jusqu'ici inclure les méthodes setUp()
et tearDown()
dans chaque fichier de test, au fur et à mesure de notre progression. Si vous avez plusieurs douzaines de tests alors il y a beaucoup de duplication de code ! Dans cet article, nous allons regarder comment mettre le code setUp()
/tearDown()
commun à tous les tests dans une classe TestBase
, qui peut ainsi être importée dans chaque fichier de test.
test_base.py
Pour commencer, créez un nouveau fichier nommé test_base.py
, dans le même dossier que vos cas de tests existants.
Ensuite, déplacez vos déclarations relatives à la configuration commune (unittest
, Marionette
et time
) dans le fichier, avec une classe TestBase
contenant les méthodes setUp()
et tearDown()
, et les fonctions d'aide communes (comme unlock_screen()
). Le fichier devrait ressembler à cela :
import time import unittest from marionette import Marionette class TestBase(unittest.TestCase): def unlock_screen(self): self.marionette.execute_script('window.wrappedJSObject.lockScreen.unlock();') def kill_all(self): self.marionette.switch_to_frame() self.marionette.execute_async_script(""" // Kills all running apps, except the homescreen. function killAll() { let manager = window.wrappedJSObject.AppWindowManager; let apps = manager.getApps(); for (let id in apps) { let origin = apps[id].origin; if (origin.indexOf('verticalhome') == -1) { manager.kill(origin); } } }; killAll(); // return true so execute_async_script knows the script is complete marionetteScriptFinished(true); """) def setUp(self): # Create the client for this session. Assuming you're using the default port on a Marionette instance running locally self.marionette = Marionette() self.marionette.start_session() # Unlock the screen self.unlock_screen() # kill all open apps self.kill_all() # Switch context to the homescreen iframe and tap on the contacts icon time.sleep(2) home_frame = self.marionette.find_element('css selector', 'div.homescreen iframe') self.marionette.switch_to_frame(home_frame) def tearDown(self): # Close the Marionette session now that the test is finished self.marionette.delete_session()
Mettre à jour vos fichiers de test
Avec la création de votre fichier test_base.py
, vous devez importer TestBase
dans vos fichiers de test, et les classes de test doivent être changées pour étendre la classe TestBase
:
import unittest from marionette import Wait from marionette import By from test_base import TestBase class TestContacts(TestBase): def test(self): # Tests in here if __name__ == '__main__': unittest.main()
Essayez d'exécuter votre fichier de test de nouveau.
Vous ne devriez pas voir de grande différence maintenant mais si vous avez des douzaines ou des centaines de tests, cela économise beaucoup de code dupliqué.