2014-09-10 125 views
1

如何使用TestNG框架处理脚本内部的脚本? 如何在每次运行测试脚本之前删除数据库? 如何在运行测试脚本之前将sql文件加载到干净的数据库中?TestNG - WebDriver - Web应用程序测试 - 独立测试

目标:每个测试用例必须是独立的 框架: TestNG的 语言:的Java

每个测试用例必须独立与其他测试用例。目标是随机运行测试用例,不需要订购。

以前我使用过PHPUnit框架,每个测试用例都是独立的。

运行的每个测试脚本之前,我想:

  1. dropdatabase
  2. 创建一个新的数据库
  3. 负载的SQL文件导入到数据库的初始数据

我用这个里面shell脚本,我会通过命令行调用shell脚本:

的mysql -u $ DB_USER -p $ DB_PWD -h $ HOST -e “DROP DATABASE $ DB_NAME”

的mysql -u $ DB_USER -p $ DB_PWD -h $ -e “CREATE DATABASE $ DB_NAME” HOST

的mysql -u $ DB_USER -p $ DB_PWD -h $ HOST $ DB_NAME < SQL/dbinit.sql

谷歌-ING没有乐于助人,所以我在这里张贴问题。我需要TestNG这样的东西,但我还没有发现任何类似的东西。

有人可以给同伴QA提供建议吗? 如何处理oracle数据库,如何从数据库中删除数据并将它们加载到测试脚本中?

任何建议,书,教程将是非常有益的。

回答

1

你应该看看DbUnit。我最近开始自己使用它(我是TestNG用户),而且,我还没有遇到过你绝对需要JUnit本身的场景。您可以测试之间恢复你的数据库,填充它,导出等..

http://dbunit.sourceforge.net/

基本的例子:

private DatabaseHelper dbh; 
private EntityManager em; 
private IDatabaseConnection connection; 
private IDataSet dataset; 

@BeforeClass 
private void setupDatabaseResource() throws Exception { 
    // using JPA and a custom helper class 
    em = dbh.getEntityManager(); 
    connection = new DatabaseConnection(((SessionImpl) (em.getDelegate())).connection()); 

    connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory()); 

    // full database export 
    IDataSet fullDataSet = connection.createDataSet(); 

    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("target/generated-sources/test-dataset.xml")); 

    FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder(); 
    flatXmlDataSetBuilder.setColumnSensing(true); 

    // keep the dataset in memory, for later restore points 
    dataset = flatXmlDataSetBuilder.build(new FileInputStream("target/generated-sources/test-dataset.xml")); 
} 

编辑:其中@BeforeMethod恢复测试

之间数据库的例子
@BeforeMethod 
public void cleanDB() throws Exception { 
    DatabaseOperation.CLEAN_INSERT.execute(connection, dataset); 
}