之前已经完成:接口测试参数化方案,
之后将 yaml 改成了 json,方便使用和展示,用例示例可参考:接口在线调试并缓存至 redis
现在的问题是一个用例只有一组数据,比如一个登录的用例,需要使用不同的帐号信息,
之前的做法是不同的测试目的就额外增加用例来做,也可以达成目的
现在碰到这样的场景,一个用户一个小时只能下 24 单,
这时如果我们对下单接口做监控,使用同一个帐号就只能 1 小时跑一次,
但这明显达不到监控的目的 ==> 主要是看接口是不是挂掉了,无法下单了,所以我们目标是 3 分钟跑一次
如果有一组用户数据,每次执行时从中取出一个不重复的数据来执行,这样就可以对下单接口监控了
另外,可以同时支持执行一次用例用完一组数据的功能,比如上面提到的使用不同的帐号登录的场景
基于 testng 的 dataProvider
DROP TABLE IF EXISTS `tb_api_test_data`;
CREATE TABLE `tb_api_test_data` (
`data_id` int(11) NOT NULL AUTO_INCREMENT,
`data_desc` varchar(512) NOT NULL DEFAULT '' COMMENT '数据描述',
`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户id',
PRIMARY KEY (`data_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试数据表';
DROP TABLE IF EXISTS `tb_api_test_data_values`;
CREATE TABLE `tb_api_test_data_values` (
`value_id` int(11) NOT NULL AUTO_INCREMENT,
`data_id` int(11) NOT NULL DEFAULT '0' COMMENT '数据id',
`data_value` text NOT NULL COMMENT '数据内容',
PRIMARY KEY (`value_id`),
KEY `idx_data_id` (`data_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试数据内容表';
其他表,参见接口测试服务之建表
"batchData":[{
"dataId":2,
"dataRelations":[{
"localJsonPath": "$.terminalType",
"remoteJsonPath": "$.terminalType"
},{
"localJsonPath": "$.appTimestamp",
"remoteJsonPath": "$.appTimestamp"
}]
}],
"batchDataUseOne": true
在执行用例的时候,通过 dataId 从服务端取出数据,然后返回给 dataProvider
是一批数据一起存一起取,放入 mongoDB 去呢,还是一条数据一条数据的放到 mysql 这样关系表中去?如何取舍?
因为之前的用例是没有批量数据的,所以注解是@Test就可以了,
但现在在 test 方法上增加了@Test(dataProvider = "batchData") 注解,
然而 dataProvider 中的数据不可以为 0 组,查了一下没什么好办法,
所以我的做法是 new 一个空数据出来,在执行的时候判断一下数据长度是否为 1 且数据内容为空
因为是一批数据在执行,那么中间的一条用例失败了?是继续执行完剩下的数据呢,还是不再继续了?
《Java 测试新技术 TestNG 和高级概念》