精华内容
下载资源
问答
  • 测试数据准备

    千次阅读 2018-12-06 14:59:00
    毫无疑问,稍复杂一点的系统,测试时都会遇到测试数据准备的问题,有些测试中,测试数据准备还是最困难最耗时的工作。  前面提到测试数据产生的方法:1、GUI界面操作产生;2、调用API接口产生;3、通过操作数据库...

    毫无疑问,稍复杂一点的系统,测试时都会遇到测试数据准备的问题,有些测试中,测试数据准备还是最困难最耗时的工作。

            前面提到测试数据产生的方法:1、GUI界面操作产生;2、调用API接口产生;3、通过操作数据库产生。三者各有特点,对需要把测试数据专门作为一项重要工作来对待的,一般都需要API接口+数据库混合的方式来准备数据。

            小型系统的测试,业务数据一般可以直接获取以前版本的数据,通过SQL数据或某些命令操作,取得当前需要使用的数据。

            对于复杂系统,测试数据准备可能需要封装一系列的API函数,例如一种策略就是先封装出一个完全API调用函数,里面有各种常规默认值,然后再这个基础上针对业务进行封装,面向该操作只需要设定某个特定值的,可以调用该特定封装函数。极个别的,可以直接调原始的完全封装。当然,考虑到一些大公司的情况,可能还需要考虑跨平台测试架构的情况,有些人提出进一步封装,提供RestFul的调用接口来屏蔽开发工具特性。其实,都只有一个目的,尽量把测试数据和产生方法隔离,而只侧重测试的业务属性。

      大量需要业务累积才能形成的测试数据,一般只有一个办法,就是通过大量实际数据脱敏。但如果涉及面向公众业务或国防业务之类,考虑到安全策略限制,就只能用笨办法就通过自动化操作来逐步实施模拟,但是这个方法就是太慢,并且不见得好用。

            对测试数据准备都需要有专人专责的一段时间来做的,就是很大系统很大业务了,这时很有必要对测试数据采取严格的版本管理和配置部署管理。用户需要首先注册数据,注明对应版本。测试运行时,平台会有统一生成的脚手架,对应脚本需要使用的数据必须标明版本。

             而考虑到自动化和灵活性,一般比较通用的方法还是先考虑实际数据脱敏,然后通过SQL脚本为基础,结合API调用,需要灵活配置的部分放到配置文件中,再加上配置管理来保证。这一般只在大型网站、大型系统有这个必要。

             实际测试时,针对测试数据,可能有以下一些策略:1、检索:只允许从现在系统中或已使用的数据中检索,没有的话直接生成数据失败;2、新创建:有些时候需要全新创建数据;3、智能:无所谓,只要有符合要求 ;4、out-of-box:使用缓冲池预先准备的数据。      

    展开全文
  • MySQL 测试数据快速生成

    万次阅读 2019-04-21 15:58:01
    MySQL 测试数据快速生成 一、前言 在我们进行大数据量的报表测试以及性能测试时,需要数据库中存在大量的基础测试数据,但是依赖于系统本身大多数情况下都无法快速产生大量适合的测试数据,这就需要我们手动生成...

     

                                  MySQL 测试数据快速生成

    一、前言

            在我们进行大数据量的报表测试以及性能测试时,需要数据库中存在大量的基础测试数据,但是依赖于系统本身大多数情况下都无法快速产生大量适合的测试数据,这就需要我们手动生成一些测试数据。

    目前生成数据的方式有:

    1、使用存储过程实现(需要开发了解PL/SQL语法)

    2、多线程 + jdbc批量提交

    3、使用性能测试工具(loadrunner或jemter产生,需要了解这两个工具的脚本预言)

    4、使用QUEST  Datafactory、TestDataBuilder等,只需简单的配置

    二、利用存储过程实现测试数据快速生成

    2.1  创建存储过程

    -- 清空数据表
    truncate table user1;
    -- 如果存在存储过程 `add_user1`,先删除再创建
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `add_user1`;
    CREATE PROCEDURE `add_user1` ( IN n INT ) 
    BEGIN
    	DECLARE i INT DEFAULT 1;
        DECLARE password VARCHAR(100) DEFAULT '';
        DECLARE create_date VARCHAR(255) DEFAULT '';
    	start transaction; -- 整个存储过程指定为一个事务
    	 WHILE ( i <= n ) DO
            set password =  substring_index( substring_index('123;456;789;321', ';', -FLOOR( rand( ) * 4+1 ) ), ';', 1 );
            set create_date = CONCAT(
    		date(from_unixtime(
    			unix_timestamp('2019-01-01')
    			+ floor(
    				rand() * ( unix_timestamp(now()) - unix_timestamp('2019-01-01') + 1 )
    			)
    		)) ,
    		' ',
    		LPAD( FLOOR( 9 + ( RAND( ) * 10 ) ), 2, 0 ),-- 时 0-23  LPAD( FLOOR( 0 + ( RAND( ) * 24 ) ), 2, 0 ),; 9-18 LPAD( FLOOR( 9 + ( RAND( ) * 1 ) ), 2, 0 ),
    		':',
    		LPAD( FLOOR( 0 + ( RAND( ) * 60 ) ), 2, 0 ),-- 分 0-59
    		':',
    		LPAD( FLOOR( 0 + ( RAND( ) * 60 ) ), 2, 0 ) -- 秒 0-59
    	);
    	INSERT INTO `user1` VALUES(
    		i,
    		'oyc',
    		'oyc',
    		password,
          -- create_date,
    		CONCAT(-- 	FLOOR( 1990 + ( RAND( ) * 25 ) ),
    			'2019-',-- 年
    			LPAD( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ),-- 月
    			'-',
    			LPAD( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 ),-- 日
    			' ',
    			LPAD( FLOOR( 0 + ( RAND( ) * 23 ) ), 2, 0 ),-- 时
    			':',
    			LPAD( FLOOR( 0 + ( RAND( ) * 59 ) ), 2, 0 ),-- 分
    			':',
    			LPAD( FLOOR( 0 + ( RAND( ) * 59 ) ), 2, 0 ) -- 秒
    		 ) 
    		);
    	    SET i = i + 1;
    	END WHILE;
    	commit; -- 必须主动提交
    END $$
     
    CALL add_user1 (10 );

    大量插入数据时,必须加上事务处理,可以提高插入速度。

    2.2  执行存储过程

    执行可以通过navicat的函数执行,也可以直接执行CALL add_user1 (10 ) 命令。

    2.2.1 函数可视化执行:

    填入执行函数值,这里我设置为10,点击确定即可完成。

    执行完成,耗时0.188s

    2.2.2 CALL add_user1 (10 ) 命令

    2.3 利用mysql 函数生成一下随机内容

    1. 修改引擎
    ALTER TABLE user1 ENGINE = INNODB/ MyISAM; 

    1. 清空数据表
    truncate table user1;

    3.从数组中随机获取一个内容
    SELECT 
        substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极', ';',- FLOOR( rand( ) * 7+1 ) ), ';', 1 )
     AS report_content;

    4. 从两个数组中随机获取相同索引下的内容
    select desc_index, CONCAT(desc_index, 
        '\"desc\": {\"label\":\"', 
        substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极',';',temp.desc_index),';',1),'\"',
    ',\"description\": \"', 
    substring_index(substring_index('再美的气质,也掩盖不了你才华本质;脑力使用积极分子,非你莫属;你的见解,面面俱到,深入人心;独特的洞察力,总能获悉一切;最美的阅历,就是沿路的风景;先天下之忧而忧,后天下之乐而乐;爱笑的你运气一定不会差',';',temp.desc_index),';',1),
    '\"}'
    ) as report_content from (select -FLOOR(rand()*7+1) as desc_index limit 100000) temp

    5.随机年月日 时分秒
    SELECT
        CONCAT(
        FLOOR(2010 + (RAND()*10)),-- 年
        '-',
        LPAD(FLOOR( 1 + (RAND() * 12 )), 2, 0),-- 月
        '-',
        LPAD(FLOOR( 3 + (RAND() * 8)), 2, 0),-- 日
        ' ',
        LPAD(FLOOR( 0 + (RAND() * 23)), 2, 0),-- 时
        ':',
        LPAD(FLOOR( 0 + (RAND() * 59)), 2, 0),-- 分
        ':',
        LPAD(FLOOR( 0 + (RAND() * 59)), 2, 0) -- 秒
        )

    SELECT FLOOR(7 + (RAND() * 6));     取7到12的随机整数,包括7到12

    SELECT FLOOR(12+(rand()*13));   取12到24的随机整数,包括12到24

    LPAD(FLOOR(0 + (RAND() * 23)),2,0)  取0-24之间的随机数,不够2位的前补0

    格式 : 2008-12-11 17:43:11

    举例:

    给用户赋一个随机入职日期,年份为1990-2014

    select CONCAT(FLOOR(1990 + (RAND() * 25)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(3 + (RAND() * 8)),2,0))

    结果:1999-10-07

    select CONCAT(LPAD(FLOOR(0 + (RAND() * 23)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0))
    
    

    结果:15:39:18

    一段时间:

    select DATE_ADD(DATE_FORMAT('2019-01-01 00:00:00','%Y-%m-%d %H:%i:%s'),INTERVAL FLOOR(1+RAND()*((ABS(UNIX_TIMESTAMP(DATE_FORMAT('2019-04-21 23:59:59','%Y-%m-%d %H:%i:%s'))-UNIX_TIMESTAMP(DATE_FORMAT('2019-01-01 00:00:00','%Y-%m-%d %H:%i:%s'))))-1)) SECOND);

    结果: 

    2019-02-16 13:40:00

    存储过程获取一段时间:

    DELIMITER $$
    CREATE
        FUNCTION `RandomDateTime`(sd DATETIME,ed DATETIME)
        RETURNS DATETIME
        BEGIN
        RETURN DATE_ADD(sd,INTERVAL FLOOR(1+RAND()*((ABS(UNIX_TIMESTAMP(ed)-UNIX_TIMESTAMP(sd)))-1)) SECOND);
        END$$
    DELIMITER ;
    
    SELECT RandomDateTime(DATE_FORMAT('2019-01-01 00:00:00','%Y-%m-%d %H:%i:%s'),DATE_FORMAT('2019-04-21 23:59:59','%Y-%m-%d %H:%i:%s')) AS t;

    获取一段时间:

    select CONCAT(date(from_unixtime(
     unix_timestamp('2017-01-01') 
     + floor(
       rand() * ( unix_timestamp('2018-08-08') - unix_timestamp('2017-01-01') + 1 )
     )
    )) ,' ', 
    LPAD( FLOOR( 9 + ( RAND( ) * 8) ), 2, 0 ),-- 时 0-23  LPAD( FLOOR( 0 + ( RAND( ) * 23 ) ), 2, 0 ),; 9-17 LPAD( FLOOR( 9 + ( RAND( ) * 8 ) ), 2, 0 ),
                    ':',
                    LPAD( FLOOR( 0 + ( RAND( ) * 59 ) ), 2, 0 ),-- 分 0-59
                    ':',
                    LPAD( FLOOR( 0 + ( RAND( ) * 59 ) ), 2, 0 ) -- 秒 0-59
    );

     

    三、利用Datafactory实现测试数据快速生成

    3.1 Datafactory简介

            Datafactory(数据工厂)工具是Quest公司(http://www.quest.com)旗下的产品,顾名思义,数据工厂是生产数据的,主要应用领域是性能测试中的大数据量测试, 也就是性能测试数据准备阶段。

            DataFactory 是一种快速的,易于产生测试数据的带有直觉用户介面的工具,它能建模复杂数据关系。DataFactory是一种强大的数据产生器,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL Server数据库,支持ODBC连接方式,无法直接使用MySQL数据库。它能够根据用户定制,产生或导入需要的数据,插入相应的数据表或导出至外部文件。

    3.2  Datafactory原理

           通过和数据库进行连接后,对选定表的字段设定一定的插入规则,然后批量插入记录。Datafactory支持各种主流数据库(Oracle、DB2、MS SQL),甚至excel、access等。

    3.3 软件安装

    3.3.1 DataFactory安装

            下载DataFactory并进行安装,下载地址:链接:https://pan.baidu.com/share/init?surl=0PiqHxa4CpCUKaqAb-n99w 提取码:wq47 。

    3.3.2 ODBC驱动安装

            下载MySQL-ODBC驱动并安装,下载安装myodbc32驱动 : https://dev.mysql.com/downloads/connector/odbc/

    3.3.3 基本配置

            a. 启动DataFactory,通过ODBC连接MySQL数据库,如图所示:

            

            b.选择DBC Administrator对ODBC用户DSN的配置,如下图所示:

           

            c. 进入ODBC数据源管理器,通过点击“添加”来新增用户数据源,页面如下:

           

    • MySQL ODBC 5.3 ANSI Driver:只针对有限的字符集的范围
    • MySQL ODBC 5.3 Unicode Driver:提供了多语言的支持

         d. 配置MySQL连接信息,页面如下:   

           

          e. 配置好数据源后返回到步骤2的页面,此时需要选择数据源,由于新建的数据源此时还无法进行选择,因此取消此安装流程,重新打开一个新的连接流程即可;  

           

            f. 选择相应数据表,页面如下:

           

            g. 选择user1,并进入下一步,指定执行名称为:add_user1,页面如下:

           

            h. 完成配置,页面如下:

           

    3.3.4 简单使用

            以上 ,我们已经完成了配置,下面我们可以定义出入数据的规则,完成数据的生成了。选中表的字段,不同类型,提供不同数据产生的设置。

    字段为Field.Text时:
            Insert value from a data table:从系统数据表中获取数据插入
            Insert value from an SQL database:编写SQL语句从数据库中获取数据插入
            Insert text from a file:外部文件数据插入
            Insert random characters:随机值插入
            Insert a string constant:常量值插入
            Build a composite field:组合值插入
    字段为Field.Numeric时:
            Insert value from a data table:从系统数据表中获取数据插入
            Insert value from an SQL database:编写SQL语句从数据库中获取数据插入
            Insert value from an arithmetic expression:表达式产生数据插入
            Insert sequential values:自增长数据插入
            Insert random values:随机值插入
            Insert a constant value:常量值插入
    字段为Field.Date时:
            Insert value from a data table:从系统数据表中获取数据插入
            Insert value from an SQL database:编写SQL语句从数据库中获取数据插入
            Insert sequential values:连续的时间插入
            Insert random values:随机的时间插入
            Insert the curent system data:当前系统时间插入

           1)将id设置为自动生成

                

           2)将name设置成长度为5的随机字符串

                

           3)将username设置成长度为3-8的随机字符串

               

           4)password设置为123456

             

           5)createtime为datetime类型,这里设定设定一个随机的时间,时间跨度为2019-4-21 01:12:58到-2019-4-21 04:12:58。

             

           6)点击Run,提示成功 

           

          7)查看数据,插入了100条数据。

             

    注:要修改插入条数,可以修改下图中的ecords。

              

    展开全文
  • 测试数据生成工具datafaker

    万次阅读 2019-03-30 20:36:58
    datafaker是笔者开发的一个大批量测试数据和流测试数据生成工具,兼容python2.7和python3.4+,欢迎下载使用。github地址为: https://github.com/gangly/datafaker 文档同步更新在github 工具产生背景 在软件开发...

    开源情况

    datafaker是笔者开发的一个大批量测试数据和流测试数据生成工具,兼容python2.7和python3.4+,欢迎下载使用。github地址为:

    https://github.com/gangly/datafaker

    文档同步更新在github

    工具产生背景

    在软件开发测试过程,经常需要测试数据。这些场景包括:

    • 后端开发
      新建表后,需要构造数据库测试数据,生成接口数据提供给前端使用。
    • 数据库性能测试
      生成大量测试数据,测试数据库性能
    • 流数据测试
      针对kafka流数据,需要不断定时生成测试数据写入kafka

    经过调研,目前没有一个开源的测试数据生成工具,用来生成mysql 表结构相似的数据。常用方法是人工手动造几条数据写入数据库,这种方法带来的弊端是

    • 浪费工时
      针对表的不同数据类型的字段,需要构造不同数据
    • 数据量小
      如果需要构造大量数据,手动造数据无能为力
    • 不够准确
      比如需要构造邮箱(满足一定格式),电话号码(确定的数字位数),ip地址(固定格式),年龄(不能为负数,有大小范围)等。这些测试数据有一定的限制或规律,手工构造可能不能满足数据范围或一些格式要求而导致后端程序报错
    • 多表关联
      手动造的数据量较小,在多个表中用主键不一定能关联上,或者关联出来没数据
    • 动态随机写入
      比如针对流数据,需要随机每隔几秒钟写入kafka。或者动态随机插入mysql,手工操作相对麻烦,而且不好统计写入数据条数

    针对目前这些痛点,datafaker应运而生。datafaker是一个多数据源测试数据构造工具,可以模拟产生大部分常用数据类型,轻松解决以上痛点。datafaker具有以下功能:

    • 多种数据类型。
      包括常见数据库字段类型(整型、浮点型、字符型)、自定义类型(IP地址,邮箱,身份证号码等)
    • 模拟多表关联数据
      通过制定某些字段为枚举类型(从指定的数据列表里面随机选择),这样在数据量多的情况下能保证多表Join能关联上,查询到数据
    • 支持批数据和流数据生成,可指定流数据间隔时间
    • 支持多种数据输出方式,包括屏幕打印、文件和远程数据源
    • 支持多种数据源。目前支持关系型数据库、Hive、Kafka。后面将扩展到Mongo,ES等数据源
    • 可指定输出格式,目前支持text,json

    软件架构

    datafaker是用python编写,支持python2.7,python3.4+。目前版本0.08,已经发布在pypi上。
    架构图

    架构图完整的画出了工具的执行过程,从图可知工具经历了5个模块:

    • 参数解析器。解析用户从终端命令行输入的命令。
    • 元数据解析器。用户可以指定元数据来自本地文件或者远程数据库表。解析器获取到文件内容后按照规则将文本内容解析成表字段元数据和数据构造规则。
    • 数据构造引擎。构造引擎根据元数据解析器产生的数据构造规则,模拟产生不同类型的数据。
    • 数据路由。根据不同的数据输出类型,分成批量数据和流数据生成。流数据可指定产生频率。然后将数据转换成用户指定的格式输出到不同数据源中。
    • 数据源适配器。适配不同数据源,将数据导入到数据源中。

    安装流程

    1)安装python

    2)安装pip

    3)pip install datafaker

    使用举例

    $代表终端提示符

    • 查看版本号,查看参数使用说明
    $ datafaker --version
    0.0.8
    
    $ datafaker --help
    usage: datafaker [-h] [--meta [META]] [--interval INTERVAL] [--version]
                     [--outprint] [--outspliter OUTSPLITER] [--locale LOCALE]
                     [--outfile OUTFILE] [--format FORMAT]
                     [--withheader]
                     [dbtype] [connect] table [num]
    
    Generates SQLAlchemy model code from an existing database.
    
    positional arguments:
      dbtype                data source type
      connect               connect info to the database
      table                 table to process
      num                   number of records to generate
    
    optional arguments:
      -h, --help            show this help message and exit
      --meta [META]         meta file path
      --interval INTERVAL   meta file path
      --version             print the version number and exit
      --outprint            print fake date to screen
      --outspliter OUTSPLITER
                            print data, to split columns
      --locale LOCALE       which country language
      --outfile OUTFILE     file to write output to (default: stdout)
      --format FORMAT       outprint and outfile format: json, text (default:
                            text)
    
    • 从本地mysql的test数据库的stu表中读取表元数据,并构造10条数据写入stu表
    $ datafaker mysql mysql+mysqldb://root:root@localhost:3600/test stu 10
    generated records : 10
    saved records : 10
    time used: 0.038 s
    
    • 从本地文件meta.txt中读取元数据,以,分隔符构造10条数据,打印在屏幕上
    $ datafaker mysql mysql+mysqldb://root:root@localhost:3600/test stu 10 --outprint --meta meta.txt --outspliter ',,'
    1,,鲍红,,人和中心,,高小王子,,3,,81,,55.6,,13197453222,,mwei@gmail.com,,192.100.224.255,,江苏省西宁市梁平朱路I座 944204
    2,,刘东,,清华中学,,高小王子,,3,,31,,52.4,,15206198472,,lili@kong.cn,,203.0.190.6,,内蒙古自治区嘉禾市兴山呼和浩特街E座 706421
    3,,匡静,,人和中心,,歌神,,9,,84,,72.51,,18944398099,,zouchao@gmail.com,,203.1.53.166,,安徽省永安市沈河惠州街x座 345415
    4,,王宇,,猪场,,逗比,,6,,89,,19.3,,18628114285,,na58@cai.net,,169.4.126.215,,山西省梧州县朝阳何路y座 846430
    5,,陆桂芝,,猪场,,逗比,,8,,99,,92.22,,13304570255,,na55@ti.cn,,168.136.127.200,,江苏省英县徐汇尹街C座 908240
    6,,顾阳,,猪场,,歌神,,9,,32,,43.14,,18025578420,,linping@pr.net,,174.50.222.39,,黑龍江省惠州县梁平大冶街Z座 611736
    7,,杨洁,,人和中心,,鬼泣,,6,,35,,81.25,,13654306263,,minzhong@xiaxia.cn,,100.57.79.2,,湖北省琳市沙湾汪街V座 544660
    8,,申璐,,人和中心,,鬼泣,,6,,14,,73.61,,13866020503,,changxiulan@chaoxia.cn,,198.248.254.56,,陕西省合山县东丽宁德街Q座 810017
    9,,申强,,广东中学,,逗比,,7,,48,,90.65,,13915915013,,ysun@chao.cn,,169.210.122.39,,甘肃省冬梅县城北六安街Z座 619755
    10,,李丹丹,,旧大院,,鬼泣,,3,,67,,87.63,,18899812516,,xiulanmo@qin.cn,,192.52.218.133,,湖南省宜都县萧山澳门街E座 791911
    generated records : 10
    printed records : 10
    time used: 0.458 s
    

    这是个学生表描述。
    其中meta.txt文件内容为:

    id||int||自增id[:id]
    name||varchar(20)||学生名字
    school||varchar(20)||学校名字[:enum(names.txt)]
    nickname||varchar(20)||学生小名[:enum(鬼泣, 高小王子, 歌神, 逗比)]
    age||int||学生年龄
    class_num||int||班级人数[:int(10, 100)]
    score||decimal(4,2)||成绩[:decimal(4,2,1)]
    phone||int(20)||电话号码[:phone_number]
    email||varchar(64)||邮箱[:email]
    ip||varchar(32)||IP地址[:ipv4]
    address||text||地址[:address]
    

    meta.txt文件中每行数据为元数据的一个字段描述,以||分割为三列

    • 第一列:字段名
    • 第二列:表字段类型
    • 第三列:字段注释,其中包含构造规则标记
      每行代表字段为:
      表自增id,学生姓名,学校名称,学生小名,年龄,班级人数,学生成绩,电话号码,邮箱,家庭网络IP,家庭地址

    构造规则优先级:
    解析器将优先选择第三列的带规则标记的字段注释进行解析,如果不带标记,则选择第二列的字段类型进行解析。

    这种好处是:
    1)对应已经创建的数据表,用户可以用desc tablename 或者show full columns from tablename,将表shema查询复制下来,对用字段类型构造数据不满足的情况下,在注释里面进行打标机进行特殊处理
    2)对于新表,在create table创建表时直接在注释里面打上标记。这种情况不用指定元数据文件。

    后面将详细介绍构造规则说明
    其中学校名字[:enum(names.txt)]表示从本地文件names.txt中读取枚举数据,内容为,表示学校名称只能从下面这5所学校中随机产生。

    清华中学
    人和中心
    广东中学
    猪场
    旧大院
    
    • 从meta.txt中读取元数据,产生10条数据写入到out.txt中
    datafaker file out.txt hello 10 --meta meta.txt
    
    • 从本地meta.txt参数数据,以1秒间隔输出到kafka的topic hello中
    $ datafaker kafka localhost:9092 hello 1 --meta meta.txt --outprint
    {"school": "\u4eba\u548c\u4e2d\u5fc3", "name": "\u5218\u91d1\u51e4", "ip": "192.20.103.235", "age": 9, "email": "chaokang@gang.cn", "phone": "13256316424", "score": 3.45, "address": "\u5e7f\u4e1c\u7701\u5b81\u5fb7\u5e02\u6d54\u9633\u5468\u8defu\u5ea7 990262", "class_num": 24, "nickname": "\u9017\u6bd4", "id": 1}
    {"school": "\u4eba\u548c\u4e2d\u5fc3", "name": "\u6768\u4e3d", "ip": "101.129.18.230", "age": 3, "email": "min60@hv.net", "phone": "18183286767", "score": 22.16, "address": "\u8fbd\u5b81\u7701\u592a\u539f\u5e02\u53cb\u597d\u6c55\u5c3e\u8defG\u5ea7 382777", "class_num": 30, "nickname": "\u6b4c\u795e", "id": 2}
    {"school": "\u6e05\u534e\u4e2d\u5b66", "name": "\u8d75\u7ea2", "ip": "192.0.3.34", "age": 9, "email": "fxiao@gmail.com", "phone": "18002235094", "score": 48.32, "address": "\u5e7f\u897f\u58ee\u65cf\u81ea\u6cbb\u533a\u65ed\u5e02\u6c88\u5317\u65b0\u6731\u8defc\u5ea7 684262", "class_num": 63, "nickname": "\u6b4c\u795e", "id": 3}
    {"school": "\u6e05\u534e\u4e2d\u5b66", "name": "\u5f20\u7389\u6885", "ip": "198.20.50.222", "age": 3, "email": "xiulanlei@cw.net", "phone": "15518698519", "score": 85.96, "address": "\u5b81\u590f\u56de\u65cf\u81ea\u6cbb\u533a\u6d69\u53bf\u767d\u4e91\u4e4c\u9c81\u6728\u9f50\u8857s\u5ea7 184967", "class_num": 18, "nickname": "\u9017\u6bd4", "id": 4}
    {"school": "\u732a\u573a", "name": "\u674e\u6842\u5170", "ip": "192.52.195.184", "age": 8, "email": "fxiao@konggu.cn", "phone": "18051928254", "score": 97.87, "address": "\u9ed1\u9f8d\u6c5f\u7701\u54c8\u5c14\u6ee8\u53bf\u6c38\u5ddd\u6d2a\u8857E\u5ea7 335135", "class_num": 46, "nickname": "\u9ad8\u5c0f\u738b\u5b50", "id": 5}
    {"school": "\u4eba\u548c\u4e2d\u5fc3", "name": "\u5434\u60f3", "ip": "192.42.234.178", "age": 3, "email": "uliang@yahoo.com", "phone": "14560810465", "score": 6.32, "address": "\u5b81\u590f\u56de\u65cf\u81ea\u6cbb\u533a\u516d\u76d8\u6c34\u5e02\u5357\u6eaa\u7f57\u8857M\u5ea7 852408", "class_num": 12, "nickname": "\u9b3c\u6ce3", "id": 6}
    ^Cgenerated records : 6
    insert records : 6
    time used: 6.285 s
    

    消费端验证:
    数据消费

    命令参数

    datafaker参数包含4个必选参数和一些可选参数,如下表所示

    参数名 含义 参数类型 是否必选 默认值 备注
    dbtype 数据源类型 string 可选值为 mysql,hive, kafka, file
    connect 数据源连接信息 string mysql 和 hive为 sqlachemy的连接串;kafka为broker连接串;file为文件路径
    table 表名 string 将各种数据源操作单位都抽象为表,数据库中为表,kafka中为topic,file为文件名,hbase为列族,mongo为集合
    num 数据条数 int 其中kafka必须为1
    meta 元数据文件 string 若设定该参数,则忽略从数据源连接信息中读取远数据
    interval 流数据产生间隔 int 1 单位秒
    version 显示版本号 bool
    outprint 是否在屏幕打印 bool false 若设置屏幕打印,则数据不会写文件或数据源
    outspliter 数据字段分割符 string , 屏幕打印,保存文件有效
    locale 语言类型 string zh_CN 支持多国语言,en_US, zh_CN
    outfile 输出到文件 string
    format 数据格式 string text kafka 默认为json
    withheader 打印和存储到文件是否带表头 bool False

    数据构造规则

    1.数据库常用类型

    这部分数据类型可以不用指定元数据文件

    • 数值类型
      支持大部分标准SQL数值数据类型。
      这些类型包括严格数值数据类型( int、integer、smallint、decimal和numeric),以 及近似数值数据类型(float、real和double, precision)

    • 日期和时间类型
      表示时间值的日期和时间类型为datetime、date、timestamp、time和year。

    • 字符串类型
      字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

    2.可变数据库类型

    类型名 含义 默认值 备注
    decimal(M,D, negative) M指定总的数据位数,D指定小数位数, negative指定正1负0 decimal(4, 2, 1)指定4位数,2位小数的正浮点数,如78.23
    string(min, max) min, max 指定字符串位数范围
    date(start, end) start, end 指定日期范围 如date(1990-01-01, 2019-12-12)

    enum类型

    enum类型表示随机从列表里随机选取一个对象,例如:
    enum(2, 4, 5, 18) 表示每次从2,4,5,8这四个整数中随机选择一个

    如果enum数组中只有一个对象,则表示从文件读取数据列表,每行一个对象:
    enum(data.txt) 表示从当前目录的data.txt文件中读取列表。

    enum类型可用来构造多表关联,比如两个表的某些字段都用同一个enum数据列表产生数据。

    3.自定义扩展类型

    • address 地址
    构造规则 含义 举例 备注
    country 国家名 中国
    province 省份 河南
    city 城市名 郑州市
    city_suffix 城市的后缀 市或县
    address 地址 河北省巢湖县怀柔南宁路f座 169812
    country_code 国家编码 AO
    district 普陀
    latitude 地理坐标(纬度) 68.0228435
    longitude 地理坐标(经度) 155.964341
    postcode 邮编 803511
    street_address 街道地址 邯郸路W座
    street_name 街道名 合肥路
    street_suffix 街、路
    • 数值类型
    构造规则 含义 举例 备注
    random_digit 0~9随机数 1
    random_digit_not_null 1~9的随机数 9
    random_element 随机字母 a
    random_int 随机数字 44 可设置范围,可以通过设置min,max来设置,默认0~9999,例如random_int(1,100)
    random_letter 随机字母 e
    random_number 随机数字 参数digits设置生成的数字位数 例如random_number(2)生成2为数数字
    boolean True/False False
    numerify 三位随机数字 934
    • 公司
    构造规则 含义 举例 备注
    bs 公司服务名 transition open-source content
    company 公司名(长) 天开信息有限公司
    company_prefix 公司名(短) 浦华众城
    company_suffix 公司性质 传媒有限公司
    job 职位 项目执行/协调人员
    • 信用卡、货币
    构造规则 含义 举例 备注
    credit_card_expire 信用卡到期日 05/19
    credit_card_full 完整信用卡信息 JCB 16 digit 霞 张 3514193766205948 08/21CVC: 436
    credit_card_number 信用卡号 3500011993590161
    credit_card_provider 信用卡类型 American Express
    credit_card_security_code 信用卡安全码 190
    currency_code 货币编码 HNL
    • 日期、时间
    构造规则 含义 举例 备注
    am_pm AM/PM AM
    century 世纪 VII
    date 随机日期 2014-05-18
    date_between 指定范围内日期 1997-08-29 参数:start_date,end_date取值:具体日期或者today,-30d,-30y类似
    date_this_month 当前月份的日期 2019-03-13
    date_this_year 今年内的日期 2019-03-09
    date_time 时间 2010-06-15 04:07:11 (1970年1月1日至今)
    date_time_between 指定范围时间 2009-10-03 03:15:07 用法同dates
    month 随机月份 05
    month_name 随机月份(英文) December
    time() 随机24小时时间 18:52:55
    timezone 随机时区 Europe/Andorra
    unix_time 随机Unix时间 203461583
    year 随机年份 2017
    • internet
    构造规则 含义 举例 备注
    file_extension 文件扩展名 wav
    file_name 文件名(包含扩展名,不包含路径) werwe.jpg
    file_path 文件路径(包含文件名,扩展名) /home/
    mime_type mime Type video/x-flv
    company_email 公司邮箱 jieyan@14.cn
    domain_name 域名 jq.cn
    email 邮箱 kren@wei.cn
    image_url 随机URL地址 https://www.lorempixel.com/470/178
    ipv4 IP4地址 192.0.25.141
    ipv6 IP6地址 206f:1ff0:374:2d5f:a6f8:69ef:4ba9:2d14
    mac_address MAC地址 65:02:ed:82:c6:98
    tld 网址域名后缀(.com,.net.cn,等等,不包括.) cn
    uri URI地址 http://24.cn/
    url URL地址 http://www.guiyinglei.cn/
    user_name 用户名 ping51
    user_agent 随机user_agent信息
    chrome Chrome浏览器user_agent信息 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5342 (KHTML, like Gecko) Chrome/27.0.819.0 Safari/5342
    firefox FireFox浏览器user_agent信息
    internet_explorer IE浏览器user_agent信息
    opera Opera浏览器user_agent
    safari Safari浏览器user_agent信息
    linux_platform_token 随机Linux信息 X11; Linux i686
    isbn10 随机ISBN(10位) 1-02-136461-4
    isbn13 随机ISBN(13位) 978-0-15-215169-0
    • 文本类型
    构造规则 含义 举例 备注
    paragraph 随机生成一个段落
    sentence 随机生成一句话
    text 随机生成一篇文章 不要幻想着人工智能了,至今没完全看懂一句话是什么意思
    word 随机生成词语 hello
    locale 随机生成语言/国际信息 niu_NZ 各国本地化编码
    md5 随机生成MD5 fd80f4681258a9ecb329ab12782dfbba
    password 随机生成密码 )we3JViVB1 可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
    sha1 随机SHA1 e9bb2fcd4b4089cc89c36636850ceafe779dbe58
    sha256 随机SHA256 dd119cb2aec9b3d5557e56bb497757d42f82b32486ea92126942821d3b657957
    uuid4 随机UUID 04aff886-8482-4069-9260-7917fd83982d
    • 人物信息相关
    构造规则 含义 举例 备注
    name 全名 单玉珍
    name_female 男性全名 官平
    name_male 女性全名 许颖
    first_name
    last_name
    first_name_female 女名
    last_name_female 女姓
    first_name_male 男名
    last_name_male 男姓
    age 人年龄 23 默认值 0-100
    ssn 身份证号 350526193807198690
    phone_number 手机号 13926798387
    phonenumber_prefix 手机号段 157
    profile 档案信息
    simple_profile 简单档案信息 {‘username’: u’kcui’, ‘name’: u’\u5415\u67f3’, ‘birthdate’: datetime.date(1993, 3, 28), ‘sex’: ‘F’, ‘address’: u’\u9752\u6d77\u7701\u4e0a\u6d77\u53bf\u6881\u5e73\u5174\u5b89\u76df\u8defQ\u5ea7 532381’, ‘mail’: u’juanpan@hotmail.com’}
    • 其他杂项
    构造规则 含义 举例 备注
    color_name 随机颜色名 Moccasin
    hex_color 随机HEX颜色 #7f7cb6
    rgb_color 随机RGB颜色 210,85,105
    展开全文
  • SVM训练和测试数据

    千次下载 热门讨论 2013-12-12 23:04:39
    SVM训练和测试数据。主要用于训练和测试自己写的Python版本的SVM,具体见我的博客: http://blog.csdn.net/zouxy09
  • Weka之训练与测试数据

    千次阅读 2019-10-27 22:40:12
    什么是训练数据和测试数据? 训练数据经过机器学习算法(ML Algorithm)可以得到分类器,再将测试数据放入分类器,则可得到评估结果。 训练集和测试集应来源于同一个数据集,但为两个不相交的集合。比如:将一个...

    什么是训练数据和测试数据?
    训练数据经过机器学习算法(ML Algorithm)可以得到分类器,再将测试数据放入分类器,则可得到评估结果。

    在这里插入图片描述
    训练集和测试集应来源于同一个数据集,但为两个不相交的集合。比如:将一个数据集的1/3作为测试集,2/3作为训练集。

    接下来通过一个简单的实验进一步理解训练与测试数据:
    1、打开Explorer界面,选择数据集segment-challenge.arff。
    2、打开classify面板,选择J48分类器。
    在这里插入图片描述

    3、观察Test options面板,共有4种方式来评价模型效果,分别是:
    Use traning set 使用训练集Supplied test set设置测试集Cross-validation交叉验证Percentage split按比划分
    以下将介绍四种方法的区别。

    ●使用训练集

    选择后,点击start。
    在这里插入图片描述
    在这里插入图片描述观察到产生了正确率为99%的结果。
    这种方式使用得较少,得到的结果
    误导性
    很强。
    因为这种方法中,训练集和测试集相同。

    ●设置提供的测试集

    选择后,点击set并选中测试集segment-test.arff,点击start。
    在这里插入图片描述
    在这里插入图片描述观察到产生了正确率为96.1728%的结果。

    ●交叉验证

    在这里插入图片描述

    当Folds为10时,会将数据集随机分为10份。
    假设分别为:S1、S2、S3、S4…S10。
    将S1S9作为训练集创建模型M1,用S10作为测试集来评价模型的效果,并得到错误率F1;将S1S8及S10作为训练集创建模型M2,用S9作为测试集来评价模型的效果,并得到错误率F2;将S1S7及S9S10作为训练集创建模型M2,用S8作为测试集来评价模型的效果,并得到错误率F3…
    如此循环共10次,得到10个错误率。最终将10份数据放在一起构建一个模型,错误率为10个错误率的平均值。

    将Folds设置为10,并点击“Start”。
    在这里插入图片描述
    观察到产生了正确率为95.7333%的结果。

    再将Folds设置为100,并点击“Start”。
    在这里插入图片描述
    观察到产生了正确率为96.8%的结果。正确率得到了提升。
    此方法的准确性会比前几种高,但当数据量很大时,计算速度会较慢。

    ●按比划分

    选择后,输入百分比(默认为66%),点击Start。
    此方法将训练集分为两部分,一部分做数据训练,一部分做数据测试。
    输入的百分比为做数据训练的部分。

    在这里插入图片描述
    在这里插入图片描述
    观察到产生了正确率为95.098%的的结果。

    展开全文
  • 训练数据,验证数据和测试数据

    千次阅读 2019-07-20 16:20:38
    一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。...
  • 软件款测试人员在测试这种类型的应用软件时,除了需要设计测试用例外,还需要准备相应的测试数据。可以说准备测试数据也是作为软件测试的一项必须的工作。如果没有正确的测试数据,测试过程有时候就无法很好的执行,...
  • 极速导入elasticsearch测试数据

    千次阅读 2019-04-21 17:14:57
    快速导入测试数据用于elasticsearch查询练习
  • 一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。...
  • 如何准备性能测试数据

    千次阅读 2016-02-19 18:19:01
    在软件性能测试过程中,测试数据的准备是一个非常系统化、工作量非常庞大一项工作。如何准备支持不同业务操作、不同测试类型的大量测试数据来满足负载压力测试的需求是性能测试过程中经常面对的一个重要话题。   ...
  • elasticsearch 导入测试数据

    万次阅读 2018-02-20 10:35:12
    导入测试数据 https://www.elastic.co/guide/en/elasticsearch/reference/current/_exploring_your_data.html 下面的Loading the Sample Dataset,的here是测试数据使用postman导入 post localhost:9200/bank/...
  • MySQL如何生成大批量测试数据

    千次阅读 2021-01-31 13:19:30
    不管是为了做生产数据脱敏,还是为了验证某个技术是否符合期望,亦或是做简单的集成测试,短时间内生成大批量测试数据是很有必要的,但就算是测试数据也要假的像样点嘛,数据不够假,你放到演示环境,怎么给客户吹牛...
  • 需要大批量测试数据时可能会用到SQL批量新增的方法。 DO $$ DECLARE i INTEGER := 1; identityId BIGINT := 200000000001; BEGIN WHILE i < 100 LOOP identityId = identityId + 1; -- INSERT 语句 -- 将...
  • SpringBoot单元测试如何回滚测试数据

    千次阅读 2018-12-29 15:34:08
    SpringBoot单元测试如何回滚测试数据 在做单元测试的时候,不想测试的数据保留在数据库,所以可以给测试类添加事务,让其回滚。 查了一下资料,网上说在方法前面添加@Transactional和@Rollback即可,或者如果想让...
  • 训练数据、测试数据和验证数据

    万次阅读 2017-04-23 15:16:32
    一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。...
  • 测试数据生成工具

    千次阅读 2016-05-04 16:48:10
    测试数据生成工具 备忘几个测试数据生成工具: DataFactory是一种强大的数据产生器,拥有图形界面,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL Server...
  • USACO 历年月赛 官方测试数据

    千次阅读 2016-11-14 18:11:09
    USACO历年月赛官方测试数据
  • 自动生成测试数据

    千次阅读 2012-08-17 16:36:52
    很多情况下我们都需要在数据库中插入大量测试数据来对程序的功能进行测试。而生成的测试数据往往需要符合特定规则。虽然可以自己写一段程序来进行插入数据,但每一个项目就写一个插入数据的程序并不明智。本文主要...
  • 测试数据生成器汇总

    千次阅读 2017-10-13 11:40:42
    DataFactory是一种强大的数据产生器,拥有图形界面,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL...JMeter是apache开源的性能测试工具,可以用来作为生成测试数据
  • 自动化测试之测试数据准备

    千次阅读 2016-10-10 21:46:09
    无论我们做手工测试还是自动化测试,测试数据的准备都是必须的过程。而自动化的测试数据准备又有其特殊性,就是数据的可重复利用。因为脚本的执行跟人工的最大区别就是,它只会重复地机械地执行一个动作。而它最大的...
  • 机器学习一般将数据划分成训练数据、验证数据(可选)、测试数据、三个部分,训练数据和验证数据用来训练模型,估计模型的具体参数,测试数据用来验证模型预测的准确程度。下面我们就对german_credit这个数据进行...
  • MySQL快速生成本地测试数据

    千次阅读 2018-03-07 17:23:35
    利用数据的存储过程生成测试数据:我们可以通过数据库的的 INSERT 语句直接在存储过程中向普通数据表中添加数据,但是当我们添加到百万数据后,往普通表插入测试数据的性能就会明显降低。所以在这里建议使用内存表做...
  • mysql生成千万级测试数据

    千次阅读 2017-09-24 13:15:25
    MYSQL打造千万级测试数据 为了更好的测试MYSQL性能以及程序优化,不得不去制作海量数据来测试。我这里的方法就是直接用uuid函数进行分配每条数据的不同内容。 1.首先创建测试表(card表) CREATE TABLE `card` ...
  • 性能测试数据准备-埋数篇

    千次阅读 2019-01-07 21:03:20
    性能测试数据一般分为存量数据和交易数据。存量数据为历史记录数据,一般较大。交易数据的数据量则需满足压测时的需求,要足够多。 数据准备一般有以下方法:  1.直接导入已有的数据库;(实际情况不会有大量数据...
  • 我们在分类的时候需要把数据分成两部分,一部分是训练数据一部分是测试数据。sklearn可以随机的按照设置的比例选取训练数据和测试数据并且样本和标签是对应的分组。 实验代码如下:#!/usr/bin/env python # -*- ...
  • 如何测出PAT 测试点的测试数据

    千次阅读 2020-05-28 19:12:17
    前些天刷PAT,突然觉得,PAT给出的错误种类有很多,也许我可以通过错误种类的区别来做点什么。比如:得到他的原始数据? 接下来说说的我基本想法 ...我们得到测试数据的第一个数字,然后根据它是否小于等于
  • 大数据测试数据构造工具

    千次阅读 2013-04-21 23:36:23
    在性能测试中,我们经常会涉及到测试数据,对于测试数据我们可以为两种:一种是执行测试用例中使用的测试数据;另一种是在大数据量下测试时需要的测试基础数据。两者的主要区别是在于是否会在测试中直接用于测试执行...
  • Jmeter使用CSV文件读取大量测试数据

    万次阅读 2017-11-14 14:11:23
    Jmeter使用CSV读取大量测试数据,使用JDBC Request处理测试产生的数据
  • 1. 简介在Andrew Ng的机器学习教程里,会将给定的数据集分为三部分:训练数据集(training set)、交叉验证数据集(cross validation set)、测试数据集(test set)。三者分别占总数据集的60%、20%、20%。 那么...
  • Java实现的各种随机测试数据生成器

    千次阅读 2020-09-08 16:04:53
    Java实现的各种随机测试数据生成器,包括身份证号码,银行卡号,姓名,手机号,电子邮箱地址和生成insert sql参数列表字符串等。 具体用法请参考单元测试: 即 /src/test/java/cn/binarywang/tools/generator 下的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,453,263
精华内容 1,381,305
关键字:

测试数据