搞定Airtest自動化測試的文字識別

2022-01-09 測試工程師小站

Airtest是一款 基於圖像識別原理 的跨平臺UI自動化測試框架,它能夠根據大量的 特徵點 來識別一個截圖在當前畫面中的位置,但是它並不能識別出截圖中具體包含了什麼文字。而在自動化測試的過程中,我們會經常遇到需要進行文字識別的場景,比如 識別驗證碼識別截圖中的文字讀取截圖中的數值 等等,遇到這些情況時我們可以如何處理呢?今天教大家用一款免費的開源圖像OCR文字識別軟體 -- Tesseract-OCR 來處理上述情況。在網上搜索「Tesseract」,我們可以找到很多Tesseract-OCR的下載連結和安裝教程,大家可以選擇其中一個版本下載到本地即可。下載完成後雙擊進入安裝,需要特別注意的是,在選擇安裝的組件時,我們需要把 Additional language data(download) 這一選項勾上,目的是 安裝各個版本的語言包,後續我們就不用手動下載語言包來安裝了。還有一點要注意的是,記住我們選擇的軟體安裝路徑,因為我們需要把這個路徑添加到 系統環境變量 的 path 中:另外一個要新增的環境變量是 TESSDATA_PREFIX ,如下圖所示,未設置在識別過程中會報 Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory 的錯誤:完成以上工作後,我們可以在命令行用 tesseract -v 驗證環境是否配置成功:在本地python環境中安裝pytesseract因為我們最終要在python環境中使用 airtest 和 tesseract ,所以需要在本地的python環境中安裝上 airtest 庫和 pytesseract 庫:
pip install airtest
pip install pytesseract

安裝完畢後可以在命令行輸入 pip list 檢查安裝結果:打開我們的AirtestIDE,在 選項--設置--自定義python.exe路徑 中設置我們剛才安裝好對應庫的python環境:以之前官網提供的 poco demo的界面為例,我們用 airtest 把紅框部分的截圖截取下來,然後再利用 tesseract 把截圖中的文字識別並列印出來:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from airtest.aircv import *
auto_setup(__file__)

from PIL import Image
import pytesseract

# 局部截圖
screen = G.DEVICE.snapshot()
local = aircv.crop_image(screen,(132,58,380,126))

# 保存局部截圖到指定文件夾中
pil_image = cv2_2_pil(local)
pil_image.save("D:/test/score0.png", quality=99, optimize=True)

# 讀取截圖並識別截圖中的文字
image = Image.open(r'D:/test/score0.png')
text = pytesseract.image_to_string(image)
print("-初始數據為----")
print(text)

① G.DEVICE.snapshot(),對當前設備畫面進行截圖並保存在內存中。② crop_image(),局部截圖的方法,需要傳入倆個參數,一個是內存中的截圖,就像這裡的 screen,另一個是截取偏移 [x_min, y_min, x_max ,y_max]。③ Image.open(),用來直接讀取給定路徑指向的圖片④ image_to_string(),用來解析圖片中的文字以下述驗證碼截圖為例,該截圖的保存路徑為 D:/test/7364.jpg :
# 識別驗證碼
image2 = Image.open(r'D:/test/7364.jpg')
text2 = pytesseract.image_to_string(image2)
print("-驗證碼為----")
print(text2)
log("驗證碼為:"+text2)

識別中文的方法和識別數字與英文基本一致,但比較特別的是,我們需要在 image_to_string() 方法中 指定中文的語言參數(示例代碼中指定了簡體中文來識別截圖):

# 識別中文
image3 = Image.open(r'D:/test/3.png')
text3 = pytesseract.image_to_string(image3,lang='chi_sim')
print("-識別出來的文字為:----")
print(text3)
log("識別出來的文字為:"+text3)

相關焦點

  • Windows-UI自動化:如何選擇合適的測試框架
    AirtestProject是由網易遊戲推出的一款自動化測試框架,項目構成如下:Airtest:是一個跨平臺的、基於圖像識別的UI自動化測試框架Poco:是一款基於UI控制項識別的自動化測試框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk來使用。
  • 常用遊戲自動化測試工具
    目前網上搜自動化測試就會出現一大堆自動化測試的內容,但是並不詳細全面,今天就來說一下遊戲測試行業中的常用的遊戲測試自動化工具。一、Airtest的UI自動化測試工具Airtest是一款基於圖像識別和基於poco的UI控制項搜索框架的測試工具,因此會更適合遊戲和APP的測試。
  • Python自動化測試踩坑記錄(企業中如何實施自動化測試)
    作為軟體測試這個行業,在當下,你學好自動化,你去哪面試都不怕。說是這麼說,但是你想提前下班,自動化測試解放勞動力、提高效率,讓程序腳本在不需要看守的情況下「起飛」如果你的代碼、腳本掉到了坑裡,你覺得你還能提前下班嗎?有可能,你甚至不如別人做功能測試的。別人一個功能都測試完好久了,你的自動化腳本報了一堆錯,還不知道找這個錯誤的原因。
  • APP UI自動化測試思路總結
    接下來,一起總結一下APP UI自動化測試的思路吧。一,開發語言選擇通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。
  • ​序|自動化測試概述
    這是Airtest團隊五年以來一直在努力做的事情:通過不斷完善工具鏈來讓用戶以極低的門檻進行自動化測試。無論您是一位初入職場的新人,還是剛開始學習自動化的測試工程師,相信這個教程都可以幫助您理清自動化測試的知識脈絡,掌握自動化測試的學習路徑,以及通過Airtest的實踐教程幫助您完成自動化測試的入門。
  • APP UI自動化測試,思路全總結在這裡了
    首先想要說明一下,APP自動化測試可能很多公司不用,但也是大部分自動化測試工程師、高級測試工程師崗位招聘信息上要求的,所以為了更好的待遇,我們還是需要花時間去掌握的,畢竟誰也不會跟錢過不去。接下來,一起總結一下APP UI自動化測試的思路吧。通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。
  • 測試工程師必須要學會的APP UI 自動化都在這裡了!
    首先想要說明一下,APP自動化測試可能很多公司不用,但也是大部分自動化測試工程師、高級測試工程師崗位招聘信息上要求的,所以為了更好的待遇,我們還是需要花時間去掌握的,畢竟誰也不會跟錢過不去。接下來,一起總結一下APP UI自動化測試的思路吧。通常用於自動化測試的程式語言有:Python、Java、Javascript、Ruby、C#、PHP等。
  • 乾貨 | 一文搞定 pytest 自動化測試框架(一)
    pytest 有以下實用特性:pytest 能夠支持簡單的單元測試和複雜的功能測試;pytest 本身支持單元測試;可以結合 Requests 實現接口測試;結合 Selenium、Appium 實現自動化功能測試;使用 pytest 結合 Allure 集成到 Jenkins 中可以實現持續集成。
  • 自動化測試實操案例詳解 | iOS應用篇
    因為之前很多同學都反饋說,官方教程裡面,絕大多數都是安卓設備的實操,Windows應用和iOS設備的測試實操很少,所以這兩周特意給大家安排上。不過在進入主題之前,我們需要明白,大部分情況下,在iOS上做自動化測試和在安卓設備上做自動化測試的思路是一致的,只有少部分接口會有所不同,比如 有些接口只支持安卓設備,不支持iOS設備 ;另外 有些接口在iOS設備和安卓設備的表現會略微不同 。這些內容我們在下文中都會給同學們詳細講解下。
  • AppUI自動化中的圖像識別的使用
    一,測試框架中的圖像識別      在我們做 App 自動化測試的時候,會發現很多場景下元素沒有 id、content-desc、text 等等屬性,並且有可能也會碰到由於開發採用的是自定義 View,View 中的元素也無法識別到,很多的自動化測試框架對此類場景束手無策。
  • 自動化測試基礎篇:Selenium 框架設計(POM)
    自動化測試框架能夠提供很多便利給用戶高效完成一些事情。unittest支持測試自動化,共享測試用例中的初始化和關閉退出代碼,在unittest中最小單元是test,也就是一個測試用例。要了解unittest單元測試框架,先來了解以下幾個重要的概念。一個測試固件包括兩部分,執行測試代碼之前的準備部分和測試結束之後的清掃代碼。這兩部分一般用函數setUp()和tearDown()表示。
  • 巧用bat文件做Airtest腳本的「批量運行」
    之前我們的教程講過如何使用命令行運行Airtest腳本,實際上 .bat 文件裡面的命令也是靠 cmd.exe 解析執行的,所以我們可以在 .bat 文件中編寫運行airtest腳本的命令,以此來執行airtest腳本。
  • 移動端自動化測試策略
    同時由於開源工具和框架還不夠穩定和豐富,移動端自動化測試面臨了很多新的挑戰:不同的機型,系統版本,解析度,網絡抖動等等,都會影響到自動化測試執行的結果。要想在移動端做好自動化測試,團隊需要制定與其項目相匹配的測試策略與方法。
  • 自動化測試面試題
    你比較熟悉那種自動化測試工具?2. 你在你以前工作中是如何使用自動化測試工具的?3. 介紹一下你在利用自動化測試工具的過程中遇到的一些問題4. 你是如何計劃自動化測試的?5. 自動化測試能提高測試效率嗎?6. 什麼是data-driven automoation(數據啟動自動化)?7. 測試自動化的主要特徵有哪些?8.
  • Python接口自動化之unittest單元測試
    Python接口自動化之requests請求封裝,主要通過源碼分析,總結出一套簡潔的請求類封裝。單元測試三連問方法;比如說在測試用例中需要訪問資料庫,那麼可以在setUp()中建立資料庫連接以及進行一些初始化,在tearDown()中清除在資料庫中產生的數據,然後關閉連接。
  • 前端自動化測試:Jest 測試框架應用
    /math')test('測試加法', () => { expect(add(1,2)).toBe(3)})test('測試減法', () => { expect(subtract(2,1)).toBe(1)}){ "scripts":{ "test":"jest" }}jest
  • 為什麼需要前端自動化測試呢?
    而接入前端自動化測試,可以幫助我們提前暴露bug並修復、降低bug產生的成本/提升測試的覆蓋率,降低對其他功能原有邏輯的幹擾。接下來我們進入正題,向大家介紹前端自動化測試前端自動化測試的種類共四類:單元測試單元測試是最基礎的自動化測試,用來檢測項目當中的最小可測單元,例如工具函數、基礎組件等集成測試在單元測試的基礎上,不同功能集成在一起,驗證整體功能ui測試並不是只對ui設計效果的驗證
  • Python辦公自動化:手把手教你如何批量在PDF文件中添加文字和圖片
    課題:多頁PDF文件,在固定位置添加文字和圖片,效果如下:測試文檔放到了S盤以下位置:S:\All\QMW Community Sharing\數位化探索\python 自動化辦公課程筆記\實例4 PDF添加文字和圖片###############################如何利用Python批量的給PDF文件添加文字和圖片呢
  • Python自動化測試框架,誰才是你的唯一?
    Python得天獨厚的優勢造就了一系列測試框架,在這些測試框架面前,孰優孰劣?具體該如何選擇?俗話說 「沒有最好的,只有最合適的」,今天我們就Python當前使用較為頻繁的4大主流自動化測試框架, 來一回比拼,從中挑選最為合適你當前項目需求的那一款。
  • Web 自動化神器 TestCafe—用例編寫篇
    使用 TestCafe 編寫測試用例,必須要先使用 fixture 聲明一個測試夾具,然後在這個測試夾具下編寫測試用例,在一個編寫測試用例的 js 或 ts 文件中,可以聲明多個測試夾具import 'testcafe'fixture `登錄功能測試`上面是官方文檔中的