1. 程式人生 > 其它 >《手把手教你》系列基礎篇(七十五)-java+ selenium自動化測試-框架設計基礎-TestNG實現DDT - 中篇(詳解教程)

《手把手教你》系列基礎篇(七十五)-java+ selenium自動化測試-框架設計基礎-TestNG實現DDT - 中篇(詳解教程)

1.簡介

上一篇中介紹了DataProvider如何傳遞引數,以及和一些其他方法結合傳遞引數,今天巨集哥接著把剩下的一些常用的也做一下簡單的介紹和分享。

2.專案實戰1

@DataProvider + 方法:此示例顯示如何根據測試方法名稱傳遞不同的引數。

2.1程式碼設計

2.2參考程式碼

package library;

import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/** * @author 北京-巨集哥 * * @公眾號:北京巨集哥 * * 《手把手教你》系列基礎篇(七十四)-java+ selenium自動化測試-框架設計基礎-TestNG實現DDT - 上篇(詳解教程) * * 2022年2月23日 */ public class TestParameterDataProvider { @Test(dataProvider = "dataProvider") public void test1(int number, int expected) { Assert.assertEquals(number, expected); } @Test(dataProvider
= "dataProvider") public void test2(String email, String expected) { Assert.assertEquals(email, expected); } @DataProvider(name = "dataProvider") public Object[][] provideData(Method method) { Object[][] result = null; if (method.getName().equals("test1")) { result
= new Object[][] { { 1, 1 }, { 200, 200 } }; } else if (method.getName().equals("test2")) { result = new Object[][] { { "[email protected]", "[email protected]" }, { "[email protected]", "[email protected]" } }; } return result; } }

2.3執行程式碼

1.執行程式碼,右鍵Run AS->TestNG Suite,控制檯輸出,如下圖所示:

2.這裡根據呼叫DataProvider的函式名,返回了不同的引數。由於沒有指定執行順序,所以Test會按照字母順序然後再按數字執行,先執行Test1,然後Test2。
執行Test1時發現有兩組引數,就先把第一組引數傳進去執行一遍,再把第二組引數傳進去執行一遍。執行Test2時也是同樣的順序,所以最後的執行順序是:
①Test1輸入第一組引數
②Test1輸入第二組引數
③Test2輸入第一組引數
④Test2輸入第二組引數

3.專案實戰2

@DataProvider + ITestContext:在TestNG中,我們可以使用org.testng.ITestContext來確定呼叫當前測試方法的執行時引數。 在最後一個例子中,我們將演示如何根據包含的分組名稱傳遞引數。

在Dataprovider中可以帶一個ITestContext 引數,從這個引數中可以獲取該方法執行時的一些上下文資訊,比如context.getIncludeGroups就可以得到這個測試執行的分組,這樣在不同的分組中就可以可以向測試執行類傳遞不同的引數了。

3.1程式碼設計

1.建立一個名稱為:TestParameterDataProvider.java 的檔案, 其程式碼如下圖所示:

2.按照巨集哥前邊講解的方法,建立一個名稱為:testng.xml 的檔案, 其程式碼如下圖所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!-- Suite相關設定,這裡paraller是執行的模式,有tests classes methods三種取值,thread-count表示兩個執行緒執行用例 -->
<suite name="Suite" parallel="tests" thread-count="2">
  <test name="example1">
      <groups>
          <run>
              <include name="groupA" />
          </run>
      </groups>
      <classes>
          <class name="library.TestParameterDataProvider" />
      </classes>
  </test>
</suite> <!-- Suite -->

3.2參考程式碼

package library;

import org.testng.Assert;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * @author 北京-巨集哥
 * 
 * @公眾號:北京巨集哥
 * 
 * 《手把手教你》系列基礎篇(七十四)-java+ selenium自動化測試-框架設計基礎-TestNG實現DDT - 上篇(詳解教程)
 *
 * 2022年2月26日
 */

public class TestParameterDataProvider {

    @Test(dataProvider = "dataProvider", groups = { "groupA" })
    public void test1(int number) {
        Assert.assertEquals(number, 1);
    }

    @Test(dataProvider = "dataProvider", groups = "groupB")
    public void test2(int number) {
        Assert.assertEquals(number, 2);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(ITestContext context) {

        Object[][] result = null;

        // get test name
        // System.out.println(context.getName());

        for (String group : context.getIncludedGroups()) {

            System.out.println("group : " + group);

            if ("groupA".equals(group)) {
                result = new Object[][] { { 1 } };
                break;
            }

        }

        if (result == null) {
            result = new Object[][] { { 2 } };
        }
        return result;

    }
}

3.3執行程式碼

1.執行程式碼,選中testng.xml檔案,右鍵Run AS->TestNG Suite,控制檯輸出,如下圖所示:

4.小結

  好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!