1 为什么开发ZenData
2 ZenData数据生成工具简介
3 如何获得支持
4. 快速入门
4.1 安装部署
4.2 将ZenData加入$PATH系统环境变量中
4.3 命令行参数说明
4.4 命令行调用示例
4.5 內置数据定义示例
4.6 YAML定义语法总览
5. 用户指南
5.1. 数据定义语法
5.1.1 区间
5.1.2 步长
5.1.3 随机
5.1.4 重复
5.1.5 循环
5.1.6 循环支持区间
5.1.7 格式化
5.1.8 字面常量
5.1.9 前后缀
5.1.10 宽度
5.1.11 嵌套
5.1.12 嵌套字段递归
5.1.13 字段结果随机
5.1.14 文本文件数据
5.1.15 Excel数据查询
5.2. 內置数据定义
5.2.1 系列定义
5.2.2 实例定义
5.2.3 实例间无限级嵌套
5.3. 用户数据自定义
5.3.1 自定义Config
5.3.2 扩展现有定义
5.4. 数据定义引用
5.4.1 引用ranges系列
5.4.2 引用instances实例
5.4.3 多use&from联合引用
5.4.4 引用Config配置
5.4.5 引用yaml文件内容
5.4.6 全局from语句
5.5. 数据输出格式
5.5.1 文本格式输出
5.5.2 JSON格式输出
5.5.3 XML格式输出
5.5.4 SQL格式输出
5.6. ZenData命令详细介绍
5.6.1 Default配置覆盖
5.6.2 列出內置数据
5.6.3 查看內置数据
5.6.4 从SQL生成数据定义
5.6.5 清除数据前后缀
5.6.6 数据反向解析
5.7. ZenData文章生成器
5.7.1 中文词语基础数据
5.7.2 撰写文章
5.7.3 转换文章到YAML配置
5.7.4 从YAML配置生成新文章
5.8. ZenData服务接口
5.8.1 HTTP服务启动
5.8.2 HTTP服务调用
6. 内置数据一览
6.1 使用命令查看內置数据
6.2. 预置Excel数据
6.2.1 国家
6.2.2 地址
6.2.3 人名
6.2.4 颜色
6.2.5 中文词语
6.3 內置数据定义

YAML定义语法总览

2020-08-13 08:39:42
陈琦
480
最后编辑:陈琦 于 2020-09-21 17:14:47
分享链接

以下为一个标准的YAML定义文件,各元素含义请见注释。更多详细说明,请参见本手册后续章节。

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表,可以使用查询条件。

# 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

fields:

  - field: field_common                 # 默认的列表类型,通过逗号隔成若干区间。
    range: 1-10, 20-25, 27, 29, 30      # 1,2,3...,10,20,21,22...,25,27,29.30
    prefix: ""                          # 前缀
    postfix: "\t"                       # 后缀,特殊字符加引号,否则无法解析。

  - field: field_step                   # 区间指定步长。
    range: 1-10:2, 1-2:0.1              # 1,3,5,7,9,1, 1.1,1.2...,2
    postfix: "\t"

  - field: field_random                 # 区间指定随机。随机属性R同步长不能同时出现。
    range: 1-10:R                       # 1,5,8...
    postfix: "\t"

  - field: field_loop                   # 自循环的字段。
    range: a-z                          # a|b|c ...
    loop: 3                             # 循环三次
    loopfix: _                          # 每次循环的连接符。
    postfix: "\t"

  - field: field_repeat                 # 通过{}定义重复的元素。
    range: user-1{3},[user2,user3]{2}   # user-1,user-1,user-1,user2,user2,user3,user3
    postfix: "\t"

  - field: field_format                 # 通过格式化字符串输出。
    range: 1-10                         # passwd 1,passwd 2,passwd 3 ... passwd10。
    format: "passwd%02d"                # 用%02d补零,使密码整体保持8位。
    postfix: "\t"

  - field: field_length                 # 指定宽度。
    range: 1-99                         # 01\t,02\t,03\t..., 99\t
    length: 3                           # 包含前后缀的宽度。
    leftpad: 0                          # 宽度不够时,补充的字符。
    postfix: "\t"

  - field: field_text                   # 从一个文件中随机读取。
    range: users.txt:R                  # 相对当前文件路径。
    postfix: "\t"

  - field: field_yaml                   # 引用其他的定义文件整体内容。
    range: test/test-nested2.yaml{3}    # 相对当前文件路径。
    postfix: "\t"

  - field: field_use_config             # 引用其他的config定义文件。
    config: number.yaml                 # 相对当前文件路径,config内包含单个字段。
    postfix: "\t"

  - field: field_use_ranges             # 引用內置的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。
    from: zentao.number.v1.yaml         # 引用yaml/zentao/number/v1.yaml文件里面的ranges定义。
    use: medium                         # 使用该文件中定义的medium分组。
    postfix: "\t"

  - field: field_use_instance           # 引用其他的定义文件,该文件定义了多个实例。
    from: ip.v1.yaml                    # yaml/ip/v1.yaml
    use: privateC,privateB              # 使用该文件中定义的privateC和privateB两个实例。
    postfix: "\t"

  - field: field_use_excel              # 从excel数据源里面取数据。
    from: address.cn.v1.china           # 从data/address/v1.xlsx文件中读取名为china的工作簿。
    select: city                        # 查询city字段。
    where: state like '%山东%'           # 条件是省份包含山东。
    rand: true                          # 随机取数据
    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_
        postfix:
        fields:
          - field: field_grandson
            prefix: int_
            range: 10-20
            postfix: