当前位置: 首页 > 软件库 > 开发工具 > 测试工具 >

ZenData

通用测试数据生成器
授权协议 GPL
开发语言 PHP Google Go
所属分类 开发工具、 测试工具
软件类型 开源软件
地区 国产
投 递 者 高运诚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

ZenData是由禅道项目管理软件团队推出的一款通用的测试数据生成工具。主要为了解决开发和测试过程中测试数据的生成、维护、解析问题。

一、业内趋势

最近几年DevOps概念越来越火,各种DevOps平台也如雨后春笋一样涌现。但大家往往把重点放在在工具链的搭建上,而忽略软件研发最重要的本质。工具链搭建是容易的,有各种的开源软件可以满足需求。但工具链搭建起来之后应该怎么应用呢?DevOps是希望可以通过持续集成和持续交付来实现快速的响应,但这里面有一个前提,就是质量必须要保障。如果没有质量,持续集成和交付都是空谈。如何保证质量呢?就必须要上自动化测试。

二、存在问题

自动化测试无论单元测试、接口测试、功能测试都会面临一个挑战,即如何能够做到大规模、工程化的自动化测试。这里面会牵扯到很多方面的技术:测试环境、测试手段、测试资源、测试管理等等,但这里面最最重要的一环是测试数据的管理。

如果测试数据无法做到灵活、大规模的管理,那么自动化测试就始终无法做到规模化,无法起到快速验证、快速集成、快速交付的目的。

三、目前解决方案

目前测试数据是如何来维护的呢?绝大部分的团队还是停留在手工维护阶段。手工造数据,手工维护,成本之高,可想而知。个别有能力的测试人员,会自己写点脚本来生成数据。个别有开发资源的大厂,则自己组建团队来做专门的数据工厂。这些方案都不具备通用性,成本也极其高昂。

四、ZenData解决方案

ZenData则通过YAML文件,定义了一种简单的数据类型描述语法。使用者不需要对技术有过多了解,通过定义简单的字段取值列表、前缀后缀等配置,即可实现测试数据维护的目的。简洁、高效、灵活,是做单元测试、接口测试、功能自动化测试、性能测试、压力测试、打桩mock的有力帮手。

ZenData通过简单的range定义实现了区间、步长、随机、引用、重复、SQL查询等方式,通过简单的规则可应对各种变化。ZenData只有一个可执行文件,支持HTTP模式,还可以对数据进行反向解析,可以输出txt、json、xml、sql等多种格式。

官方网站:https://zd.im

五、快速体验

wget https://dl.cnezsoft.com/zendata/1.2/linux/zd.zip
unzip zd.zip
cd zd
zd -d demo/default.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: int_                        # 前缀
    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属性指定随机。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: 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"                # 用%2d补零,使密码整体保持8位,%2d默认补空格。
    postfix: "\t"

  - field: field_use_another_file       # 可以引用其他的定义文件。
    config: number.yaml                 # 引用当前目录下面的number.yaml文件里面的定义。
    postfix: "\t"

  - field: field_use_ranges             # 引用內置的定义文件,该文件定义了多个range,他们共享了一些field层面的属性。
    from: custom.test.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
    use: privateC,privateB              # 使用该文件中定义的privateC和privateB两个实例。
    postfix: "\t"

  - field: field_nested_instant         # 引用其他的定义文件,且该文件引用了其他实例。
    from: custom.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的工作簿。
    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_
        postfix: 
        fields: 
          - field: field_grandson
            prefix: int_
            range: 10-20
            postfix: 

 

  • cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks= github.com/360EntSec

 相关资料
  • 实际运行的时候这个插件是派不上用途的,但这个插件依然是非常重要的插件之一。因为每一个使用 ELK stack 的运维人员都应该清楚一个道理:数据是支持操作的唯一真理(否则你也用不着 ELK)。所以在上线之前,你一定会需要在自己的实际环境中,测试 Logstash 和 Elasticsearch 的性能状况。这时候,这个用来生成测试数据的插件就有用了! 配置示例 input { genera

  • debug populate 测试利器,快速产生大量的key 127.0.0.1:6379> debug populate 10000 OK 127.0.0.1:6379> dbsize (integer) 10000

  • 本文向大家介绍如何使用Visual Studio 2010在数据库中生成随机测试数据,包括了如何使用Visual Studio 2010在数据库中生成随机测试数据的使用技巧和注意事项,需要的朋友参考一下 测试在项目中是很重要的一个环节,在Visual Studio 2010中,在测试方面已经有很好的支持了,比如有单元测试,负载测试等等。在数据测试的方面,Visual Studio 2010,还支持

  • C++11引入了比C的优越得多的随机数库。在C中,您经常会看到以下代码: 因为以秒为单位返回当前时间,所以对程序的快速连续调用将产生相同的数字序列。解决这一问题的快速方法是在纳秒内提供一个种子: 在C++11中,我所知道的产生好随机数的最短程序是: 是不可移植的,不鼓励使用,因为它可能会选择较差的引擎,如。事实上,不推荐使用,因此首选。通常,我看到人们说用chrono来提供一个种子来代替: 这不仅

  • 我在我的应用程序中使用Stripe。我想编写一个支付联调,检查Stripe是否已创建付款。我正在使用Stripe.js. 在我的测试中,我需要一个卡令牌来执行测试费用。通常,此令牌将在客户端生成条带.js并在请求中发送以执行收费。由于这是仅服务器端测试,是否有某种方法可以从测试中生成令牌? 作为参考,测试内容如下(使用php,但原理相同): 本质上,我在问Stripe API中是否有允许服务器端令

  • 我实现了一个新类Holder。目标如下: 三个领域。字段1和2是整数,字段3是布尔值 这给我留下的问题是有50个可能的构造函数选项。5 X 5 X 2。这是不明智的或可扩展的(添加第6种类型,我必须编写一个巨大的更改),所以我使用了构建器模式: 这真的很有效。我有5个用于字段1初始化的生成器方法,5个用于字段2初始化的生成器方法,还有一个用于布尔值。设置字段后,调用build()方法,该方法使用格