STAF进行分布式脚本分发----实践篇
该博文理论支持文章:http://www.cnblogs.com/zhangfei/p/3169139.html
一.准备条件
1.安装STAF.由于其官网被墙了,所以大家可进入WAT群的网盘里去下载对应版本(有32位与64位两个版本)
2.安装完成后,打开STAF\bin下面的STAF.cfg文件,添加信任,把所有安装了staf的机器都添加进去,如下:
3.重启staf .
二.实践
1.下载distribute.rar并解压。https://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)。
百度阅读电子书地址:http://yuedu.baidu.com/ebook/f6dbb2a2f01dc281e53af0f3
讨论QQ群:536192476
个人公众号:
![](http://files.cnblogs.com/files/zhangfei/%E6%B5%8B%E8%AF%95%E5%BC%80%E5%8F%91%E6%B1%9F%E6%B9%96.bmp)