测试工具链——Python实现高效构造测试数据的设计策略

无论是手工测试还是自动化测试都会遇到数据构造的测试需求,结合自己实际工作,大多数测试场景是结构化数据的构造,偶尔会涉及非结构化数据及实体文件数据(人脸识别算法测试中使用图片作为输入数据)构造,此处暂不介绍,了解了结构化数据构造设计思想,举一反三,非结构化数据构造也不是难事。

另外插一句,测试人员应具备技术解决思维,哪怕现在所做的是手工测试。

结构化测试数据构造中的几个难点:

  • 需要根据不同字段属性构造不同的值,如手机 码字段,需要构造合法手机 码。
  • 资源与资源(表)之间的关联性,比如多个表的手机 码的值要保持一致。
  • 部分字段要保持唯一性,比如唯一ID(MD5或自增序列)。
  • 部分字段要保持时效性,比如入库时间字段,每次测试要保持入当日或昨日数据。
  • 存在根据原始数据修改部分字段、生成全新数据的多种数据构造场景。
  • 以上几个难点如果通过手工的方式解决,其构造成本、维护成本难以想象,遇到此类问题需要尝试着从技术的角度解决,首先技术解决不是蛮干,粗鲁的解决上面的难点,应尽可能考虑数据构造工具的通用性、易用性、易维护性,技术解决方案也应保持一定的收敛。

    数据构造的需求除了来自功能测试,还来自性能测试,因此要考虑如何兼容满足性能测试场景下的大量数据的构造需求。

    设计思路

    以表结构定义配置、数据构造映射配置(Yaml文件)描述数据构造任务,其中表结构定义配置描述表结构及数据构造方式(全新构造、修改数据);数据构造映射配置描述构造任务名称、字段与值得映射、构造数量。通过先提前加载所有构造函数,然后按照每个构造任务,依次加载构造任务,逐一完成。一般情况一个构造任务对应一张表,若存在资源管理(即所有表的字段具有资源编码),一个构造任务可以对应N张表。

    接下来,以具体示例分享下如何通过Yaml文件简单配置实现数据构造,同时解决上述几个难点,注意浏览图片中内容,含设计策略,具体如下:

  • 表结构定义配置:用来描述每张表的表结构,以及原始数据存储路径,这里有个约定,如果该路径有值,则认为修改原始数据,若该路径没有则认为构造全新数据、Yaml文件样例如下,item_basic_information表需构造全新数据、user_basic_information表则需要根据原始数据修改指定字段即可。
  • 表结构定义配置

  • 数据构造映射配置:每个表都是一个独立数据构造任务(可以通过参数化、配置字段编码实现多表的覆盖,无需写多个数据构造任务配置,此处不介绍,具体在后续文章中进行详细介绍),每个构造任务包含任务名称、字段结构获取、字段值映射三个必填配置项,当构造全新数据时,还需再添加构造数量、数据输出路径配置。
  • 数据构造映射配置

    数据构造逻辑

    接下来介绍下,工具内部的数据构造逻辑。

    每个构造任务执行时,首先加载“数据构造映射配置.yml”( Yaml文件本质上是一个Json)文件各配置项,加载过程若配置的值为函数(即”${函数名(参数,)}”表示,如${IPHONE()} )则执行该函数,返回函数的值,若值为变量(即”$参数名”表示,如TableName)则取变量值。

    这里有一个需要额外说明下,上述的函数其实可以理解为各各小插件,这些插件都写在一个模块里,如builtin.py,那么在加载配置之前加载builtin.py模块中的所有方法,使得能够在加载过程中执行这些函数。具体实现如下:

    然后使用Struction函数(实现读取“表结构定义配置.yml”,返回所有表的表结构及数据存储路径)根据TableName获取其在资源(表)结构定义中的字段配置,同时获取Path的值。遍历表结构中各字段(按字段顺序),若字段在该构造任务的字段值映射配置(SignMap)中,则取对应值进行替换,若不在则不改变(Path值不为空,即修改数据时)或回填空(Path值为空,即构造新数据时),同时当全新构造数据时,需根据数据构造数量(CreatNum),构造对应数量的文件及每个文件的数据量。

    Path为空则(构造新数据时),需根据数据输出路径(Target)配置,按照对应文件命名规则,存储至指定路径中(OutFilePath)。

    如此,我们实现了结构化的数据构造,通过灵活的配置描述,实现批量数据构造(全新构造、修改)。当然我们还可以基于这套设计,进行二次优化,使得配置更加简单。

    若对你有所帮助, 、点赞支持。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年5月9日
    下一篇 2019年5月9日

    相关推荐