1. 前言
上次給大家介紹了AirtestIDE創建.py腳本並運行、生成報告,不過如果是要工程化的將自動化運用到項目中,還是要脫離AirtestIDE的,比如通過Pycharm編寫腳本,通過命令行運行自動化、生成報告。
本文將詳細講述脫離AirtestIDE跑腳本的方式和注意事項,感興趣的同學可以認真閱讀下述內容哦!
2. 使用Pycharm跑自動化腳本
這裏以常見的Python編輯器,pychram爲例,詳細講述該如何使用這款編輯器編寫/運行自動化腳本。1)環境部署
我們在pycharm新建項目之後,就需要爲該項目設置Python解釋器;pycharm支持我們直接設置本地安裝好的Python作爲解釋器,也支持使用虛擬Python環境作爲解釋器。
這2者的差別是,如果我們直接設置本地安裝好的Python作爲解釋器,那麼本地Python安裝的所有第三方庫都會導入進來爲這個pycharm項目所使用:
但如果我們是新建了一個虛擬環境的話,則是基於本地的某個Python解釋器,複製了一個不帶任何第三方包的乾淨的Python虛擬環境,意思是已經安裝到這個本地Python解釋器中的所有第三方包都不會複製過來:
這也是很多同學剛開始使用pycharm的時候,明明在本地Python環境已經安裝好了需要的第三方庫,到了pycharm卻仍舊找不到第三方庫的原因。(需要注意是否是因爲使用了虛擬環境)
那在pycharm安裝第三方庫的方式,就非常簡單了,在項目使用的Python解釋器裏,點擊右側的+
號,輸入想要添加的包名,然後點擊 安裝包
按鈕即可:
環境部署好之後,我們就可以着手在pycharm編寫/運行腳本了。
以 直接從AirtestIDE複製腳本到pycharm運行 爲例,我們詳細瞭解下有哪些內容我們需要特別注意下的:
2)log保存
首先是腳本運行的log內容保存,我們在AirtestIDE編寫和運行腳本,沒有考慮過這個問題,是因爲AirtestIDE會自動幫我們保存腳本運行的log內容,默認路徑是 選項--設置--Airtest--默認Log存放路徑
裏設置的路徑:
把代碼複製到pycharm運行時,如需保存log內容(爲後續生成測試報告做準備),我們就需要手動添加上這塊的內容:
# 在auto_setup接口裏設置logdir,用於保存log內容
# logdir可以傳入具體的log保存路徑,或者是True,傳入True表示在當前項目目錄下生成log內容
auto_setup(__file__,logdir=True)
log內容往往包含一些報告所需的步驟截圖和一個 log.txt
文件。
3)設備連接
第二個常見的問題,就是在AirtestIDE裏,只要設備連接窗口已經連接上指定設備,我們在.air
腳本中無需額外處理,運行.air
腳本時,就會自動連接設備窗口的當前設備來跑腳本。
而pycharm顯然不會幫我們處理設備連接的工作,所以我們需要在腳本中連接上待測設備:
# 在auto_setup接口傳入devices參數
auto_setup(__file__,logdir=True,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
當然,我們還有非常多的接口可以用於連接我們各種待測設備。
擴展閱讀:Airtest API精講之設備連接管理API集合
4)圖片路徑
在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)))
5)文件引用路徑
很多同學會在自己的自動化腳本里面,調用一些公共腳本,可能是.air
腳本,也可能是.py
腳本等。
假設我們有如下幾個腳本,各腳本的存放關係如下:
如果我們要在 song.air
腳本里面,調用 common.air
腳本 和 im_ex.py
腳本,可以這麼編寫腳本:
其中,調用 .air
腳本,我們可以使用Airtest提供的專用接口 using
;調用 .py
腳本,就與標準Python無異,直接 from ... import ...
即可。
但當我們在pycharm中打開 song.air
並且運行之後,會發現在AirtestIDE可以運行的腳本,到pycharm就找不到模塊了:
我們可以通過 手工添加 sys.path
的方式 ,讓pycharm能找到 common.air
腳本:
6)報告生成
最後一個需要注意的內容就是報告生成啦,在AirtestIDE運行完.air
腳本之後,我們可以直接點擊 查看報告
按鈕,迅速生成並且打開HTML格式的測試報告。
但pycharm並沒有這個功能,所以我們需要生成Airtest報告的話,只能在腳本中編寫生成測試報告的語句:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.report.report import simple_report
auto_setup(__file__,logdir=True,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
touch(Template(r"tpl1638243250870.png", record_pos=(-0.362, 0.13), resolution=(810, 1440)))
simple_report(__file__,logpath=True)
有些童鞋把生成報告的語句放在了腳本的最後面,希望跑完測試腳本以後,能夠生成一個測試報告。但是有時候程序還沒有運行到生成報告的腳本時就報錯了,導致程序終止運行,最終沒有生成報告。
其實我們是希望不論測試用例能不能執行通過,都可以給我們一個報告反饋,所以我們可以使用 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報告,有很多注意事項:
- 報告生成語句要放在具體腳本的後面,防止未運行具體步驟就生成了空的測試報告當腳本中包含poco或者airtest-selenium語句時,需添加對應的報告插件
plugins
- 需要生成測試報告,就必須保存log內容,因爲報告的生成依賴於log內容
- 如需將報告發送給別人查看,需要在生成報告的語句中添加導出參數,只有導出報告才能發送給別人查看