更多的文章,访问我的个人博客:www.cesoo.info

《测试框架》摘选-6 单元自动化测试-数据驱动

上一篇 / 下一篇  2009-11-23 23:19:40 / 个人分类:自动化测试框架

,?&t&}o3|J$`#a01.2.2 第二步:框架—数据驱动51Testing软件测试网k&l6F#rt?c
在经过第一步之后,虽然可以自动化测试,但是每次运行都会用“测试”,“UTF-8”两个常量做参数,这达不到我们的201个测试数据组合的目标。为了解决这个问题,我们要对常量进行参数化,使得每次运行都要提交不同的数据。这个过程叫做数据驱动。如图6-4所示。51Testing软件测试网3P/Ya5~5E|
 51Testing软件测试网3mX(fz%]e)\L ^!L7wO
图6-4 URLEncoder单元测试数据驱动51Testing软件测试网u%^7R+r#d{})F
数据驱动要考虑如下三个因素:
^ B [,Y9sU-r0(1)数据源选择什么类型?
1g%U0JS3p0 数据源有很多种选择,比如51Testing软件测试网%ZM-~RA.J1z g:i-v
1) 文本文件51Testing软件测试网*D"{.`'cCbL
2) 数据库51Testing软件测试网&zjy I&^a-D*z:c
3)excel
JW;s9k7j+` [$C04)xml51Testing软件测试网#K0I,{!c$D
5)其他51Testing软件测试网;vR*Xme/AJ5f&t
选择哪种数据源,要根据项目的需求和特点而定。以当前的项目要求来看,URLEncoder的单元自动化测试需要频繁地从数据源读取数据,数据库显然在性能上不太合适。另外,数据源至少要能存储不同语言的字符,比如德文,中文,日文,韩文等等,对数据源的要求就是要很好地支持unicode,因此xml和excel入围。如果我们的单元自动化测试要求在unix和windows下都能运行,那么excel作为windows应用被淘汰,而xml最终胜出。51Testing软件测试网#p#H Y|4|
(2)数据如何被描述和组织?
1o'\WFe-g O?0 在第一步里,我们看到有三个常量,strToEncode,strEncoding和strExpected。根据这个信息,生成mydata.xml如下。
qA,].Z"S+` i0<?xml version=”1.0″ encoding=”UTF-8″ ?>
^^\r J0`AS0<DataPool>
4C,JV0D;rU8q*K6Q.t0   <EncodeData id=”1″>
6?4jx^%Q F$c0       <EncodeString>NLS_en_abcdefghigklmnopqrstuvwxyz</EncodeString>51Testing软件测试网vS9wB$qp?jK
       <Charset>US-ASCII</Charset>51Testing软件测试网cY ^j? ~jh{ `
       <Expected>NLS_en_abcdefghigklmnopqrstuvwxyz</Expected>
"O%{ |N.NRA~"D3y0   </<EncodeData >51Testing软件测试网w VA+Xvpe2gU
   <EncodeData id=”2″>51Testing软件测试网.D&XA)P1UT
       <EncodeString>NLS_fr_àèòù</EncodeString>
R]!rQj` ]yL f0       <Charset>utf-8</Charset>
${ ^4ksO.~&D C&l0       <Expected>NLS_fr_%C3%A0%C3%A8%C3%B2%C3%B9%3F</Expected>51Testing软件测试网xTI's0EK|'lz
    </<EncodeData >
XptU.yT0    <EncodeData id=”3″>51Testing软件测试网RZ"\ei8KX@
       <EncodeString>NLS_zh_软件自动化测试框架-柳胜</EncodeString>
C}\gh*N#A(L0       <Charset>gb2312</Charset>
7eHIQyg0<Expected>NLS_zh_%C8%ED%BC%FE%D7%D4%B6%AF%BB%AF%B2%E2%CA%D4%BF%F2%BC%DC-%C1%F8%CA%A4</Expected>51Testing软件测试网 h.j5@LG%Zp g)w
     </EncodeData>51Testing软件测试网0F | X3yX a
    <EncodeData id=”4″>
|2^ V,K \@7Ny1]!i)N0       <EncodeString>NLS_ja_なリンクをクリックすると</EncodeString>
s _1U(m-M0o;Q{,e,Pf1I0<Charset>ISO-2022-jp</Charset>    <Expected>NLS_ja_%1B%24%42%24%4A%25%6A%25%73%25%2F%24%72%25%2F%25%6A%25%43%25%2F%24%39%24%6B%24%48</Expected>51Testing软件测试网%G"] u7B0H SX*i
    </<EncodeData>51Testing软件测试网H%U H"z"J`3c
</DataPool>51Testing软件测试网'~E9Cks$tR

51Testing软件测试网t|?M&t^

(3)代码实现data层51Testing软件测试网j?&RVN,JeO
驱动函数如下:51Testing软件测试网^3A1Fm0b Y.`
import java.net.URLEncoder;51Testing软件测试网M7}H6R y_'T
public class TestURLEncoder51Testing软件测试网O hdL s;l*S
{
%BuodQ'I0   public static void main(String args[])
$j#uW%J-e+_N0  {
W l Z)dZB0try{51Testing软件测试网"C&\!u*H9Y7I
//初始化数据源,即完成从xml文件到对象的存储
o1va3A0Rr5m0   MyXMLData data=new MyXMLData();
I2|)o:Zb1H0   For (int i=0;i<data.getSize();i++)
KXO?:`_\/vG]0  {
Z#R&} A }g_0String strToEncode = data.get(i).getValue(“EncodeString”);
4?C:lDY"?sj x0String strEncoding= data.get(i).getValue(“Charset”);
1TSI*nE7rFhqp0String strExpected= data.get(i).getValue(“Expected”);
lu-rjPt5`0;
RY)O WL0//调用URLEncoder51Testing软件测试网B{x)} bT.pB
 String strAfterEncoded = URLEncoder.encode(strToEncode, strEncoding));
;W)g&sm,G\&V0 //对比51Testing软件测试网A8OT3`6e \,g
 If(strAfterEncoded== strExpected)51Testing软件测试网1IbX[ z!R:r
   //输出
1|-|1bdK3m0  System.out.println(”Pass: Verification is successful”);
3Ayd/{JX x0Else
!c i3}Y7?H7\,D0  System.out.println(”Fail: Verification is fail”);51Testing软件测试网5Q&kY;\K gFk5C$V)h
}
7j2o6p0h xR%X%\0}51Testing软件测试网%AHk)a/J+p
catch(Exception e)
}F$ipCk0{
Fh jg | r0   e.printStackTrace();51Testing软件测试网{%m8];}t5m(N4H
   System.exit(1);
-?r#yA0} ~%R8y7M0 }51Testing软件测试网%ga6V,YbEE
}51Testing软件测试网YT;t&|6|a&s
}

'_F5V7L[Uh^'B051Testing软件测试网1H4TP!S%hS

作了如上修改之后,单元自动化测试框架实现了两个目的。
t:? l;F.jS]0(1). 每次测试URLEncoder的数据都通过MyXMLData对象从数据源mydata.xml中提取
5_a o U-g;\#h n:p0(2). mydata.xml有多少条EncodeData记录,For循环就会运行多少次,从而实现了数据源灵活扩展的目的。51Testing软件测试网RF-aTBq(E
为了达到上述的目标,我们需要自己开发MyXMLData类,至少实现三个方法
$b!@djnOY01)MyXMLData()初始化方法,实现从xml文件里读取数据51Testing软件测试网(oUJ#bE3fPFQ
2)MyXMLData.get(int i)方法, 按序号获得某条记录,以哈希表的方式返回
m.F7z[1V3xM03) MyXMLData.get(i).getValue(String)方法,通过key名获得某条记录的字段值,即我们想要的EncodedString,Charset,Expected。51Testing软件测试网*OZu;ZAh Lsk

H @:bu+{H"UiH0【注意】:MyXMLData就是我们测试框架的data层的雏形。

,B7C)Clm n051Testing软件测试网s*A~2a:Ej

【注意】:第二步的整体思路其实就是Junit的功能雏形

)gf}Ey NH \ oh0

TAG:

carol2000的个人空间 引用 删除 carol2000   /   2011-07-13 16:18:51
XML固然强大,但是远远没有excel易读。如果让初学者进行维护测试数据,会很难很难
carol2000的个人空间 引用 删除 carol2000   /   2011-07-13 16:18:03
3
 

评分:0

我来说两句

Open Toolbar