STAF全称是Software Testing Automation Framework,如其官网(http://staf.sourceforge.net/)所说,STAF是一个开源、跨平台、支持多语言的自动化测试框架,它围绕于组件重用的理念,通过服务调用(比如Process Service、Resource Manage Service、Logging Service、Monitoring Service等)帮助我们省去繁琐的跨平台的自动化框架的建设工作,而我们只需集中精力在自身自动化实施上。
简而言之,STAF就是一个在不同机器、不同的操作系统之间提供一个沟通通讯的平台。STAF利用其开源的优势,经历了最近几年的发展,已经越来越成熟,其具有以下特点:
1. 简单易用,可快速搭建一个跨平台自动化测试环境。
2. 开源,易于扩展,用户可以方便的在STAF中创建一个新的服务。
3. 环境要求低。支持多种平台多种操作系统。
4. 支持多种语言,可以在Java,Linux Shell , C/C++,Python,Perl等各种语言中调用
一、原理
假设我们有2台机器 A和B,A是主控机,如下图所示:
由上图可以看出,机器A和B都安装了STAF,并且相互配置了信任关系。那么用户就可以通过在机器A上调用STAF的Service 来实现与机器B的相互通讯。如传输文件、操作机器B等等。所以,STAF的作用实际上就是提供机器之间的通信通道并提供基于这个通道的基础服务。
二、多层封装概念
通过上面的介绍,我们了解了STAF是一个可重用并对各种应用提供广泛支持的基础框架。于是,就有了根据不同应用产生的不同封装。比如我们构造了一个复杂的分布式测试环境,我们可以单独通过STAF将我们的测试任务分发到不同的测试环境去执行,但如果测试任务太多,并且是不断添加新的任务的进来,单独依靠STAF就不利于测试任务的执行、管理与维护了。从而也就引入STAX的概念。如下图所示:
由上图可以看出,机器A安装了STAF/STAX,那么用户可以把一批STAF Service调用通过XML格式写在一个文档里,然后由STAX调用这个文档并翻译成STAF Service通过STAF传递给机器B执行。
另外,在实际测试中,有些工作光靠STAF是完不成的。我们往往需要利用一些工具来完成自动化测试。如Robot。这就需要提供一个自动化测试工具与STAF框架之间的接口。SAFS(Software Automation Framework Support)就是干这个的。在SAFS里,引入了关键字驱动(keyword-driven)和数据驱动(Data-Driven)的概念。通俗点说,SAFS就是为了给第三方软件提供支持,将一些常用动作(Action)进行封装。并提供对大量数据操作的接口。如下图:
目前基于SAFS的成熟应用接口是RRAFS(Rational Robot Automation Framework Support)。现在已经支持下列第三方软件:
IBM Rational Robot
IBM Rational Functional Tester
SAFS Image-Based Testing
Mercury Interactive WinRunner
三、服务(Services)
1. 服务(Services)概念:STAF是基于服务(Services)来构建自动化框架的,服务就是STAF的可重用组件,服务还是一系列功能的集合。 STAF是一个后台程序,在STAF中使用的所有组件都是服务,STAF提供轻量级分发机制,负责将请求转发给这些服务。
STAF中服务分两种:Internal (内部服务)和 External(外部服务)。内部服务被集成进 STAFProc,提供一些关键性的功能,比如数据管理与同步,外部服务则由 STAFProc 动态装入,通过共享库(shared libraries)来访问。
2. STAF 常见服务列表:
2.1 Delay Service: 内部服务,在调用的程序传递返回值前等待一个指定的时间
2.2 Diagnostics (DIAG) Service :内部服务,用于记录或者列出诊断数据
2.3 Echo Service :内部服务,提供类似于Ping服务的功能,不同的是Echo允许返回指定的字符
2.4 File System (FS) Service :内部服务,可以对文件进行复制、删除、查看等操作
2.5 Log Service :外部服务,用于日志的记录和查看
2.6 Monitor Service :外部服务,提供运行监控功能
2.7 Ping Service :内部服务,用来检测远程STAF是否在运行
2.8 Process Service :内部服务,用来调用外部程序,如调用windows 命令 CMD/NOTEPAD等。
2.9 Resource Pool (ResPool) Service :外部服务,提供查看、创建、删除等针对资源池的管理或操作
2.10 Semaphore (SEM) Service :内部服务,提供mutex和event信号操作
2.11 Zip Service :外部服务,提供压缩与解压操作
STAF基础用法及简单配置
1. 基础用法
STAF [-verbose] <Endpoint> <Service> <Request>
-verbose 指定输出采用verbose模式,verbose是一种数据结构
<Endpoint> 操作对象IP。指定目标STAF系统,由STAFProc解析以便确定是在本地处理还是发送到远端STAF系统。本机的话可直接写local。
<Service> 指定要调用的服务
<Request> 调用服务的所需的参数
STAF的返回值:当服务处理结束将返回两类数据,一是表示服务处理结果的返回码既服务是成功还是失败,二是该服务返回的特定数据。
2. STAF的简单安装配置
我们假设有2台机器,机器A是windows机器,IP是10.2.5.100,机器B是Linux机器,IP是10.2.5.101
1. 安装包下载
从http://staf.sourceforge.net/getcurrent.php 下载所需安装包,有Windows、Linux、Solaris、Mac等不同平台不同的版本的安装包。如果机器上未安装JDK,可以下载含JDK的安装包。
2. Windows 下的安装
2.1 在windows平台上,双击STAF的安装包,按照提示进行安装即可.
2.2 修改STAF安装目录/STAF/bin中的STAF.cfg文件,配置机器间的信任关系。把Linux机器的IP配置进config文件。如下:
-
# Set default local trust
-
trust machine local://local level 5
-
trust machine 10.2.5.101 level 5
2.3 重新启动STAFProc
2.4 在CMD下键入下列命令来确认STAF已经安装正确:
staf local service list
3. Linux 下的安装
注意,有的Linux版本需要先安装C库,否则STAF起不来。参考下载地址:
http://rpm.pbone.net/index.php3/stat/4/idpl/2790009/com/libstdc++-3.4.5-2.i386.rpm.html
Linux下的STAF有两种安装模式,一种是直接下载bin包进行安装,另一种则是下载tar包进行安装,以tar包安装为例:
3.1. 解压安装包:
tar xzvf STAF331-linux.tar.gz
3.2 解压后会出现一个STAF文件夹,进入该文件夹
./STAFInst
进行安装,默认会被安装到/usr/local/staf下
3.3 配置环境变量,将下列代码加入到要运行STAF的用户名目录下.bash_profile文件里:
-
PATH=/usr/local/staf/bin:$PATH
-
export PATH
-
LD_LIBRARY_PATH=/usr/local/staf/lib
-
export LD_LIBRARY_PATH
-
CLASSPATH=/usr/local/staf/lib/JSTAF.jar:/usr/local/staf/samples/demo/STAFDemo.jar
-
export CLASSPATH
-
STAFCONVDIR=/usr/local/staf/codepage
-
export STAFCONVDIR
-
STAFCODEPAGE=LATIN_1
-
export STAFCODEPAGE
3.4 修改STAF安装目录/usr/local/staf/bin目录下的STAF.cfg文件,配置机器间的信任关系。把Windows机器的IP配置进config文件
-
# Set default local trust
-
trust machine local://local level 5
-
trust machine 10.2.5.100 level 5
3.5 启动STAFProc
守护进程启动STAFProc输出log到stafproc.out nohup /usr/local/staf/bin/STAFProc > /usr/local/staf/stafproc.out
3.6 确认STAF已经安装正确:
staf local service list
4. 测试机器A、B的STAF是否配置成功
在机器B上输入如下命令,执行后机器B则会启动记事本:
STAF 10.2.5.100 PROCESS START COMMAND notepad