基於pywinauto的Windows GUI自動化測試實踐(1)


摘要:自動化的任務並不僅僅局限於某一平台或某一端,當然,不可否認的是,基於Web的B/S系統自動化成本相對較低,當然,這個低也僅僅是相對於自動化而言的。自動化從來就不是一個省錢的工具

 

一、從B/S到C/S

  在web端,我們有完整的一套開源工具——Selenium,輔以Java、Python甚至是Ruby都能夠很好的完成自動化測試任務,體系也相對成熟,即使對於中小企業而言,組建一個小型的自動化測試團隊,也能在一定程度上確保企業級B/S服務系統的質量。即使不用Selenium,也有茫茫多工具供君選擇,何其樂哉。公司的Web自動化測試已經走過了八個年頭,從QTP轉到Selenium,至今,Selenium也早已邁入了3.0時代,從Selenium 到Selenium Grid 再到Data Driven乃至跨瀏覽器,跨平台,過渡的總不會那么生硬。但是到了Client,一切似乎都要重新開始。

二、Windows平台的工具選擇

  AutoIT、Pywinauto也算是碩果僅存的兩個Windows平台自動化測試工具了吧, AutoIt,不用多說,如果你想要更多了解的話,請點擊這里 。這里主要來看Pywinauto的測試實踐。

  相對Selenium的多語言支持,只能用python的pywinauto顯得略微單薄,但也不能過多非議,畢竟人家是pywinauto而不是javawinauto或者rubywinauto什么的。這里照搬官網的簡介:pywinauto is a GUI automation library written in pure Python and well developed for Windows GUI. At its simplest it allows you to send mouse and keyboard actions to dialogs and controls on both Windows and Linux, while more complex text-based actions are supported on Windows only so far (Linux AT-SPI support is under development).

  也就是說,它呢,是使用python編寫的用於GUI自動化測試的開源框架,另外明確的說了,它能夠支持在Windows平台和Linux平台,對客戶端應用進行鼠標和鍵盤輸入、控制等一系列命令。當然,Linux平台還是在開發中,盡管個人覺得發布的可能性趨近於tan90°。 言歸正傳,在對pywinauto的探索中,pywinauto是作為輔助作用的,也就是說,在web端進行一系列操作之后,要利用pywinauto得到客戶端的狀態信息,用來驗證操作的正確性。

  例如,一個產品包括web端和Windows客戶端,為用戶提供遠程軟件管理功能。大概是下面這個樣子:

 

那么,當我們選擇在web端在線安裝應用,服務器會向本地客戶端發送命令,客戶端從第三方下載並控制本機自動安裝所選項目,在這一過程中,數據從web端流轉到客戶端,自然的,在驗證的過程中需要確定客戶端的接受和執行情況以及最終的web端的安裝狀態正確與否。因此,在web端和第三方平台,我們可以選擇用Selenium進行自動化測試,而對於客戶端,我們只能選擇pywinauto這類GUI自動化測試工具。

三、Java和Python的數據交互

  在web端,我們采用的是Selenium+Java的方式,因而在python和java的交互和相互調用上會有一點點麻煩,在這里,我們用jython這個包來實現,在pom文件中加入以下內容即可:

1     <dependency>
2         <groupId>org.python</groupId>
3         <artifactId>jython</artifactId>
4         <version>2.5.3</version>
5     </dependency>

我們首先創建一個最簡單的python來測試交互的可用性:

1 def adder(a, b):  
2     return a + b  

接下來,在Java代碼中調用這個Python方法:

 1 package jqi.JavaAndPython.Intergration;
 2 
 3 import org.python.core.PyFunction;
 4 import org.python.core.PyInteger;
 5 import org.python.core.PyObject;
 6 import org.python.util.PythonInterpreter;
 7 
 8 public class JAndPUnify {
 9     public static void main(String[] args){
10         PythonInterpreter interpreter = new PythonInterpreter();  
11         interpreter.execfile("C:\\Users\\jqi\\Desktop\\AEMUI\\input.py"); 
12         PyFunction func = (PyFunction)interpreter.get("adder",PyFunction.class);  
13           
14         int a = 2010, b = 2 ;  
15         PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));  
16         System.out.println("anwser = " + pyobj.toString());  
17     }
18 }
JAndPUnify

運行Java程序即可看到:

anwser = 2012

說明我們成功調用了python腳本。那么數據的流向和方式的問題就解決了,接下來所要做的只是針對client編寫python腳本。

 


免責聲明!

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



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