5

私は次のシステムを持っています:

  • svn - コントロールのバージョン
  • cc.net - ci サーバーとして
  • msbuild - ビルド システムとして
  • nunit - 起動テスト用
  • webdriver - Web テスト用。

これで、各コミット後にテストが自動的に実行されます。しかし、コミットにコメント #runautotest (または別のもの) がある場合は、テストを実行したいと考えています。

cc.netのトリガーを調査しましたが、それは別の目的のためです。cc.net 解析ログに関する情報を見つけようとしましたが、肯定的な結果は得られませんでした。

問題を解決するにはどのような方法を使用すればよいですか?

4

2 に答える 2

3

ccnet 構成のプロジェクトで、タスク ブロックの上部に:

<modificationWriter>
 <filename>svn_mods.xml</filename>
 <path>c:\modsdir</path>
</modificationWriter>

これにより、SVN の変更がファイルに書き込まれます。

タスクブロックの次:

<nant>
 <executable>c:\path_to_nant</executable>
 <buildFile>mybuildfile.build</buildFile>
 <targetList>
  <target>conditionally_run_nunit_tests</target>
 </targetList>
</nant>

これにより、modificationwriter タスクの後に Nant タスクが実行されます。

conditionally_run_nunit_testsで、ファイルc:\modsdir\svn_mods.xml#runautotestを検索します。見つかったら、テストを実行します。見つからない場合は、何もしません。mods ファイルを解析するにはさまざまな方法があります。C# スクリプトを使用してファイル全体を文字列に読み取り、Contains を呼び出して #runautotest を渡すことができます。

以下のコードは、Nant で C# スクリプトを使用する例です。SearchFile はファイルを開き、それを文字列に読み取り、値が文字列内にあるかどうかをチェックします。「はい」または「いいえ」を返します。以下のスクリプトはテストされていません。

<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/>

<script language="c#" prefix="ns">
    <references>
        <include name="System"/>
        <include name="System.IO"/>
    </references>
    <code>
    <![CDATA[   
    [Function("SearchFile")]
    public static string SearchFile(string filepath, string token) 
    {
        System.IO.StreamReader myFile = new System.IO.StreamReader(filepath);
        string myString = myFile.ReadToEnd();
        myFile.Close();
        if(myString.Contains(token)) return "yes";
        else return "no";
    }               
    ]]>
    </code>
</script>
于 2012-05-02T19:04:53.037 に答える
0

質問の賛成票が示すように、これはより重要な問題のようです。試してみます: 設定を理解している限り、CCNET はパックのリーダーであり、 SVN でソース コードの変更を監視し、ソースを取得し、MSBuild をトリガーしてそれらをビルドし、NUnit と WebDriver をトリガーしてユニット テストと Web テストを実行します.

テストを実行するかどうかの決定は、SVN 変更コメントで定義されたハッシュタグに依存して行われます。一方の SVN と他方の NUnit と WebDriver は、CCNET のみを介して結合されます。

まず最初に、コメントを含むこのハッシュタグが CCNET のどこかで利用できることを保証します。私は SVN の専門家ではありませんが、すべてのコメントが CCNET の変更ログにあると思います。これを確認できますか?

次に、テストの実行を条件付きにする必要があります。CCNET の設定はかなり静的なものです。CCNET 1.5 でのDynamicValuesと CCNET 1.6 でのConditionalTask ​​sの出現により、構成がより動的になり、CCNET でも制御の流れが得られるようになりましたが、私はやや時代遅れなので、テスト実行をビルド スクリプトにラップすることをお勧めします。たとえばMSBuildまたはNAntを使用して、そこに変更ログの評価を入れます。

更新: Adam's answerをご覧ください。この例は、私が考えていたものにかなり近いものです (ただし、<xmlpeek>代わりに を使用したはずです<script>)。

于 2012-05-01T11:06:56.443 に答える