TestNG - WebDriver - Web应用程序测试 - 独立测试

时间:2014-09-10 14:49:32

标签: java database oracle webdriver testng

如何使用TestNG框架处理脚本内的数据库? 如何在每次运行测试脚本之前删除DB? 如何在运行测试脚本之前将sql文件加载到干净的DB中?

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

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

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

在运行每个测试脚本之前,我会:

  1. dropdatabase
  2. 创建新数据库
  3. 使用初始数据将sql文件加载到数据库中
  4. 我在shell脚本中使用了这个,我会通过命令行调用shell脚本:

    mysql -u $ DB_USER -p $ DB_PWD -h $ HOST -e" DROP DATABASE $ DB_NAME"

    mysql -u $ DB_USER -p $ DB_PWD -h $ HOST -e" CREATE DATABASE $ DB_NAME"

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

    Google-ing没有帮助,因此我在这里发帖提问。对于TestNG,我需要这样的东西,但我没有找到类似的东西。

    有人可以向其他QA提供建议。 你如何处理oracle数据库,如何从数据库中删除数据并将其加载到测试脚本中?

    任何建议,书籍,教程都会非常有帮助。

1 个答案:

答案 0 :(得分: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);
}
相关问题