自动化测试中自动生成测试数据
上一篇 / 下一篇 2011-12-02 17:12:15 / 天气: 冷 / 心情: 平静 / 个人分类:KDATFFS
在进行自动化测试过程中,很多的框架的测试数据都是从外部(Excel,Csv,数据库)读取的,一般数据都是固化数据。显然这样做不够灵活,而且很多场景下这些数据需要频繁的改动,比如用户注册,第一次这个数据注册成功了,但是第2次再运行,很显然会失败,因为这个用户已经注册过了。这时候我们会想到生成随机数据,但是随机什么样的数据呢?这需要定义生成数据的规则,对于数据的匹配规则,我们很快想到了正则表达式,那么测试数据写成正则表达式,然后根据正则表达式来生成数据不是Perfect,确实是这样。但是对于正则表达式的反解析绝对是一个不轻松的工作,而且需要相当的正则表达式的知识。那么我们何不自己定义数据生成的规则呢?这就是我下面想讲的,如何定义自己的规则,然后生成对应的测试数据?
s(otv{4Hy%S/D0首先,我们要先定义规则标识,只有这样,数据被读取到代码后,它才会去解析数据。这样我们给出这样的标识Rule[],当测试代码读取到测试数据为Rule[]时,就知道这是一个需要解析的测试数据,调用解析方法进行GetReturnData(stringname)方法进行解析。Rule[]的[]括号中就是我们的数据规则,比如数据中固定的数据我们定义为F(…) ,随机数定义为R(…),随机字符串定义为S(…)等等。比如我们有这样一个数据规则Rule[F(fix)|R(5)|S(2)],这样在测试输入时就应该是输入一个fix+5位随机数+2个随机字符的数据。
yWc1z8Z5t1U*F s N\0 而因为定义数据规则后,输入的数据时不可预测的,那之后的测试过程中如果用到这个测试数据该怎么办呢?我们应该可以有个方法可以获取到输入的数据。那么在输入时我们就定义一个规则:Value1 =Rule[],就是说在输入数据的同时把这个值赋值给Value1。而这个Value1会被添加到一个泛型字典中,这样在以后需要用到该数据的地方我们就可以定义一个规则Rule[E(Value1)]来读取value1的值。
就这样,我们可以灵活的定义自己的数据规则,使测试数据更为灵活,简单,方便。
具体实现代码如下:
51Testing软件测试网3S1B?X,Hi
publicclassUtilityClass
{
privatestaticDictionary<string,string> returnData =newDictionary<string,string>();
staticUtilityClass()
{
}
publicstaticstringGetReturnData(stringname)
{
foreach(stringiteminreturnData.Keys)
{
if(name == item)
{
returnreturnData[item];
}
}
return"";
}
publicstaticstringGetTestDate(stringcommandArgs)
{
Regexregex =newRegex(@"(.*)Rule\[(.*)\]");
RegexreturnRegex =newRegex(@"(.*)=");
RegexfixeRegex =newRegex(@"(F\()(.*)(\))");
RegexrandomRegex =newRegex(@"(R\()(\d*)(\))");
RegexexpectedRegex =newRegex(@"(E\()(.*)(\))");
if(regex.IsMatch(commandArgs))
{
varitems = regex.Match(commandArgs).Groups;
string[] regItems = (items[2].ToString()).Split('|');
StringBuildersb =newStringBuilder();
for(inti=0;i<regItems.Length;i++)
{
//固定值
if(fixeRegex.IsMatch(regItems[i].ToString()))
{
varresult = fixeRegex.Match(regItems[i].ToString()).Groups;
sb.Append(result[2].Value);