51Testing丛书连载:(十三) 互联网单元测试及实践

发表于:2008-8-26 17:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈卫俊 赵璨 周磊等    来源:51Testing软件测试网

7.4.3  编写测试用例

  我们的测试代码是在Eclipse下开发的,测试框架以JUnit4为核心。每一个JUnit的测试类对应一个Web Service接口。针对每个接口我们设计测试用例,测试用例与测试数据一一对应。

  以checkBalance为例,测试用例的设计必须要覆盖所有参数的等价类。checkBalance一共有3个参数,针对每个参数列出可能的等价类:

  1.appId:空值、数据库不存在的ID、数据库存在的ID。

  2.appInstanceId:空值、数据库不存在的ID、数据库存在的ID。

  3.checkAmount:checkAmount<0;checkAmount=0;checkAmount>0。

  接着再从业务和设计的角度列举出各种初始状态,例如:

  1.appId匹配/不匹配appInstanceId;

  2.appId和appInstanceId对应的用户账户存在/不存在;

  3.账户的余额小于/等于/大于标准金额。

  最后对罗列的各种初始状态进行组合,筛选出有效的测试用例,并确认每种组合对应的结果。可能还需要根据覆盖率的反馈进一步完善测试用例的设计。

  测试用例的设计完成后,用例将被转化为测试类,以及测试类中的测试方法。在编写测试类时,整个工作可以被分成几大块,首先是清理测试数据库、准备测试数据,再调用Web Service接口,最后进行断言判断调用结果是否正确。这里以一个测试用例说明测试类的编写模式。

代码7.14  测试用例代码

01 package com.test.api.account;

02 

03 ...

04 

05 public class TestCheckBalance {

06  private AppConsumeServicePortType service;

07 

08  protected static DbUnit dbU;

09 

10  IDataSet dataSet, expDataSet;

11 

12  private static String testDataDir = "com\\test\\api\\account\\";

13 

14  private String serviceUrl = " http://10.0.4.138:1688/webservice/App Consume       Service";

15 

16  @BeforeClass

17  public static void connection() throws Exception {

18   String driver = "oracle.jdbc.driver.OracleDriver";

19   String url = "jdbc:oracle:thin:@10.0.4.194:1521:test";

20   String user = "uid";

21   String password = "pwd";

22   dbU = new DbUnit(driver, url, user, password);

23   dbU.setSchema("USER_SCHEMA");

24  }

25 

26  @Before

27  public void setUp() throws Exception {

28   deleteData();

29   prepareData();

30  }

31 

32  public void prepareData() throws Exception {

33   IDataSet dataSet = dbU.getDataSet(testDataDir + "testdata\\app. xml");

34   dbU.insertData(dataSet);

35 

36   expDataSet = dbU.getDataSet(testDataDir + "ACCOUNT_EXP.xml");

37  }

38 

39  public void deleteData() throws Exception {

40    QueryDataSet queryDataSetDel = new QueryDataSet(dbU.get Connection());

41    queryDataSetDel.addTable("ACCOUNT", "select * from user_schema. account");

42   dbU.deleteData(queryDataSetDel);

43  }

44 

45

46  @Test

47  public void testRoundUp() throws Exception {

48   String appId = "testappId";

49   String appInstanceId = "testInstanceId";

50   double standardAmount = 1.005;

51   String result = null;

52 

53   connectWebService(testDataDir + "0001.properties", "0001", "0001");

54   result = service.checkBalance(appId, appInstanceId, standard Amount);

55 

56   // 查出account表中实际数据

57   QueryDataSet queryDataSet = new QueryDataSet(dbU.get Connection());

58   queryDataSet.addTable("USER",

59     "select * from user_schema.account where app_id = '" + appId

60       + "'");

61   ITable filteredTable = DefaultColumnFilter.includedColumns Table(

62     queryDataSet.getTable("ACCOUNT"), expDataSet.getTable(

63       "ACCOUNT_EXP").getTableMetaData().getColumns());

64 

65   // 断言比较返回值和期望值是否一致

66   assertEquals(result, filteredTable.getValue(0, "remaining_ amount")

67     .toString());

68  }

69 }

  第16~24行,初始化数据库连接。其中第21行采用单件模式,保证测试过程中只生成一份数据库连接实例。

  第26~30行,在每个测试用例执行前完成测试数据的清理和数据准备。

  第53~54行,调用Web Service的checkBalance方法。

  第57~63行,取出ACCOUNT表中实际的余额。

  第66~67行,检查返回值是否等于实际余额。

  测试用例写好之后,再用测试套件将测试代码组织起来:@SuiteClasses({TestCheck Balance.class})。

代码7.15  TestSuite.class

01 package com.test.api.account;

02 

03 import org.junit.runner.RunWith;

04 import org.junit.runners.Suite;

05 import org.junit.runners.Suite.SuiteClasses;

06 

07 @RunWith(Suite.class)

08 @SuiteClasses({TestCheckBalance.class})

09 public class TestSuite {

10 

11 }

连载一 连载二 连载三 连载四 连载五 连载六 连载七 连载八 连载九 连载十 连载十一 连载十二

本文选自:《51Testing软件测试作品系列》之三的互联网单元测试及实践,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!

版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们

本书章节节选连载已完。想了解更多内容,请通过网络或至各大书店购买本书。

性能测试从零开始——LoadRunner入门》《QTP自动化测试实践》章节节选仍在连载中,请大家继续关注:

《性 能测试从零开始——LoadRunne r入门》连载>>

《Q TP自动 化测试实践》连载>>

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号