教你實現一個非常有趣的自動化腳本“循環執行”的實例


前言

今天我們來學習1個非常有趣的 poco 實例。在這個示例中,我們將學習到以下小知識:

  • 1.如何過濾非報錯的log信息,讓你的log窗口不再密密麻麻
  • 2.連接設備、初始化poco、打開應用這幾個腳本順序應該怎么放
  • 3.循環執行1個測試動作,直到滿足某個條件為止
  • 4.多次執行同一腳本,並且每一次執行都生成1份測試報告

下文的例子中用到的demo可以在我們官網上下載到(鏈接:https://poco.readthedocs.io/en/latest/source/doc/poco-example/index.html)。

1.過濾非報錯的log信息

默認情況下,在IDE執行測試腳本的時候,log查看窗口會打印出所有等級的日志信息,包含 [DEBUG][INFO][WARNING] 和 [ERROR] 等等。

如果你不想這些非報錯的日志信息過多占據log查看窗的位置,並且干擾到你提取有效的報錯日志;你可以在腳本代碼開頭加上 對日志信息等級的設定:

__author__ = "Airtest"

import logging
logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)

logging 模塊是 Python 內置的標准模塊,主要用於輸出運行日志。它還可以設置輸出日志的等級、日志保存路徑、日志文件回滾等。

在這里我們主要用到設置輸出日志的等級這個方法,僅輸出日志等級為[DEBUG]的日志信息:

image

可以看到,把輸出日志信息的級別改成 [ERROR] 以后,整個腳本運行過程中只有少量初始化信息輸出,更方便查看報錯信息。

2.如何安排連接設備、初始化poco和打開應用的腳本順序

很多新手在使用 poco 的時候,都容易把連接設備、初始化 poco 和打開應用的腳本順序搞亂,導致出現一大堆奇妙的報錯。

比如大家最常見的:“遠程主機強迫關閉了一個現有的連接”、“socket connection broken”等等。

最正確的順序是:先連接設備(一般在 auto_setup 接口里面連接)--> 再打開應用(一般用 start_app 接口)--> 等應用開啟完畢,最后才初始化 poco

# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *

# 連接設備
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP"])

#啟動應用
start_app("com.NetEase")
sleep(6.0)

# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

poco("btn_start").click()

所以下次寫 poco 腳本的時候,千萬記住要檢查下這幾條代碼的順序,避免產生不必要的報錯。

3.多次執行某個測試動作

python給我們提供了多個循環方法,比如while循環、for循環等,還有個特別一點的循環叫嵌套循環,可以讓我們在while循環里面使用for循環。

在我們之前的推文“1篇文章帶你了解poco的所有基本功能”中,我們有簡單介紹如何遍歷元素,那時候用的就是for循環:

for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("shell"))

今天我們寫一個嵌套循環,當游戲得分小於100分時,就繼續把星星拖動到貝殼上,並打印當前分數,當游戲得分大於或等於100分時,就終止循環,並打印最終游戲得分:

 # 循環執行某個動作
    while int(poco("scoreVal").get_text()) < 100:
        for star in poco("playDragAndDrop").child("star"):
            star.drag_to(poco("shell"))
            print("當前得分:"+poco("scoreVal").get_text())
    else:
        print("游戲結束,最終得分:"+poco("scoreVal").get_text())
        print("這是第"+str(a)+"次執行腳本")

else: 下面的代碼是不滿足循環條件時執行的動作。

4.多次執行腳本並生成多個測試報告

我們還是利用 while循環,重復執行3次完整的腳本內容,並依次生成 log1.htmllog2.html 和 log3.html。實現思路大致如下:

a = 1
while a < 4:
    # 執行完整的腳本內容
    pass
    
    # 生成報告
    from airtest.report.report import simple_report
    simple_report(__file__,logpath=True,output="log"+str(a)+".html")
    a = a + 1

我們可以設置一個變量 a ,每執行一次腳本,變量 a 的值就 +1,直到 a=4,即腳本重復執行了3次以后,循環條件不再滿足,程序結束循環。

最終log查看窗打印的部分結果如下:

 

也生成了3分獨立的測試報告:

 

 

這里有一點需要特別注意下,就是在每一次執行完腳本之后,我們需要把設備恢復到原始狀態:

# 回到首頁並清理應用
keyevent("HOME")
clear_app("com.NetEase")

5.小結

如果想獲取今天示例的完整代碼,童鞋們可以在直接在公眾號AirtestProject回復關鍵詞“循環”

另外本次示例中沒有考慮到出現報錯,程序終止執行的情況,實際上我們也應該把這部分的內容考慮進去。

之前我們也教過大家很多捕捉報錯讓程序繼續執行的方法,可以使用 try catchtry excepttry finally 等等。大家可以動手試一試,把報錯這部分的內容也添加到你的測試腳本中去~


 

Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM