diff --git a/.gitignore b/.gitignore index 413a2bc8369552991248e0f2568bde875eceff47..c98db4f26242ceaa57272d317ba71503819eaaf8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ /data/.cache/.data.db-shm /data/.cache/.data.db-wal /demo/out/ -/data/_test/ +/data/custom/ /conf/ diff --git a/README.md b/README.md index f560d7182fffd454edbd091120aa52e2ad56c9e1..da88e512b88e285a5536943a731b4889aeb90ec3 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ zendata是一款通用的数据生成工具,您可以使用yaml文件来定义您的数据格式,然后交由zendata生成。 ## 使用帮助 -[中文](res/cn/usage.txt) +[中文](res/zh/usage.txt) [English](res/en/usage.txt) ## 数据定义 -[中文](res/cn/sample.yaml) +[中文](res/zh/sample.yaml) [English](res/en/sample.yaml) \ No newline at end of file diff --git a/demo/default.yaml b/demo/default.yaml deleted file mode 100644 index 084d40f04f57524a2aacb79f9c2a0a1f7ba587ca..0000000000000000000000000000000000000000 --- a/demo/default.yaml +++ /dev/null @@ -1,139 +0,0 @@ -title: zendata数据配置语法说明 -desc: - -# 文件组成 - -# zendata以yaml格式的文件来定义各个字段的格式。 -# yaml文件整体由文件说明和字段定义两部分组成。 - -# 文件说明 - -# title: 标题,可以用简短的文字概要描述该文件定义的数据类型。 -# desc: 描述,可以用多行文本来详细描述该文件定义的数据类型,非必选项。 -# author: 作者,非必选项。 -# version:版本号,非必选项。 - -# 字段列表 - -# 字段定义部分都放在fields这个定义里面。 -# 一个yaml文件可以包含一个或者多个字段。 -# 字段列表以-field定义开始。 -# 一个字段可以通过fields属性定义它的子字段。 - -# 字段定义 - -# field: 字段名,仅支持英文、数字、下换线和. -# range: 列表范围,最重要的定义。 -# loop: 循环次数,可以定义某一字段循环多少次。 -# loopfix: 每一次循环时的连接符。 - -# format: 支持格式化输出。 - -# prefix: 该字段的前缀。 -# postfix: 该字段的后缀。 - -# length: 该字段的长度。如果不通过分隔符区分,则需要指定字段长度,单位是字节。 -# leftpad: 左填充的字符。如果长度不够,可指定左填充的字符。默认是以空格左填充。 -# rightpad: 右填充的字符。如果长度不够,可指定右填充的字符。 - -# config: 可以引用另外一个文件里面的定义。 - -# from: 引用某一个定义文件。 -# use: 使用被引用文件中定义的若干实例。all代表使用所有。 -# select: 如果引用的文件是excel表,可以查询里面的某一个字段。 -# where: 如果引用的文件是excel表,可以使用查询条件。 - -# range定义 - -# 使用逗号连接不同的元素。比如 range: 1,2,3 -# 元素也可以是一个区间。比如 range:1-10, A-Z -# 区间可以通过冒号:来指定步长。比如 range:1-10:2。 -# 步长可以是小数。比如 range: 1-10:0.1 -# 步长可以是负数。比如 range: 9-1:-1 -# 区间可以通过R来指定随机。比如 range: 1-10:R,随机和步长只能二选一。 -# 可以通过一个文件来指定列表。比如range: list.txt。文件名是相对路径时,以配置文件为基准计算。 -# 可以通过{n}的方式来重复某一个元素。比如 range: user1{100},user2{100} -# 如果区间或者几个元素需要重复,需要用[]括起来。比如 range: [user1,user2,user3]{100}, [1-100]{10} - -author: zentao -version: 1.0 - -fields: - - - field: field_common # 默认的列表类型,通过逗号隔成若干区段。 - range: 1-10, 20-25, 27, 29, 30 # 1,2,3...,10,20,21,22...,25,27,29.30 - prefix: int_ # 前缀 - postfix: "\t" # 后缀,特殊字符加引号,否则无法解析。 - - - field: field_step # 区间可以指定步长,步长可以为小数或者负数。 - range: 1-10:2, 1-2:0.1,9-1:-1 # 1,3,5,7,9,1, 1.1,1.2...,2,9,8,7,1 - postfix: "\t" - - - field: field_random # 通过R属性指定随机。R属性和步长不能同时出现。 - range: 1-10:R # 1,5,8... - postfix: "\t" - - - field: field_file # 从一个文件中读取列表,并指定随机。 - range: users.txt:R # 该文件中一行作为一个元素,并随机。 - postfix: "\t" - - - field: field_loop # 自循环的字段。 - range: a-z # a_b_c | d_e_f | g_h_i - loop: 3 # 循环三次 - loopfix: _ # 每次循环的连接符。 - postfix: "\t" - - - field: field_repeat # 通过{}定义重复的元素。 - range: u-1{3},[u2,u3]{2},[1-3]{3} # u-1,u1,u1,u2,u2,u3,u3,1,1,1,2,2,2,3,3,3 - postfix: "\t" - - - field: field_format # 通过格式化字符串输出。 - range: 1-10 # passwd 1,passwd 2,passwd 3 ... passwd10。 - format: "passwd%02d" # 用%2d补零,使密码整体保持8位,%2d默认补空格。 - postfix: "\t" - - - field: field_length # 固定长度的字段。 - range: 1-100 # 001,002,003..., 099,100 - length: 3 # 三个字节。 - leftpad: 0 # 使用0左填充。 - - - field: field_use_another_file # 可以引用其他的定义文件。 - config: numb_field.yaml # 引用当前目录下面的numb_field.yaml文件里面的定义。 - postfix: "\t" - - - field: field_use_ranges_file # 引用其他的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。 - from: numb_ranges.yaml # 引用当前目录下面的numb_field.yaml文件里面的定义。 - use: medium # 使用该文件中定义的medium分组。 - postfix: "\t" - - - field: field_use_instance # 引用其他的定义文件,该文件定义了多个实例。 - from: system.ip.v1.yaml # 引用data/system/ip/v1.yaml - use: privateC,privateB # 使用该文件中定义的privateC和privateB两个实例。 - postfix: "\t" - - - field: field_use_excel # 从excel数据源里面取数据。 - from: system.address.v1.china # 从data/system/address/v1.xlsx文件中读取名为china的工作簿。 - select: city # 查询city字段。 - where: state like '%山东%' # 条件是 省份包含山东。 - postfix: "\t" - - - field: field_with_children # 嵌套字段 - fields: - - field: child1 - range: a-z - prefix: part1_ - postfix: '|' - - - field: child2 - range: A-Z - prefix: part2_ - postfix: '|' - - - field: child_with_child - prefix: part3_ - width: 12 - fields: - - field: field_grandson - prefix: int_ - range: 10-20 - postfix: diff --git a/demo/number_field.yaml b/demo/number.yaml similarity index 100% rename from demo/number_field.yaml rename to demo/number.yaml diff --git a/res/en/sample.yaml b/res/en/sample.yaml index 8143f82d146e8a89cb0c67c3445c76971afa3c78..7730e3fb65d2efcae18982db5089adce8c42f18c 100644 --- a/res/en/sample.yaml +++ b/res/en/sample.yaml @@ -98,11 +98,11 @@ fields: leftpad: 0 # Using 0 to pad. - field: field_use_another_file # Other definition file can be referred. - config: number_field.yaml # Refer to the definition in number_field.yaml of the current directory. + config: number.yaml # Refer to the definition in number.yaml of the current directory. postfix: "\t" - - field: field_use_ranges_file # Other definition file can be referred, in which more than one ranges are defined. - from: number_ranges.yaml # Refer to the definition in number_ranges.yaml of the current directory. + - field: field_use_ranges # Other definition file can be referred, in which more than one ranges are defined. + from: custom.number.v1.yaml # Refer to the ranges in data/custom/number/v1.yaml. use: medium # use medium range. postfix: "\t" diff --git a/res/cn/messages.json b/res/zh/messages.json similarity index 100% rename from res/cn/messages.json rename to res/zh/messages.json diff --git a/res/cn/sample.yaml b/res/zh/sample.yaml similarity index 95% rename from res/cn/sample.yaml rename to res/zh/sample.yaml index bed0b7ca7306ac27823540b990edea22beb4690d..2bc65a044c2e88bdc30b7fae94a431c42364b597 100644 --- a/res/cn/sample.yaml +++ b/res/zh/sample.yaml @@ -92,11 +92,11 @@ fields: postfix: "\t" - field: field_use_another_file # 可以引用其他的定义文件。 - config: number_field.yaml # 引用当前目录下面的number_field.yaml文件里面的定义。 + config: number.yaml # 引用当前目录下面的number.yaml文件里面的定义。 postfix: "\t" - - field: field_use_ranges_file # 引用其他的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。 - from: number_ranges.yaml # 引用当前目录下面的number_field.yaml文件里面的定义。 + - field: field_use_ranges # 引用內置的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。 + from: custom.number.v1.yaml # 引用data/custom/number/v1.yaml文件里面的ranges定义。 use: medium # 使用该文件中定义的medium分组。 postfix: "\t" diff --git a/res/cn/usage.txt b/res/zh/usage.txt similarity index 100% rename from res/cn/usage.txt rename to res/zh/usage.txt diff --git a/src/gen/res.go b/src/gen/res.go index dd33547cbe1d92f7cad2a3a25f95917d399b1b7b..29693e225fdf0a5e9f0c75e591259f8ffef93372 100644 --- a/src/gen/res.go +++ b/src/gen/res.go @@ -71,9 +71,13 @@ func getResProp(from string) (string, string) { // from resource resPath := resFile if !filepath.IsAbs(resPath) { - resPath = vari.ExeDir + constant.ResDir + resFile // used res should be in data folder - if !fileUtils.FileExist(resPath) { - resPath = "" + resPath = vari.ConfigDir + resFile + if !fileUtils.FileExist(resPath) { // res in the same folder with passed config file + + resPath = vari.ExeDir + constant.ResDir + resFile + if !fileUtils.FileExist(resPath) { // res in res file + resPath = "" + } } } else { if !fileUtils.FileExist(resPath) { diff --git a/src/utils/const/const.go b/src/utils/const/const.go index 25023bcd170f9a95cf7a96e74c5de1eb2647c21c..e8dbaae43a2d0dc68b25f03dee6cf3cf28642444 100644 --- a/src/utils/const/const.go +++ b/src/utils/const/const.go @@ -15,8 +15,8 @@ var ( LanguageEN = "en" LanguageZH = "zh" - EnRes = fmt.Sprintf("res%smessages_en.json", string(os.PathSeparator)) - ZhRes = fmt.Sprintf("res%smessages_zh.json", string(os.PathSeparator)) + EnRes = fmt.Sprintf("res%sen%smessages.json", string(os.PathSeparator), string(os.PathSeparator)) + ZhRes = fmt.Sprintf("res%szh%smessages.json", string(os.PathSeparator), string(os.PathSeparator)) LogDir = fmt.Sprintf("log%s", string(os.PathSeparator))