Automatisez les tests d'applications pour smartphone avec Appium-Python Edition

1.Tout d'abord

La dernière fois, j'ai écrit dans "Automatisation des tests d'applications pour smartphone avec Appium-Overview" qu'Appium peut automatiser les tests d'applications pour smartphone.

Cette fois, je voudrais écrire sur la façon de créer un code de test pour les applications pour smartphone à l'aide d'Appium et de Python.

(Supplément) Pour le moment (20 juillet 2013), nous ciblons uniquement les applications iOS. Les applications Android seront décrites plus tard.

2. Prérequis

L'environnement utilisé cette fois est le suivant.

Logiciel version
OS MacOS X version 10.8.4
Python 2.7.4
pip 1.2.1
XCode 4.5.3

Pour plus d'informations sur l'installation d'Appium, consultez l'article précédent: "Automatisation des tests d'applications pour smartphone avec Appium-Overview".

3. Exécutez l'exemple de code

Tout d'abord, vérifions l'opération à l'aide de l'exemple de code. Les opérations à partir d'ici sont effectuées sur le terminal.

Obtenez la source Appium complète sur GitHub.

git clone https://github.com/appium/appium.git

Une fois que vous avez la source Appium complète, accédez au dossier TestApp.

cd appium/sample-code/apps/TestApp/

Créez votre application iOS à l'aide de la commande xcodebuild. Le SDK iOS utilisé pour la construction doit être iPhone Simulator.

xcodebuild -sdk iphonesimulator

Accédez au dossier qui contient l'exemple de code Python.

cd ../../examples/python/

Avant d'exécuter l'exemple de code, assurez-vous que vous disposez du module sélénium Python. Sinon, utilisez pip pour installer le module sélénium.

#Vérifiez si le module sélénium Python est inclus
pip freeze

#Si le module sélénium n'est pas inclus, exécutez la commande suivante
sudo pip install selenium

Maintenant que nous sommes prêts, exécutons l'exemple de code.

appium &
python simple.py

4. Apprenez à écrire du code de test à partir d'un exemple de code

J'ai beaucoup cherché, mais je n'ai pas trouvé de tutoriel sur la façon d'écrire du code de test en Python, alors j'aimerais résumer comment écrire du code de test basé sur l'exemple de code. → Si vous trouvez quelque chose comme un tutoriel, réécrivez le contenu de cet article.

L'emplacement de stockage de l'exemple de code est "appium / sample-code / examples / python /".

Si vous lisez l'exemple de code, vous pouvez voir que l'application iOS s'exécute via l'API WebDriver du module selenuim.

(1) Créez une classe de test qui hérite de la classe unittest.TestCase

import unittest


class AppiumSampleTest(unittest.TestCase):

	def setUp(self):
		pass

	def tearDown(self):
		pass

(2) Enregistrez l'application iOS à démarrer par la méthode setUp de la classe de test dans Appium.

def setUp(self):
	#Obtenez le chemin où se trouve l'application iOS
	# (Importez le module os)
	app = '(Le chemin où se trouve l'application iOS)'
	
	#Faire reconnaître les applications iOS par Appium à l'aide du Webdriver de Selenium
	# (Importez le webdriver depuis le module sélénium)
	# command_La partie domaine et la partie port spécifiées par l'exécuteur sont
	#Cela dépend de l'environnement que vous utilisez
	self.driver = webdriver.Remote(
				command_executor = 'http://127.0.0.1:4723/wd/hub',
				desired_capabilities = {
					'browserName' : 'iOS',
					'platform' : 'Mac',
					'version' : '6.0',	#version iOS
					'app' : app		#Le chemin où se trouve l'application iOS à exécuter
				})

(3) Quittez l'application iOS avec la méthode tearDown de la classe de test.

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

(4) Ajouter une méthode de test

def test_ui_operation(self):
	# 1.Fonctionnement du curseur
	# 1-1.Obtenez le curseur
	sliders = self.driver.find_elements_by_tag_name('slider')
	# 1-2.Évaluer la valeur initiale du curseur
	self.assertEqual(sliders[0].get_attribute('value'), '50%')
	# 1-3.Obtenez des événements tactiles
	drag = webdriver.common.touch_actions.TouchActions(self.driver)
	# 1-4.Réglez le curseur-50%À
	drag.flick_element(sliders[0], -0.5, 0, 0)
	# 1-5.Déplacez le curseur
	drag.perform()
	# 1-6.La valeur de réglage du curseur est 0%Évaluer cela
	self.assertEqual(sliders[0].get_attribute('value'), '0%')

	# 2.Manipulation des champs de texte
	# 2-1.Obtenez un champ de texte
	textFields = self.driver.find_elements_by_tag_name('textField')
	# 2-2.Entrez 1 dans le premier champ de texte
	textFields[0].send_keys(1)
	# 2-3.Entrez 2 dans le deuxième champ de texte
	textFields[1].send_keys(2)
	# 2-4.Évaluez que la somme des valeurs dans les premier et deuxième champs de texte est de 3.
	self.assertEqual(int(textFields[0].get_attribute('value'))
                         + int(textFields[1].get_attribute('value')), 3)

	# 3.Fonctionnement des boutons
	# 3-1.Obtenez le bouton
	buttons = self.driver.find_elements_by_tag_name('button')
	# 3-2.Cliquez sur le bouton
	buttons[0].click()

	# 4.Manipulation d'étiquettes
	# 4-1.Obtenez l'étiquette
	texts = self.driver.find_elements_by_tag_name('staticText')
	# 4-2.Évaluer que le contenu de l'étiquette est 3
	self.assertEqual(int(texts[0].get_attribute('value')), 3)

Pour résumer la gestion des parties d'écran des applications iOS dans le module sélénium

Comment obtenir des parties d'écran

Pièces d'écran Méthode d'acquisition
UITextField self.driver.find_elements_by_tag_name('textField')
UIButton self.driver.find_elements_by_tag_name('button')
UILabel self.driver.find_elements_by_tag_name('staticText')
UISlider self.driver.find_elements_by_tag_name('slider')

Comment utiliser les parties de l'écran

Pièces d'écran Détails de l'opération Mode opératoire
UITextField Entrez une valeur send_Utilisez la méthode des clés
UITextField Obtenez la valeur get_Utilisez la méthode des attributs
UIButton Cliquez sur le bouton Utilisez la méthode du clic
UILabel Obtenez le contenu d'affichage de l'étiquette Se référer à la propriété text
UISlider Changer la valeur de réglage Effleurer Actions tactiles_Définissez la valeur avec la méthode d'élément. Après le réglage, déplacez le curseur avec la méthode perform de TouchActions.

Ce sera.

(Supplément) Le tableau ci-dessus sera mis à jour de temps à autre.

L'image globale du code source est la suivante.

# coding: utf-8

import unittest
import os
from selenium import webdriver


class AppiumSampleTest(unittest.TestCase):

    def setUp(self):
        #Obtenez le chemin où se trouve l'application iOS
        app = os.path.join('/tmp/appium',
                    'sample-code/apps/TestApp/build/Release-iphonesimulator',
                    'TestApp.app')
        app = os.path.abspath(app)

        #Faire reconnaître les applications iOS par Appium à l'aide du Webdriver de Selenium
        # command_La partie domaine et la partie port spécifiées par l'exécuteur sont
        #Cela dépend de l'environnement que vous utilisez
        self.driver = webdriver.Remote(
            command_executor='http://localhost:4723/wd/hub',
            desired_capabilities={
                'browserName': 'iOS',
                'platform': 'Mac',
                'version': '6.0',
                'app': app
            })

    def test_ui_operation(self):
        #Fonctionnement du curseur
        sliders = self.driver.find_elements_by_tag_name('slider')
        self.assertEqual(sliders[0].get_attribute('value'), '50%')
        drag = webdriver.common.touch_actions.TouchActions(self.driver)
        drag.flick_element(sliders[0], -0.5, 0, 0)
        drag.perform()
        self.assertEqual(sliders[0].get_attribute('value'), '0%')

        #Manipulation des champs de texte
        textFields = self.driver.find_elements_by_tag_name('textField')
        textFields[0].send_keys(1)
        textFields[1].send_keys(2)
        self.assertEqual(int(textFields[0].get_attribute('value'))
                         + int(textFields[1].get_attribute('value')), 3)

        #Fonctionnement des boutons
        buttons = self.driver.find_elements_by_tag_name('button')
        buttons[0].click()

        #Manipulation d'étiquettes
        texts = self.driver.find_elements_by_tag_name('staticText')
        self.assertEqual(int(texts[0].get_attribute('value')), 3)

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


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

5. Référence

Recommended Posts

Automatisez les tests d'applications pour smartphone avec Appium-Python Edition
Automatisez les tests d'applications Facebook avec les utilisateurs de test Facebook
Automatisez les tests python avec CircleCI
Automatisez les tests d'applications Windows avec Windows Application Driver-Python Edition
Automatisez les tests d'interface utilisateur avec l'API Selenium | Exploration de sites Web avec python
Tester Elasticsearch avec python-tcptest
[Blender] Automatisez les tests des modules complémentaires Blender avec GitHub et TravisCI
Pré-essayez les tests locaux avec Travis
Automatisez la fabrication des sushis avec Python
Test des requêtes HTTP avec ESP-WROOM-32