Récemment, j'ai commencé à automatiser le test des applications (jeux) pour smartphone avec AirtestIDE. Je voudrais donc expliquer ce que j'ai fait pour créer le script et l'environnement que j'ai réellement créés.
macOS 10.13.6 Airtest IDE 1.2.2(Python) Android 9
from airtest.core.api import using
using("common.air")
from common import *
Si je me demandais quoi faire, c'était écrit dans le document officiel 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)
Attendez le traitement jusqu'à ce qu'il trouve obj
Je n'ai pas encore créé la gestion des exceptions du délai d'expiration.
raise waitforobjecttimeouterror("Le traitement a expiré")
Je veux ressembler à ça
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)
Attendez de trouver obj, puis touchez
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)
Faites glisser obj2 jusqu'à ce que vous trouviez obj
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)
Continuez à appuyer sur obj2 jusqu'à ce que vous trouviez obj (appuyez sur lorsque obj est trouvé)
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)
Continuez d'appuyer sur obj2 jusqu'à ce que vous ne trouviez pas obj
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))
Continuez à taper sur des coordonnées spécifiques jusqu'à ce que obj soit manquant
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])
Lorsqu'il y a un argument: appuyez sur s'il y a un objet cible Lorsqu'il y a deux arguments: s'il y a un obj cible, appuyez sur obj2
Avec autant de travail, la plupart des choses que je veux faire sont devenues suffisantes.
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()
Il semble que le traitement du code de caractère soit différent entre AirtestIDE et Airtest
import codecs
file = codecs.open("<Nom du fichier journal>", "w", "utf-8")
log_ok(file, "Démarrage automatique du test")
###for IDE
install("../<App>.apk")
###for CLI
#install("<App>.apk")
log_ok(file, "Step1 -Installation")
start_app("<Identifiant d'application>")
#(Omis)
log_ok(file, "Fin du test automatique")
stop_app("<Identifiant d'application>")
file.close()
Exemple d'utilisation. De plus, il semble que le chemin de l'application soit légèrement différent lors de l'exécution à partir de l'IDE et lors de l'exécution à partir de la CLI IDE ... Le dossier air exécuté devient le home CLI ... L'endroit où vous l'avez exécuté devient votre maison
import json
import requests
url = "https://slack.com/api/chat.postMessage"
token = "<token>"
channel = "<channel>"
message = "De la sortie du journal" + chr(10) + "C'est un échantillon"
body = {
'token' : token,
'channel' : channel,
'text' : message,
'as_user' : 'true'
}
requests.post(url, data=body)
Je pense importer le fichier journal de sortie et le publier dans Slack. https://api.slack.com/methods/chat.postMessage
adb shell input keyevent KEYCODE_WAKEUP
cd $PROJECT_HOME
/Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE runner "<projet>.air" --device Android:/// --log log
Image pour commencer par frapper le shell de Jenkins etc.
/Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE reporter "<projet>.air" --log_root log --export exp
Vous pouvez obtenir des rapports plus riches avec Airtest IDE qu'avec airtest Ce serait bien de définir la destination de sortie du rapport sur DocumentRoot d'apache afin qu'il puisse être référencé depuis l'intranet.
$ airtest run argo.air --device Android://127.0.0.1:5037/<serialno>
Lorsque plusieurs terminaux de smartphone sont connectés via USB, si vous spécifiez `<numéro de série>`
répertorié avec la commande
`périphériquesadb```, vous pouvez exécuter plusieurs périphériques en même temps ( Je ne l'ai pas encore essayé avec Airtest IDE)
Avez-vous trouvé des références? Il y a eu certains points sur lesquels je suis tombé lorsque j'ai essayé d'implémenter le script, donc j'espère que cela aide.