因项目自动测试需要,实现方案想到了用bat解决,所以初步尝试bat脚本测试。
(对bat脚本一窍不通,通过网上找知识点,慢慢学起来用。花了一些时间,书到用时方恨少就是此次的心情,还是要抓紧啃知识)
本次脚本想要实现的功能:
运行bat脚本,bat脚本能实现链接设备(adb),并执行monkeyrunner自动化测试。
要求:
1.一直循环测试,测试次数暂时没做限制
2.每次运行monkeyrunner命令时,能再重新打开一个新的窗口,然后新窗口的命令执行结束,才会打开另一个新窗口进行测试
3.把脚本的运行log保存下来,作为测试数据
测试准备:
1.monkeyrunner环境
2.创建一个test.py的py文件
脚本内容如下:
importtime importos
forninrange(5): print("This time is "+ str(n) +"times.") f ="F:\\test20200325.txt" f = open(f,'a') f.write( time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) +"This time is "+ str(n) +"times."+'\n') f.close() time.sleep(1.0) |
本次的bat脚本有两种版本:
1.不限循环次数的版本
2.有限循环次数的版本
不限循环次数的版本,命名为Infiniteloop.bat
该bat功能描述:运行该bat脚本后会
记录开始测试时间到txt文件内,执行monkeyrunner命令时是新打开的窗口执行完后关闭,延时两秒后会再打开一个新的窗口再进行新一轮的执行。一直循环。
@echo off :NOCONNECTED echo %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% >> F:\test20200325.txt start /w cmd /c monkeyrunner E:\exercise\test.py choice /t 2 /d y /n >nul goto NOCONNECTED pause |
有限循环次数的版本,命名为:Finitecycle.bat
该bat功能描述:
@echo off echo %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% >> F:\test20200325.txt for /l %%c in (1 1 10) do ( start /w cmd /c monkeyrunner E:\exercise\test.py choice /t 2 /d y /n >nul echo this is %%c times ) |
写这个脚本中遇到的问题记录:
1.“@”符号:该符号的作用是让执行窗口中不显示它后面这一行的命令本身
2.“>>”
3.echo为回显,反馈的意思。它其实是一个开关命令,及两种状态:打开/关闭
echo on:打开回显,运行bat时,echo on本身,及后面的命令都会显示在命令窗口上
echo off:关闭回显,所以运行bat时,在命令行窗口看不到后面执行的命令。如果加上@,则连“echo off”本身也不会回显,像本次bat脚本开头写的“@echo off”
还有就是可以直接编辑文本文件,这个功能暂时没用到。
4.:(标签)和goto(跳转)
5.因为想要bat脚本实现当要执行monkeyrunner命令时,能重新打开一个窗口,并等这个新开的窗口中的命令执行完了,再执行下一次的循环。也因为真的不懂bat脚本知识,所以网上找了很久。边找边测试,算是有点眉目了。
以下几个是在这个找的过程中,经过试出来的实际现象与网上写的现象不一致或者完全相反的,先记录一下。因为手上还有任务要完成,这些放着后面再慢慢研究吧(希望是一周内)
cmd /k start:
试了一下的实际效果为:命令会打开新窗口,新窗口执行完后不会关闭,旧的窗口的执行命令就退出来了(窗口未关闭);
cmd /c start:
试了一下的实际效果为:命令会打开新窗口,新窗口执行完不会关闭,旧的窗口的执行命令也会继续执行下去,然后会有新的窗口一直冒出来
2020.03.30更新笔记:
使用“cmd /c monkeyrunner E:\exercise\test.py”测试了一下无限循环的,原来的窗口不会关闭,会一直循环下去
去掉无限循环,只执行一次,窗口执行完就关闭
于是我这么理解的,无限循环的版本下,如果每执行一次窗口被关闭,本来就一个窗口,肯定不能关闭。于是用有限次数的循环验证了以下,确实是等循环次数走完了再关闭窗口的
start cmd /c:
试了一下的实际效果为:窗口执行完一轮,就停止了
2020.03.30更新笔记:
无限循环的前提下,每一轮循环都会新打开一个窗口(并不是新窗口的命令执行完才打开下一个窗口,新打开的窗口相互独立执行),执行完关闭新窗口
只执行一次的前提下,新旧窗口执行完各自关闭
start cmd /k:
试了一下的实际效果为:窗口会执行完一轮又一轮,不会跳出新窗口,命令也不会停止执行
2020.03.30更新笔记:
无限循环的前提下,每一轮循环都会新打开一个窗口(并不是新窗口的命令执行完才打开下一个窗口,新打开的窗口相互独立执行),执行完关闭新窗口
只执行一次的前提下,新窗口执行完退出命令行不关闭,旧窗口执行完关闭
start
/w cmd /c:
这个就是本次写的,新的窗口执行完关闭了,才会打开新的一个窗口执行
6.echo时间格式
本次写的脚本中,输出的时间语句是“echo %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% ”为什么是这样写呢?
怪我真的菜,所以找了一篇博文:https://blog.csdn.net/cateatapple/article/details/51984718,这篇文章写的挺清楚的。
2020.03.30更新:
1.我是搬运工,找到了一篇对bat常用知识点归纳得还不错的文章:
第一篇:bat常用命令教程
第二篇:Bat详细手册
对某个命令不清楚用法时,可以打开cmd窗口查询,第二篇文章有讲到
2.对于上次更新的第五点,花了一些功夫验证:
cmd /c:执行字符串指定的命令然后终止
cmd /k:执行字符串指定的命令但保留
start:启动单独的“命令提示符”窗口来运行制定程序或命令,执行完退出命令行,不关闭窗口,但原本的窗口会关闭
start /b:启动应用程序,但不创建新窗口。即在原本的窗口执行程序
start /w:打开一个新窗口等待某个程序执行完毕
所以:
start cmd:表示打开一个新窗口,对新窗口做的动作
cmd start:表示打开一个新窗口,对旧窗口做的动作。如start /w cmd /c表示打开一个新窗口等新窗口执行完后自动关闭,再打开另一个新的窗口