目前很多互联网软件应用,除了应用程序本身外,后台都会有数据库做支撑。软件款测试人员在测试这种类型的应用软件时,除了需要设计测试用例外,还需要准备相应的测试数据。可以说准备测试数据也是作为软件测试的一项必须的工作。如果没有正确的测试数据,测试过程有时候就无法很好的执行,测试结果也会不准确。在实际工作中创建测试数据的过程,往往需要很长的时间,有时候多影响到项目的进度。下面将从平时测试一些实际应用出发,整理了如何准备测试数据的方法,和大家分享下,期待对大家有所帮助。
测试数据的格式和内容是来源于我们设计的测试用例提取出的需求和被测软件的接口入参。一般创建测试数据的方法分为手动创建和采用程序的自动化创建两种方法。下面我们结合实际分别来谈谈这两种方法。
一、手动创建测试数据的一般有如下几种方法:
1) 手动创建订单测试数据:在测试环境下,我们根据下单流程和业务需求,来模拟用户购买下单,选择货到付款或者在线支付,从而得到自己想要的一个订单的数据,这种方式适合于需要的测试数据少的情况,基本常在联调测试或者系统测试完成后的验收测试阶段。
2) 通过SQL语句修改数据库的方式:一般我们被测应用程序后台都有数据库来存储数据,这样我们可以通过一些SQL语句来创建属于我们的测试数据。首先我们登录测试环境下的数据库主机,可以用where查询条件来筛选定位部分符合某些条件的测试数据库记录,然后利用update方法来更新我们想要的字段名和对应的字段的value,从而创建了符合条件的一批测试数据。
3) 测试数据的备份导入:在我们本地机器上存储了一些符合条件的保存在excel文件或者DB文件的备份,我们可以通过导入数据的方式,来实现创建合适的测试数据。
4) 线上数据导入到测试环境:涉及到线上环境,这个要谨慎。一般要求事先进行调研,先确定线上的数据是否可以按照自己设置的条件准确地分流到测试环境,同时这些数据是直接使用还是需要加工后才能使用。一般都有专门用于测试的预发布环境(线上的测试环境),以及分流条件的配置,可以控制分流到预发布环境的数据数量。
二、自动化创建测试数据的方法:
自动化创建测试数据基本上都是用自动化程序来实现的,下面以Python来说明下常见的几种情况:
1) Web页面创建测试数据:如果我们需要手动在web页面上点击一系列操作,才能完成下单的操作,我们可以考虑用Python加selenium的脚本是实现,当需要下单的时候,只需要运行一下脚本即可;实例代码如下:
from selenium import webdriver
import time
driver = webdriver.Firefox()
##下面定义一些操作和处理方法,举例:
driver.find_element_by_id("kw").send_keys("money is coming")
time.sleep(2)
driver.find_element_by_id("su").submit()
time.sleep(3)
driver.quit()
2) 数据中包含数字(要求不重复)参数的处理方法:当我们创建的测试数据中,需要不重复的数字作为参数的时候,我们可以考虑用Python自带的random函数,举例如下:
import random
#用for循环指定数据的多少
for i in xrange(1,5):
#生成随机数的大小可以由上下限指定,
num = random.randint(1,20000)
#也可以直接是 data=num,看你的数据模板是什么
data = “abc d%def” %num
print data
3) 数据中字符串(要求不重复)的处理方法:当我们创建的测试数据中,需要不重复的字符串作为参数的时候,我们可以考虑用Python自带的uuid函数,举例如下,
import uuid
#用for循环指定数据的多少
for i in xrange(1,5):
str = uuid.uuid1()
#也可以直接是 data=str,看你的数据模板是什么
data ="abc s% def" % str
print data
4) 数据库中批量数据的修改方法:也可以通过Python脚本加SQL语句来完成,举例如下:
import pyodbc
conn=pyodbc.connect('DRIVER={SQLServer};SERVER=192.168.1.1;DATABASE=TEST;UID=XXXXX;PWD=XXXX)
sql = "update tablename set productID =xxxx,quantity=xxxxx where orderID in( X1,X2,...Xn)"
cursor = conn.cursor()
cursor.execute(sql)
resultRows = cursor.fetchall()
nums=len(resultRows)
print nums
以上仅仅列举了一些常用的创建测试数据的方法,实际工作中,远远不止这些方法。在平时的项目测试过程中,有时候并不是单一的运用某种方法去创建测试数据,可以将手工方式和自动化方式结合起来,灵活运用多种方式去创建不同测试阶段需要的测试数据。同时,有经验的测试工程师平时都会保存一些常用的测试数据(比如,订单id,数据库备份,数据模板等等)。
随着互联网软件应用越来越多,针对不同场景的测试用例也日益复杂化,很多情况下需要专门的测试数据来支持。在不久的将来,如何快速地创建测试数据,也是测试工程师的重要能力之一。 将来的IT时代,将是数据的时代,测试人员也要与时俱进,做一个Data达人。