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.
macOS 10.13.6 Airtest IDE 1.2.2(Python) Android 9
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
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.
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
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
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.
/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.
$ 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.
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