FitNesse:变量赋值和简单算术
Posted
技术标签:
【中文标题】FitNesse:变量赋值和简单算术【英文标题】:FitNesse: Variable assignment and simple arithmetic 【发布时间】:2017-06-28 08:51:15 【问题描述】:根据user guide,可以为变量赋值,然后执行简单的算术运算。
想象一下,我设计了一个夹具,用于获取页面上的一个元素并将数值提取为 Double(我现在使用 HSAC Slim BrowserTest 夹具和我自己的代码来执行此操作)
|script |numbers extraction |
|$testval1=|numeric value of |element1 | |
|$testval2=|numeric value of |element2 | |
运行它会给我类似的东西:
|script |numbers extraction |
|$testval1<-[20.04]|numeric value of |element1 ->[€ 20,04] | |
|$testval2<-[5.1] |numeric value of |element2 ->[€ 5,1] | |
现在说我想将两个双精度数的总和与第三个元素的数值进行比较:
|script|numbers extraction |
|check |numeric value of |element3|=$ $testval1 + $testval2 =|
无论我在最后一个单元格中使用哪种括号和美元符号组合,我总是得到“无效的表达式”。
$= $testval1 + $testval2 = 无效表达式:$testval1 + $testval2 $=$testval1 + $testval2 = 无效表达式:$testval1 + $testval2 $=$testval1 + $testval2 = [无效表达式:未定义变量:testval1 + 未定义变量:testval2] $= !-$testval1-! + !-$testval2-! = 无效表达式:$testval1 + $testval2 $= !-$testval1-! + !-$testval2-! = 无效表达式:$testval1 + $testval2运行最后一行(testval1 和 testval2 周围没有括号)返回:
|check|numeric value of|element3 ->[€ 25.14]| [25.14] expected [invalid expression: $testval1->[20.04] + $testval2->[5.1]] |
【问题讨论】:
【参考方案1】:不幸的是,您不能做您正在寻找的东西。您分配元素值的变量实际上是SLIM symbols,而不是wiki 级别的变量。如果您在问题中链接到的用户指南页面上向下滚动一点,您会发现一个名为“变量和 SLIM 符号之间的差异”的部分:
变量在渲染时评估,在测试执行之前。这允许根据页面层次结构和其他纯粹作为测试输入的内容来设置值。 符号仅在执行时存在。它们可以在运行时更改,因此与不能更改的变量不同。
我发现 FitNesse/SLIM 中的三种类型的变量让人们感到困惑,它们的不同用法、语法和可能性会导致很多问题。我的理解是:
-
Markup variables(又名 wiki 变量)。例如
$myVar
,使用!define
定义。它们在页面渲染时得到它们的值,所以甚至在测试开始之前,所以当你浏览一个 wiki 页面时你会看到它们的值,并且只有在页面的源代码中你才能看到它是一个变量。这些可以在markup expressions 中使用,这就是您在问题中尝试做的事情。
Scenario 参数。例如@myVar
(或@myVar
),定义在SLIM 场景表的第一行。这些是场景的“形式参数”,它们根据场景的调用获得实际值(即场景的每次使用,无论是来自脚本表、其他场景还是决策表中的行都定义了它们的值)。在执行第一个操作之前,它们在测试开始时获得它们的值。当您查看定义它的场景表时,您会看到该变量。 (当你使用hsac-fitnesse-plugin定义的'table template'表类型时(包含在hsac-fitnesse-fixtures项目基线中)你不需要在表的第一行定义变量名,它们会被自动找到基于它们在表格中的出现(例如@myVar
)。)
SLIM symbols。例如$myVar
,它们的值是使用$myVar=
分配的。这些是在测试执行期间获得其值的“运行时变量”,它们对于测试套件是全局的,并且它们的值可能在测试执行期间被更改。这些是唯一可以从“被测系统”获得的属性中获取其值的变量,它们是您在问题表中使用的变量。 它们实际上是对 SLIM 过程中的对象的引用,因此夹具可能会更改变量所引用的对象的内部状态,而不会在变量的 wiki 表示中显示这种更改(这只是对象的 toString() 结果上次分配的时间)。
附:当您使用 hsac-fitnesse-fixtures 时,将字符串转换为 double 不需要自定义夹具(如您的 numbers extraction
)。您可以只使用库的string fixture 的convert to double
方法。
【讨论】:
谢谢,现在我知道发生了什么,我在 Fitnesse 邮件列表上找到了一个旧线程,解释了为什么不能在表达式中使用符号 (fitnesse.996250.n3.nabble.com/…)。 自定义夹具只是必需的,因为输入包含比所需的双精度多(带有本地化十进制分隔符)。 哦,还有几种有效的输入格式,处理起来很麻烦,只用正则表达式。无论如何,String 夹具中的正则表达式功能很酷!【参考方案2】:你好像是用浏览器测试的,这是我安装的HSAC吗?请在问题中提及这一点,因为 HSAC 是 FitNesse 的固定装置。
无论如何,删除大括号应该可以解决问题。使用大括号,它需要一个全局变量,那些使用 !define var foo
实现的变量
当使用本地定义的变量时,例如|$bar=|value of|foo|
,必须在测试中使用不带大括号的变量调用。
|$bar=|value of|foo|
|enter|$bar|as|inputField|
在此处查找有关 HSAC 使用的更多信息:https://github.com/fhoeben/hsac-fitnesse-fixtures/wiki/2.-Slim-Fixtures
旁注:
然后还有使用@var
或@var
的表格模板,其中@var
的使用是首选,因为@var
将查找列var
和@var
将接受列v
或@ 987654332@,如果你碰巧实现了。在此处使用大括号可确保使用完整的变量名。
【讨论】:
谢谢。我已经阐明了 HSAC 固定装置的使用。删除一级括号解决了“未定义变量”错误,但我仍然无法获得有效的表达式。以上是关于FitNesse:变量赋值和简单算术的主要内容,如果未能解决你的问题,请参考以下文章
fitnesse - Variables and Symbols