datacollection是规范测试数据的一种方式。叫法其实都无所谓,你也可以给它取其他的名字。它的本质就是利用一个hash,将我们要准备的测试数据字段,提前规范好,包括这个测试模块要用的到测试字段的数量和名称。这样在团队协作过程中便于对方法的理解,避免重复定义。
它其实也是在以前的框架中测试数据和执行代码之间加了一层,我们可以叫它数据控制。这样代码不直接读取测试数据文件中的数据,而是读取这个datacollection中的数据。而datacollection的规范定义,可以保证代码数据控制中的一致性。我这里用ruby来举例说明,大家也可以自己改写成java等。
class MembershipPackageInfo
class << self
def generate(arg={})
temp = Hash.new
# General Information
temp['Name'] = nil
temp['Description'] = nil
temp['Category'] = nil
temp['Status'] = nil
temp['Assign_Pass'] = nil
temp['Pass_Layout'] = nil
temp['Catalog_Description'] = nil
temp['Print_Barcode_on_receipt'] = false
# Deferred Revenue Settings
temp['Enable_Deferred_Revenue'] = nil
temp['Revenue_Deferral_Period'] = nil
# Expiration Information
temp['Valid_Time_Period_after_issue'] = nil
# options
temp['Renewable_Membership'] = false
arg.each do |key,value|
temp[key] = value
end
return temp
end
end
end
这就是一个datacollection类,你可以忽略temp[]中括号里的内容,你只需要知道这就是你要定义的测试数据的字段名称,等号右边是你要赋予的初始值。其他内容都是ruby的一些语法,与本文的主题无关,感兴趣的可以自己去查阅资料。而在测试数据文件中定义如下,这里我们用的yaml文件:
package_info:
package_name: ''
Description: 'ANE-71495 Description'
status: 'Open'
Assign_Pass: 'System-wide'
Category: 'Common_Category'
Pass_Layout: 'Common_Use_Pass_Layout'
Catalog_Description: 'ANE-71495 Catalog Description'
Enable_Deferred_Revenue: 'Yes'
Revenue_Deferral_Period: 'Daily'
Valid_Time_Period_after_issue: 'Monthly'
Renewable_Membership: true
charge_info:
charge_name1: 'Common_Fee'
charge_name2: 'Package_Fixed_Discount'
测试代码中定义方法,给datacollection取值
def get_package_info
package_info = MembershipPackageInfo::generate
package_info = $parameters['package_info']
return package_info
end
$parameters[‘package_info’]是我们框架中取得yaml文件中测试数据的方法,大家根据自己的实际情况来取外部测试数据文件的值。package_info就是得到的测试数据。在外部测试字段的命名要与datacollection中哈希的key值一致。
有时候根据不同的业务场景,测试值会不同。在datacollection中定义好该字段值。
class MembershipChangePackageFeeDetailInfo
class << self
def generate(arg={})
temp = Hash.new
temp['charge_name_lst'] = nil
arg.each do |key,value|
temp[key] = value
end
return temp
end
end
end
在我们的yaml文件中该字段定义了两个值,
charge_info:
charge_name1: 'Common_Fee'
charge_name2: 'Package_Fixed_Discount'
在代码定义两个方法分别取得这两个值
def get_common_charge
charge_info = MembershipChangePackageFeeDetailInfo::generate
charge_info['charge_name_lst']=$parameters['charge_info']['charge_name1']
return charge_info
end
def get_fixed_discount_chage
charge_info = MembershipChangePackageFeeDetailInfo::generate
charge_info['charge_name_lst']=$parameters['charge_info']['charge_name2']
return charge_info
end
datacollection看似有点重复,但是可以使得我们的代码更结构化,更规范。