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...