【问题标题】:TestNG - WebDriver - Web apps Testing - Independent TestsTestNG - WebDriver - Web 应用程序测试 - 独立测试
【发布时间】:2014-09-10 14:49:32
【问题描述】:

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

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

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

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

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

  1. 删除数据库
  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$HOST -e "CREATE DATABASE $DB_NAME"

mysql -u$DB_USER -p$DB_PWD -h$HOST $DB_NAME

谷歌搜索没有帮助,因此我在这里发布问题。 TestNG 我需要这样的东西,但我没有找到类似的东西。

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

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

【问题讨论】:

    标签: java database oracle webdriver testng


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多