JavaおよびTestngのデータソースとしてXMLを使用したデータ駆動型の例の詳細な説明
testngの機能は非常に強力です。 @DataProviderを使用して、データドライバーとして使用できます。データソースファイルは、Excel、XML、YAML、またはTXTテキストです。ここで例としてXMLを取ります:
注: @dataproviderの返品値タイプはオブジェクト[] []およびiterator <Object> []のみであることができます。
testdata.xml:
<?xml version = "1.0" encoding = "utf-8"?> <data> <testmethod1> <inupt> 1 </input> <butth> 2 </button> </testmethod1> <testmethod1> <inup> 3 </input> <button> 4 </button> </testmethod1> testmeth2> </input> 3 </</</</</</</</</</</</</</button> <ボタン> 4 </button> </testmethod4> </data>
dom4jを使用してXML、parserxml.javaファイルを解析します。
パッケージcom.test; import java.io.file; import java.util.arraylist; Import java.util.hashmap; import java.util.iterator; import java.util.list; import java.util.map; import org.dom4j.document; import inmolg.documentexception; org.dom4j.io.saxreader; public class parserxml {public list parser3xml(string filename){file inputxml = new file(filename);リストリスト= new arrayList(); int count = 1; saxreader saxreader = new saxreader(); try {document document = saxreader.read(inputxml);要素従業員= document.getRootElement(); for(iterator i = Employees.Elementiterator(); i.hasnext();){element Employee =(element)i.next();マップマップ= new Hashmap(); map tempmap = new Hashmap(); for(iterator j = Employee.Elementiterator(); j.hasnext();){element node =(element)j.next(); tempmap.put(node.getName()、node.getText()); } map.put(Employee.getName()、tempmap); list.add(マップ); }} catch(documentException e){system.out.println(e.getmessage()); }返品リスト。 }}次に、解析されたリストがオブジェクト[] []データに変換され、@DataProviderに結合されます。
testdata.javaファイル:
パッケージcom.test; import java.io.file; import java.lang.refllect.method; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.map; {プライベートリストL; public testData(){this.getXmldata(); } public void getxmldata(){parserxml p = new parserxml(); l = p.parser3xml(new file( "src/com/test/testdata.xml")。getabsolutepath()); } @dataprovider public object [] [] providermethod(method method){list <map <string、string >> result = new arrayList <map <string、string >>(); for(int i = 0; i <l.size(); i ++){map m =(map)l.get(i); if(m.containskey(method.getname())){map <string、string> dm =(map <string、string>)m.get(method.getname()); result.add(dm); }} object [] [] files = new object [result.size()] []; for(int i = 0; i <result.size(); i ++){files [i] = new object [] {result.get(i)}; }ファイルを返します。 }}次に、テストファイルをテストします。
testdataprovider.javaファイル:
パッケージcom.test; import java.util.map; import org.testng.annotations。*; public class testdataproviderはtestdata {@test(dataprovider = "providermethod")public void testmethod1(map <<?、?> param){system.out1); } @test(dataprovider = "providermethod")public void testmethod2(map <?、?> param){system.out.println( "method2 receece:"+param.get( "input")); } @test(dataprovider = "providermethod")public void testmethod3(map <?、?> param){system.out.println( "method3 receive:"+param.get( "input")); } @test public void testmethod4(){system.out.println( "method4受信:4"); }}戻ってXMLファイルを分析しましょう。 testMethod1ノード、testMethod2、testMethod3、およびtestMethod4ノードが2つあります。 testDataprovider.javaファイルでは、4つのテスト関数が定義されています:testmethod1、testmethod2、testmethod3、およびtestmethod4。 testmethod4はdataproviderを使用しないため、最終結果はtestmethod1が2回実行され、testmethod2、testmethod3、およびtestmethod4が1回実行され、結果は次のとおりです。
受信:1Method1受信:3method2受信:3method3受信:3method4受信:4パス:4パス:testmethod1({input = 1、button = 2})渡される:testmethod1({input = 3、button = 4})渡される:testmethod2({input = 3、input = 4})パスボタン= 4})渡された: testmethod4 ======================================================================================================================= ==================================================================================言い換えれば、このようにして、最初にテスト関数を記述してからXMLファイルのデータを定義するだけで、関数が実行されるか、実行数、実行されるデータを制御できます。
わかりました、やってみましょう...
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!