應用batch語言,寫成**.bat檔案,對于自動化測試是比較有幫助的。
batch語言,相對比較簡單,明了。
今天整理下以前曾經用到的類似的batch語句。
1.ping www.baidu.com > a.txt 将ping baidu的網址儲存到目前路徑的a.txt中。
ping 127.0.0.1 -t > b.txt 保持一直ping ip,這樣對于在自動化測試中的排查漏是有幫助的。
ping -30 127.0.0.1 >nul 等待30s
2.call
從一個批程式中調用另一個批程式,而不會引起第一個批處理的中止。
call test.bat
當運作至此,調用test.bat
3. :: pause goto : %意義
:: 注釋指令,在批處理腳本中和rem指令等效。
pause 它的作用,是讓目前程式程序暫停一下,并顯示一行資訊:請按任意鍵繼續…
goto是個跳轉指令,直接跳轉到goto 後的操作
:是一個标簽
% 這個百分号嚴格來說是算不上指令的,它隻是批進行中的參數而已。
4.if 語句
(1)輸入判斷
if “%1”==”” goto usage 如果參數為空(無參數),則跳轉到 usage;
if “%1”==”/?” goto usage 如果參數為/?或 help 時(大家一般看一個指令的幫助,是不是輸入的/?或 help 呢,這裡這麼做隻是為了讓這個腳本看起來更像一個真正的程式),也跳轉到 usage。
if “%1”==”help” goto usage 如果參數為help時候,則跳轉到usage
(2)存在判斷
if exist C:\Program\Tencent**.gif del C:\Progra~1\Tencent\AD*.gif
如果存在那些gif,就删除這些檔案。
if exist %RemoteParam% (
copy %RemoteParam% %LocalParam%
)
如果存在該檔案,那麼就将檔案copy到LocalParam路徑.
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
if [not] exist [路徑]檔案名 待執行的指令
5.管道指令
|、>、>>
|指令的作用,就是讓前一指令的輸出當做後一指令的輸入。
“ > “、”>> ”這兩個指令的效果從本質上來說都是一樣的,他們都是輸出重定向指令,說的通俗一點,就是把前面指令的輸出寫入到一個檔案中。這兩個指令的唯一差別是,
“>”會清除掉原有檔案中的内容後把新的内容寫入原檔案,而>>隻會另起一行追加新的内容到原檔案中,而不會改動其中的原有内容。
eg:
echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat
得到 a.bat如下:
@echo off > a.bat
echo This is a pipeline command example. >> a.bat
echo It is very easy? >> a.bat
echo Believe your self! >> a.bat
pause >> a.bat
exit >> a.bat
<、>&、<&
這三個指令也是管道指令,但它們一般不常用。
<,輸入重定向指令,從檔案中讀入指令輸入,而不是從鍵盤中讀入。
&,将一個句柄的輸出寫入到另一個句柄的輸入中。
<&,剛好和>&相反,從一個句柄讀取輸入并将其寫入到另一個句柄輸出中。
&、&&、||
&這可以說是最簡單的一個組合指令了,它的作用是用來連接配接 n 個 DOS 指令,并把這些指令按順序執行,而不管是否有指令執行失敗。
copy a.txt b.txt /y & del a.txt
其實這句和 move a.txt b.txt 的效果是一樣的,隻不過前者是分了兩步來進行的。
@echo off
if exist d:\f.txt copy d:\f.txt c:\f.txt
||
這個指令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執行多條指令時,當遇到一個執行正确的指令就退出此指令組合,不再繼續執行下面的指令。
dir 到某個目錄下:
dir /b | find “LOG” > loglist.txt
6.title設定cmd視窗的标題
title 新标題 #可以看到cmd視窗的标題欄變了
title “This is a test”
7.set設定變量
引用變量可在變量名前後加 % ,即 %變量名%
set #顯示目前所有可用的變量,包括系統變量和自定義的變量
echo %SystemDrive% #顯示系統盤盤符。系統變量可以直接引用
set p #顯示所有以p開頭的變量,要是一個也沒有就設errorlevel=1
set p=aa1bb1aa2bb2 #設定變量p,并指派為 = 後面的字元串,即aa1bb1aa2bb2
echo %p% #顯示變量p代表的字元串,即aa1bb1aa2bb2
echo %p:~6% #顯示變量p中第6個字元以後的所有字元,即aa2bb2
echo %p:~6,3% #顯示第6個字元以後的3個字元,即aa2
echo %p:~0,3% #顯示前3個字元,即aa1
echo %p:~-2% #顯示最後面的2個字元,即b2
echo %p:~0,-2% #顯示除了最後2個字元以外的其它字元,即aa1bb1aa2b
echo %p:aa=c% #用c替換變量p中所有的aa,即顯示c1bb1c2bb2
echo %p:aa=% #将變量p中的所有aa字元串置換為空,即顯示1bb12bb2
echo %p:*bb=c% #第一個bb及其之前的所有字元被替換為c,即顯示c1aa2bb2
set p=%p:*bb=c% #設定變量p,指派為 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #設定p為數值型變量,值為39
set /a p=39/10 #支援運算符,有小數時用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a 參數時,在 = 後面的變量可以不加%直接引用set /a p=”1&0” #”與”運算,要加引号。
set/?
set p= #取消p變量
set /p p=請輸入螢幕上顯示”請輸入”,并會将輸入的字元串指派給變量p注意這條可以用來取代 choice 指令
注意變量在 if 和 for 的複合語句裡是一次性全部替換的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p% )
結果将顯示aaaaaa因為在讀取 if 語句時已經将所有 %p% 替換為aaa這裡的”替換”,在 /? 幫助裡就是指”擴充”、”環境變量擴充”可以啟用”延緩環境變量擴充”,用 ! 來引用變量,即 !變量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaaif %p%==aaa (
echo %p%
set p=bbb
echo !p! )
ENDLOCAL
結果将顯示aaabbb
還有幾個動态變量,運作 set 看不到
%CD% #代表目前目錄的字元串
%DATE% #目前日期
%TIME% #目前時間
%RANDOM% #随機整數,介于0~32767
%ERRORLEVEL% #目前ERRORLEVEL 值
%CMDEXTVERSION% #目前指令處理器擴充名版本号
%CMDCMDLINE% #調用指令處理器的原始指令行可以用echo指令檢視每個變量值,如 echo %time%注意 %time%
8.start指令
start批進行中調用外部程式的指令,否則等外部程式完成後才繼續執行剩下的指令。
start explorer d:\調用圖形界面打開D盤
@echo offcd /d %~dp0regedit /s 勁舞團.regstart patcher.exe
不加 start 指令的話,”勁舞團”運作時,後面會有個黑乎乎的cmd視窗
eg:
cd directory
start Product Registration.exe
9.ren檔案重命名
ren 1.txt 2.bak #把 1.txt 更名為 2.bak
ren .txt .ini #把目前目錄裡所有.txt檔案改成.ini檔案
ren d:\temp tmp #支援對檔案夾的重命名
10 . dir 到某個目錄下:
dir /d | find “LOG” > loglist.txt
示例:使用batch語言,寫出的bat檔案,完成自動化測試的某些操作。
@echo on
title "Automation test"
REM:*************Copy config file from server********
set RemoteFile=F:\Project_docs\trigger.txt
set LocalFile=G:\trigger.txt
#如果存在,則copy到本地目錄
if exist %RemoteFile% copy %RemoteFile% %LocalFile%
if ERRORLEVEL EXIT
ping -n .. >null #等待時間
del F:\Project_docs\trigger.txt #删除已經被download的trigger file
REM:***************change load************
ping -n .. >null
cd /d C:\Software**\Jenkins_part
call DownSWload.bat #調用Download.bat
ping -n .. >null
REM:****************do autotest****************
cd /d C:\Software***\bin
compli.exe -f test.tc #執行test case
REM:**********Copy result to jenkins server*****
ping -n .. >null
cd /d C:\Software\Jenkins_part
call copy_Result.bat #調用copy result的bat file