簡體   English   中英

如何在僅使用TestNG的特定測試案例之前運行特定方法?

[英]How to run specific method before of only specific test cases using TestNG?

在我的測試課中,假設我有15個測試用例。 在15個案例中,我僅需要5個測試案例的通用測試數據。 因此,我想編寫一個將創建測試數據的方法,但是該方法將在運行這5個測試中的任何一個之前執行。

我知道@BeforClass將在運行該類中的任何測試之前運行, @BeforeMethod將在該類中的每個測試之前運行。

我不想使用@BeforeClass為15個測試用例中的5個創建測試數據,因為如果我要調試不屬於這5個測試用例的測試,它仍然會創建數據,而當前測試不需要,也會增加執行時間。

TestNG有什么辦法,我可以在執行某些測試之前運行特定的方法(不使用testng.xml)

TestNG僅提供對其他測試方法的依賴。 使其成為測試方法。

存檔所需的內容,您可以執行以下操作:

@Test
void testMethod(){
     //this is your test method
     beforemethod();
}

//your before method for you test-case
void beforemethod(){
}

希望這能解決您的問題

根據您的描述,我了解到您需要一個dataProvider(確切地說,這是一種為多個測試用例提供相同數據或為同一測試用例提供多個數據的方法)。

@DataProvider(name = "dataProviderFor5TestCases")
public Object[][] createData() {
 return new Object[][] {
   { "Joe", new Integer(43) },
   { "Mary", new Integer(32)},
 };
}

然后,您可以在測試用例上聲明dataProvider,如下所示:

@Test(dataProvider = "dataProviderFor5TestCases")
public void testCase1(String name, Integer age) {
 System.out.println(name + " " + age);
}

結果將是:

Joe 43
Mary 32

因此,testCase1將使用dataProvider中創建的數據集執行兩次。 但是,我認為您需要為所有5個測試用例使用相同的數據(可實現)。

現在,關於執行時間。 我不是100%確信,但是我相信數據是按需創建的(即,如果testCase被跳過或失敗,則不會創建任何數據;但是我的負載很小,請嘗試並讓我們知道!)

OP發表評論后進行更新:因此,使用testGroups可能會更好,因為它適合於測試之前的設置和之后的清理(不為無關的測試用例調用):

@Test(groups = { "init" })
public void serverInit() {
startServer();
}

@Test(groups = { "init" })
public void initEnvironment() {
createUsers()
}

@Test(groups = { "cleanup"}, dependsOnGroups = { "init.*" })
public void testCase1() {
//perform your tests
}


@Test(dependsOnGroups = { "cleanup"})
puplic void cleanup(){
deleteUsers();
killServer();
}

如果任何init測試方法失敗(即服務器無法啟動), 則不會執行上述testCase1。 此外,僅在testCase1成功的情況下才調用cleanup方法。 如果您希望無論testCase1結果如何都運行清除方法,則可以這樣使用alwaysRun:

@Test(dependsOnGroups = { "cleanup"}, alwaysRun=true)

希望有幫助! 祝你好運!

從此處獲取的示例: TestNG DataProvider

您可以在@Test()批注中使用dependsOnMethods

例如

@Test
public void testDataSetup() 
 {
    // Setup your testDataHere
}


@Test(dependsOnMethods = { "testDataSetup" })
public void testExecute1() 
{
 // Use Your logic here which executes after datasetup
   }

有關完整的教程,請參見此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM