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

页面显示如下:

图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}

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

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

在图2中我们可以得知:

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

2 表中的Symbol(动态变量)


返回

2.1  定义及使用

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

示例3:

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

页面脚本如下:

 !define TEST_SYSTEM {slim}

 !path D:\fitnesseUtil\bin

 |import            |
|fitnesse.slim.test|
|util| |script|Add|1|2.2|
|$result=|calc|
|check|calc|$result| |script|Add|$result|2.2|
|$secondResult=|calc|
|check|calc|$secondResult|
|check|calc|$result|

其中:

  • 第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页面脚本如下:

 !define TEST_SYSTEM {slim}

 !path D:\fitnesseUtil\bin

 |import            |
|fitnesse.slim.test|
|util| |script|Add|1|2.2|
|check|calc|$result| !include .Demo.variableIncludeTest.grandfa |script|Add|1|2.2|
|check|calc|$result|

其中:

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

执行结果如下:

图4 symbol作用域

3 Variable和Symbol的区别


返回

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

示例5:

页面脚本如下:

 !define TEST_SYSTEM {slim}

 !path D:\fitnesseUtil\bin

 |import            |
|fitnesse.slim.test|
|util| |script|Add|1|2.2|
|$result=|calc| !define vResult {$result}
vResult is: ${vResult} |script|Add|1|2.2|
|check|calc|$result|
|check|calc|${vResult}|

其中:

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

执行结果如下:

图5 把Symbol赋值给Variable

fitnesse - Variables and Symbols的更多相关文章

  1. Fitnesse中的symbols和variables

    1.symbols 主要在表间传递信息,作用于一个page中,类似于局部变量 SaveRecordInDatabase name date =key? Bob today bobKey Bill la ...

  2. [转]Whirlwind Tour of ARM Assembly

    ref:http://www.coranac.com/tonc/text/asm.htm 23.1. Introduction Very broadly speaking, you can divid ...

  3. 使用 DML 自定义调试器输出

    调试器标记语言 (DML) 提供了一种机制增强来自调试器和扩展的输出. 与 HTML 类似,调试器的标记支持允许将输出包括显示指令和额外非显示的标记窗体中的信息. 调试器用户界面,WinDbg 等中分 ...

  4. Core Java Volume I — 3.4. Variables

    3.4. VariablesIn Java, every variable has a type. You declare a variable by placing the type first, ...

  5. A brief introduction to per-cpu variables

    墙外通道:http://thinkiii.blogspot.com/2014/05/a-brief-introduction-to-per-cpu.html per-cpu variables are ...

  6. typescript枚举,类型推论,类型兼容性,高级类型,Symbols(学习笔记非干货)

    枚举部分 Enumeration part 使用枚举我们可以定义一些有名字的数字常量. 枚举通过 enum关键字来定义. Using enumerations, we can define some ...

  7. clojure中符号symbols 和变量vars的正确理解

    原地址  http://stackoverflow.com/questions/11662084/why-does-clojure-distinguish-between-symbols-and-va ...

  8. [C++] Variables and Basic Types

    Getting Started compile C++ program source $ g++ -o prog grog1.cc run C++ program $ ./prog The libra ...

  9. Fitnesse批量读取变量信息,并保存到用例执行上下文中

    Fitnesse变量可以分成两种,一种是自定义变量,另一种是用例执行过程中的临时变量. 在Finesse使用过程中,如果需要定义一些公共的变量,可以统一在一个文件中使用自定义变量的方法,将公共变量全部 ...

随机推荐

  1. C#格式符

    在输出字符串时,使用格式说明  使字符串显示适当的格式,比如:货币格式,或者科学计数法.百分比等. 以下是格式化的数字字符串  格式. {index, alignment: format} 例如: ; ...

  2. 《个人-GIT使用方法》

    使用GIT版本控制工具及基本使用方法(安装,新建,推送,拉取),托管平台的使用方法. Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 ...

  3. Linux-tar命令(2)

    tar 用于可以为文件和目录创建档案.可以为某一特定文件打包(备份文件), 也可以在档案中改变文件,或者向档案中加入新的文件. 主选参数: 主选参数仅能存在一个!不可同时存在!因为不可能同时压缩与解压 ...

  4. 【C++小白成长撸】--(续)单偶数N阶魔方矩阵

    1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ...

  5. SGI STL内存配置器存在内存泄漏吗?

    阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...

  6. 新CCIE笔记之'口口相传'路由协议

    //由于思科所有命令行中没有尖括号"<>"这样的关键字,所以本文中出现命令行中的尖括号中的内容均为注释提示信息,代表此处应该填入那一类数据. 请容许我将RIP和EIGR ...

  7. Js函数初学者练习(一)switch-case结构实现计算器。

      前  言 JRedu 给大家介绍一点JS函数的练习题希望初学者多做一些练习能够更好的掌握JS的函数,以及能够提升大家的逻辑思维.(我也是个渣渣希望路过的大神多提建议或意见) 希望能够对大家有所帮助 ...

  8. 事后诸葛亮分析(Beta版本)

    全组讨论的照片 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决代码分析.统计.管理等问题,定义的很清楚,有清晰的描述. 是否有充足的时间来做计划? ...

  9. 【Alpha】Daily Scrum Meeting——Day6

    站立式会议照片 1.本次会议为第五次Meeting会议: 2.本次会议在上午大课间09:40,在禹州楼召开,本次会议为30分钟讨论昨天的任务完成情况以及接下来的任务安排. 燃尽图 每个人的工作分配 成 ...

  10. 201521123044 《Java程序设计》第14周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 友情提示:导图用ctrl+鼠标滚轮放大看更清楚些 2. 书面作业 1. MySQL数据库基本操作 建立数据库, ...