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入门》连载>>