TestNG引數化有何特別之處

2022-09-09 19:57:35 字數 3690 閱讀 4804

testng作為j**a技術棧乙個極其強大的測試框架,想必在引數化這塊也有一定的特別之處,本文就來根據官方文件,對testng引數化進行一**竟。

testng引數化有兩種方式,第一種是從testng.xml讀取資料,第二種是通過**讀取資料。

直接看示例:

@parameters()

@test

public void testsinglestring(string firstname)

@parameters既可以作用到@test,也可以作用到@before/after@factory,比如:

@parameters()

@beforemethod

public void beforetest(string ds, string driver)

也可以作用到測試類的構造方法中,但是只能最多乙個構造方法,這樣就能在初始化類的時候,進行引數化賦值,便於測試方法使用

@optional用於標識引數是否可選,比如:

@parameters("db")

@test

public void testnonexistentparameter(@optional("mysql") string db)

第一種引數化方式其實比較雞肋,第二種方式才是testng引數化的靈魂,用到了@dataprovider,它會返回乙個二維陣列:

import org.testng.annotations.dataprovider;

import org.testng.annotations.test;

public class dptest ,,};

}@test(dataprovider = "test1")

public void verifydata1(string n1, integer n2)

}

預設@dataprovider和@test是在同乙個類中,如果想放在不同的類,那麼需要定義為靜態方法(或者無引數構造方法的類),比如:

import org.testng.annotations.dataprovider;

public class staticprovider };}

}

import org.testng.annotations.test;

public class diffclazztest

}

@dataprovider的返回值(引數型別)除了已經提到的object,還可以是iterator,它不會一次性生成所有資料,而是每呼叫一次生成一次,節約記憶體,比如:

import org.testng.annotations.dataprovider;

import org.testng.annotations.test;

import j**a.util.arrays;

import j**a.util.iterator;

public class itertest ,,};

return arrays.aslist(myobjects).iterator();

}@test(dataprovider = "test1")

public void verifydata1(string n1, integer n2)

}

看到這裡,對@dataprovider已經有了足夠的認識,它支援兩種引數型別

假如測試方法只有乙個入參,是不是只能用二維來實現:

import org.testng.annotations.dataprovider;

import org.testng.annotations.test;

import j**a.util.arrays;

import j**a.util.iterator;

public class itertest ,

};return arrays.aslist(myobjects).iterator();

}@test(dataprovider = "test1")

public void verifydata1(string n)

}

其實不是,@dataprovider支援一維陣列:

import org.testng.annotations.dataprovider;

import org.testng.annotations.test;

import j**a.util.arrays;

import j**a.util.iterator;

public class itertest ;

return myobjects;

}@test(dataprovider = "test1")

public void verifydata1(string n)

}

以及一維陣列的迭代器:

import org.testng.annotations.dataprovider;

import org.testng.annotations.test;

import j**a.util.arrays;

import j**a.util.iterator;

public class itertest ;

return arrays.aslist(myobjects).iterator();

}@test(dataprovider = "test1")

public void verifydata1(string n)

}

最精彩的來了,@dataprovider支援反射,也就是反向獲取測試方法的資訊:

@dataprovider(name = "dp")

public object createdata(method m) };}

@test(dataprovider = "dp")

public void test1(string s)

@test(dataprovider = "dp")

public void test2(string s)

@dataprovider還支援併發:

@dataprovider(parallel = true)

// ...

預設是10個執行緒,可以在testng.xml中修改:

...
乙個xml共享乙個執行緒池,如果要用多個執行緒池,那麼需要建立多個testng.xml。

錦上添花的是,testng的引數化會列印在測試報告中:

testng實現引數化以及 optional的使用

一 專案路徑下建乙個testng.xml 二 建乙個browser的類 package com.wiley.demo import org.openqa.selenium.webdriver import org.openqa.selenium.chrome.chromedriver import ...

git config 命令各引數有何區別

在之前出現的 git config 命令中,有的使用了 global 引數,有的使用了 system 引數,這兩個引數有什麼區別嗎?1.開啟所在工作目錄的config檔案 版本庫級別的配置檔案 git home git demo git config e result 開啟了 home git de...

Golang之陣列 切片,有何區別

初始化 var arr1 4 int 陣列會初始化為int型別的零值 var arr2 4 int 使用指定的初始值完成初始化 var arr3 4 string 使用指定的初始值完成初始化 arr4 3 int 指定固定長度,不可修改 arr5 int 根據初始值的個數自行推斷陣列的長度 arr6...