【Android15 タブレット 12インチ 2K IPS大画面】ODEA A12 2025、2000*1200解像度、8000mAh+USB-C、12GB+128GB+1TB TF拡張、A75 CPU T606 Antutu 240,000点+、アンドロイド15タブレット、2K IPS画面/GMS/5G WiFi/BT 5.0/Widevine L1 Netflix対応/GPS (12GB)
¥16,900 (2025年5月2日 13:06 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
はじめに
Step CIのpluginを実装した際の覚書です。
Step CIでリグレッションテストを実装した際に、テストケース内で直接DBを操作する必要がありました。
しかし、Step CIではDB操作がサポートされていなかったためDB操作用のpluginを自作することにしました。
フォルダ構成(抜粋)
.
├── db-handler/
│ ├── index.js
│ └── package.json
├── stepci.js ・・・Step CIの実行ファイル
├── package.json
└── workflow.yaml
実装例
処理内容は公式ドキュメントにあるボイラープレートをベースに、要件に応じて必要なロジックを実装します。
db-handler/index.js
import * as mysql from 'mysql2/promise';
const { checkResult } = require('@stepci/runner/dist/matcher');
module.exports.default = async (input) => {
const connection = await mysql.createConnection({
host: HOST,
database: DATABASE,
user: USER,
password: PASSWORD,
});
let stepResult = {}; // Step CIが当該stepの実行結果として受け取るオブジェクト
stepResult.request = input.query;
try {
const [result] = await connection.execute(input.query);
stepResult.response = result;
// 実行結果のアサーション
if (input.check) {
stepResult.checks = {};
if (input.check.status) {
const is_success = result[input.action == 'update' ? 'changedRows' : 'affectedRows'] >= 1;
const given = is_success ? 'success' : 'failure';
stepResult.checks.status = checkResult(given, input.check.status);
}
}
return stepResult;
} catch (error) {
stepResult.response = error;
stepResult.checks = {
status: {
expected: input?.check?.status ?? null,
given: 'ERROR',
passed: false,
},
};
return stepResult;
}
};
テストケース内での使用
workflow.yaml
- name: テストデータ作成
plugin:
id: db-hundler
action: insert
query:
INSERT INTO users (name, email) VALUES ('test_user', 'test@example.com')
check:
status: inserted
ハマったポイント
実装時にハマった点としては以下の箇所です。
CommonJSで実装する
Step CI側の実装がCommonJSであり、自作したpluginをrequireで読み込んでいるのでそれに合わせてCommonJSで実装しmodule.exportsする必要があります。
db-handler/package.json
{
"name": "db-hundler",
"type": "commonjs",
"version": "1.0.0",
"main": "index.js"
}
dependencyへの追加
実装したpluginをyaml内で使用するには、ローカルパッケージとしてdb-handler
ディレクトリをプロジェクトの package.json に依存として追加しnpm install
を実行してnode_modules
に取り込む必要があります。
package.json
{
"dependencies": {
"db-hundler": "file:./db-hundler"
}
}
yamlのplugin.id
にはdependencies
に記載したキーを指定します。
おわりに
Step CIでDB操作を可能にする自作プラグインの実装方法のメモでした。
公式でサポートされていない機能でも、プラグインを活用すれば柔軟に拡張ができるので便利です。
自動テストでは、システム固有の前処理や検証が必要になる場面も少なくありません。
プラグインを積極的に活用し、より良いCI/CDの実現を目指していきたいです。
Views: 0