概述

​ 数据准备一直是软件测试过程中必须面临的环节。对于自动化测试来说尤其如此,无论是 GUI 自动化测试还是接口自动化测试,数据准备都是开展工作的前提。在这里,用几篇帖子分享下做自动化测试的数据准备方法,也希望大佬提供更好的思路和建议。

分类

从数据创建的角度来说,数据创建的方法大致有这几种来源:

- 1.基于GUI操作生成测试数据
- 2.基于API调用生成测试数据
- 3.基于数据库操作生成数据
- 4.基于第三方库自建数据
- 5.结合多种方式生成数据

GUI 操作生成数据

基于 GUI 操作生成数据,是指使用自动化脚本或者人工执行业务流程生成数据。例如,现在需要测试登录功能,这就需要准备一个已经注册的用户,此时,可以通过 GUI 操作来创建一个用户 (无论是手工还是自动化脚本),然后再用新建的用户测试登录。这种方式简单直接,并且数据来源于真实的业务流程,一定程度保证了数据的准确性。然而,缺点也很明显:

- 1.创建的效率低每次的GUI操作只生成一条数据并且操作非常耗时
- 2.易封装通过GUI操作生成数据的过程其实就是在开发自动化case的过程加大了工作量
- 3.成功率不高GUI的变化直接会导致数据生成失败
- 4.引入了其他依赖数据生成成功的前提依赖于业务流程的正确性

一般情况下,基本不会使用这种方式生成数据,除非没有其他更好的方式来创建可靠的数据。不过,“操作 GUI 生成数据” 确是其他两种方式 “API 调用” 和 “操作数据库” 的基础。

API 调用生成数据

实际上使用 GUI 操作生成数据,本质上也是在调用 API。例如,使用 GUI 界面注册用户时,实际上调用了createUser的 API。要注意的是,一次 GUI 操作可能调用了多个 API,所以一般情况下,通常都把调用 API 生成数据的过程封装成数据准备函数。这种方式优势在于:

- 1.保证数据准确性;
- 2.执行效率高;
- 3.封装成函数更灵活可控

这种方式也不是十全十美,缺点在于:

- 1.并不是所有数据创建都有对应的API
- 2.业务很复杂的情况下需要调用多个API
- 3.需要海量数据时即使使用了并发效率也尽如人意

数据库操作生成数据

和调用 API 生成数据类似,数据库生成数据一般做法是,将创建数据需要的 SQL 封装成函数,然后再进行调用。这样就能直接通过数据库操作,将测试数据插入系统数据库。例如,还是用户登录,直接往userTableuserRoleTable两张表插入数据,即可完成注册。

这种方式的优势在于:

- 1. 效率高能在短时间内生成批量数据

缺陷也很明显:

- 1. 数据容易缺失一个业务操作设计到的表往往不止一张容易遗漏
- 2. 健壮性差SQL语句变化时封装的函数必须实时同步更新维护成本很高

第三方库生成数据

这种方式就比较直接,直接使用代码封装成函数生成数据。拿python为例,可以自己结合random()之类的函数随机生成数据,还可以使用faker项目地址)这样的第三方库:

from faker import Factory

fake = Factory().create('zh_CN')

def random_phone_number():
    '''随机手机号'''
    return fake.phone_number()

def random_name():
    """随机姓名"""
    return fake.name()

def random_address():
    """随机地址"""
    return fake.address()

def random_email():
    """随机email"""
    return fake.email()

结合多种方式生成数据

​ 实际上,实际应用中都采用多种方式相结合的方式生成测试数据。最典型的应用场景是,先通过 API 调用或者第三方库生成基础的测试数据,然后使用数据库的 CRUD 操作生成符合特殊需求的数据。比如:

# 注册新用户并进行绑卡
1. 使用封装的faker库随机生成姓名,手机号,邮箱等信息,并调用createUser API进行注册;
2. 查询userTableb表获得用户名,然后调用bindCard API实现绑卡。其中,bindCard API中使用的userID即为上一步createUser API中产生的用户ID;
3. 如有需要,通过数据库操作更新其他信息。

以上就是一个常用的创建测试数据的过程。


↙↙↙阅读原文可查看相关链接,并与作者交流