该博文理论支持文章:http://www.cnblogs.com/zhangfei/p/3169139.html

一.准备条件

1.安装STAF.由于其官网被墙了,所以大家可进入WAT群的网盘里去下载对应版本(有32位与64位两个版本)

2.安装完成后,打开STAF\bin下面的STAF.cfg文件,添加信任,把所有安装了staf的机器都添加进去,如下:

3.重启staf .

二.实践

1.下载distribute.rar并解压。http://files.cnblogs.com/zhangfei/distribute.rar

2.打开config/config.xml

<define>结点:定义一些结点变量,以便其它的结点来调用,比如在里面定义一个<ip>192.168.1.1</ip>,如果在下面的<server>结点中要用到,这样写便可以:<server>#{ip}</server>

<threadPoolSize>结点:在程序运行时,会有一个线程池启动,这个结点定义了线程池的大小,比如一共有20个CASE要运行,如果这个结点的值为10,那么在一开始只会有10个CASE进入线程池里去进行分发,其余的等待线程池中有线程结束后,立刻给补上来

<machineMaxThread>结点:定义每台slave最多允许多少个CASE同时运行

<waitToCheckMachineStatus>结点:定义了当有CASE需要申请slave去运行,但此时没有slave空闲,那么就等待结点定义的值的时间再去检查一次是否有slave可用

<server>结点:定义server的IP

<slaves>结点:定义slave的IP,多个slave时,中间用","分隔,比如<slaves>192.168.1.102,192.168.1.103</slaves>

<serverWorkSpace>结点:定义一个server的workspace,便于你从slave把文件或文件夹从slave给拷贝到workspace,该值可以为空

<slaveWorkSpace>结点:定义一个slave的workspace,该值可以为空

<copyFilesFromSlaveToServer>结点:定义从slave拷贝文件到server。其有三个参数可以被用到:SERVERRUNID,SLAVERUNID,ARGS[][],如果有多个文件,可以添加多个file的子结点:

  <copyFilesFromSlaveToServer>
        <file from="" to=""></file>
        <file from="" to=""></file>        
    </copyFilesFromSlaveToServer>

<copyDirsFromSlaveToServer>结点:定义从slave拷贝文件顾问到server。其有三个参数可以被用到:SERVERRUNID,SLAVERUNID,ARGS[][],如果有多个文件夹,可以添加多个dir的子结点

<needRunId>结点:每次运行时,程序都会为该次运行产生一个唯一的run ID,当然这个run ID也可以由用户提供,如果该结点的值为y,则由用户自已提供进去,规定传进去的args[0]为run ID,如果该结点的值为n,则程序会自动的产生一个run ID

<interfaces>结点:该程序为用户提供了五个接口,便于用户自已实现,在其子结点中对应的填上接口的地址名称即可

<command>结点:在slave上要执行的命令,其有三个参数可以被用到:SERVERRUNID,SLAVERUNID,ARGS[][].参数的调用方式:${SERVERRUNID},${ARGS[][0]}

  • SERVERRUNID指每次程序运行时产生的一个唯一的run ID
  • SLAVERUNID指程序运行时,当为case选定机器后,就会在slave上为该case产生一个唯一的ID
  • ARGS[][]是用户运行时提供的参数,在调用时,一定要为ARGS[][数字],第一个[]里要保持为空,否则会不认为其是一个参数

3.接口说明

<inputParameters>接口

  • 用户提供的参数的处理,比如,提供一个参数为:abc,def,mnl,把这一个字符串当成了一个参数提供给程序,但用户的需求是这个字符串以","split下,然后当成三个case的名称给传到程序里面去,对于这种需求,程序提供了该接口让用户自已去处理这个参数
  • 完成该interface:InputParameters

<outputConsole>接口

  • 程序运行时,会有一些输出,这些输出是输出到控制台呢,还是输出到文件里,或者是其它的处理,在这里提供了该接口让用户自已去处理,如果用户不处理,默认是输出到控制台。
  • 完成该interface:OutputConsole

<caseStatus>接口

  • 由于staf只是向slave去发送一个command,command执行完成后,该过程就完成了,所以程序并不知道slave运行的命令是否成功还是失败了,所以提供了该接口让用户去扩展并返回command是运行成功还是失败了,如果不完成该接口,默认值就是为""
  • 完成该interface:CaseResult

<provideParameters>接口

  • 程序在执行的过程中,对case的状态的跟踪,比如在此时,该case是等待执行,还是正在执行,还是已经执行完成,可以通过该接口得到数据,用户也可以通过该接口把值显示出来或者存入数据库都可以
  • 完成该interface:ProvideParameters

<report>接口

  • 程序运行完成后,当把所有的文件或文件夹都给拷贝到server端后,还是没有产生一个总的报告出来,这时候就需要用户根据该接口提供的参数或者拷贝过来的文件来生成一个总的报告。
  • 完成该interface:Report

4.CD到解压缩的文件夹下面,然后可以运行bat文件,也可以根据bat文件里面内容定制出自已命令,从而运行程序。

5.用户在使用的过程中,如有任何疑问,都可以直接和我联系(该程序QQ支持群:254285583)。

STAF进行分布式脚本分发----实践篇的更多相关文章

  1. JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法

    前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...

  2. JMeter学习-028-JMeter默认jmx脚本分发目录(路径)定制

    我们在分布式执行参数化脚本时,为尽可能多的利用Slave资源,尽可能将参数文件配置为相对路径,以更好的去适配Slave环境.与此同时,每台Slave的服务jmeter -s 启动的路径可能不尽相同,同 ...

  3. 分布式任务分发框架Gearman教程和PHP实现实例

    1.Gearman介绍和使用场景 Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相 比,Gearman更偏向于任务分发功能.它的任务分布非常简单,简单得可以只需要用脚本即可完 ...

  4. jemter分布式部署及linux下分布式脚本执行

    jmeter进行接口性能测试,占用内存较大,在模拟千万计并发用户时,使用分布式部署进行分压测试. 操作步骤:选择一台机器作为调度机,其他机器作为执行机 一.jmeter分布式部署 前提条件:A.执行机 ...

  5. 【费元星原创】一键安装Hadoo2.7.6 集群完全分布式脚本-完美解决

    有Bug 欢迎反馈,我不烦:feiyuanxing@gmail.com 1 #!/bin/bash #@author:feiyuanxing [既然笨到家,就要努力到家] #@date:2017-01 ...

  6. shell脚本实现anisble客户端脚本分发和密钥授权配置

    ##############################Deploy ansible client shell######################## echo "start d ...

  7. 【SSH项目实战三】脚本密钥的批量分发与执行

    [SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...

  8. 【SSH项目实战】脚本密钥的批量分发与执行【转】

    [TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...

  9. SaltStack实现动态文件分发,支持脚本换行,中文乱码

    场景:将动态脚本分发到各个机器的指定目录下 说明:使用SaltStack的 file.managed file.managed 里面可以定义内容的几种方式 - source: - contents: ...

随机推荐

  1. Spark的动态资源分配

    跑spark程序的时候,公司服务器需要排队等资源,参考一些设置,之前不知道,跑的很慢,懂得设置之后简直直接起飞. 简单粗暴上设置代码: def conf(self): conf = super(Tbt ...

  2. redis信息相关集群

    转: http://www.runoob.com/redis/redis-install.html //redis的安装与运维相关 http://zhou123.blog.51cto.com/4355 ...

  3. [Canvas]走近的女孩

    动态效果请点此下载文件并使用Chrome或者FireFox浏览器观看. 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> ...

  4. 【转】web.xml不同版本的头

    web.xml v2.3 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web- ...

  5. javascript数组操作大全-原创

    //1.join() 方法用于把数组中的所有元素放入一个字符串,并通过指定的分隔符进行分隔. //语法:stringObject.join(a)这是它的语法 //a指定分隔符的任意字符串 //返回值: ...

  6. ZH奶酪:PHP抓取网页方法总结

    From:http://www.jb51.net/article/24343.htm 在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过ht ...

  7. PHP http_build_query()方法

    http_build_query (PHP 5) http_build_query -- 生成 url-encoded 之后的请求字符串描述 string http_build_query ( arr ...

  8. 在linux下makefile的使用

    在linux下makefile的使用

  9. PetaPoco使用

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <connecti ...

  10. scala 基础语法

    文章内容全部来自:http://twitter.github.io/scala_school/zh_cn/index.html 表达式 scala> 1 + 1 res0: Int = 2 值 ...