前言
今天我們來學習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]的日志信息:
可以看到,把輸出日志信息的級別改成 [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.html
、log2.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 catch
、try except
、try finally
等等。大家可以動手試一試,把報錯這部分的內容也添加到你的測試腳本中去~
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b