0

Selenium を使用して、POS アプリケーションのテストの一部を自動化しています。アプリケーションと外部デバイス (プリンター、キャッシュ ドロワーなど) の間の通信を管理するために外部プログラムが使用されるため、一度に開くことができるブラウザー セッションは 1 つだけです。 1 つのブラウザー セッションが別のブラウザー セッションでトリガーされます)。

現在、testng.xml ファイルで次のことを行っています。

<suite name="Test Suite" verbose="10" preserve-order="True">
  <test name="Item Entry -- Quantity Required -- Basic" annotations="JDK">
    <parameter name = "filepath" value = "C:\Java Projects\Gravity\config\US\" />
    <classes>
      <class name="tests.itementry.quantityrequired.BasicPath"/>
    </classes>
  </test>
    <test name = "Item Entry -- Quantity Required -- Cancel">
        <classes>
            <class name = "tests.itementry.quantityrequired.Cancel" />
        </classes>
    </test>
</suite>

以前、クラスの代わりにパッケージを指定しようとしましたが、その結果、テストが並行して実行されました (複数のブラウザーが同時に開かれました)。別のオプションとして、テストを 1 つのクラスに結合することも知っていますが (これが最良の設計上の選択である可能性があります???)、各シナリオを独自のクラスにするのが最善であると考えました。

私のtestng.xmlファイルを構成する方法、またはテストシナリオをtestngテストに変える方法についてのアドバイスは素晴らしいでしょう.

4

2 に答える 2

0

私は同じ問題を抱えていました。と の両方に parallel="false" を使用。それでも複数のブラウザが起動します。回避策として、すべてのクラスに @Test という注釈を付け、グループ名を割り当てました。クラスのこの @Test アノテーション内で、dependsOnGroups を使用して順序を定義し、alwaysRun="true" を設定できます。パッケージを含めることができ、すべてのグループを testNG xml に含める必要があります。

<test name="My suite">   
 <groups>
    <dependencies>
      <group name="c" depends-on="a  b" />
      <group name="z" depends-on="c" />
    </dependencies>  
 </groups> 
</test>

うまくいくことを願っています。

于 2014-02-19T09:04:35.863 に答える
0

スイートの parallel 属性に何も指定されていない場合、Testng はデフォルトで順番に実行されます。パッケージを指定すると、問題が解決するはずです。スイート宣言で parallel = false を具体的に定義し、テストが並列で呼び出されている理由を確認できます。方法については、こちらを参照してください。コードもチェックして、ティアダウンが正しく行われていないかどうかを確認してください。

xmlのdtdから..

!ATTLIST suite
    name CDATA #REQUIRED
    junit (true | false) "false"
    verbose CDATA #IMPLIED
    parallel (false | methods | tests | classes | instances) "false"

はい、すべてのテストを 1 つのクラスで定義するのは得策ではありません。

于 2013-09-16T08:38:40.203 に答える