提交 18f81227 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

fix some issues

上级 eaf248f8
......@@ -50,7 +50,6 @@ fields:
- field: field_use_yaml
range: 测试,测,9-7,test/nested1.yaml{5}
# rand: true
prefix: "***"
postfix: "***\t"
......
title: zendata数据配置语法说明
desc:
desc:
# 文件组成
# 文件组成
# zendata以yaml格式的文件来定义各个字段的格式。
# yaml文件整体由文件说明和字段定义两部分组成。
# zendata以yaml格式的文件来定义各个字段的格式。
# yaml文件整体由文件说明和字段定义两部分组成。
# 文件说明
# 文件说明
# title: 标题,可以用简短的文字概要描述该文件定义的数据类型。
# desc: 描述,可以用多行文本来详细描述该文件定义的数据类型,非必选项。
# author: 作者,非必选项。
# version:版本号,非必选项。
# title: 标题,可以用简短的文字概要描述该文件定义的数据类型。
# desc: 描述,可以用多行文本来详细描述该文件定义的数据类型,非必选项。
# author: 作者,非必选项。
# version:版本号,非必选项。
# 字段列表
# 字段列表
# 字段定义部分都放在fields这个定义里面。
# 一个yaml文件可以包含一个或者多个字段。
# 字段列表以-field定义开始。
# 一个字段可以通过fields属性定义它的子字段。
# 字段定义部分都放在fields这个定义里面。
# 一个yaml文件可以包含一个或者多个字段。
# 字段列表以-field定义开始。
# 一个字段可以通过fields属性定义它的子字段。
# 字段定义
# 字段定义
# field: 字段名,仅支持英文、数字、下换线和.
# range: 列表范围,最重要的定义。
# loop: 循环次数,可以定义某一字段循环多少次。
# loopfix: 每一次循环时的连接符。
# field: 字段名,仅支持英文、数字、下换线和.
# range: 列表范围,最重要的定义。
# loop: 循环次数,可以定义某一字段循环多少次。
# loopfix: 每一次循环时的连接符。
# format: 支持格式化输出。
# format: 支持格式化输出。
# prefix: 该字段的前缀。
# postfix: 该字段的后缀。
# prefix: 该字段的前缀。
# postfix: 该字段的后缀。
# length: 该字段的长度。如果不通过分隔符区分,则需要指定字段长度,单位是字节。
# leftpad: 左填充的字符。如果长度不够,可指定左填充的字符。默认是以空格左填充。
# rightpad: 右填充的字符。如果长度不够,可指定右填充的字符。
# length: 该字段的长度。如果不通过分隔符区分,则需要指定字段长度,单位是字节。
# leftpad: 左填充的字符。如果长度不够,可指定左填充的字符。默认是以空格左填充。
# rightpad: 右填充的字符。如果长度不够,可指定右填充的字符。
# config: 可以引用另外一个文件里面的定义。
# config: 可以引用另外一个文件里面的定义。
# from: 引用某一个定义文件。
# use: 使用被引用文件中定义的若干实例。all代表使用所有。
# select: 如果引用的文件是excel表,可以查询里面的某一个字段。
# where: 如果引用的文件是excel表,可以使用查询条件。
# loop定义
# 可以使用一个数字来指定字段循环的次数,比如loop:2。
# 可以使用区间来定义字段循环的次数。比如loop:2-10。
# range定义
# from: 引用某一个定义文件。
# use: 使用被引用文件中定义的若干实例。all代表使用所有。
# select: 如果引用的文件是excel表,可以查询里面的某一个字段。
# where: 如果引用的文件是excel表,可以使用查询条件。
# 使用逗号连接不同的元素。比如 range: 1,2,3。
# 元素也可以是一个区间。比如 range:1-10, A-Z。
# 区间可以通过冒号:来指定步长。比如 range:1-10:2。
# 步长可以是小数。比如 range: 1-10:0.1。
# 步长可以是负数。比如 range:100-1:-1。
# 区间可以通过R来指定随机。比如 range: 1-10:R,随机和步长只能二选一。
# 可以通过一个文件来指定列表。比如range: list.txt。文件名是相对路径时,以配置文件为基准计算。
# 可以通过{n}的方式来重复某一个元素。比如 range: user1{100},user2{100}
# 如果区间或者几个元素需要重复,需要用[]括起来。比如 range: [user1,user2,user3]{100}
# loop定义
# 可以使用一个数字来指定字段循环的次数,比如loop:2。
# 可以使用区间来定义字段循环的次数。比如loop:2-10。
# range定义
# 使用逗号连接不同的元素。比如 range: 1,2,3。
# 元素也可以是一个区间。比如 range:1-10, A-Z。
# 区间可以通过冒号:来指定步长。比如 range:1-10:2。
# 步长可以是小数。比如 range: 1-10:0.1。
# 步长可以是负数。比如 range:100-1:-1。
# 区间可以通过R来指定随机。比如 range: 1-10:R,随机和步长只能二选一。
# 可以通过一个文件来指定列表。比如range: list.txt。文件名是相对路径时,以配置文件为基准计算。
# 可以通过{n}的方式来重复某一个元素。比如 range: user1{100},user2{100}
# 如果区间或者几个元素需要重复,需要用[]括起来。比如 range: [user1,user2,user3]{100}
author: zentao
version: 1.0
......@@ -114,7 +114,8 @@ fields:
- field: field_nested_instant # 引用其他的定义文件,且该文件引用了其他实例。
from: jenkins.ip.private.yaml # 引用data/custom/ip/private.yaml
use: all # 使用该文件中的所有实例。
postfix: "\t"
prefix: "{"
postfix: "}"
- field: field_use_excel # 从excel数据源里面取数据。
from: address.cn.v1.china # 从data/system/address/v1.xlsx文件中读取名为china的工作簿。
......@@ -124,7 +125,7 @@ fields:
- field: field_with_children # 嵌套字段
fields:
- field: child1
- field: child1
range: a-z
prefix: part1_
postfix: '|'
......@@ -136,9 +137,9 @@ fields:
- field: child_with_child
prefix: part3_
postfix:
fields:
postfix:
fields:
- field: field_grandson
prefix: int_
range: 10-20:R
postfix:
range: 10-20
postfix:
\ No newline at end of file
......@@ -29,12 +29,6 @@ fields:
prefix: "["
postfix: "]\t"
- field: field_nested_range
from: custom.test.number.v1.yaml
use: all{5}
prefix: "["
postfix: "]"
- field: field_nested_instant
use: all
prefix: "["
\ No newline at end of file
......@@ -8,13 +8,11 @@ fields:
range: 1-9
loop: 2-3
loopfix: "|"
# width: 10
- field: test1
range: 9-5:R{2}
prefix: ""
postfix: "\t"
# width: 5
- field: test2
range: [user-2,user3,user4,user5,user6]:R
......@@ -22,7 +20,6 @@ fields:
loopfix: "|"
prefix: ""
postfix: "\t"
# width: 25
- field: test3
range: [a,b,c]
......
......@@ -9,7 +9,4 @@ fields:
postfix: ";\t"
- field: test1
range: a-c,nested2.yaml{2}
# rand: true
prefix: "==="
postfix: "===\t"
\ No newline at end of file
range: a-c,nested2.yaml{2}
\ No newline at end of file
......@@ -4,12 +4,12 @@ author: zentao
version: 1.0
fields:
- field: test1
range: [userA,a-z,1-9,1-10000] # 字面常量及列表
- field: test0
range: [userA,a-z,1-9] # 字面常量及列表
postfix: "\t"
- field: test1
range: [userA,a-z,1-9,1-10000] # 字面常量及列表
range: [userA,a-z,1-9] # 字面常量及列表
postfix: "\t"
- field: field_use_instance
......
此差异已折叠。
title: zendata数据配置语法说明
desc:
desc:
# 文件组成
# 文件组成
# zendata以yaml格式的文件来定义各个字段的格式。
# yaml文件整体由文件说明和字段定义两部分组成。
# zendata以yaml格式的文件来定义各个字段的格式。
# yaml文件整体由文件说明和字段定义两部分组成。
# 文件说明
# 文件说明
# title: 标题,可以用简短的文字概要描述该文件定义的数据类型。
# desc: 描述,可以用多行文本来详细描述该文件定义的数据类型,非必选项。
# author: 作者,非必选项。
# version:版本号,非必选项。
# title: 标题,可以用简短的文字概要描述该文件定义的数据类型。
# desc: 描述,可以用多行文本来详细描述该文件定义的数据类型,非必选项。
# author: 作者,非必选项。
# version:版本号,非必选项。
# 字段列表
# 字段列表
# 字段定义部分都放在fields这个定义里面。
# 一个yaml文件可以包含一个或者多个字段。
# 字段列表以-field定义开始。
# 一个字段可以通过fields属性定义它的子字段。
# 字段定义部分都放在fields这个定义里面。
# 一个yaml文件可以包含一个或者多个字段。
# 字段列表以-field定义开始。
# 一个字段可以通过fields属性定义它的子字段。
# 字段定义
# 字段定义
# field: 字段名,仅支持英文、数字、下换线和.
# range: 列表范围,最重要的定义。
# loop: 循环次数,可以定义某一字段循环多少次。
# loopfix: 每一次循环时的连接符。
# field: 字段名,仅支持英文、数字、下换线和.
# range: 列表范围,最重要的定义。
# loop: 循环次数,可以定义某一字段循环多少次。
# loopfix: 每一次循环时的连接符。
# format: 支持格式化输出。
# format: 支持格式化输出。
# prefix: 该字段的前缀。
# postfix: 该字段的后缀。
# prefix: 该字段的前缀。
# postfix: 该字段的后缀。
# length: 该字段的长度。如果不通过分隔符区分,则需要指定字段长度,单位是字节。
# leftpad: 左填充的字符。如果长度不够,可指定左填充的字符。默认是以空格左填充。
# rightpad: 右填充的字符。如果长度不够,可指定右填充的字符。
# length: 该字段的长度。如果不通过分隔符区分,则需要指定字段长度,单位是字节。
# leftpad: 左填充的字符。如果长度不够,可指定左填充的字符。默认是以空格左填充。
# rightpad: 右填充的字符。如果长度不够,可指定右填充的字符。
# config: 可以引用另外一个文件里面的定义。
# config: 可以引用另外一个文件里面的定义。
# from: 引用某一个定义文件。
# use: 使用被引用文件中定义的若干实例。all代表使用所有。
# select: 如果引用的文件是excel表,可以查询里面的某一个字段。
# where: 如果引用的文件是excel表,可以使用查询条件。
# loop定义
# 可以使用一个数字来指定字段循环的次数,比如loop:2。
# 可以使用区间来定义字段循环的次数。比如loop:2-10。
# range定义
# from: 引用某一个定义文件。
# use: 使用被引用文件中定义的若干实例。all代表使用所有。
# select: 如果引用的文件是excel表,可以查询里面的某一个字段。
# where: 如果引用的文件是excel表,可以使用查询条件。
# 使用逗号连接不同的元素。比如 range: 1,2,3。
# 元素也可以是一个区间。比如 range:1-10, A-Z。
# 区间可以通过冒号:来指定步长。比如 range:1-10:2。
# 步长可以是小数。比如 range: 1-10:0.1。
# 步长可以是负数。比如 range:100-1:-1。
# 区间可以通过R来指定随机。比如 range: 1-10:R,随机和步长只能二选一。
# 可以通过一个文件来指定列表。比如range: list.txt。文件名是相对路径时,以配置文件为基准计算。
# 可以通过{n}的方式来重复某一个元素。比如 range: user1{100},user2{100}
# 如果区间或者几个元素需要重复,需要用[]括起来。比如 range: [user1,user2,user3]{100}
# loop定义
# 可以使用一个数字来指定字段循环的次数,比如loop:2。
# 可以使用区间来定义字段循环的次数。比如loop:2-10。
# range定义
# 使用逗号连接不同的元素。比如 range: 1,2,3。
# 元素也可以是一个区间。比如 range:1-10, A-Z。
# 区间可以通过冒号:来指定步长。比如 range:1-10:2。
# 步长可以是小数。比如 range: 1-10:0.1。
# 步长可以是负数。比如 range:100-1:-1。
# 区间可以通过R来指定随机。比如 range: 1-10:R,随机和步长只能二选一。
# 可以通过一个文件来指定列表。比如range: list.txt。文件名是相对路径时,以配置文件为基准计算。
# 可以通过{n}的方式来重复某一个元素。比如 range: user1{100},user2{100}
# 如果区间或者几个元素需要重复,需要用[]括起来。比如 range: [user1,user2,user3]{100}
author: zentao
version: 1.0
......@@ -102,30 +102,30 @@ fields:
postfix: "\t"
- field: field_use_ranges # 引用內置的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。
from: custom.test.number.v1.yaml # 引用data/custom/number/v1.yaml文件里面的ranges定义。
from: jenkins.number.v1.yaml # 引用data/custom/number/v1.yaml文件里面的ranges定义。
use: medium # 使用该文件中定义的medium分组。
postfix: "\t"
- field: field_use_instance # 引用其他的定义文件,该文件定义了多个实例。
from: system.ip.v1.yaml # 引用data/system/ip/v1.yaml
from: ip.v1.yaml # 引用data/system/ip/v1.yaml
use: privateC,privateB # 使用该文件中定义的privateC和privateB两个实例。
postfix: "\t"
- field: field_nested_instant # 引用其他的定义文件,且该文件引用了其他实例。
from: custom.ip.private.yaml # 引用data/custom/ip/private.yaml
from: jenkins.ip.private.yaml # 引用data/custom/ip/private.yaml
use: all # 使用该文件中的所有实例。
prefix: "{"
postfix: "}"
- field: field_use_excel # 从excel数据源里面取数据。
from: system.address.v1.china # 从data/system/address/v1.xlsx文件中读取名为china的工作簿。
from: address.cn.v1.china # 从data/system/address/v1.xlsx文件中读取名为china的工作簿。
select: city # 查询city字段。
where: state like '%山东%' # 条件是省份包含山东。
where: state like '%山东%' # 条件是省份包含山东。
postfix: "\t"
- field: field_with_children # 嵌套字段
fields:
- field: child1
- field: child1
range: a-z
prefix: part1_
postfix: '|'
......@@ -137,9 +137,9 @@ fields:
- field: child_with_child
prefix: part3_
postfix:
fields:
postfix:
fields:
- field: field_grandson
prefix: int_
range: 10-20
postfix:
postfix:
\ No newline at end of file
......@@ -90,7 +90,7 @@ func CheckRangeType(startStr string, endStr string, stepStr string) (string, int
if errInt3 == nil {
step = stepInt
}
} else {
} else if stepStr == "r" {
rand = true
}
......@@ -114,7 +114,7 @@ func CheckRangeType(startStr string, endStr string, stepStr string) (string, int
if errFloat3 == nil {
step = stepFloat
}
} else {
} else if stepStr == "r" {
rand = true
}
......@@ -136,12 +136,12 @@ func CheckRangeType(startStr string, endStr string, stepStr string) (string, int
} else if len(startStr) == 1 && len(endStr) == 1 { // is char
var step interface{} = 1
if strings.ToLower(strings.TrimSpace(stepStr)) != "r" {
if stepStr != "r" {
stepChar, errChar3 := strconv.Atoi(stepStr)
if errChar3 == nil {
step = stepChar
}
} else {
} else if stepStr == "r" {
rand = true
}
......@@ -205,7 +205,7 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea
dataType, step, precision, rand := CheckRangeType(startStr, endStr, stepStr)
if field.Path != "" && dataType != "string" && rand {
if field.Path != "" && dataType != "string" && rand { // random
items = append(items, Placeholder(field.Path))
mp := placeholderMapForRandValues(dataType, []string{}, startStr, endStr, stepStr, strconv.Itoa(precision))
......
......@@ -167,10 +167,10 @@ func GetResProp(from string) (resFile, resType, sheet string) { // from resource
}
if resFile == "" {
resPath := vari.ConfigDir + resFile
resPath := vari.ConfigDir + from
if !FileExist(resPath) { // in same folder with passed config file
resPath = vari.WorkDir + resFile
resPath = vari.WorkDir + from
if !FileExist(resPath) { // in res file
resPath = ""
}
......@@ -178,6 +178,10 @@ func GetResProp(from string) (resFile, resType, sheet string) { // from resource
resFile = resPath
}
if resFile == "" {
color.New(color.FgCyan).Fprintf(color.Output, i118Utils.I118Prt.Sprintf("fail_to_find_res", from) + "\n")
}
return
}
......@@ -208,10 +212,6 @@ func ConvertResYamlPath(from string) (ret string) {
}
}
if ret == "" {
color.New(color.FgCyan).Fprintf(color.Output, i118Utils.I118Prt.Sprintf("fail_to_find_res", from) + "\n")
}
return
}
......
......@@ -134,7 +134,7 @@ func StartWith(str, sub string) bool {
return strings.Index(str, sub) == 0
}
func EndWith(str, sub string) bool {
return strings.LastIndex(str, sub) == len(str) -len(sub)
return strings.Contains(str, sub) && strings.LastIndex(str, sub) == len(str) -len(sub)
}
func ConvertForSql(str string) (ret string) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册