十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。
selenium与dbunit结合进行与数据库相关的测试
上一篇 /
下一篇 2012-02-09 22:01:47
/ 个人分类:其它
1.dbunit原理:Dbunit其原理,就是在每个测试方法之前后,通过增删一些固定的记录,保持了数据库的固定状态,由此,我们可以在每个测试方法中自由地增删记录,而不用担心会影响到别的测试方法。DBUnit的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态。2. POM文件中加入如下一段配置: <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.4.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.4.3</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency>3.selenium与dbunit结合进行与数据库相关的测试,主要实现过程包括创建与数据库操作相关的测试脚本,创建测试用例的测试脚本和创建测试数据。创建与数据库操作相关的测试脚本过程如下:(1)用来取得dbunit用的数据库连接。(2)用来在运行测试脚本前,设置数据库的初始数据。(3)用来在测试用例运行后,设置数据库的测试后的数据。(4)用来在断言测试用例执行后,断言测试实际数据和测试预期数据,一般判断测试用例的测试正确性。 /** * 取得DbUnit用的数据库连接数据库连接 */ public IDatabaseConnection getConnection() throws Exception { Class driverClass = Class.forName("oracle.jdbc.driver.OracleDriver"); Connection jdbcConnection = DriverManager.getConnection("jdbcracle:thin192.168.71.52:1521:JRESSTUDIO", "jrestester", "jrestester"); return new DatabaseConnection(jdbcConnection,"JRESTESTER"); } /** * 测试前设置数据库状态以及装载初始数据 */ public void dbActionBeforeTest(String fileName) throws Exception { dataSet = new FlatXmlDataSet(new FileInputStream(this.setFilePath(fileName))); // 清空数据库表,然后装载初始数据到数据库表中 DatabaseOperation.CLEAN_INSERT.execute(this.getConnection(), dataSet); } /** * 测试后设置数据库状态 */ public void dbActionAfterTest() throws Exception { // 删除表中的所有数据 DatabaseOperation.DELETE_ALL.execute(this.getConnection(), dataSet); } /** * 断言测试实际数据和测试期望数据 */ public void AssertionData(String actualTableName, String getActualTableSQL, String XMLFilePath, String expectedTableName) throws Exception { ITable actualTable = null; // 从数据库取得测试实际数据 if (null == getActualTableSQL) { // 从表中取出所有字段 IDataSet databaseDataSet = this.getConnection().createDataSet(); actualTable = databaseDataSet.getTable(actualTableName); } else { // 根据SQL文取得字段 actualTable = this.getConnection().createQueryTable(actualTableName, getActualTableSQL); } // 从XML取得测试期望数据 IDataSet expectedDataSet = new FlatXmlDataSet(new File(XMLFilePath)); ITable expectedTable = expectedDataSet.getTable(expectedTableName); // 断言测试实际数据和测试期望数据 Assertion.assertEquals(expectedTable, actualTable); }创建测试用例的测试脚本过程如下:(1) // 测试前,装载初始数据 dbAction.dbActionBeforeTest("testdata\\Initial.xml"); (2) // 断言测试实际数据和测试期望数据 String actualTableName = "TSYS_USER"; String getActualTableSQL = "SELECT USER_ID,USER_NAME,USER_PWD,USER_TYPE,USER_STATUS,LOCK_STATUS,CREATE_DATE,MODIFY_DATE,PASS_MODIFY_DATE,REMARK,ORG_ID FROM JRESTESTER.TSYS_USER WHERE USER_ID='00001'"; String XMLFilePath = dbAction.setFilePath("testdata\\Expected.xml"); String expectedTableName = "TSYS_USER"; dbAction.AssertionData(actualTableName, getActualTableSQL, XMLFilePath, expectedTableName);(3) // 测试后,设置数据库数据 dbAction.dbActionAfterTest();4.其中Initial.xml内容为:<?xml version="1.0" encoding="UTF-8"?><dataset><TSYS_USER USER_ID="00001" USER_NAME="test00001" USER_PWD="7e5096f694565d5549f03a360cdb2a84" USER_TYPE="0" USER_STATUS="0" LOCK_STATUS="1" CREATE_DATE="20110926" MODIFY_DATE="20111008" PASS_MODIFY_DATE="20110928" REMARK="sdf" ORG_ID="0_000000"/></dataset>Expected.xml内容为:<?xml version="1.0" encoding="UTF-8"?><dataset> <TSYS_USER USER_ID="00001" USER_NAME="user2" USER_PWD="7e5096f694565d5549f03a360cdb2a84" USER_TYPE="0" USER_STATUS="0" LOCK_STATUS="1" CREATE_DATE="20110926" MODIFY_DATE="20111008" PASS_MODIFY_DATE="20110928" REMARK="sdf" ORG_ID="0_000000"/></dataset>其中TSYS_USER是用到的表的名字,后面的是表中的字段名字。创建xml文件时,可以把数据库表里的数据导出成该xml: public static void main(String[] args) throws Exception{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection jdbcConnection = DriverManager.getConnection("jdbcracle:thin192.168.71.52:1521:JRESSTUDIO", "jrestester", "jrestester"); IDatabaseConnection connection = new DatabaseConnection(jdbcConnection,"JRESTESTER"); QueryDataSet dataSet = new QueryDataSet(connection); //将整个TSYS_USER表里的数据导出到xml文件里 //dataSet.addTable("TSYS_USER"); //将TSYS_USER表里符合条件的数据导出到xml文件里 dataSet.addTable("TSYS_USER","select * FROM JRESTESTER.TSYS_USER WHERE USER_ID='00001'"); //导出到dbunit.xml文件里 FlatXmlDataSet.write(dataSet,new FileOutputStream("dbunit.xml")); }
收藏
举报
TAG:
Selenium
selenium