打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何用STAF进行自动化测试分布式运行
userphoto

2013.08.08

关注

  本文的目的在于引导读者去了解STAF及如何调用其接口去实现自动化测试的分布式动行。

  提到分布式运行,很多人想到了Jenkins,Jenkins里面有个node插件,可以去分派任务给slave,Jenkins也有console可以查看运行LOG,但Jenkins存在如下几个问题:

  1.需要事先在node里填写好slave的信息。

  2.需要人为的去指派任务到某个slave上

  3.多个task一起运行时,console信息是混乱的

  4.slave上的报告不好整合

  为了解决以上几点,向大家推荐一款工具STAF(Software Testing Automation Framwork),这款工具可以实现机器与机器间的通信,只要两台机器互相安装好STAF工具后,就可以用代码或控制台来控制另一台slave,这样的操作是不需要用户名与密码的。列举一下STAF的一些特性:

  1.官网及下载地址:http://staf.sourceforge.net/

  2.拥有丰富的Service

  3.支持JAVA与PY语言扩展

  4.我们做分布式一般要用到的Service包括:Ping Service,File System (FS) Service,Process Service,Resource Pool (ResPool) Service

  先来看一下分布式应该如何来规划:

  1.有三台机器(A1,A2,A3)

  2.十个测试脚本要运行(T1,T2,T3,T4,T5,T6,T7,T8,T9,T10)

  3.在配置文件中配置每台机器上最多同时运行3个脚本

  4.运行时应该这样分配:A1(T1,T2,T3),A2(T4,T5,T6),A3(T7,T8,T9),T10等待,如果A1,A2,A3中有任何一个脚本运行完成,T10即填充进去。

  5.每个脚本运行完成后,把每个脚本运行完成后的结果回传给主机(可以配置主机为A1)

  6.在A1中整合成最后的报告

  流程图如下:

  

  架构图:

  

  到这里,我相信大家对整个架构应该有一个了解了,如果你有代码基础,且对此有兴趣的话,请马上动手实现吧。

  下面来讲讲STAF的Service的调用(JAVA语言)

  以Process Service为例,我们打开STAF的user gride且找到Process Service后, 其Description:  

  The PROCESS service is one of the internal STAF services. It provides the following commands

  • START - Starts a process, and optionally registers for process end notification
  • STOP - Stops a process
  • LIST - Retrieves brief information on processes or lists the operational settings for the Process service
  • QUERY - Retrieves detailed information about a process with a specified handle
  • FREE - Releases the results data about a process
  • NOTIFY REGISTER - Registers for process end notification
  • NOTIFY UNREGISTER - Unregisters for process end notification
  • NOTIFY LIST - Displays the list of machines/processes to receive process end notification
  • SET - Sets operational settings for the Process service
  • HELP - Returns syntax information

  Syntax

START [SHELL [<Shell>]] COMMAND <Command> [PARMS <Parms>]  [WORKDIR <Directory>]      [VAR <Variable=Value>]...  [ENV <Variable=Value>]... [USEPROCESSVARS]      [WORKLOAD <Name>]  [TITLE <Title>]  [WAIT [<Number>[s|m|h|d|w]] | ASYNC]      [STOPUSING <Method>]  [STATICHANDLENAME <Name>]      [NEWCONSOLE | SAMECONSOLE]  [FOCUS <Background | Foreground | Minimized>]      [USERNAME <User name> [PASSWORD <Password>]]      [DISABLEDAUTHISERROR | IGNOREDISABLEDAUTH]      [STDIN <File>] [STDOUT <File> | STDOUTAPPEND <File>]      [STDERR <File> | STDERRAPPEND <File> | STDERRTOSTDOUT]      [RETURNSTDOUT] [RETURNSTDERR] [RETURNFILE <File>]...      [NOTIFY ONEND [HANDLE <Handle> | NAME <Name>]  [MACHINE <Machine>]      [PRIORITY <Priority>] [KEY <Key>]]
如何去用呢:
public void runSTAFProcess() {     
        try {
            STAFHandle handle = new STAFHandle("MyApp/Test");
        } catch (STAFException e) {
            System.out.println("Error registering with STAF, RC: " e.rc);
        }
        String service = "PROCESS";
        String request = "START SHELL  COMMAND Ruby test.rb RETURNSTDOUT STDERRTOSTDOUT WAIT";
        try {
            String result = handle.submit("192.168.1.1", service,
                    request);
            STAFMarshallingContext mc = STAFMarshallingContext
                    .unmarshall(result);
            Map mcMap = (Map) mc.getRootObject();          
            handle.unRegister();
        } catch (STAFException e) {
            System.out.println("run process error");
        }      
    }

   从以上代码可以看出,我们在submit时的几个参数,第一个时slave的IP地址,第二个是service名称(在user guide中可以找到),第三个就是我们需要在slave上运行的命令,其格式在user guide中也可以找到,同时我也相信通过上面的示例,懂一些代码的人应该都能够通过syntax而写出来。

  先介绍到这里,希望大家能从中得到启发,有任何问题可进群(254285583)进行咨询,很乐意为大家解答问题。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用Docker开启持续交付之路 | TW洞见
Hudson、Jenkins的node节点设置(分布式处理自动化测试用例)
Jenkins实现分布式构建和测试
使用 CruiseControl 和 STAF 建立复杂环境下的编译和测试自动化
利用 Rational ClearCase 和 STAF 实现自动化脚本的自动更新和编译错误检测
jenkins学习11-通过SSH配置Linux宿主机为slave节点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服