FSO即文件系统对象(File System Object),在测试工作中有广泛的应有,它可以帮助我们自动生成测试目录,写日志,测试报告等。FSO有对象有很多属性和方法,今天只介绍几个常用的。

创建文件夹及文件

测试过程中需要创建文件的地方很多,比如,可以用FSO对象来构建自动化的整体目录,像下面这个小例子。

 '创建测试目录
Function create_test_dir(filepath)
Set fso=createobject("scripting.filesystemobject")
'若已存在则先在d盘下做个备份,然后删除之
If fso.FolderExists(filepath) Then
'拷贝文件夹并重命名和Linux中的cp命令很像
fso.CopyFolder filepath,"d:" & "\backup" & cstr(year(now))&cstr(month(now))&cstr(day(now)) fso.DeleteFolder filepath
'新建文件夹
Set test_folder=fso.CreateFolder(filepath)
else
Set test_folder=fso.CreateFolder(filepath)
End If
fso.CreateFolder filepath&"\FrameAction"
fso.CreateFolder filepath&"\FrameUntilityFunction"
fso.CreateFolder filepath&"\FrameObjectRepository"
fso.CreateFolder filepath&"\TestData"
fso.CreateTextFile filepath&"\TestData\Utility.xls"
fso.CreateFolder filepath&"\TestScript"
fso.CreateFolder filepath&"\TestRecovery"
fso.CreateFolder filepath&"\TestResult"
fso.CreateFolder filepath&"\TestLog"
fso.CreateFolder filepath&"\TestLog\Log1"
End Function create_test_dir("d:\QTPFrame")

获取指定路径下的文件所有文件

刚才通过FSO创建了一个目录,现在把目录内包含的文件全部打印出来

 '输出所有文件
Function get_file_name(root_file_name) Set fso=createobject("scripting.filesystemobject")
Set folder_obj=fso.GetFolder(root_file_name)
Set folders_obj=folder_obj.SubFolders
Set files_obj=folder_obj.Files
For each file_item in files_obj
print "文件"&file_item
Next
For each folder_item in folders_obj
Set child_folder=folder_item.SubFolders
print "文件夹"&folder_item
If child_folder.Count> Then
'递归调用,获取子文件夹
get_file_name folder_item
else
Set files_obj=folder_item.Files
For each file_item in files_obj
print "文件"&file_item
Next
End If
Next End Function get_file_name "D:\QTPFrame"

写文本文件

FSO对文本文件的操作主要有三种模式

  • Forappending:追加模式,在文本末尾继续写入

  • Forreading:读取模式

  • Forwriting:写入模式,会覆盖原来文件内的内容

 Function write_log(file_path)
'追加模式
Const Forappending =
'只读
Const Forreading =
'写入,覆盖原有内容
Const Forwriting = set fso=CreateObject("scripting.filesystemobject")
'如果文件不存在则新建
If fso. FileExists(file_path)Then
set txt=fso.OpenTextFile(file_path,Forappending,true)
else
set txt=fso.CreateTextFile(file_path,true)
End If
'写入字符串,不会自动换行
txt.Write "Hello,qtp"
txt.Write "Hi"
'写入一行空行
txt.WriteBlankLines
txt.WriteLine "How are you!"
txt.WriteLine "Fine thank you"
txt.Close
End Function write_log "D:\QTPFrame\TestLog\log.txt"

读取文本文件

读取文件时需要使用Forreading模式,读取时要注意每读取一次EOF指针会相应的移动。

 Function read_log(file_path)
'只读
Const Forreading =
set fso=CreateObject("scripting.filesystemobject")
'如果文件不存在则新建
If fso. FileExists(file_path)Then
set txt=fso.OpenTextFile(file_path,Forreading,true)
else
msgbox "File doesn't exist!"
End If
print txt.Read()
print txt.ReadLine
print txt.ReadAll
txt.Close
End Function
read_log "D:\QTPFrame\TestLog\log.txt"

测试日志的生成方式

上文简单介绍了文本文件的写入方式,我们在工作中当然不会一个一个的手动去写日志,而是通过改写原有对象方法的方式来进行,我想,这也是大部分自动化同仁采用的方式吧,在这之前我们先做个获取当前时间的函数,一般日志文件的都是以系统时间来命名的。

 function get_date_time(date_flag,time_flag)
Dim current_date_time
Dim yy,mm,dd,hh,min,ss current_date_time=now()
yy=Year(current_date_time)
mm=Month(current_date_time)
If mm< Then
mm=""&mm
End If
dd=Day(current_date_time)
If dd< Then
dd=""&dd
End If
hh=Hour(current_date_time)
If hh< Then
hh=""& hh
End If
min=Minute(current_date_time)
If min< Then
min=""&min
End If
ss=Second(current_date_time)
If ss< Then
ss=""&ss
End If
get_date_time=yy &date_flag&mm&date_flag& dd &" " & hh&time_flag & min&time_flag& ss
end function
msgbox get_date_time("/",":")

好了,现在先来重写WebEdit对象的set方法,使其可以自动的生成日志。

 Function object_set_write_log(obj,val)
obj.Set val
'追加写,w+
Const forappending=
'生成文件系统对象
Set fso = CreateObject("Scripting.FileSystemObject")
'左取8个字符获得日期
log_file_name = left(cstr(get_date_time("",":")),)+ ".txt" log_file_path = "D:\QTPFrame\TestLog"+"\log"+log_file_name
If not fso.FileExists(log_file_path) Then
Set log_file = fso.CreateTextFile(log_file_path, True)
Else
Set log_file = fso.OpenTextFile(log_file_path,ForAppending,True)
End If
'右取8个字符获得时间,写入日志
log_file.WriteLine right(cstr(get_date_time("",":")),)&" "&"INFO [" & obj.getToProperty("micClass")&_
"-" & obj.getToProperty("TestObjName") & "]" & "input: " + val Set log_file=nothing
Set fso=nothing
End Function

这是我们的测试网页,随便写的很简陋(轻喷),新建脚本写入测试代码

 '日志函数演示
'注册自定义函数
RegisterUserFunc "WebEdit","set","object_set_write_log" Browser("web对象演示").Page("web对象演示").WebEdit("用户名").Set "test"
Browser("web对象演示").Page("web对象演示").WebEdit("邮箱").Set "11111@qq.com"

将脚本保存在"D:\QTPFrame\TestScript",获取日期和日志函数放在"D:\QTPFrame\FrameUntilityFunction"目录下,分别命名get_date_time.vbs,object_write_log.vbs,随后设置相对路径和Resources,然后,运行脚本。

QTP中FSO的使用的更多相关文章

  1. 在QTP中使用DOM

    大家对DOM应该都不陌生,它在网页制作中有广泛的应用.如果我们想在QTP中使用DOM模型需要通过Page对象的Object属性来实现.注意,QTP11才有良好的DOM支持操作,这里用百度首页做例子. ...

  2. qtp中vb脚本,经典收藏

    1.在脚本运行过程中屏蔽鼠标键盘输入 SystemUtil.BlockInput ‘开始处 这里是你的脚本 SystemUtil.UnblockInput ’结尾处 ----------------- ...

  3. Qtp中一个或多个ActiveX控件无法显示问题

    今天在使用qtp进行登陆测试的时候,发现了一个问题,现总结归纳如下: [问题] 在测试过程中,一直提醒:一个或多个ActiveX控件无法显示,原因可能是下列其中之一: 如下图所示: [解决办法] 在Q ...

  4. QTP 中对象操作

    1.创建对象(将浏览器设置为一个对象) set oIE=createobject("internetexplorer.application") 2.将浏览器设置为可见的 oIE. ...

  5. QTP中DataTable操作大全

    序曲 假设现在有一个Excel文件:D:\data.xls,里面的具体内容如下:有两个Sheet,第一个叫Login,第二个叫InsertOrder: 当前QTP的Test中有两个Action:Log ...

  6. UFT(QTP)中的Object Repository

    Object Repository 是对象的仓库,UFT所用到的所有界面对象元素都存储在这里,并且也存储了该对象的属性,如对象名称title,对象的位置,对象的属性(button,list....) ...

  7. qtp中type方法的按键常量

    记录键盘操作可以用set和presskey方法,而type方法是不记录的.type方法主要用于输入连接文本字符串和键盘修饰键(组合键),组合键之间用&符号. 如:JavaWindow(&quo ...

  8. 【QTP小技巧】02_QTP中Complete Word 实现(转载)

    相信做过开发或者写过JAVA的朋友都应该对Complete Word这个词语不陌生吧~ 对~~~它就是开发脚本过程中的催化剂 有了它我们就可以不用去死记硬背 有了它我们就不会出现某个代码少一个字母 有 ...

  9. Qtp测试中的密码问题

    Qtp中,一般录制的脚本进行回放的时候就会遇到各种各样的问题,导致回放不能顺利进行,比如这次我在录制一个简单的登陆脚本的时候,就遇到了这样的问题: [遇到问题] 1,  录制好的脚本中的密码不能正常输 ...

随机推荐

  1. Android开发--推送

    需要的知识点:Notification.Service 第三方开源框架 : android-async-http-master 推送的来源:android项目中,有时会有这样一种需求:客户每隔一段时间 ...

  2. dnw for linux: Ubuntu下可用,无需编译驱动,mini2440可用

    1.安装所需库文件 sudo apt-get install libusb-dev 2.源代码如下 /* dnw2 linux main file. This depends on libusb. * ...

  3. hadoop-0.20-集群搭建___实体机通过SSH访问基于VM安装的Linux

    不得不说LZ在最开始搭建hadoop的时候,由于VM中的网段配置和本地IP地址没有配置好, 所以一直都在使用 VM的共享文件夹的功能, 以至于集群搭建好之后,只有namenode主机可以实现共享的功能 ...

  4. [总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  5. UITableViewCell 添加长按手势

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self actio ...

  6. 关于ASIHTTPRequest连续请求,并发连续,间隔时间很小崩溃问题

    在不停的刷新ASIHttpRequest的网络请求时,总是在刷新几次之后,整个app崩溃掉.我的app使用的ARC模式,以为可以自动释放到request的请求.经过摸索,还是需要在dealloc函数加 ...

  7. java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)

    定义: 定义一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤.这里的算法的结构,可以理解为你根据需求设计出来的业务流程.特定的步骤就是指那些 ...

  8. Excel等外部程序点击链接会带上IE信息的bug

    今天碰到一个问题,在Excel内点击链接到默认浏览器Chrome打开,奇怪的是服务端收到的Session一直对不上. 查了很久发现这个Excel到Chrome的跳转竟然带上了IE的Cookie 和 U ...

  9. php框架练习

    框架的作用: 功能:操作数据库 模版引擎smarty 分析,应该具备什么功能? a:具体配置文件 ,配置文件的读取功能 b:数据库处理类 c:目录结构 先建一个includes文件放入,配置文件(co ...

  10. 用Web Picasa API搭建站内相册

    在flickr时代,为了专门把站内嵌入相册,还专门写了一篇文章把Flickr相册搬回家.flickr被墙之后,我就把个人相册转到了Web Picasa上.用Picasa Web就简单多了,官方提供了S ...