Andor参数化测试框架改造

上一篇 / 下一篇  2012-07-27 09:06:27 / 个人分类:杂谈

51Testing软件测试网J%@-M%@?

  1、Junit参数化测试

E8p'Mw*h"NZ3e:y'PG051Testing软件测试网]@b_ Vk

  作为测试人员,您是否遇到过这样的测试场景?需要测试的方法都是大同小异:代码结构都是相同的,不同的仅仅是测试数据和期望值。为了解决这个问题,您可以采用juint参数化测试。51Testing软件测试网_6pLh Q8?

m%] \1Uc^{?8F0  如:需要测试的方法:

2@ Ax\siKa#_(N0

public int add(int a,int b){51Testing软件测试网#Mfcv(n8j6Q,UT f

return a+b;51Testing软件测试网u_h EN%uR fZB

}51Testing软件测试网7Xo8fd?kR

+m&h E Y`0  测试代码

*J,I!Pq`/as.B TL0

@RunWith(Parameterized.class) //参数化测试的类必须有Parameterized测试运行器修饰

1g7\J?)Wh0|!Hw.JtT0

public class AddTest3 { 51Testing软件测试网#~5FP5Jv&M

   private int input1; 51Testing软件测试网(M'_ml6C;I*oh B }

   private int input2; 

&m vPJ-R/e9a0

   private int expected;51Testing软件测试网0v(FC,^1\)W

   /**51Testing软件测试网M0y E,Q FwuAH^

    *准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求:

b7f5caHY0

        1)该方法必须由Parameters注解修饰

'w2M9q1z\4PI%ox0

        2)该方法必须为public static

8GB:eA$a#o0i s6Z8W!u0

        3)该方法必须返回Collection类型

m/{*W!Wz,HTr)wgF ~y0

        4)该方法的名字不做要求51Testing软件测试网 y_r'JA _6L8u O

        5)该方法没有参数51Testing软件测试网%Jf.f9I kh4Oi6^

    * @return

ke!Q F @)n&`0

    */ 

3F2d'w1k |/V%Y m}-v%K0

   @Parameters 51Testing软件测试网e7B6BP+w]9O.q

   @SuppressWarnings("unchecked") 

"To-o4u4e*WkJ0

   public static Collection prepareData(){ 

A hojb S H0

       Object [][] bject = {{-1,-2,-3},{0,2,2},{-1,1,0},{1,2,3}}; 51Testing软件测试网8Bs#wG7Mw"l L[

       return Arrays.asList(object); 

5lViG L[\4V2G0

   } 51Testing软件测试网1]aRr ex$GC&pf

     51Testing软件测试网7lo{n%S)dTWd

   public AddTest3(int input1,int input2,int expected){ 

&^{#q:k [,iS0

       this.input1 = input1; 

OD D+piW$[h*X)X0

       this.input2 = input2; 

0F sS/AM0

       this.expected = expected; 51Testing软件测试网-?a#}1D`Q%Jr ~

} 51Testing软件测试网"J4af'Hw d

 

,~ Q-Zk"dN[2i![W0

   @Test 

6Z2C6OOM0

   public void testAdd(){ 

)hN8q&jE/w&v0

       Add add = new Add(); 

S:s:B%j`!at {tN0

       int result = add.add(input1, input2); 

B/^7A\?#kL#C'e0

       Assert.assertEquals(expected,result); 51Testing软件测试网 JR4e _,l

   } 51Testing软件测试网*Z:Qh.~Upt9I

     

M6^O `v0

}

d P$]Hb*ym5|;n~0

CsWPp QzB0  测试结果:testAdd测试用例对应准备数据分别被运行了四次,如图:51Testing软件测试网$e_8O:cbI

51Testing软件测试网.e vD\ I/`A!~-JO

51Testing软件测试网2w%X ~I:ODi8zU3y

  2、Andor测试框架为什么要采用参数化测试?

;T4N2g5B(M&m k/]T051Testing软件测试网)q*`Cc M(]kZW~A

  项目的重要特点:数据的分布与上层数据查询分离,无论数据的分布如何变化,上层都应该能够查出正确的结果。

zc_k)Qw[wEZn051Testing软件测试网3`D f4C(u1Kjl

  项目测试的特点:51Testing软件测试网3k7T$i CiH[!Jw-id

2Kab\2H Z(s0  数据分布的多样性:数据分布在一个group一个atom,一个group多个atom,多个group多个atom。51Testing软件测试网USf3~;u9Ct5e

51Testing软件测试网VnM(zFGfY.B2R4Q

  数据分布规则的多样性:多机情况下,可以使用多种分库分表规则。51Testing软件测试网-]e8j.g5wO._@3y.`

sy4jt u,^1PCK+C0  采用数据库的多样性:存在bdb数据库,mysql数据。

y{rG+yk5|T0

Kt H"Y*[}3V:bx'u0  共同特性:不管数据分布如何,同一条sql语句得到的结果是一样的。51Testing软件测试网D3yTTaeSJ rk;b/x

51Testing软件测试网;C[ EV.XV

  3、遇到的问题?

p8oM7}F051Testing软件测试网9zc.kk5zg0uP^tlw

  参数化测试只能做到测试代码结构都是相同的,不同的仅仅是测试数据和期望值。

_dR-m ] E^&z#]0

"gI-}Iw.M0  怎样通过测试数据的不一样达到能够测试各种数据的分布场景,是该测试框架需要解决的关键问题。不管数据分布如何,同一条sql语句得到的结果是一样的,但是不同的数据表结构得到数据最终的结果也不一样,怎样根据数据表设计期望值也是需要解决的关键问题。51Testing软件测试网 c h3vLg6k

51Testing软件测试网#P'^rNv.J(d @!S

  4、解决方法

2L CV bx(F^9l051Testing软件测试网&]EW U1K!^

  根据不同的数据分布特点定义不同的表,如简单以bdb数据库数据分布的多样性为例:51Testing软件测试网%Jgz7A o

51Testing软件测试网/\Q@IEXBM

  一个group一个atom表:normaltbl_oneGroup_oneAtom

t7t A-q(m`-|/@)N8]051Testing软件测试网.?;~jJH*s&dsP

  一个group多个atom表: normaltbl_oneGroup_mutilAtom

.A)|MsIzl4\,v!khj051Testing软件测试网a8f i'c$U$@

  多个group多个atom表:normaltbl_mutilGroup

V4k4x8YH Hf#h0

'RvS(r$ivB)D0  分别定义这三张表,这三张表分表对应相应的数据分布规则。因此通过调用对应的表即可以访问对应的数据分布类型。51Testing软件测试网[ [#] dkc

51Testing软件测试网 r tv&eO5Fn2JC)b

  将这三张表的表结构设计为完全一样。因此同一条sql语句,在这三张表中操作的结果是一样的。51Testing软件测试网3e[#}*d\

51Testing软件测试网!k1V!_/p"B'~$[][

  通过以上的方法,就可以通过如下类型的参数化测试实现一个用例,测试到多种数据分布场景。51Testing软件测试网z:IhN![3xy;v&l {

51Testing软件测试网;^.s#J5O T3D

w_*^x8~ R h6l }1VH0

@Parameters

*`&M*z B+j*E)f)Q0

public static Collection prepareData() {51Testing软件测试网 S sw]5sB

Object[][]object={{"normaltbl_oneGroup_oneAtom"},{ "normaltbl_oneGroup_mutilAtom" },

k?(@(dM'}L0

{ "normaltbl_mutilGroup" }}51Testing软件测试网3mk$| n5Av1v

          return Arrays.asList(object);51Testing软件测试网a3t|FC}`2q

}51Testing软件测试网 e*mEe~

 

2OT jwQA G&Q0

public DeleteTest(String tableName) {51Testing软件测试网 |+bpE,M.r

          this.normaltblTableName = tableName;51Testing软件测试网 VR[Lplj

}

[ WN|4D0

 

`/o.U CZ-^Mo0

 

~E*{Ra6ISp0

@Test51Testing软件测试网WyHZUR.[(K.x!X

public void deleteAll() throws Exception {51Testing软件测试网Mlw#wtE1@i

          String sql = "DELETE FROM " +normaltblTableName;51Testing软件测试网"c2_,f0Y qx

          rc = execute(null, sql, Collections.EMPTY_LIST);51Testing软件测试网Y9eo$T-u:wB

          Assert.assertNull(rc.getException());

yK/F^}*^dq0

          Assert.assertEquals(MAX_DATA_SIZE,rc.getIngoreTableName(rc.next(), ResultCursor.AFFECT_ROW));51Testing软件测试网+~MJ Is

}

"o;E$j K r{$x5\ H0

` T8k*Xd!@:D0  如需添加新的数据分布测试场景,只需添加如下步骤即可完成:51Testing软件测试网 [3G4c#}+o!E L

gD l A,LX \rwt#b&J|0  1)添加对应的表名51Testing软件测试网yn{7YW9K)F'`

51Testing软件测试网Q{3nkQ$a2owWE

  2)表所对应的规则,51Testing软件测试网oBo.R%QM/X:K2^#}eH

\%vrqeUq&d*z/e0  3)准备数据的参数中加入表名。

&J?3EA%V zs2@0

u^iF.~-M.{3Re0  5、小结

6k p3s,iw051Testing软件测试网};X5[X a,Aq

  使用新的测试框架,非常有利于将已经想过的场景在新的数据分布架构上进行复制性测试,能够极大的减少人工成本。目前用例数为333个,而实际的用例运行数为3046个,也就是每个用例平均重复被用于10个不同的场景测试。

Ehn T@fi*i/| i0

TAG:

 

评分:0

我来说两句

Open Toolbar