fitnesse - Variables and Symbols

fitnesse - Variables and Symbols

2017-09-30

目录

1 Variables(静态变量)
  1.1 定义及使用
  1.2 Variable作用域
    1.2.1 Variable在层次结构中的作用域
    1.2.2 include对Variable作用域的影响
2 表中的Symbol(动态变量)
  2.1  定义及使用
  2.2 Symbol的作用域
3 Variable和Symbol的区别

1 Variables(静态变量)


 返回

1.1 定义及使用

Variables初始化有三种方式:

  • !define VariableName {VariableValue} - 把大括号内的文本赋值给变量
  • !define VariableName ${OtherVariableName} - 把另一个变量赋值给变量
  • !define VariableName {${= 10 / 2 =}} - 通过表达式赋值给变量

Variables使用:

${VariableName}

示例1

页面脚本如下:

!define markedUp {This is '''bold'''}
${markedUp} is expressed as: This is bold

!define y {y-value}
!define x {The value of y is ${y}}
${x} is expressed as: The value of y is y-value

!define n {10}
!define q {2} 
!define d {${=${n}/${q}=}}
${d} is : 5

!define q {5} 
${d} is : 2
View Code

页面显示如下:

图1 示例1展示结果

1.2 Variable作用域

1.2.1 Variable在层次结构中的作用域

当Variable在页面中被调用,但当前页面没有,fitnesse会去依次去父页面寻找,若祖先页面也没找到,fitnesse会去System.properties寻找

示例:

http://ip:port/ HelloWorld

http://ip:port/ HelloWorld.HelloWorld1

http://ip:port/ HelloWorld.HelloWorld2

  • 假设HelloWorld定义了静态变量!define name {tom}, HelloWorld1和HelloWorld2不用再次定义name变量,直接调用${name},就变量name的值为tom
  • 假设HelloWorld定义了静态变量!define name {tom}, HelloWorld1又重新定义了变量!define name {jack},当HelloWorld1调用${name}后,变量name的值为jack,但不会影响HelloWorld2(HelloWorld2中name的值仍然是tom)

1.2.2 include对Variable作用域的影响 

当变量在included page中时:

  • 如果你把子页面include到主页面,那么你既可以使用主页面定义的变量,也可以用子页面定义的变量。
  • 如果修改子页面的变量,那么主页面使用的变量也会修改。

示例2:

层次结构下:

Contents:

其中:

  • grandfa页面定义变量: !define grandfaMoney {100}
  • relative页面定义变量:!define relativeMoney {150}
  • father页面定义变量:!define relativeMoney {150}
  • mother页面定义变量:!define motherMoney {50}
  • son页面定义变量:!define sonMoney {10}

把其他页面include到father页面,来测试在不同关系中各个变量的使用范围,页面脚本如下:

!define fatherMoney {80}

grandfaMoney is: ${grandfaMoney}
relativeMoney is: ${relativeMoney}
fatherMoney is: ${fatherMoney}
motherMoney is: ${motherMoney}
sonMoney is: ${sonMoney}

!include .Demo.variableIncludeTest.relative
!include .Demo.variableIncludeTest.grandfa.mother
!include .Demo.variableIncludeTest.grandfa.father.son

grandfaMoney is: ${grandfaMoney}
relativeMoney is: ${relativeMoney}
fatherMoney is: ${fatherMoney}
motherMoney is: ${motherMoney}
sonMoney is: ${sonMoney}
View Code

页面保存后展示如下图所示:

图2 include变量作用域展示结果

在图2中我们可以得知:

  • 未include前,我们可以使用主页面定义的变量和父节点或祖先(直系)页面定义的变量
  • include的页面定义的变量,include后都能使用

2 表中的Symbol(动态变量)


 返回

2.1  定义及使用

Symbol是在表中定义(赋值)和使用的

示例3:

源代码见 fitnesse - 一个简单的例子(slim)

页面脚本如下:

 1 !define TEST_SYSTEM {slim}
 2 
 3 !path D:\fitnesseUtil\bin
 4 
 5 |import            |
 6 |fitnesse.slim.test|
 7 |util|
 8 
 9 |script|Add|1|2.2|
10 |$result=|calc|
11 |check|calc|$result|
12 
13 |script|Add|$result|2.2|
14 |$secondResult=|calc|
15 |check|calc|$secondResult|
16 |check|calc|$result|
View Code

其中:

  • 第10行:$result= 表示声明并将返回的值赋值给声明的Symbol,从下图3可以看到 $result<-[3.2]
  • 第11行:$result 表示使用变量result,从下图3可以看到 $result->[3.2]

执行结果:

图3 symbol(动态变量)的定义和使用

 

2.2 Symbol的作用域

Symbol作用域:

  • Symbol定义的当前页面。从图3我们可以看到result定义后,可以跨表使用。
  • 不是当前页面定义,在父节点页面定义,未在当前页面定义,不能使用,如下示例4。
  • include symbol定义页面后可以使用,如下示例4。

示例4:

Contents:

grandfa页面脚本如示例3。father页面脚本如下:

 1 !define TEST_SYSTEM {slim}
 2 
 3 !path D:\fitnesseUtil\bin
 4 
 5 |import            |
 6 |fitnesse.slim.test|
 7 |util|
 8 
 9 |script|Add|1|2.2|
10 |check|calc|$result|
11 
12 !include .Demo.variableIncludeTest.grandfa
13 
14 |script|Add|1|2.2|
15 |check|calc|$result|
View Code

其中:

  • 第10行:$result使用result,但由于在当前页面没有定义,所以没有被slim替换,还是$result,如下图4所示。
  • 第15行:$result使用result,在这段脚本前,已经include father页面,在father页面定义了result,所以没有被slim替换,还是$result,如下图4所示。

执行结果如下:

图4 symbol作用域

3 Variable和Symbol的区别


 返回

  • Variable的值在页面提交(页面保存)的时候,测试执行前就已经计算了。所以当父节点或祖先(直系)页面定义后,子节点页面可以使用。
  • Symbol只存在在执行时

示例5:

页面脚本如下:

 1 !define TEST_SYSTEM {slim}
 2 
 3 !path D:\fitnesseUtil\bin
 4 
 5 |import            |
 6 |fitnesse.slim.test|
 7 |util|
 8 
 9 |script|Add|1|2.2|
10 |$result=|calc|
11 
12 !define vResult {$result}
13 vResult is: ${vResult}
14 
15 |script|Add|1|2.2|
16 |check|calc|$result|
17 |check|calc|${vResult}|
View Code

其中:

  • 第12行: !define vResult {$result} 把Symbol result 赋值给 Variable vResult
  • 第13行:调用${vResult},见图5,执行前执行后,它的值都是$result
  • 第17行:调用${vResult},见图5,vResult的值$result,$result执行时被slim识别是symbol,执行时被替换

执行结果如下:

图5 把Symbol赋值给Variable

 

posted @ 2017-10-09 16:09  明-Ming  阅读(690)  评论(0编辑  收藏  举报