カスタム テストを実行および作成する方法を探して、いくつかの異なるスレッドや Web サイト (および TestNG API) を閲覧しました。カスタムの testng.xml (テスト スイート) をプログラムで実行する方法が見つかりません (または理解できません)。
次のような testng.xml ファイルを作成しました。
<?xml version="1.0" encoding="UTF-8"?>
<suite name="The Login Suite'" verbose="1" >
<test name="Some login check" >
<classes>
<class name="tests.first_login"/>
</classes>
</test>
<test name="Another login check" >
<classes>
<class name="tests.second_login"/>
</classes>
</test>
</suite>
私は自分のスイートを Eclipse の外から実行できることを知っていますが、それはしたくありません。なんで?スケジューラでテストを実行しているためです。したがって、構成可能な testng.xml ファイルが必要です。
次のようなコードで仮想 XML テスト スイートを生成しようとしました。
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.addListener(tla);
XmlSuite loginSuite = new XmlSuite();
loginSuite.setName("The Login Suite");
XmlTest first_test = new XmlTest();
first_test.setName("Some login check");
first_test.setSuite(loginSuite);
List<XmlClass> fistlogin_classes = new ArrayList<XmlClass>();
fistlogin_classes.add(new XmlClass("tests.fist_login"));
XmlTest second_test = new XmlTest();
second_test.setName("Another login check");
loginSuite.addTest(SOEtest);
List<XmlClass> secondlogin_classes = new ArrayList<XmlClass>();
secondlogin_classes.add(new XmlClass("tests.second_login"));
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(loginSuite);
tng.setXmlSuites(suites);
tng.run();
しかし、何だと思いますか... それもうまくいきません。TestNg は、テスト メソッドを含むクラスを見つけられないようです。コードは正常に実行されていますが、テストは実行されておらず、失敗もスキップもされていません。
私が試したもう1つのことは、testng.xmlを* .jarファイルにエクスポートし、そのパスを次のように定義することでした:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.setXmlPathInJar("tests.jar");
tng.addListener(tla);
tng.run();
注: Test tests,jar はプロジェクトのルートにあります。<.../loginproject/tests.jar> のように
私がこれまでに機能させた唯一のものはこれです:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.setDefaultTestName("Login check");
tng.setDefaultSuiteName("The Login suite");
tng.setTestClasses(new Class[] { fist_login.class });
tng.addListener(tla);
tng.run();
ただし、これは、上記の XML に示されているようなテスト スイートを作成するという私のプロジェクト要件には適合しません。それぞれ独自のクラスに実装されているさまざまなログイン テストを含む 1 つのテスト スイートが必要です。また、最後の解決策の問題は、リストに追加するすべてのクラスが一度に実行されますが、それらを次々に実行する必要があることです。
カスタムの testng.xml を直接実行できるソリューションを希望しますが、仮想 XML ファイルの作成で間違っていることを誰かに教えてもらえれば幸いです。
よろしくお願いします。
更新と解決策: スーツ ファイルをリストに追加し、API メソッドを介してそのリストを TestNGs のスイート リストに追加するという解決策を考え出しました。次のようになります。
List<String> testFilesList = new ArrayList<String>();
testFilesList.add("./testng.xml"); //test suite resides in the working directory's root folder
**testng.setTestSuites(testFilesList);** //you can addd multiple suites either here by adding multiple files or include all suites needed in the testng.xml file
testng.setUseDefaultListeners(false);
testng.addListener(htmlRep);
testng.run();