TestNG用于在测试运行之前启动数据库并在之后停止

时间:2016-12-11 15:04:15

标签: testng

我目前正在尝试针对我想通过TestNG启动的mongoDB运行一些测试。

套房应该:

  1. 启动mongoDB实例(可能是嵌入式或单独的进程)
  2. 运行一个或多个测试(可能在不同的类或包中)
  3. 停止mongoDB实例
  4. 我试过了:

    <suite name="EmbeddedMongoSmokeTest" verbose="1">
    <parameter name="mongoPort" value="27018"/>
    
    <test name="EmbeddedMongoSmokeTest">
        <classes>
            <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest">
                <methods>
                    <include name="startEmbeddedMongoDb" />
                </methods>
            </class>
            <class name="com.frequentis.ps.platform.tests.persistence.MongoDBSmokeTest"/>
            <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest">
                <methods>
                    <include name="stopEmbeddedMongoDb" />
                </methods>
            </class>
        </classes>
    </test>
    

    @Test(groups = { "persistence", "mongodb"})
    public class EmbeddedMongoControllerTest {
        private static EmbeddedMongoController mongoController;
    
        @Test
        @Parameters({ "mongoHost", "mongoPort"})
        public void startEmbeddedMongoDb(@Optional("localhost") String host, @Optional("27017") int port) {
            mongoController = new EmbeddedMongoController();
            mongoController.start(host, port);
        }
    
        @Test
        public void stopEmbeddedMongoDb() {
            mongoController.stop();
        }
    }
    

    我从TestNG跑者那里得到一个例外,其中说#34;没有找到任何免费节点:[DynamicGraph&#34;我想这是因为我在一个测试部分中使用了同一个类两次。< / p>

    我应该如何构建我的TestNG套件xml,或者用什么样的TestNG功能以干净的方式完成我的任务?

1 个答案:

答案 0 :(得分:0)

您应该查看the TestNG documentation

顺便说一下,据我了解你的需要,你想在一组测试之前启动mongo并在它们之后停止它。

您可以使用@Before/AfterGroup("mongodb")(但是您必须激活该群组,因为即使测试是群组的一部分,testng也不会这样做)或@Before/AfterTest

public class EmbeddedMongoControllerTest {
    private static EmbeddedMongoController mongoController;

    @BeforeTest // or @BeforeGroup("mongodb")
    @Parameters({ "mongoHost", "mongoPort"})
    public void startEmbeddedMongoDb(@Optional("localhost") String host, @Optional("27017") int port) {
        mongoController = new EmbeddedMongoController();
        mongoController.start(host, port);
    }

    @AfterTest // @AfterGroup("mongodb")
    public void stopEmbeddedMongoDb() {
        mongoController.stop();
    }
}

<suite name="EmbeddedMongoSmokeTest" verbose="1">
  <parameter name="mongoPort" value="27018"/>

  <test name="EmbeddedMongoSmokeTest">
    <!--If @Before/AfterGroup usage <groups> 
      <run>
        <include name="mongodb"/>
      </run>
    </groups> -->

    <classes>
        <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest">
        </class>
        <class name="com.frequentis.ps.platform.tests.persistence.MongoDBSmokeTest"/>
        </class>
    </classes>
  </test>

如果EmbeddedMongoControllerTest,您可以从列表中删除MongoDBSmokeTest extends EmbeddedMongoControllerTest