Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Metadata API から正確なコードカバー率を取得する方法

公開日: Nov 30, 2020
説明
UI の "Run All Tests" は組織のコードカバ―率に関連する正確な結果を取得することができない可能性があります。この値が常に提案された名前として評価されるよう考慮されることに注意してください。より詳細な情報については、弊社の Apex プロダクトマネージャ、Josh Kaplan による下記のブログの投稿 "How Code Coverage Works"(英語)を閲覧してください。

Eclipse IDE はテストを実行するために使用されますが、これはクラス単位でのカバー率を提供するものであり、組織全体の結果ではありません。また、これらのスプレッドシートから組織の結果をどのように見積もるかについて、IDE からこれらの結果をコピーすることはできません。

有効な結果を得る唯一の手段は、組織の名前空間におけるすべてのテストの実行、または、リリースの実行に先立ち、"ApexCodeCoverageAggregate" および "ApexCodeCoverage" テーブルをクリアすることです。UI におけるテストの実行は前述のテーブルを更新します。しかし、メタデータはそうではありません。これは、すべてのリリースが "on the fly" でテストを実行しますが、コードカバー率の結果をテーブルで保存しないことを意味します。それは、75% 以下である場合にも、リリースは組織のカバー率を出力します。この KB では、リリースの成功、あるいは、失敗にかかわらず、リリースから組織のカバー率情報を取得する方法を一通り説明します。
解決策
最新のリリースを使用する必要のある組織の正確なコードカバー率を取得するため、それが成功したか失敗したかを問いません。

** 注意: 自分がリリースする組織だけでなく、選択したリリース内のその他の Apex のカバー率も含まれます **

1)  最新のリリースの "asyncId" を取得します。
i) これを実行するために、リリース状況ページへ遷移し、最新のリリースをクリックします。
ii) いったんリリースの詳細を開いたら、名前がそれに含まれていなくても、"asyncId" パラメータの URL を確認し、そのような ID をコピーします。

User-added image

2) あなたの組織からメタデータをダウンロードします。これをいずれかから取得することができます。
i) 設定 - 開発 - API
ii) あるいは、この URL(https:// {instance} .salesforce.com/setup/build/webservices.apexp?setupid=WebServices)へ移動します。
iii) そして、"メタデータ WSDL の生成" をクリックします。

3) いったん、そのページがロードされたら、右クリックし、"名前を付けて保存" し、".wsdl" の拡張子を付けてファイルを保存します。
i) 名前を付けて保存ダイアログは、ファイル名を "metadata.xml" としますが、"ファイルの種類:すべてのファイル" に変更し、"metadata.wsdl" として保存します。

4) いったん、WSDL として保存したら、それを SoapUI のようなツールで実行します。

5) SoapUI で、File -> New soapUI project –> "Browse" をクリックし、ダウンロードした WSDL を選択します。
i) "Create Requests" にチェックが入っていることを確認します。

User-added image

6) 次に、下記のように "checkDeployStatus" Metadata request を作成する必要があります。
i)  "asyncProcessId" および "includeDetails" が true に設定されていることを確認します。
 
User-added image


7) 応答を XML ドキュメントとして保存します。

User-added image

8) 次の手順で、保存した XML ファイルを Excel で開きます。
i) Excel を開きます(このシナリオでは Office 2007 を使用します)。
ii) Office ボタンをクリックし、"開く" を選択します。
iii) ファイルを選択し、"開く" を押下します。
iv) "XML  を開く" ダイアログで、 "[XML ソース] 作業ウィンドウを使用する" を選択し、次のダイアログで OK を押下します。
 
User-added image

9) 次に、適切な値をロードするために XML から正しい列を取得する必要があります。
i) ツリーマップの "runTestResult" ノードの下にある、"Id"、"Name"、"NumLocations"、"NumLocationsNotCovered" を選択します。
ii) 選択された 4 つの要素を空白のシート上の左上の A1 セルへドラッグします。
 
User-added image

10) Excel リボンの "データ" タブへ移動し、"すべて更新" をクリックします。

User-added image
 
i) 下記のように生成されたセルを見ることができるはずです。注意事項: 千鳥状の結果はここでは問題ではありません。

User-added image

11) C 列("ns2:numLocations")の最終行へ移動します。

12) その直ぐ下のセルで、すべてのクラスをカバーする列の総数を計算するため次の数式を記述します。
i) "=SUM(C2:C#)" # はシートで数式の上にある最後のセルです。
ii) カバーされていない行の数を示す D 列で同様の操作をします。

13) 次のように組織の総数を計算するため、最後のセルが必要です。
i)  "= ((1-  (totalNumLocationsNotCovered / totalNumLocations) ) *100"
ii) このシナリオでは、"=(1- (D2342 / C2342))*100" です。
 
User-added image
 
ナレッジ記事番号

000386853

 
読み込み中
Salesforce Help | Article