mablレポートAPIのバッチ結果エンドポイントで以下のNode.jsスクリプトの例を使用してテスト実行結果をまとめて取得し、これらをCSV形式に変換することができます。
セットアップ
このスクリプト例を実行するには、Node.jsをインストールする必要があります。各種主要プラットフォーム向けのNode.jsはここから入手できます。
Node.jsがインストールされたら、mablレポートAPIなどのAPIとやり取りするためのaxiosライブラリを合わせてインストールする必要があります。コマンドラインで、このスクリプトを作成するディレクトリに移動し、Node.jsに付属しているnpmを使ってaxiosライブラリをインストールします。
npm install axios@1.3.3 --save
スクリプト例
以下のスクリプトを、axiosをインストールしたディレクトリにindex.jsという名前で保存します。すべてのフィールドをCSVに出力する必要がない場合やフィールドの順序を変更したい場合は、スクリプトのTEST_RUN_FIELDS
リストを編集できます。
const axios = require('axios');
const process = require('process');
const fs = require('fs');
// Check correct number of arguments and provide usage help
if (process.argv.length < 5 || process.argv.length > 6) {
console.error('Usage: node index.js WORKSPACE_ID MABL_API_KEY OUTPUT_FILE [API_QUERY_PARAMS]');
process.exit(1);
}
const WORKSPACE_ID = process.argv[2];
const MABL_API_KEY = process.argv[3];
const OUTPUT_FILE = process.argv[4];
const QUERY_PARAMS = process.argv[5];
let MABL_ENDPOINT_URL = `https://api.mabl.com/results/workspace/${WORKSPACE_ID}/testRuns?${QUERY_PARAMS || ''}`;
// Ordered fields to extract from each test run
const TEST_RUN_FIELDS = [
'application_id',
'application_name',
'environment_id',
'environment_name',
'initial_url',
'scenario_name',
'browser',
'browser_version',
'execution_runner_type',
'plan_id',
'plan_name',
'plan_run_id',
'test_id',
'test_version',
'test_name',
'test_type',
'branch',
'test_run_id',
'test_run_app_url',
'is_ad_hoc_run',
'failure_category',
'start_time',
'end_time',
'run_time',
'status',
'success',
'trigger_type',
'triggering_deployment_event_id',
'emulation_mode',
'metrics.cumulative_speed_index',
'metrics.cumulative_api_response_time',
'metrics.accessibility_rule_violations.critical',
'metrics.accessibility_rule_violations.serious',
'metrics.accessibility_rule_violations.moderate',
'metrics.accessibility_rule_violations.minor',
];
function getField(object, field) {
return field
.split('.')
.reduce((currentObject, currentField) => currentObject === undefined || currentObject === null ? undefined : currentObject[currentField], object);
}
async function getRunResults(cursor) {
let url = MABL_ENDPOINT_URL;
if (cursor !== undefined) {
url += `&cursor=${cursor}`;
}
console.log(`Fetching results with cursor=${cursor}`);
const response = await axios.get(url, {
auth: {
username: 'key',
password: MABL_API_KEY,
}
});
if (!response.data) {
console.error(`No data returned from mabl API; full response: ${JSON.stringify(response)}`);
}
return response.data;
}
function getResultFields(results) {
return results.map(result => {
return TEST_RUN_FIELDS
.map(field => escapeValue(getField(result, field)));
});
}
function escapeValue(value) {
if (value === undefined) {
return '';
}
if (typeof value === 'string') {
return value.replace(/,/g, '_');
}
return value;
}
function resultRowsToCsv(results) {
return results
.map(row => row.join(','))
.join('\n') + '\n';
}
async function getAllRunResults() {
let cursor;
const outStream = fs.createWriteStream(OUTPUT_FILE);
outStream.write(resultRowsToCsv([TEST_RUN_FIELDS]));
do {
const data = await getRunResults(cursor);
if (data) {
cursor = data.cursor;
const results = getResultFields(data.test_results || []);
outStream.write(resultRowsToCsv(results));
} else {
break;
}
} while (cursor !== undefined);
outStream.end();
}
getAllRunResults().catch(console.error);
スクリプトの実行
コマンドラインからindex.js
スクリプトを呼び出し、mablレポートAPIの結果を取得して、これらをCSVファイルに保存します。
node index.js <WORKSPACE_ID> <API_KEY> <OUT_FILE> <QUERY_PARAMETER_STRING>
このindex.js
スクリプトでは、次の引数を使用します。
<WORKSPACE_ID>
:<WORKSPACE_ID>
をワークスペースIDに置き換える<API_KEY>
: ワークスペースの所有者にmabl Viewer APIキーを作成してもらうか、既存のmabl Viewer APIキーを使用して、<API_KEY>
をキーシークレットに置き換える<OUT_FILE>
:<OUT_FILE>
を出力ファイル名 (results.csv
など) に置き換える<QUERY_PARAMETER_STRING>
: このオプション引数を使用して結果をフィルタリングする
APIのバッチ実行結果エンドポイントに関するAPIのドキュメントを参照して、利用可能なクエリパラメーターを見つけ、適切なクエリパラメーター文字列を作成して<QUERY_PARAMETER_STRING>
を置き換えます。
たとえば、一定の時間範囲内のすべての実行を指定するには、https://www.epochconverter.com/を使って目的の開始日時と終了日時のタイムスタンプ (ミリ秒単位) を取得し、これを次のように、クエリパラメーター内で使用します。earliest_run_start_time=1677506400000&latest_run_start_time=1677592800000