一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就来谈谈关于软件测试中的“自动化测试数据准备”。
前面也提到过软件自动化测试数据对于自动化测试的重要性,这节来专门讨论这个话题。(本节内容部分来自茹炳晟先生的演讲内容)。
1. 测试数据的创建方法
测试数据的创建方式分为“通过API来创建数据”“通过数据库来创建数据”和“通过API和数据库来创建数据”。
● 通过API来创建数据是指通过产品代码来创建测试数据。比如测试登录模块,可以用产品注册模块先注册一个用户,然后用这个注册的用户登录系统。其优点是:因为它与开发代码同步,所以测试数据不会出错,可以忽略结构变化;其缺点是:创建速度慢并且数据的多样性有限。
● 通过数据库来创建数据是指测试代码直接访问产品数据库来产生数据。还是测试登录模块,通过测试脚本直接访问数据库,插入一条用户数据,然后用这条用户数据登录。其优点是:创建数据的速度快并且可以适应数据的多样性;其缺点是:数据结构不能随开发代码变化而变化,一旦产品数据结构发生了变化,通过API来创建数据测试程序不要做任何变动,而通过数据库来创建数据就要按新要求维护测试代码了。
● 通过API和数据库来创建数据即同时通过API和数据来创建数据。比如测试修改订单,首先通过数据库创建用户信息、商品信息和该用户的配货地址信息,然后通过API来创建订单信息(订单所属的用户、订单中的商品、以及订单配货地址信息从前面通过数据库创建而获取)。
对于何时采用API何时采用数据库来创建数据?还是采用混合方式来创建数据?是没有一定的定论的,它需要根据产品的特性和测试开发的喜好或者团队的统一指导来决定。
2. 测试数据的创建时机
测试数据可以在测试脚本运行之前创建,也可以在测试脚本运行当中创建。在测试脚本运行之前创建的数据叫做开箱即用数据(Out-of-box),也叫死水数据;在测试脚本运行当中创建的数据叫做实时使用数据(On-the-fly),也叫活水数据。开箱即用数据容易造成脏数据,而实时使用数据会延长测试脚本执行的时间。一般固定的长时间不变的数据常常采用开箱即用数据,比如商品、收货地址等;而动态变化的数据采用实时使用数据,比如优惠券、订单等。对于登录用户的数据即可以使用开箱即用数据或者实时使用数据。另外特别指出开箱即用数据和实时使用数据即可通过API来创建数据也可通过数据库来创建。
3. 测试数据的历史演变
最初阶段测试数据的创建如下。
def create_user(username,password,email,telephone,contact){
}
对于测试登录模块,只需要关注用户的username、password属性;对于测试修改用户信息模块只需要关注用户的username、email、telephone属性;对于测试订单模块就需要关注用户信息的所有属性了。所以简简单单用这么一个方法是不太适用于软件自动化测试代码对测试数据的需求了。因此,测试数据做了如下的修改。
def create_default_user(){
username=”Cindy”
password=”123456”
email=”cindy@gmail.com”
telephone=”13666167645”
contact=”01785412”
create_user(username,password,email,telephone,contact)
}
def create_login_user(username,password){
email=”cindy@gmail.com”
telephone=”13666167645”
contact=”01785412”
create_user(username,password,email,telephone,contact)
}
def create_info_user(username,password,email,telephone){
contact=”01785412”
create_user(username,password,email,telephone,contact)
}
方法create_default_user使用的均为默认设置;方法create_login_user为测试登录功能准备的用户数据,其中username、password在调入参数时设置,其他使用默认值;方法create_info_user为测试用户模块功能准备的用户数据,其中username、password、email、telephone在调入参数时设置,其他使用默认值。最后同一调用方法create_user。接下来进行更深入的优化。
user_builder.build()
用默认值建立用户数据。
user_builder.with(username).with(password).build()
建立用户数据,username、password在运行的时候创建。
user_builder.with(username).with(password)
.with_buide_strategy(buid_strategy.CRATE_ONLY)
.build()
建立用户数据,username、password在运行的时候创建,其中buid_strategy属性如下。
● CRATE_ONLY:测试数据在当前马上创建。
● SEARCH_ONLY :寻找产品数据库中是否有符合条件的数据,如果没有返回信息。
● SMART :在产品数据库中进行有限搜索,如果没有再创建。
● GLODEN_DATA_ONLY :返回事先创建好符合条件的数据。