工作中,如果我們能夠將批處理使用的爐火純青的話,對於效率的提升作用是非常明顯的。今天,我們從日常工作的角度來給大家分享一些例項。

一、執行測試指令碼

在完成一些Case編寫後,為了比較方便的迴歸執行,我們一般會編寫一個批處理指令碼來完成指令碼的啟動執行。

如果僅僅在我們自己的機器上執行的話,我們直接將路徑寫死就可以了,比如說…\runtest.exe -vl2 -xo –e …\script.txt

但是如果Case的執行會分佈到多臺機器上執行,這時就要考慮整個執行過程的實現了。可以發現,關鍵的地方就是獲取測試框架路徑,而一般測試框架會將自己的路徑新增到註冊項中,於是我們只要能夠從登錄檔中獲取到測試框架路徑,問題就解決了。

如何使用批處理讀取登錄檔的路徑呢?使用reg命令…

第一步,獲取reg query的結果,輸出到temp.txt中備用

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\runtest.exe"/ve > temp.txt

第二步,使用for命令,截取出最後的路徑

for/f "skip=1 tokens=1,2,*"%i in(temp.txt) do set x=%~dpk

此處批處理的含義,分割temp.txt中的每一行,將第一項賦給%i,第二項賦給%j,其餘項賦給%k,再使用~dp將%k變數的絕對路徑目錄獲取到。

關鍵點解決了,剩下的就是批處理的拼裝了。

看下拼裝後的程式碼:


PS:由於reg命令在Windows XP SP1版本存在bug,如果採用上面的方法存在問題,我們可以使用Python指令碼輔助解決。增加Python指令碼輔助後,批處理如下:


其中Python指令碼實現的過程,就是讀取登錄檔值並輸出。

二、檢查防火牆例外

在對產品安裝解除安裝進行測試時,有時會測試產品是不是能夠正常新增到防火牆例外中,於是就有了驗證點,在防火牆例外中是不是包含了程式exe。調研後發現,防火牆例外可以通過兩種簡單的方式來驗證,一種是登錄檔項,一種是批處理。

但存在一種情況是登錄檔中沒有但防火牆中產品已經處於例外了···這時我們可以使用批處理進行處理。

首先,產品安裝前,先確保防火牆例外中不包含相應產品,批處理實現如下:

netsh firewall delete allowedprogram "test.exe"

也就是將例外中的test.exe刪除掉,確保系統環境的乾淨度。

安裝產品,檢查防火牆例外中是否包含了相應產品,批處理實現如下:

netsh firewall show allowedprogram

上面的命令,可以輸出所有的例外中的程式,我們可以再通過程式exe名稱來過濾,看是否包含在了例外中。這樣我們就可以封裝一個函式,來判斷是否已經在例外中了。

使用一段時間後,會發現win7下有時會存在問題。發現win7下防火牆有了升級版本netsh advfirewall,於是有了win7上的批處理命令:

netsh advfirewall firewall show rule name="test.exe"

重新封裝函式後,程式碼如下:

三、結語

以上是對工作中的兩個場景做了總結分享,批處理或者windows命令在很多地方都可以提高我們的工作效率,諸如:regedit開啟登錄檔,services.msc開啟服務管理,mstsc開啟遠端連線,control開啟控制面板等等,當然我們也可以使用一些批處理指令碼來協助我們的日常工作,諸如清理系統垃圾、bat實現打包部署、bat實現一些服務的重啟等等操作。

在工作中,我們要有意識的將工作中的一些事情指令碼化,提升工作效率。

-----------------------------------------------------------------------

歡迎回復內容到搜狗測試”公眾號,與我們一起分享你的那些關注點。