软件自动化测试框架STAF

软件自动化测试框架STAF

一、什么是STAF
STAF(Software Testing Automation Framework)是一个由IBM开发的开源、跨平台、支持多语言且基于可重用的组件来构建的自动化测试框架,而这一系列的组件都是一些可以处理调用、资源管理、监视等一些列的服务组成,后面将会介绍这些概念。STAF框架为自动化测试建立了基础,在高层解决方案提供一种可插拨的机制,支持多种平台与多种语言。

二、我们真的需要这个框架么
当然,我不是一个推销员,也更不肯能是。但是,我想说的是,单从软件产品测试的角度来看,产品的平台兼容性是一个不可忽视的问题。对于Windows平台上,软件产品需要能够完美的兼容早期的Win98、WinNT系统,还得兼容表现优秀的WinXP、Windows Server系统,更要支持用户群扩大的Win7。 如果产品做的好,甚至还需要兼容Linux、Mac OS。注意了,其实对于每种系统还可以继续分为32位系统与64位系统,而每次产品在Release之前都需要在在上述各个平台上测试N遍。如果纯手工的测试,那么在投入的人力、设备、以及时间成本上是很惊人的,那么一种自动化测试需求便应运而生了,而STAF便是满足这种需求的一种框架。

三、怎么运用STAF来解决我们的需求
那么,你可能会疑问,STAF框架怎么解决上述这个问题的呢?一种合理的解决方案是,一般公司都会有一些性能配置优越的服务器(暂且称为Lab机器),而我们工作人员一般的机器性能都仅仅满足我们的日常工作(暂且称为Office机器),做一些日常的开发和文档处理绰绰有余,但是同时开多台虚拟机跑测试的话,估计机器也就卡的半死不活了,到时候我们只能大眼瞪小眼了,而逐个平台的测试的话,时间却又是我们所不能接受的。所以我们可以将跑测试的工作交由处理能力很强的Lab机器,而我们测试人员的Office机器需要做的则是告诉Lab机器需要做什么,然后Lab机器在执行完测试任务后会将测试结果返回到Office机器上。
在上述的描述中,Office机器与Lab机器都必须装有STAF,需要指出的是,各个装有STAF环境的机器之间的关系是对等的(Peer to Peer),也就是没有服务器与客户端区别。Office机器端上的STAF可以通过与Lab机器上的STAF进行通信,从而调用Lab机器上STAF提供的各种服务(例如可以要求Lab机器启动NotePad这个进程或者调用某个测试脚本程序)。为了方便大家理解,可以参考下图进行理解: \
软件自动化测试框架STAF_第1张图片

                              图中一些概念下文会做详细讲解

四、理解STAF中的一些概念
1、STAFProc进程
STAFProc进程这个概念很重要,在上图中就是STAF Daemo进程(守护进程)。熟悉Linux或者Java的朋友可能对于守护进程这个概念不陌生,守护进程一般是一些运行在后台,进程级别很低的进程,且生命周期一般很长,主要监视系统的一些状态并在适当的时机做出一些操作。如JVM(Java虚拟机)中的垃圾回收器进程,则是运行在虚拟机里面的守护进程,其随着JVM启动而存在,不断的检测是否存在可回收的内存资源,并在适当的时候进行垃圾内存的回收。而在STAF中,也存在这种类型的进程,它就是STAFProc进程,这种进程一般随着系统启动就开始运行,不断的监听来自其他对等断点STAF的请求,并在收到请求后调用相应的服务加载器(ServiceLoader)来加载相应的服务,如调用STAF中的Process服务来启动一个本地进程。
2、STAF服务(Service)
STAF是基于服务来构建自动化框架的,每个服务就是STAF的可重用组件,其通过STAFProc分派来的任务来实现其”人生价值”。在STAF中主要分为两种类型的服务,一种是内部服务(Internal Service),一种为外部服务(External Service)。
那么,上述两种服务有什么区别呢?内部服务的话则一般被集成到STAFProc,一般都是一些比较基本而常用的服务;而外部服务则是需要动态载入,其可执行码不在STAFProc中,一般都在外部Jar中或者外部DLL库中。其实,这个对于Java熟悉的朋友比较好理解,我们Java程序JdK装完后可以使用的那些包(Package)就相当于内部服务,而当我们需要进行一些特殊开发的时候,往往需要引入一些第三方库(如开发蓝牙服务的BlueCover.jar),这些就好比外部服务。
3、内部服务
有如下常见内部服务:

服务名称:作用
DELAY:可以使得服务得到延迟一段时间。应用场景:在执行一个耗费时间的任务时候,在进行下一步操作前,需要延迟等待一段时间
PROCESS:可以启动、停止或者查询进程,如执行一个指定的测试脚本程序等
PING:通过该服务检测远程或者本地机器是够通讯的上
SERVICE:该服务可以列出机器上可以使用的服务
SHUTDOWN:该服务用来关闭STAFProc进程,好处在于通过该命令关闭STAFProc,可以释放进程的所占用的资源
FILE SYSTEM:该服务提供网络之间的文件拷贝服务,例如从本机拷贝一些文件到目标测试机上

4、外部服务
外部服务一般需要到STAF官网去下载服务组件包(网址为http://staf.sourceforge.net/),一般服务组件包下完后还需要一些配置,这个在下篇文章会以STAX为例介绍,先列出一些常用的外部服务 :

服务名称: 作用
STAX : 一个基于XML的执行引擎,在XML中定义测试工作流,可以实现并行执行、嵌套测试用例、控制运行时间等,STAX支持Java 和 Python 模块
ResPool :用于日志的记录和查看
Monitor:提供查看、创建、删除等针对资源池的管理或操作
Zip:提供压缩与解压

5、服务请求格式
STAF的服务组件之间通过发送STAF请求(Request)完成各类工作,一个STAF请求格式一般为:STAF Command+EndPoint+Service Name+Request Content四个组成部分(注意将加号换成空格)。其中,STAF Command就是STAF ; EndPoint部分可以是远程机器IP或者Localhost ; Service Name则是Endpoint端机器上STAF环境中的服务名称(这个可以通过STAF命令来查看,如查看本机STAF环境中的服务列表,可以通过STAF Local Service List命令查看); Request Content则是请求的内容,举几个例子方便大家理解:
1)请求IP地址为10.3.1.160机器中的STAF的Process服务执行关机的命令:

STAF 10.3.1.160 process start command shutdown -s -t 60 (不同部分用颜色区分开了)

备注:对于关机这类具有一定Destructive的操作,我们有时执行上述命令会失败。这是因为在STAF中有安全等级制度,总共分为5个安全等级,在后面会具体讲到。这时候,我们可能需要在10.3.1.160这台机器的STAF环境中修改下其配置文件,将本地机器或者所在网段的受信任等级提升,并重启服务,在后面的STAF安全机制会提到。

2)测试IP地址为10.3.1.145的机器中的STAF服务是否存活(Alive)

STAF 10.3.1.145 PING PING

备注:该命令主要是向远程机器的PING服务提交内容为PING的Request,如果对方机器中的STAF环境是存活的话,则本机STAF端回接受到回应,在本机表现为命令行回显:

       Resonse

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

       PONG

看到上述命令,就知道对方机器的STAF环境已经是准备就绪的了。在此,提醒初学者要区分直接在命令行中运用Ping命令和上述命令,不要傻乎乎的打开Cmd然后输入Ping 10.3.1.145,要知道,此Ping非彼Ping也。
6、STAF实例

在同一个操作系统中,其实我们可以同时运行多个STAF实例,而STAF实例名则成为了每个STAF实例的标示。默认的实例名为STAF,当然我们也可以修改实例名,通过设置环境变量STAF/Config/InstanceName可以改变实例名称(STAF中的环境变量在下面会讲述)。

7、STAF中句柄

STAF中的句柄是个唯一的标识,在提交STAF的Request的时候,一般以句柄为颗粒单位提交。一般句柄标识是结合了STAF的实例名和对应进程的部分唯一标识构成。

8、 STAF中的变量

在STAF启动之后,其实在内存中就存在一些STAF变量,这些变量主要用来存储一些配置信息、运行时信息以及系统环境信息。由于这些都是加载在内存中的,所以对这些STAF变量的更改会立即生效而无需重启服务。我们可以通过命令STAF Local Var List命令查看本地STAF启动后有哪些变量。

从官方开放的文档中,还可以看出STAF有变量池的概念,主要分为下列三种变量池:
1)会维持一个系统(System)变量池(Pool),在这个变量池中的所有变量对于所有的句柄都是可以访问且共用的(可以使用命令STAF Local Var List System命令查看)
2)同时STAF中存在变量共享池(Shared Pool),除了具有系统变量的特征之外,共享池中的变量可以跨网络共享,即本机可以使用远程机器STAF环境中的共享变量池中的变量(可以使用命令STAF Local Var List Shared查看)
3)除了上述两种变量,STAF中的每个句柄也拥有自己的变量池,这其中的变量都是私有的:
查看某个句柄变量池中的变量命令:STAF Local Var List Handle 1
备注:注意这儿的1是句柄的标识ID,可以通过命令STAF Local Handle List查看各个句柄对应的标识ID
9、STAF中的安全机制

STAF基本概念
Software Testing Automation Framework 软件测试自动化框架。用以提升测试用例和测试环境的可重用性以及自动化的程度。STAF 为测试人员提供了一个端到端的自动化测试解决方案。

官网:http://staf.sourceforge.net

各个装有staf环境的机器是对等的(Peer to Peer),一个端可直接调用另一个端提供的服务。采用P2P架构,没有服务端,客户端之分,任何一台机器都可以向其它机器发送请求。可以利用STAF的这种特性实现分布式执行的功能。

STAFProc进程
STAF本身是一个后台程序STAFProc,不断监听来自其他对等端点的STAF请求。

STAF服务
STAF所有功能都是通过服务实现的
主要有两种类型的服务:内部服务(Internal Service),外部服务(External Service)。每种服务都可以处理多种请求,每种请求都有安全级别限制
内部服务:开启staf这些服务就可以工作了。一般被集成到STAFProc,一般都是一些比较基本常用的服务。
外部服务:不是staf基本服务,必须将服务注册到staf才可以使用。需要动态载入,可执行代码不在STAFProc中,一般都在jar中或者外部dll库中。

名称 属性 作用
DELAY 内部服务 延时服务,可以提供延时
DIAG 内部服务 可以记录一些诊断信息
ECHO 内部服务 与PING服务相似,但是可以指定返回值
FILE 内部服务 文件服务,可以在不同机器见实现文件创建、查询、拷贝、删除等操作
HANDLE 内部服务 句柄服务,可以创建静态句柄,可以删除句柄
HELP 内部服务 帮助服务,可以列出很多帮助信息
LIFECYCLE 内部服务 可以在STAF启动或者关闭时触发某些事件的发生
MISC 内部服务 提供一些杂项信息,如STAF版本,系统基本信息
PING 内部服务 判断两台机器是否连通
PROCESS 内部服务 开启系统进程
QUEUE 内部服务 处理handle中的消息队列
SEM 内部服务 信号量服务
SERVICE 内部服务 可以查询STAF中所有的服务,可以动态注册或者注销外部服务
SHUTDOWN 内部服务 关闭STAF
TRACE 内部服务 可以跟踪请求提交过程,方便信息查询
TRUST 内部服务 信任等级服务,在机器间设置不同的信任等级
VAR 内部服务 变量服务,处理STAF中的变量
LOG 外部服务 日志服务,可以记录、查询日志信息
MONITOR 外部服务 监测服务,监测STAF执行状态
RESPOOL 外部服务 资源池服务,可以提供资源
ZIP 外部服务 提供ZIP格式的压缩包,压缩、解压缩
CRON 外部服务 可以触发一个事件周期发生
EMAIL 外部服务 可以发送邮件
EVENT 外部服务 注册触发事件,当触发事件发生时可以有响应事件
EVENTMANAGER 外部服务 注册响应事件,当触发事件发生时,执行响应事件
FSEXT 外部服务 增强的FS服务
FTP 外部服务 可以处理FTP相关请求
HTTP 外部服务 可以处理HTTP相关请求
NAMEDCOUNTER 外部服务 提供了计数器功能
NAMESPACE 外部服务 提供了命名控件功能
SXE 外部服务 可以将所有STAF指令写在文件中,然后顺序执行
TIMER 外部服务 提供了定时器动能
STAX 外部服务 STAF上的一个执行引擎

STAF服务请求格式
STAF < Service>
远程机器的IP或者localhost。表示向哪台机器发送请求
Endpoint端机器上STAF环境中的服务名称。表示向哪个服务发送请求
请求的内容。

STAF命令举例
查看本机STAF环境中的服务列表 STAF Local Service List
软件自动化测试框架STAF_第2张图片

测试IP地址为192.168.0.2的机器的STAF服务是否存活,存活的话显示如下图
STAF 192.168.0.2 PING PING
这里写图片描述

查看目标机器文件夹是否存在
staf qa2-pri.server.163.org fs query entry /home/qatest/PerformanceTest
复制脚本到目标机器
staf local fs copy file /home/qatest/testscript.py todirectory /home/qatest/ tomachine qa2-pri.server.163.org
目标机器执行对应shell命令操作
staf qa2-pri.server.163.org process start shell command mkdir testdir1 workdir /home/qatest
更详细的命令使用可以参考
http://staf.sourceforge.net/current/STAFUG.htm#HDROVERVIEW

各种编程语言调用STAF格式(Python为例)
1)向STAF注册一个handle,以后所有请求都使用这个handle
handle = STAFHandle(“My Application”)
2)利用这个handle发送请求,并且处理返回结果
result = handle.sumit(“192.168.0.2”,”ping”,”ping”)
3)所有请求结果处理完,最后要注销handle
handle.unregister()
staf提交请求时必须注册一个句柄,请求完成后要注销掉这个句柄
STAF支持以下语言:C C++ Rexx JAVA Perl Python Tcl,程序中可以规定请求使用同一个句柄

STAF安全级别
每种请求都有安全级别的限制,只有你达到这种安全级别才能发送这种请求。
分为六级,级别0-5,0最低,5最高
内部测试环境,方便起见,信任级别可以都设置成5
设置某机器信任级别的方法:
修改staf/bin目录下文件staf.cfg:trust machine 192.168.0.2 level 5

STAF在linux下安装配置
Linux下的STAF有两种安装模式,一种是直接下载bin包进行安装,另一种则是下载tar包进行安装。
(1)修改安装配置文件installer.properties,其中几项需要修改:
USER_INSTALL_DIR=/home/qatest/staf 安装路径
USE_PERL_VERSION=5.10 目标机器的perl版本
USE_PYTHON_VERSION=2.6 目标机器的python版本
STAF_INSTANCE_NAME=STAF-APP67 目标机器名
(2)执行安装 ./STAF3410-setup-linux-amd64.bin -f installer.properties
(3)修改STAF安装目录staf/bin目录下的STAF.cfg文件,配置机器间的信任关系

Set default local trust

trust machine local://local level 5
trust machine 10.2.5.101 level 5
(4)配置环境变量
PATH=/home/qatest/staf/bin: PATH:LDLIBRARYPATH=/home/qatest/staf/lib: {LD_LIBRARY_PATH:-}
CLASSPATH=/home/qatest/staf/lib/JSTAF.jar:/home/qatest/staf/samples/demo/STAFDemo.jar:${CLASSPATH:-}
STAFCONVDIR=/home/qatest/staf/codepage
(5)启动STAFProc
./staf/bin/ STAFProc &
(6)确定STAF已经安装正确
staf local service list

你可能感兴趣的:(软件自动化测试框架STAF)