[PYTHON] Erstellen Sie mit AirtestIDE eine Umgebung für die Testautomatisierung (Tipps)

Einführung

Vor kurzem habe ich begonnen, den Test von Smartphone-Apps (Spielen) mit AirtestIDE zu automatisieren. Daher möchte ich darlegen, was ich getan habe, um das Skript und die Umgebung zu erstellen, die ich tatsächlich erstellt habe.

Umgebung

macOS 10.13.6 Airtest IDE 1.2.2(Python) Android 9

Skript

Integrieren Sie häufig verwendete Skripte

from airtest.core.api import using
using("common.air")
from common import *

Wenn ich mich fragte, was ich tun sollte, stand es im offiziellen Dokument https://airtest.readthedocs.io/en/latest/README_MORE.html#import-from-other-air

Verarbeitung, um auf die Verarbeitung zu warten

import sys

def waitForExists(obj, timeout = 60):
    for t in range(timeout):
        if (exists(obj)): return 1
        elif t == timeout - 1:
            print("timeout")
            sys.exit()
        sleep(1)

Warten Sie auf die Verarbeitung, bis obj gefunden wurde Ich habe die Ausnahmebehandlung für Timeout noch nicht erstellt. raise waitforobjecttimeouterror("Zeitüberschreitung bei der Verarbeitung") Ich möchte so aussehen


def waitAndTouch(obj, timeout = 60):
    for t in range(timeout):
        if (exists(obj)):
            sleep(1)
            touch(obj)
            return 1
        elif t == timeout - 1:
            print("timeout")
            sys.exit()
        sleep(1)

Warten Sie, bis Sie obj gefunden haben, und tippen Sie dann auf

def swipeForExists(obj, obj2, vector, dulation = 8, maxCount = 10):
    for c in range(maxCount): 
        if (exists(obj)): break
        elif c == maxCount - 1:
            print("maxCount")
            sys.exit()
        elif (exists(obj2)):
            swipe(obj2, vector, duration = dulation)

Wischen Sie mit obj2, bis Sie obj finden

def tapForExists(obj, obj2, timeout = 60):
    for t in range(timeout):
        if (exists(obj)):
            sleep(1)
            touch(obj)
            return 1
        elif t == timeout - 1:
            print("timeout")
            sys.exit()
        elif (exists(obj2)): touch(obj2)
        sleep(1)

Tippen Sie so lange auf obj2, bis Sie obj finden (tippen Sie auf, wenn obj gefunden wird).

def tapForNotExists(obj, obj2, timeout = 60):
    for t in range(timeout):
        sleep(1)
        if (not exists(obj)): return 1
        elif t == timeout - 1:
            print("timeout")
            sys.exit()
        elif (exists(obj2)): touch(obj2)

Tippen Sie so lange auf obj2, bis Sie obj nicht mehr finden

def tapForNotExistsXY(obj, x, y, timeout = 60):
    for t in range(timeout):
        sleep(1)
        if (not exists(obj)): return 1
        elif t == timeout -1:
            print("timeout")
            sys.exit()
        else:
            touch(v=(x,y))

Tippen Sie so lange auf bestimmte Koordinaten, bis obj fehlt

def tapIfExists(*args):
    n = 0
    for i in args:
        n += 1    
    if (exists(args[0])):
        sleep(1)
        if (n == 1):
            touch(args[0])
        elif (n == 2):
            touch(args[1])

Wenn es ein Argument gibt: Tippen Sie auf, wenn es ein Zielobjekt gibt Wenn es zwei Argumente gibt: Wenn es ein Zielobjekt gibt, tippen Sie auf obj2

Mit so viel Arbeit sind die meisten Dinge, die ich tun möchte, ausreichend geworden.

Ausgabeprotokoll

import datetime

def log_ok(file, msg):
    now = datetime.datetime.now()
    #for airtestIDE
    file.write(now.strftime("%Y/%m/%d %H:%M:%S") + " [info] " + msg + " OK" + chr(10))
    #for airtest
    #file.write(now.strftime("%Y/%m/%d %H:%M:%S") + " [info] " + msg.decode("utf-8") + " OK".decode("utf-8") + chr(10))
    file.flush()

Es scheint, dass die Zeichencodeverarbeitung zwischen AirtestIDE und Airtest unterschiedlich ist

import codecs
file = codecs.open("<Name der Protokolldatei>", "w", "utf-8")
log_ok(file, "Automatischer Teststart")

###for IDE
install("../<App>.apk")
###for CLI
#install("<App>.apk")
log_ok(file, "Step1 -Installation")
start_app("<App-ID>")

#(Weggelassen)

log_ok(file, "Ende des automatischen Tests")
stop_app("<App-ID>")
file.close()

Anwendungsbeispiel. Darüber hinaus scheint sich der Pfad der Anwendung bei der Ausführung über die IDE und bei der Ausführung über die CLI geringfügig zu unterscheiden IDE ... Der ausgeführte Luftordner wird zum Zuhause CLI ... Der Ort, an dem Sie es ausgeführt haben, wird zu Ihrem Zuhause

Veröffentlichen Sie die Ergebnisse in Slack


import json
import requests

url = "https://slack.com/api/chat.postMessage"
token = "<token>"
channel = "<channel>"
message = "Der Protokollausgabe" + chr(10) + "Es ist eine Probe"

body = {
    'token' : token,
    'channel' : channel,
    'text' : message,
    'as_user' : 'true'
}

requests.post(url, data=body)

Ich denke darüber nach, die Ausgabeprotokolldatei zu importieren und in Slack zu veröffentlichen. https://api.slack.com/methods/chat.postMessage

Befehlszeile

Von der Befehlszeile ausführen

adb shell input keyevent KEYCODE_WAKEUP
cd $PROJECT_HOME
/Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE runner "<Projekt>.air" --device Android:/// --log log

Bild, um zu beginnen, indem Sie die Schale von Jenkins usw. schlagen.

Holen Sie sich den Bericht

/Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE reporter "<Projekt>.air" --log_root log --export exp

Mit Airtest IDE erhalten Sie umfangreichere Berichte als mit Airtest Es wäre schön, das Ausgabeziel des Berichts auf DocumentRoot von Apache zu setzen, damit im Intranet auf ihn verwiesen werden kann.

Führen Sie durch Verbinden mehrerer Einheiten aus

$ airtest run argo.air --device Android://127.0.0.1:5037/<serialno>

Wenn mehrere Smartphone-Terminals über USB verbunden sind, können Sie mehrere Geräte gleichzeitig ausführen, indem Sie `<serialno>` angeben, das mit dem Befehl `` `adb Geräte``` aufgeführt ist ( Ich habe es noch nicht mit Airtest IDE versucht.

abschließend

Haben Sie Referenzen gefunden? Es gab einige Punkte, auf die ich gestoßen bin, als ich tatsächlich versucht habe, das Skript zu implementieren, also hoffe ich, dass es hilft.

Recommended Posts

Erstellen Sie mit AirtestIDE eine Umgebung für die Testautomatisierung (Tipps)
Erstellen Sie eine Umgebung mit virtualenv
Erstellen Sie mit Vagrant (Ubuntu 16.04) eine Umgebung für Django x Apache x mod_wsgi.
Erstellen Sie mit boot2docker eine Ausführungsumgebung für jede Sprache
Erstellen einer Anaconda-Umgebung für Python mit pyenv
Verschiedene Befehle zum Erstellen einer Umgebung mit Apache
Versuchen Sie, mit VisualStudioCode eine Umgebung für MayaPython zu erstellen
Testautomatisierung für die Arbeit
[Linux] WSL2 Erstellen Sie mit Ubuntu 20.04 eine Umgebung für laravel7
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
Erstellen Sie eine Umgebung für MkDocs unter Amazon Linux (versucht)
Erstellen Sie eine Open AI Gym-Umgebung mit Bash unter Windows 10
Erstellen Sie eine API mit Django
Neuerstellung der Umgebung für maschinelles Lernen mit Miniconda (Windows-Version)
Minimales Makefile und buildout.cfg, um eine Umgebung mit buildout zu erstellen
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
Tipps zum Ausführen Gehen Sie mit Docker
Tipps zum Importieren von macOS-optimiertem TensorFlow in eine Apple M1-Chipumgebung
Erstellen Sie eine virtuelle Umgebung mit Python!
Errichtete eine Umgebung für Anaconda & Jupyter
Erstellen Sie eine Altersgruppe mit Pandas
Erstellen Sie mit GCP + Docker + Jupyter Lab eine beliebige Umgebung für maschinelles Lernen
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
Erstellen Sie eine Anwendung, indem Sie mit Pygame klassifizieren
[Python] Erstellen einer Umgebung mit Anaconda [Mac]
Erstellen Sie eine Umgebung für das in Blender integrierte Python
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Hinweise beim Erstellen einer Umgebung mit Python
Tipps zum Umgang mit Binärdateien in Python
Erstellen wir eine virtuelle Umgebung für Python
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen Sie schnell eine Excel-Datei mit Python #python
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Tipps zur Verwendung von Python + Caffe mit TSUBAME
Tipps zum Zeichnen mehrerer Linien mit Pandas
Crawl Follower für ein Konto bei Instagram
Erstellen Sie eine OpenCV3 + python3-Umgebung unter OSX
[Python] Erstellen Sie schnell eine API mit Flask
Testautomatisierung beginnend mit L-Chika (3) Einbau eines Oszilloskops
Generieren Sie eine add-in-fähige Excel-Instanz mit xlwings
Erstellen Sie eine englische Wort-App mit Python
Erstellen einer Umgebung für "Tello_Video" mit Raspbian
Erstellen Sie mit cx_Freeze eine aktualisierbare MSI-Datei
Erstellen einer Umgebung für "Tello_Video" unter Windows
Hinweise von der Installation von Homebrew bis zum Erstellen einer Anaconda-Umgebung für Python mit pyenv
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
[Erstellen einer CI-Umgebung in 2 Stunden] Verfahren zum Erstellen eines Python-Webservers mit CircleCI und zum Bestehen eines HTTP-Kommunikationstests
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Für Anfänger, um eine Anaconda-Umgebung aufzubauen. (Memo)
Erstellen Sie solche Testdaten mit Python (Teil 1)
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen Sie ein akademisches Programm mit Kombinationsoptimierung
Erstellen einer Umgebung zum Ausführen von Python-Skripten (für Mac)
Erstellen Sie mit Minette für Python einen LINE BOT