TestNG用于在测试运行之前启动数据库,然后停止
我目前正在尝试对mongoDB运行一些测试,我想通过TestNG启动它 套房应:TestNG用于在测试运行之前启动数据库,然后停止,testng,Testng,我目前正在尝试对mongoDB运行一些测试,我想通过TestNG启动它 套房应: 启动mongoDB实例(可能是嵌入式或独立进程) 运行一个或多个测试(可能在不同的类或包中) 停止mongoDB实例 我试过这个: <suite name="EmbeddedMongoSmokeTest" verbose="1"> <parameter name="mongoPort" value="27018"/> <test name="EmbeddedMongoSmokeTes
<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>
我从TestNG运行程序得到一个异常,它说“在:[DynamicGraph]中找不到空闲节点”,我想这是因为我在一个测试部分中使用了同一个类两次
我应该如何构造我的TestNG套件xml,或者我应该使用什么样的TestNG特性以干净的方式完成我的任务?您应该看看
顺便说一句,据我所知,您需要在一组测试之前启动mongo,然后在测试之后停止
您可以使用@Before/AfterGroup(“mongodb”)
(但您必须激活该组,因为即使测试是组的一部分,testng也不会这样做)或@Before/afterest
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{
私有静态嵌入式mongoController mongoController;
@BeforeTest//或@BeforeGroup(“mongodb”)
@参数({“mongoHost”、“mongoPort”})
public void startEmbeddedMongoDb(@Optional(“localhost”)字符串主机,@Optional(“27017”)int-port){
mongoController=新的EmbeddedMongoController();
mongoController.start(主机、端口);
}
@后测//后测组(“mongodb”)
public void stopEmbeddedMongoDb(){
mongoController.stop();
}
}
如果MongoDBSmokeTest扩展了EmbeddedMongoControllerTest
,您应该查看一下,那么您可以从列表中删除EmbeddedMongoControllerTest
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>
顺便说一句,据我所知,您需要在一组测试之前启动mongo,然后在测试之后停止
您可以使用@Before/AfterGroup(“mongodb”)
(但您必须激活该组,因为即使测试是组的一部分,testng也不会这样做)或@Before/afterest
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{
私有静态嵌入式mongoController mongoController;
@BeforeTest//或@BeforeGroup(“mongodb”)
@参数({“mongoHost”、“mongoPort”})
public void startEmbeddedMongoDb(@Optional(“localhost”)字符串主机,@Optional(“27017”)int-port){
mongoController=新的EmbeddedMongoController();
mongoController.start(主机、端口);
}
@后测//后测组(“mongodb”)
public void stopEmbeddedMongoDb(){
mongoController.stop();
}
}
如果
MongoDBSmokeTest扩展了EmbeddedMongoControllerTest
,您可以从列表中删除EmbeddedMongoControllerTest
。谢谢,我确实查看了文档,但没有发现什么。现在我使用了ISuiteListener,但我也会尝试您的方法。保留您的侦听器。在我看来,这是一个更好的方法,但需要更多高级testng用户。谢谢,我确实查看了文档,但没有发现什么。现在我使用ISuiteListener,但我也会尝试你的方法。保留你的侦听器。在我看来,这是一种更好的方法,但对于更高级的testng用户来说。为什么不直接使用单例进行初始化呢?这也会导致延迟初始化?为什么不直接使用单例进行初始化呢这也会是延迟初始化吗?
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>