前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解接口测试(3)- 构造测试数据

详解接口测试(3)- 构造测试数据

作者头像
Bug挖掘机
发布2022-09-28 15:30:39
3310
发布2022-09-28 15:30:39
举报
文章被收录于专栏:测试开发基础测试开发基础

前言

大家好,我是洋子,我们在进行接口测试的过程中,常常会遇到缺少测试数据的情况

举个例子(1),比如有一个赠送礼物,然后将送礼用户展示在排行榜的需求,该榜单可以一次性展示100位上榜的用户,我们在测试时就需要模拟这100位上榜的用户,才可以看到上榜后的效果

为了满足测试,你可能会采取如下方式,我弄100个账号,每个账号都去送礼使其上榜,但细想这样效率也太低下了吧

再举一个例子(2),有一个需求,需要查询身高183 cm并且年龄小于25岁的男性 的QQ号,数据库里面有个数据表Person专门用来存放个人信息(包括身高、年龄、QQ号),但现在数据库目前没有符合这样的数据

还有很多其他场景,也都存在缺少测试数据的情况,往往需要先去构造测试数据,才能进行正常的测试流程

构造数据方法

根据构造数据量不同,我们有不同的构造数据的策略

构造少量数据

对于上面例子(2)是我们经常碰到的情况。如果只需要构造一个人的信息,即可满足测试,我们可以使用SQL 语句在数据库里面insert插入一条数据,或者update一条历史数据使其满足查询条件即可

下面演示一下,先在数据库里面创建person数据表,创建SQL语句如下

代码语言:javascript
复制
create table `person` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', 
  `age` bigint(20) unsigned NOT NULL COMMENT '年龄', 
  `height` bigint(20) DEFAULT NULL COMMENT '身高', 
  `sex` char(10) NOT NULL DEFAULT '' COMMENT '性别', 
  `city` char(10) NOT NULL DEFAULT '' COMMENT '所在城市', 
  `qq` char(10) NOT NULL DEFAULT '' COMMENT 'qq号码', 
  `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', 
  `update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', 
  PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '个人信息测试表';

创建好了以后,执行SQL语句show create table person ;可看到数据表结构

假设现在有个需求需要查询,身高大于180,年龄小于25,性别为男的QQ号信息

现在数据表里数据为空,为了进行测试,现在我们在数据库里面插入几条数据,其中一条为满足需求的数据,其余为不满足需求的数据

代码语言:javascript
复制
#满足条件的数据
insert into person(
  id, age, height, sex, city, qq, create_time, 
  update_time
) 
values 
  (
    1, 18, 185, "男", "北京", "12345678", 
    "1654855117", "1654855117"
  );

#不满足条件的数据
insert into person(
  id, age, height, sex, city, qq, create_time, 
  update_time
) 
values 
  (
    2, 18, 155, "女", "南京", "7783434", 
    "1654855117", "1654855117"
  );

最后用select SQL语句查询一下指定数据,有了测试数据后就可以开始测试了

采取这种方法应注意避免在数据库里面产生脏数据,理解好业务逻辑后,再写入符合需求的数据

除了自己手动在数据库写入数据外,如果系统有暴露数据生产接口(即通过调用该写接口能在数据库写入正确的数据),我们还可以通过调用数据生产接口去产生数据,推荐使用这种方式,一般不会产生脏数据

先介绍一下工程结构

  • bean目录:存放类
  • controller目录:入口
  • dao目录:数据库相关操作
  • service目录:处理业务逻辑
  • utils目录:存放工具类

项目使用方法如下:

(1)安装Python 3.x环境,以及必要的依赖库,项目当中已经包含requirements.txt,所以在执行pip install -r requirements.txt即可安装依赖库

(2)Pycharm里面启动Flask Web服务

(3)验证启动成功,在浏览器访问http://127.0.0.1:5000,若出现Hello World!,则说明服务启动成功

(4)调用接口写入数据库

在此工程当中,有一个接口名叫add_person,请求方式是post,请求参数格式为json,通过调用此接口就能往数据库里面写入个人信息

代码语言:javascript
复制
@app.route('/add_person', methods=['POST'])
def add_person():
    req_params = request.get_json()
    print(f"req_params: {req_params}")
    print(type(req_params))
    insert_id=service.person.add_person(req_params)
    base_ret['data']={"insert_id":insert_id}
    return base_ret

我们可以使用Postman调用接口,往数据库写入数据

最后可以使用SQL语句select在数据库里面查看到插入的数据

有了满足需求的数据,我们就能继续进行接口测试了,当然细心的朋友发现,直接调用写接口仍然有可能会产生脏数据,在调用前大家不要忘了仔细阅读接口文档

这是一个很简单的调用数据生产接口写入数据库的例子,希望给大家一些启发,另外此工程当中用到了操作数据库用到了ORM框架,感兴趣可以自行研究

最后小结一下构造数据的两种方法:

  • 直接使用SQL语句写入数据库
  • 调用数据生产接口写入数据库

构造大量数据

有时候,我们需要上百条的测试数据,手动调用接口,或者手动写SQL效率就非常低下了,可以通过结合数据生产接口编写数据构造脚本批量生产数据

编写思路:以上面的add_person接口为例,修改请求参数,如height用150-180的随机数代替,并循环调用指定次数

结束语

本文给大家介绍常用构造测试数据的方法,如果你有更好的办法可以在评论区分享

在实际情况下,我们还会遇到构造数据非常困难的情况,这时候就需要进行mock数据

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发Guide 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 构造数据方法
    • 根据构造数据量不同,我们有不同的构造数据的策略
      • 构造少量数据
        • 构造大量数据
        • 结束语
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档