-
2022-03-30 17:30:18
Jmeter 是个非常强大的工具,可以满足我们不同的测试类型和需求,我们要根据实际情况来选择它,使用它,它可以用来测试接口,一般测试接口的话,先是创建线程组,再在线程组下面创建http请求默认值,把接口数据和类型等各项填写到jmeter的http请求默认值里面,接下来添加用户定义的变量,把用到的所有变量都添加到用户定义的变量下面,填写好之后,再添加http请求接下来再添加http信息头管理器,填写http请求信息头数据,接下来添加察看结果树来查看接口测试结果,这就可以测试接口了,也是比较简单和方便,很容易上手的,它也可以测试性能,可以使用于对服务器对象模拟比较大的压力,可以模拟不同类别下的压力大小,可以比较在不同压力的情况下,来测试系统软件的强度和整体性能情况,平常的时候也常常用于测试接口性能,来达到测试接口的目的,首先我们要先在jmeter中添加线程组来模拟线程数量和循环次数以及执行时间等,接下来再添加http协议的数据和结构,还有参数等,但是如果不是单纯接口的话,也就不需要填写接口路径http数据了,填写完成之后呢,再添加 Constant Throughput Timer (固定吞吐量控制器)来控制系统吞吐量的目的,再添加聚合报告,可以查看一些性能数据如,最大值,出错率和平均响应时间等,根据需要来添加添加监听器,来查看每秒的交互量的值,看起来很方便,也可以查看服务器的CPU,磁盘,内存的损耗情况等。所以说在生活中,企业使用Jmeter测试接口还是性能,这个都是不确定的,每个企业都是不一样的,但是作为一个测试,最好测试接口和测试性能都是会的,而且最好能做到熟练掌握,因为它确实很简单的,大家都可以去试试。
更多相关内容 -
测试数据生成工具datafaker
2019-03-30 20:36:58datafaker是笔者开发的一个大批量测试数据和流测试数据生成工具,兼容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 - 后端开发
-
训练数据,验证数据和测试数据
2019-07-20 16:20:38一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。...一般做预测分析时,会将数据分为两大部分。一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。验证数据用于负责模型的构建。模型构建完后,需要利用数据验证模型的正确性,这部分数据被称为测试数据(Test Data)。测试数据不能用于模型构建之中,只能用于最后检验模型的准确性。
- 训练数据(Train Data):用于模型构建
- 验证数据(Validation Data):可选,用于辅助模型构建,可以重复使用。
- 测试数据(Test Data):用于检测模型构建,此数据只在模型检验时使用,用于评估模型的准确率。绝对不允许用于模型构建过程,否则会导致过渡拟合。
显然,
training set是用来训练模型或确定模型参数的,如ANN中权值等;
validation set是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;
而 test set则纯粹是为了测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。
但实际应用中,一般只将数据集分成两类,即training set 和test set,大多数文章并不涉及validation set。
还有一篇介绍有监督学习的训练集(train)、验证集(validation)和测试集(test)分析:
在有监督的机器学习中,经常会说到训练集(train)、验证集(validation)和测试集(test),这三个集合的区分可能会让人糊涂,特别是,有些读者搞不清楚验证集和测试集有什么区别。
I. 划分
如果我们自己已经有了一个大的标注数据集,想要完成一个有监督模型的测试,那么通常使用均匀随机抽样的方式,将数据集划分为训练集、验证集、测试集,这三个集合不能有交集,常见的比例是8:1:1,当然比例是人为的。从这个角度来看,三个集合都是同分布的。
如果是做比赛,官方只提供了一个标注的数据集(作为训练集)以及一个没有标注的测试集,那么我们做模型的时候,通常会人工从训练集中划分一个验证集出来。这时候我们通常不再划分一个测试集,可能的原因有两个:1、比赛方基本都很抠,训练集的样本本来就少;2、我们也没法保证要提交的测试集是否跟训练集完全同分布,因此再划分一个跟训练集同分布的测试集就没多大意义了。
II. 参数
有了模型后,训练集就是用来训练参数的,说准确点,一般是用来梯度下降的。而验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证集跟训练集没有交集,因此这个准确率是可靠的。那么为啥还需要一个测试集呢?
这就需要区分一下模型的各种参数了。事实上,对于一个模型来说,其参数可以分为普通参数和超参数。在不引入强化学习的前提下,那么普通参数就是可以被梯度下降所更新的,也就是训练集所更新的参数。另外,还有超参数的概念,比如网络层数、网络节点数、迭代次数、学习率等等,这些参数不在梯度下降的更新范围内。尽管现在已经有一些算法可以用来搜索模型的超参数,但多数情况下我们还是自己人工根据验证集来调。
III. 所以
那也就是说,从狭义来讲,验证集没有参与梯度下降的过程,也就是说是没有经过训练的;但从广义上来看,验证集却参与了一个“人工调参”的过程,我们根据验证集的结果调节了迭代数、调节了学习率等等,使得结果在验证集上最优。因此,我们也可以认为,验证集也参与了训练。
那么就很明显了,我们还需要一个完全没有经过训练的集合,那就是测试集,我们既不用测试集梯度下降,也不用它来控制超参数,只是在模型最终训练完成后,用来测试一下最后准确率。
IV. 然而
聪明的读者就会类比到,其实这是一个无休止的过程。如果测试集准确率很差,那么我们还是会去调整模型的各种参数,这时候又可以认为测试集也参与训练了。好吧,我们可能还需要一个“测试测试集”,也许还需要“测试测试测试集”...
算了吧,还是在测试集就停止吧。
-
测试提效之工具篇 - 测试数据构造与验证实践
2021-10-08 15:39:52先抛开开发测试比的问题,我们不妨问一下自己,测试同学对业务的贡献是什么,可能很多人会毫不犹豫地说——质量,那么保证质量之后呢?无疑是效率。在我看来,质量保证是测试的本份,而测试同学对业务的进一步贡献...一、概述
目前,业界都在追求测试提效,我们中通科技与信息中心同样也非常重视提效。先抛开开发测试比的问题,我们不妨问一下自己,测试同学对业务的贡献是什么,可能很多人会毫不犹豫地说——质量,那么保证质量之后呢?无疑是效率。在我看来,质量保证是测试的本份,而测试同学对业务的进一步贡献就是大幅提升测试效率,其中包括提升自身测试效率和提升开发测试效率。
那么如何提效呢?子曰:工欲善其事,必先利其器。如果纯粹靠人,显然是不现实的,技术改变工作,只有让测试最大程度的自动化起来才能解决测试效率,而要实现高度的自动化测试,我们就需要一套非常高效而流畅的测试工具平台。
本文介绍的是经过笔者亲自实践的业务辅助测试工具,主要用于造数据、结果验证、联调测试及复杂性数据校验等功能,目前在中通财金科技部推广,已经在多个版本迭代中使用。
二、 价值
1. 造数及数据验证
请看下面这段对话,发生在某一个需要联调测试的项目中:
到了下午:
是不是要给它发工资了。
我之前做过一个项目,测试数据准备的时间是每个迭代最头痛的事情。我需要造订单、造基础数据、造测试场景数据,平均每个单子的成本有五分钟,每个迭代需要覆盖完场景的情况下,需要至少10条订单,非常费时费力。现在,只需要点一下按钮,1秒钟完成。
除此之外,开发同学在自测时,产品在验收的过程中都可以借助测试工具。
2. 辅助功能
结合实际工作,解决实际工作的痛点。比如,我觉得我每天发报告的时间比较多,那么我就可以做个一键生成报告的功能,复制粘贴即可。
比如下面这个功能,可以快速生成Batis的代码。
三、 实现方式
实现方式比较简单,后端springboot+mybatis,前端使用的layui。Layui官网(https://www.layui.com)集成了各种简单实用的组件,已经足够使用了,而且易上手,学习成本低,重要的是我觉得很好看!!!
下面简单介绍下后端的框架。
代码结构如下图:
我们造数据或者进行数据验证的时候,最关心的还是对数据库的增删改查,本文简单介绍下mybatis对数据库的增删改查操作;MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。下面以注解式为例:
1. 可通过@Select @Update @Insert @Delete注解,把sql语句的返回解决映射在Map对象(或者自己写一个实体类),如:
2. 引入动态sql,通过注解@SelectProvider生成动态的sqlProvider,根据实际需要把查询条件放到入参Map对象里,实现动态查询,同样有@UpdateProvider @InsertProvider @DeleteProvider
3. 在service层进行数据库结果的逻辑处理
4. 在控制层输出http接口
5. 最后是前端通过Jquery调用后端http接口
综上,实现一个贴近业务的工具平台开发成本不高,但是收益却是非常明显的。
在实际使用中,我们可以维护一个字典表,以key:value的方式用来处理一些经常使用的变量,这样既可以保证工具的稳定性,也可以覆盖更多的场景。
四、 总结
在的日常工作中,对于测试同学不免会遇到各种问题,但是学习、提效一定是我们永恒不变的主题。只要在工作中不断思考,把一些反复的工作抽象化,那么我们的工作效率一定会不断提升,同时自己也在不断的进步。
质量之路,永无止尽!
-
机器学习中训练数据集,交叉验证数据集,测试数据集的作用
2017-04-14 15:27:181. 简介在Andrew Ng的机器学习教程里,会将给定的数据集分为三部分:训练数据集(training set)、交叉验证数据集(cross validation set)、测试数据集(test set)。三者分别占总数据集的60%、20%、20%。 那么... -
训练数据,验证数据和测试数据分析
2018-12-13 12:21:07一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。... -
测试数据生成器汇总
2017-10-13 11:40:42DataFactory是一种强大的数据产生器,拥有图形界面,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL...JMeter是apache开源的性能测试工具,可以用来作为生成测试数据的 -
【机器学习】验证集和测试集有什么区别
2021-10-17 19:27:36文章目录定义验证集和测试集的区别参考链接: 定义 Ripley 的著作《模式识别与神经网络》(Pattern Recognition and Neural Networks)中,训练集、验证集和测试集的定义如下: 训练集:用来学习的样本集,用于分类... -
什么是白盒测试?什么是黑盒测试?两者的主要区别
2021-09-12 15:28:37白盒测试根据软件的内部逻辑设计测试用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6 种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径... -
「机器学习速成」为什么要拆分为三个集:训练集、验证集、测试集
2019-06-20 08:36:47大家好,今天我们学习【机器学习速成】之 为什么要拆分为三个子集:训练集、验证集、测试集 我们马上学三点, 只划分训练集和测试集的不足 验证集在划分方案中的重要性 训练集、测试集、验证集三者区别 大家可以... -
接口测试的原理,什么是接口测试?为什么要做接口测试?如何开展接口测试?
2019-06-02 22:12:28什么是接口? 业内常说的接口一般指两种: API:应用程序编程接口,程序间的接口 GUI:图形用户界面,人与程序的接口 软件接口测试中的接口特指API接口 接口测试又称API测试 接口实例:系统与系统间的接口调用,... -
什么是训练数据
2019-01-04 00:27:42众所周知,机器处理和存储知识的...这个问题的答案是:用和这些智能任务相关的数据来“喂养”机器,让机器从这些数据中学习只是。这些相关的数据又称为训练数据。 机器学习的模型和儿童学习的方式类似。回想一下当一... -
测试数据生成工具
2016-05-04 16:48:10测试数据生成工具 备忘几个测试数据生成工具: DataFactory是一种强大的数据产生器,拥有图形界面,它允许开发人员和QA很容易产生百万行有意义的正确的测试数据库,该工具支持DB2、Oracle、Sybase、SQL Server... -
用来测试的在线小视频url地址
2019-11-09 15:12:08在线视频地址,MP4 https://v-cdn.zjol.com.cn/280443.mp4https://v-cdn.zjol.com.cn/276982.mp4https://v-cdn.zjol.com.cn/276984.mp4https://v-cdn.zjol.com.cn/276985.mp4 -
机器学习的训练数据(Training Dataset)、测试数据(Testing Dataset)和验证数据(Validation Dataset)
2018-06-30 21:40:59三者的意义 - 训练数据:用来训练模型的数据 - 验证数据:用来检验模型准确率 - 测试数据:再一次确认验证数据集中的模型是好的模型。...测试数据集和验证数据的数据一定不能用来训练,否则会出现过拟合的现象... -
标准化,归一化与训练-测试集数据处理
2021-02-20 12:11:01标准化,归一化与训练-测试集数据处理1. 标准化,归一化的区别数据预处理的归一化手段应该如何应用到训练集,测试集和验证集中?问题:回答1:回答2问题3回答1回答2问题4回答1 1. 标准化,归一化的区别 作者:宝珠... -
机器学习数据集的获取和测试集的构建方法
2019-01-28 20:45:312019年第 11 篇文章,总第 35 篇文章 ...比如当前任务属于有监督还是无监督学习问题,然后性能指标需要选择什么,常用的分类和回归损失函数有哪些,以及实际开发中需要明确系统的输入输出接口问题。 第二篇,会... -
介绍模糊测试(Fuzz Testing,Fuzzing)
2019-09-24 23:49:20模糊测试是一种自动或半自动的测试技术,常被用来发现软件/操作系统/网络的代码中的错误和安全性问题,其中用于输入随机的数据和不合法的数据被称为“FUZZ”。之后,系统将被监视各种异常,如系统崩溃或内置代码失败... -
为什么要使用fiddler抓包?抓包用来干什么?
2020-07-17 14:37:43在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具。...一般情况下,做接口测试时,必须有详细 -
数据集的划分--训练集、验证集和测试集
2019-07-23 16:03:56训练集:顾名思义指的是用于训练的样本集合,主要用来训练神经网络中的参数. 校验集:从字面意思理解即为用于验证模型性能的样本集合.不同神经网络在训练集上训练结束后,通过校验集来比较判断各个模型的性能.这里... -
性能测试 理论初探(一),什么是性能测试?性能测试的目的是?
2021-12-12 19:44:58性能测试 理论初探,什么是性能测试?性能测试的目的是? 负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。 压力测试是通过确定一个系统的瓶颈或者不能接受的... -
[大数据测试]ETL测试或数据仓库测试入门
2017-11-25 20:23:22BI(Business Intelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据(原始数据或商业数据或业务数据等)进行有效的整合,快速准确地提供报表并提出决策依据,帮助企业做出明智的业务经营决策... -
什么是网络测试
2020-09-30 10:45:36什么是网络测试?Web测试是用于验证网站应用程序是否可以满足特定功能,安全性,可用性,可访问性,视觉和性能标准的过程。在将代码移交给生产之前,Web测试对于捕获关键错误的应用程序的成功至... -
什么是接口测试?怎样做接口测试?
2018-08-20 11:17:314.什么是接口测试? 5.问什么要做接口测试? 6.怎样做接口测试? 7.接口测测试点是什么? 8.接口测试都要掌握哪些知识? 9.其他相关知识? 1.什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子... -
SSD测试软件有哪些?SSD测试软件盘点
2021-07-23 06:06:14在购买了固态硬盘(SSD)后,如果对商家或官方给出的诸如读写速度等关键性数据存在质疑的话,最好的解决方法莫过于通过SSD测试软件来找寻答案。那么,SSD测试软件有哪些?SSD测试软件哪个比较好用呢?针对上述问题,小... -
接口测试中POST方法该怎么测?4种数据提交方式,测试用例设计和测试工具操作步骤全讲清
2021-12-27 12:03:53快速掌握接口测试种GET方法和POST方法传递参数异同+POST接口的上传4种数据格式介绍+POST接口用例设计与执行 -
R语言样本数据划分(训练数据测试数据)
2018-02-11 23:10:30机器学习一般将数据划分成训练数据、验证数据(可选)、测试数据、三个部分,训练数据和验证数据用来训练模型,估计模型的具体参数,测试数据用来验证模型预测的准确程度。下面我们就对german_credit这个数据进行... -
测试学习-112-使用Jmeter进行批量数据的自动化接口测试
2020-12-10 15:24:50直接可以有body体中进行控制,不需要在原始数据中进行加与不加。 2.3 csv数据文件设置 通常情况下,我们在做自动化测试的时候。数据一般情况都是喜欢放在CSv文件里边。 这个就是来做兼容csv文件的组件。 2.4 用户... -
黑盒测试讲解
2021-11-29 09:20:10黑盒测试讲解.. -
接口测试工具Apifox 基础篇:测试管理
2022-01-29 10:15:42将接口用例以复制的方式导入,接口用例里的参数也会一同复制过来,和原来用例数据相互独立,各自改动后互不影响。将接口用例以绑定的方式导入,会直接引用原来的用例,两边的改动都会相互实时同步。 二、测试套件 ...