应用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