Automatisieren Sie das Testen von Smartphone-Apps mit Appium-Python Edition

1. Zuallererst

Das letzte Mal schrieb ich in "Automatisieren des Testens von Smartphone-Apps mit Appium-Übersicht", dass Appium das Testen von Smartphone-Apps automatisieren kann.

Dieses Mal möchte ich darüber schreiben, wie Testcode für Smartphone-Apps mit Appium und Python erstellt wird.

(Ergänzung) Derzeit (20. Juli 2013) zielen wir nur auf iOS-Apps ab. Android-Apps werden später beschrieben.

2. Voraussetzungen

Die diesmal verwendete Umgebung ist wie folgt.

Software Ausführung
OS MacOS X Version 10.8.4
Python 2.7.4
pip 1.2.1
XCode 4.5.3

Weitere Informationen zur Installation von Appium finden Sie im vorherigen Artikel: "Automatisieren des Testens von Smartphone-Apps mit Appium-Übersicht".

3. Führen Sie den Beispielcode aus

Lassen Sie uns zunächst den Vorgang anhand des Beispielcodes überprüfen. Die Operationen von hier aus werden am Terminal ausgeführt.

Holen Sie sich die komplette Appium-Quelle von GitHub.

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

Wenn Sie die vollständige Appium-Quelle haben, wechseln Sie in den TestApp-Ordner.

cd appium/sample-code/apps/TestApp/

Erstellen Sie Ihre iOS-App mit dem Befehl xcodebuild. Das zum Erstellen verwendete iOS SDK sollte iPhone Simulator sein.

xcodebuild -sdk iphonesimulator

Navigieren Sie zu dem Ordner, der den Python-Beispielcode enthält.

cd ../../examples/python/

Stellen Sie vor dem Ausführen des Beispielcodes sicher, dass Sie über das Python-Selen-Modul verfügen. Wenn nicht, installieren Sie das Selenmodul mit pip.

#Überprüfen Sie, ob das Python-Selen-Modul enthalten ist
pip freeze

#Wenn das Selenmodul nicht enthalten ist, führen Sie den folgenden Befehl aus
sudo pip install selenium

Nachdem wir fertig sind, führen wir den Beispielcode aus.

appium &
python simple.py

4. Erfahren Sie, wie Sie Testcode aus Beispielcode schreiben

Ich habe viel gesucht, aber ich konnte kein Tutorial zum Schreiben von Testcode in Python finden. Daher möchte ich zusammenfassen, wie Testcode basierend auf dem Beispielcode geschrieben wird. → Wenn Sie so etwas wie ein Tutorial finden, schreiben Sie den Inhalt dieses Artikels neu.

Der Speicherort des Beispielcodes ist "appium / sample-code / examples / python /".

Wenn Sie den Beispielcode lesen, können Sie sehen, dass die iOS-App über die WebDriver-API des selenuim-Moduls ausgeführt wird.

(1) Erstellen Sie eine Testklasse, die die unittest.TestCase-Klasse erbt

import unittest


class AppiumSampleTest(unittest.TestCase):

	def setUp(self):
		pass

	def tearDown(self):
		pass

(2) Registrieren Sie die iOS-App, die mit der setUp-Methode der Testklasse gestartet werden soll, in Appium.

def setUp(self):
	#Rufen Sie den Pfad ab, in dem sich die iOS-App befindet
	# (Importieren Sie das Betriebssystemmodul)
	app = '(Der Pfad, in dem sich die iOS-App befindet)'
	
	#Lassen Sie Appium iOS-Apps mithilfe des Web-Treibers von Selen erkennen
	# (Importieren Sie den Web-Treiber aus dem Selen-Modul)
	# command_Der vom Executor angegebene Domänenteil und Portteil sind
	#Dies hängt von der verwendeten Umgebung ab
	self.driver = webdriver.Remote(
				command_executor = 'http://127.0.0.1:4723/wd/hub',
				desired_capabilities = {
					'browserName' : 'iOS',
					'platform' : 'Mac',
					'version' : '6.0',	#iOS-Version
					'app' : app		#Der Pfad, in dem sich die auszuführende iOS-App befindet
				})

(3) Beenden Sie die iOS-App mit der TearDown-Methode der Testklasse.

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

(4) Fügen Sie eine Testmethode hinzu

def test_ui_operation(self):
	# 1.Schiebereglerbedienung
	# 1-1.Holen Sie sich den Schieberegler
	sliders = self.driver.find_elements_by_tag_name('slider')
	# 1-2.Bewerten Sie den Anfangswert des Schiebereglers
	self.assertEqual(sliders[0].get_attribute('value'), '50%')
	# 1-3.Holen Sie sich Touch-Events
	drag = webdriver.common.touch_actions.TouchActions(self.driver)
	# 1-4.Stellen Sie den Schieberegler ein-50%Zu
	drag.flick_element(sliders[0], -0.5, 0, 0)
	# 1-5.Bewegen Sie den Schieberegler
	drag.perform()
	# 1-6.Der Schieberegler-Einstellwert ist 0%Bewerten Sie das
	self.assertEqual(sliders[0].get_attribute('value'), '0%')

	# 2.Textfelder bearbeiten
	# 2-1.Holen Sie sich ein Textfeld
	textFields = self.driver.find_elements_by_tag_name('textField')
	# 2-2.Geben Sie 1 in das erste Textfeld ein
	textFields[0].send_keys(1)
	# 2-3.Geben Sie 2 in das zweite Textfeld ein
	textFields[1].send_keys(2)
	# 2-4.Bewerten Sie, dass die Summe der Werte im ersten und zweiten Textfeld 3 beträgt.
	self.assertEqual(int(textFields[0].get_attribute('value'))
                         + int(textFields[1].get_attribute('value')), 3)

	# 3.Tastenbedienung
	# 3-1.Holen Sie sich den Knopf
	buttons = self.driver.find_elements_by_tag_name('button')
	# 3-2.Drück den Knopf
	buttons[0].click()

	# 4.Etikettenmanipulation
	# 4-1.Holen Sie sich das Etikett
	texts = self.driver.find_elements_by_tag_name('staticText')
	# 4-2.Bewerten Sie, dass der Inhalt des Etiketts 3 ist
	self.assertEqual(int(texts[0].get_attribute('value')), 3)

Zusammenfassung der Handhabung von Bildschirmteilen von iOS-Apps im Selen-Modul

So erhalten Sie Bildschirmteile

Bildschirmteile Erfassungsmethode
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')

So bedienen Sie Bildschirmteile

Bildschirmteile Betriebsdetails Funktionsweise
UITextField Geben Sie einen Wert ein send_Verwenden Sie die Schlüsselmethode
UITextField Holen Sie sich den Wert get_Verwenden Sie die Attributmethode
UIButton Drück den Knopf Verwenden Sie die Klickmethode
UILabel Holen Sie sich den Anzeigeinhalt des Etiketts Siehe die Texteigenschaft
UISlider Ändern Sie den Einstellwert Berühren Sie Aktionen_Stellen Sie den Wert mit der Elementmethode ein. Bewegen Sie den Schieberegler nach dem Einstellen mit der Perform-Methode von TouchActions.

Es wird sein.

(Ergänzung) Die obige Tabelle wird von Zeit zu Zeit aktualisiert.

Das Gesamtbild des Quellcodes ist wie folgt.

# coding: utf-8

import unittest
import os
from selenium import webdriver


class AppiumSampleTest(unittest.TestCase):

    def setUp(self):
        #Rufen Sie den Pfad ab, in dem sich die iOS-App befindet
        app = os.path.join('/tmp/appium',
                    'sample-code/apps/TestApp/build/Release-iphonesimulator',
                    'TestApp.app')
        app = os.path.abspath(app)

        #Lassen Sie Appium iOS-Apps mithilfe des Web-Treibers von Selen erkennen
        # command_Der vom Executor angegebene Domänenteil und Portteil sind
        #Dies hängt von der verwendeten Umgebung ab
        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):
        #Schiebereglerbedienung
        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%')

        #Textfelder bearbeiten
        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)

        #Tastenbedienung
        buttons = self.driver.find_elements_by_tag_name('button')
        buttons[0].click()

        #Etikettenmanipulation
        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. Referenz

Recommended Posts

Automatisieren Sie das Testen von Smartphone-Apps mit Appium-Python Edition
Automatisieren Sie das Testen von Facebook-Apps mit Facebook-Testbenutzern
Automatisieren Sie Python-Tests mit CircleCI
Automatisieren Sie Windows-Anwendungstests mit Windows Application Driver-Python Edition
Automatisieren Sie UI-Tests mit Selenium API | Crawlen von Websites mit Python
Testen von Elasticsearch mit Python-tcptest
[Blender] Automatisieren Sie Blender-Add-On-Tests mit GitHub und TravisCI
Probieren Sie lokale Tests mit Travis vor
Automatisieren Sie die Sushi-Herstellung mit Python
Testen von HTTP-Anforderungen mit ESP-WROOM-32