FWScript 数据源

数据源数值类型是FWScript独具特色的一种数据类型,数据源是用于提供数据集的表达方式,当需要使用不同的数据组合进行自动化执行的时候,可以将多个数据组合集中起来,赋值给数据源变量,然后让程序进行循环执行,每次执行时选取一组数据。数据源属于变量的一种类型,主要用于在测试过程中给各个变量循环赋值,从而达到使用数据驱动测试的目的
数据源相当于一个矩阵,包含行与列,含义为List<object[]>,采用如下方式赋值:

  • 变量赋值
  • 获取元素
  • 文件格式
  • 数组

数据源赋值

赋值描述
利用控件生成
$var = $Elements(n1, n2, n3)
$Elements为控件元素变量或元素集合变量,n1等为属性名称,这个语句的作用是将一个元素或一系列元素的属性值取出,形成数据源。注意,数据源变量的属性名称一直保存在里面,此处的n1,n2,n3直接是名字,不用引号"。
定义一个数据源
$var = [n1, n2, n3]
直接定义一个数据源变量,表头名字为n1,n2,n3。此处的n1,n2,n3直接是名字,不用引号"。
添加到已有的数据源
$var < $value
如果$value为数据源,则将数据合并到$var中,如果是元素或元素表,则按照$var中保存的属性名称取出属性值,然后添加到$var中
定义一列数据
$var = ^(d1,d2,d3)
将$var赋值为包含一列的数据源(也就是说只有一个属性)
添加一行数据
$var < ^(d1,d2,d3)
将(d1,d2,d3)作为一行添加到$var中(注意与上面完全不同)
从字符串中进行定义
$var[] = '[["n1","n2","n3"],[1,2,3],[4,5,6]]'
使用json格式的字符串,定义一个数据源,注意此处可以是一个计算结果为字符串的表达式
从文件中导入
$var = ^filename
依据filename的类型将数据源赋值到$var中
从文件中添加
$var < ^filename
依据filename的类型将数据源添加到$var中

采用“$var = $Elements(n1, n2, n3)”或者读入文件方式创建的数据源,一般包含有“表头”,即针对每一列都取了一个名字。


获取数据源中元素的值

在数据源循环中,每次循环从数据源中取出一行,分别复制给数据源的表头中描述的字符串代表的变量中,例如,如果数据源表头的字符串数组为[“name”, “id”, “classname”],则在循环体中可以使用的变量为:$name, $id, $classname。如果数据源的表头没有字符串,则相应的值依次使用9个固定数字变量:$1,$2,...,$9(注意从1开始)
数据源的行和列都是从0开始计数 (反复修改与挣扎了好久:(,因为grid是从0开始,而Excel的导入则从1开始。)

引用描述
$var.name如果没有[],则为取第1行中 name 的值,如:$list.name
$var[row].name取到第 row 行中 name 列的值, 如:$list[2].name
$var.column如果没有[],则为取第1行中第 column 列的值,如:$list.1
$var[row].column取到第 row 行中第 column 列的值,如:$list[1].2
$var[row,colum]取到第 row 行中第 column 列的值,如:$list[1,2]
loop $list
show $n1
endloop
通过数据源循环,每次从数据源中取出一行的值,赋给表头字符串定义的变量名,同时也可以使用$1,$2获取。
!< $var
!< '[["n1","n2"],[1,2]]'
loaddata $var
通过命令loaddata,将数据源中表头所代表的名称作为变量名,并将第一行的数据分别赋值给这些变量。$var的类型如果是数据源,则直接将表头的变量赋值,如果是个字符串,则先解析成数据源,再生成变量

无论有没有“表头”,都可以通过数字属性来取值。在数据源中,行和列都是从0开始。

实例

$var3=^(1,2,3)
while $var3
    @=$1
    show
endwhile
执行结果:循环执行3次,第一次输出1,第二次输出2,第三次输出3
$var4<^(1,2,3)
while $var4
    @=$1+" "+$2+" "+$3
    show
endwhile
执行结果:循环执行1次,输出1 2 3

文件读写

针对文件的导入目前实现了Json与excel格式文件,采用的数据类型为List<object[]>,第一行为表头,将来会扩展能读取csv文件,甚至是个SQL语句。
使用如下方式从文件中读取数据源:$list = ^filename
使用如下方式将数据源写到文件中: $list > filename

注意:
	如果是从json格式文件导入,该json格式必须为List,例如:[["name1","order"],["robert", 2],["bill",3]]
	如果是Excel文件,则从第一列内容为“datalist”的那一行开始读入,从第二列开始算起

数组

在FWScript中,数组的概念比较像JavaScript中的定义,数组单元是一个对象,同一个数组中,单元的值可以是方文脚本中的任何支持的数组类型,如一个字符串,一个数组,甚至一个控件元素。 FWScript利用一种特殊的数据源格式来实现数组的功能,也可以当作数据源处理。 注意:FWScript中的数组成员的类型是可以变化的,与Python中的list类似。

数组为表头为'_', 而且内容只有一行的数据源,可以通过数据源的手段一次性获得批量的数组赋值。还可使用其它方式,如从文件中读取
功能描述
数组的声明
$var = [10]
$var = [$len]
创建一个对象数组,长度为10; 也可以通过变量$len动态确定数组的长度
数组的赋值
$var[0]= expr.
$var[$index]=expr.
将表达式的值赋给下标为0的数组单元,下标也可以由一个变量指定,可以为负数,表示倒着数的位置
数组值的获取
$var = "it is " + $array[1]
$var = "it is " + $array[$len]
使用$array[1] 或 $array[$index] 获取数组的值,可以出现在表达式的任何地方,下标可以为负数,表示倒着数的位置
通过数据源方式获得批量赋值$array[] = '[['_'],[1,2,"string", true, 5]]'