Partie 8 : Utiliser une classe base

À 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é.

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : jwhitlock, SphinxKnight, Goofy, J.DMB
 Dernière mise à jour par : jwhitlock,