前言
有很多小伙伴會跑來交流群問我們,為什么在 AirtestIDE
可以跑通的腳本,轉用 Pycharm
來執行就會出現一大堆問題,難道 Airtest
的腳本只能夠在 AirtestIDE
上面跑嗎?
答案當然是否定的。 Airtest
實際上也是基於 python
語法的測試框架,所以在 Pycharm
上面跑 Airtest
腳本當然是可以的。
但是對於 pycharm
新手來說,有可能會遇到以下問題:
- 1.環境中未安裝
Airtest
庫,導致找不到模塊 - 2.未在腳本中連接設備
3.Airtest
的截圖文件使用相對路徑時,程序找不到- 4.在
pycharm
運行完腳本不知道后怎么看airtest
的報告
1.環境中未安裝Airtest庫,導致找不到模塊
之前在官網上看過我們 “本地環境跑Airtest腳本” 這個教程的童鞋都知道,使用本地 python
環境跑 Airtest
或者 poco
腳本之前,需要先安裝上這倆個庫(使用 pip install airtest
和 pip install pocoui
來安裝)。
在 Pycharm
上面跑 Airtest
腳本也是如此,必須保證腳本運行環境下裝有 Airtest
庫,才可以跑 Airtest
相關的腳本,否則就會出現很多童鞋都反饋過的問題 -- 找不到 Airtest
模塊:
① 如何檢查pycharm的運行環境中有沒有安裝Airtest庫呢?
我們可以打開pycharm,依次選擇左上角的 文件-->設置
,然后在彈出的設置框中選擇 項目-->Project Interpreter
:
然后可以看到 pycharm
當前使用的 python
環境以及該環境中裝有的第三方庫。可以看到示例圖中的 python
環境是沒有安裝 airtest
庫的,如果在該環境下跑 airtest
的腳本,就會報 no module named airtest
的錯誤。
解決辦法很簡單,在 package
那一行的最右邊,點擊 +
,輸入 Airtest
,然后再點擊 install package
安裝即可。
安裝完成之后會提示安裝成功:
② 虛擬環境問題
還有些童鞋反饋,他們在本地某個 python
環境上是裝好了 airtst
庫的,但是在 pycharm
上新建了一個基於這個本地 python
的環境,卻始終找不到這個 airtest
庫。
這個就涉及到了 pycharm
的虛擬環境的問題。新建環境默認建的是虛擬環境,這個虛擬環境的意思基於本地某個 python
環境,復制了一個不帶任何第三方包的 干凈的Python虛擬環境 ,已經安裝到本地 Python
環境中的所有第三方包都不會復制過來。
所以這就是為什么盡管童鞋們在本地環境上安裝了 airtest
庫,並在 pycharm
根據這個本地 python
來新建環境的時候,並不會帶上 airtest
庫的原因。
如果不想使用虛擬環境,而是想要用本地的 python
環境來跑腳本,我們可以設置使用現有的 python
環境,這樣就可以引入完整的帶有安裝好的第三方庫的環境了:
2.未在腳本中連接設備
在 AirtestIDE
中,我們可以在設備窗口中一鍵連接上我們的測試設備,然后再在腳本編輯窗口錄制 Airtest
腳本即可。
但是在 pycharm
編寫 Airtest
腳本的時候,童鞋們往往忘記在初始化腳本的時候添加設備連接參數,導致運行 Airtest
腳本時出現各種設備未連接的報錯,其中典型的報錯有:
下面舉幾個添加設備參數的例子:
# 方法一:在auto_setup()接口添加設備 auto_setup(__file__,devices=["Android://127.0.0.1:5037/SJE5T17B17"]) # 方法二:用connect_device()方法連接設備 dev = connect_device("Android://127.0.0.1:5037/SJE5T17B17") # 方法三:用init_device()方法連接設備 init_device(platform="Android",uuid="SJE5T17B17")
以上三種方法任選其一即可,另外這三個接口的詳細使用方法,我們在往期推文 “用1行代碼搞定自動化測試的設備連接問題” 中有詳細介紹,有需要的童鞋可以認真看一下~
對於使用了備選連接參數才可以正常連接上的設備,比如模擬器、MIUI11等,我們也需要在連接設備的字符串后面加上這些連接參數(以 auto_setup
接口為例):
auto_setup(__file__,devices=["Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI"])
3.airtest的截圖文件使用相對路徑時,程序找不到
在AirtestIDE錄制截圖腳本的時候,截圖文件都默認保存在當前腳本的所在路徑下,且截圖腳本上默認填寫的路徑也是相對路徑:
touch(Template(r"tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
程序可以根據這個相對路徑找到截圖文件的原因在於,我們利用 auto_setup(__file__)
初始化腳本的時候,傳入了一個 basedir
(參數值為__file__,即當前腳本所在路徑),程序會默認根據這個 basedir
去尋找腳本中存在的相對路徑。
所以當我們在 pycharm
上新建項目,並把在 AirtestIDE
上跑通的測試腳本復制粘貼過來時,這個 basedir
就變成了 pycharm
新建項目的所在路徑,程序會根據新建項目的所在目錄去尋找截圖腳本中的相對路徑。
因此我們要把腳本中用到的截圖文件,也復制到新建項目的所在目錄下,這樣才可以讓程序根據截圖腳本上的相對路徑正確找到我們的截圖文件。
如果我們沒有一並把截圖文件復制到新建項目的目錄下,就直接運行腳本,會出現 airtest.aircv.error.FileNotExistError: File not exist: tpl1590718697837.png
的報錯:
當然我們也可以選擇把截圖腳本上面的相對路徑,改成絕對路徑,這樣程序也能夠根據絕對路徑找到我們的截圖文件:
touch(Template(r"D:/test/tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
4.在pycharm運行完腳本不知道怎么看airtest的報告
之前我們在使用 AirtestIDE
的時候,運行完腳本以后,我們就可以點擊頂部菜單欄上的查看報告按鈕,幫助我們快捷地生成並打開相應的html報告。
但在 pycharm
執行完腳本以后,就沒有什么快捷按鈕幫助我們生成報告了,所以需要生成報告的童鞋,務必記住在要在腳本中調用生成報告的接口來幫助我們生成報告,以 simple_report()
這個生成報告的接口為例,我們可以使用如下方式生成 airtest
的報告:
# generate html report from airtest.report.report import simple_report simple_report(__file__, logpath=True)
simple_report()
的詳細使用方法可以參考我們的往期推文 “從.air腳本到純.py腳本的距離究竟有多遠” ,里面不僅詳細介紹了 simple_report()
的使用方法,還給我們介紹了腳本初始化接口 auto_setup()
的詳細用法。
① 腳本報錯導致最后的生成報告語句沒有執行
有些童鞋把生成腳本的語句放在了腳本的最后面,希望跑完測試腳本以后,能夠生成一個測試報告。但是有時候程序還沒有運行到生成報告的腳本時就報錯了,導致程序終止運行,最終沒有生成報告。
其實我們是希望不論測試用例能不能執行通過,都可以給我們一個報告反饋,所以我們可以使用 try-finally
語句,無論是否發生異常都將執行最后的代碼:
try: touch(Template(r"tpl1590718697837.png", threshold=0.9, record_pos=(0.378, 0.098), resolution=(1080, 1920))) finally: # generate html report simple_report(__file__, logpath=True)
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b