# ctrn

Latest version **0.1.4** (published 2024-01-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install ctrn
pnpm add ctrn
yarn add ctrn
bun add ctrn
```

Provides the command `ctrn`.

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.4 |
| Published | 2024-01-31 |
| First published | 2024-01-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 12 |
| Unpacked size | 119 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Genki Kondo |
| Maintainers | gnt0608 |

## Links

- npm: https://www.npmjs.com/package/ctrn
- npm.io page: https://npm.io/package/ctrn

## Dependencies (12)

- [pg](https://npm.io/package/pg.md) ^8.11.0
- [csv](https://npm.io/package/csv.md) ^6.3.1
- [glob](https://npm.io/package/glob.md) ^10.2.6
- [mssql](https://npm.io/package/mssql.md) ^9.1.1
- [dotenv](https://npm.io/package/dotenv.md) ^16.1.1
- [newman](https://npm.io/package/newman.md) ^5.3.2
- [aws-sdk](https://npm.io/package/aws-sdk.md) ^2.1388.0
- [js-yaml](https://npm.io/package/js-yaml.md) ^4.1.0
- [winston](https://npm.io/package/winston.md) ^3.9.0
- [oracledb](https://npm.io/package/oracledb.md) ^6.0.0
- [node-rest-client](https://npm.io/package/node-rest-client.md) ^3.1.1
- [newman-reporter-htmlextra](https://npm.io/package/newman-reporter-htmlextra.md) ^1.22.11

## Recent versions

- 0.1.4 (latest) — 2024-01-31
- 0.1.3 — 2024-01-31
- 0.1.2 — 2024-01-31
- 0.1.1 — 2024-01-31
- 0.1.0 — 2024-01-31

## README

# Continuous Testing wRapper for NodeJS

<div style="text-align: center;">
<img src='./ctrn.png' />
</div>

## 概要

継続試験を簡易に実施するためのテストラッパー  
試験実施の際には以下のようなフローを使用することが多いため、  
その反復実行を容易にすることを目的とする

1. テストデータ準備 (DB投入)
2. 試験実施
3. 結果取得 (DB, ログ)
4. 結果判定

## 使用方法

[必要ファイル](#必要ファイル) を用意し、以下の手順で実行する

```
npm install ctrn
npm run ctrn [config.yml]
```

### 必要ファイル
1. config.yml [設定方法](#configyml-作成方法)
2. 実行ファイル
3. env.json [設定方法](#環境変数)

## config.yml 作成方法

config.ymlという形式で処理シナリオを定義する  
以下の[フォーマット](#configyml-記載フォーマット)に記載される処理を上から実施するため、実行するシナリオの通りに羅列する


### config.yml 記載フォーマット 
```
[処理名]:
  process: [機能名]
  args:
    [引数名]: [値]
```

|  | 概要 |
| --- | --- |
| 処理名 | 実行する処理の名前を設定 |
| 機能名 | [機能](#機能) にある機能名を記載 |
| 引数名 | 各 [機能](#機能) にある機能に使用する引数を指定 |
| 値 | 該当引数に設定する設定値を記載 |


## 機能

### Dump - DBダンプ取得

#### 機能概要
データベース内 該当テーブルに存在するデータを取得、CSVとして出力する

#### Example
```
dump:
  process: dump
  args:
    tables: 
      - [table]
      - [table]
    out_path: [path]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| tables | 取得テーブル名 | リスト, 文字列 |- | - | 〇 |
| out_path | 出力先パス | 文字列 |- | ※1 | 〇 |

※1: 実際には出力先パス配下に[テーブル名].csvの形式で出力されます

### Echo - ログ出力

#### 機能概要
引数に指定した値をログに出力する

#### Example
```
echo:
  process: echo
  args:
    [key]: [value]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| key | 出力キ― | 文字列 |- | - | 〇 |
| value | 出力値 | 文字列 |- | - | 〇 |

### Explore Log - ログ収集

#### 機能概要
対象区間におけるログを取得する  
AWS CloudWatch / Datadog Logs を対象

#### Example
```
explore_log:
  process: explore_log
  args:
    application: [application]
    from: [from]
    to: [to]
    query: [query]
    out_path: [path]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| application | 取得対象アプリケーション名 | 文字列 |- | - | 〇 |
| from | 取得区間 From | 日時 |- | - | 〇 |
| to | 取得区間 To | 日時 |- | - | 〇 |
| query | 取得条件 | 日時 |- | - | 〇 |
| out_path | 取得ログ出力先 | 日時 |- | ※1 | 〇 |

※1: 出力パス配下に [log_type]_[from]_[to].log の形式で出力されます

### Export - 変数設定

#### 機能概要
引数に指定した値をユーザ設定変数として設定する

#### Example
```
export:
  process: export
  args:
    [key]: [value]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| key | ユーザ設定変数名 | 文字列 |- | - | 〇 |
| value | 設定値 | 文字列 |- | - | 〇 |

### Insert - DBデータ投入

#### 機能概要
該当テーブルにデータを投入する  
投入する対象のデータはCSV形式で指定する

#### Example
```
insert:
  process: insert
  args:
    in_dir: [path]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| in_dir | 取得データディレクトリ | 文字列 |- | ※1 | 〇 |

※1: ディレクトリ配下 [table].csvを取得し、該当テーブルに登録します

### MatchCSV - CSV突合

#### 機能概要
期待値と実績値のCSV間突合を行い、期待値通りの結果が得られていることを確認する  


#### Example
```
match_csv:
  process: match_csv
  args:
    expect_path: [path]
    actual_path: [path]
    out_path: [path]
    check_type: [check_type]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| expect_path | 期待値データパス | 文字列 |- | ※1 | 〇 |
| actual_path | 実績値データパス | 文字列 |- | ※1 | 〇 |
| out_path | 結果出力パス | 文字列 |- | ※1 | 〇 |
| check_type | 比較 | 文字列 |- | complete / contain ※2 | 〇 |

※1: CSVファイル名、もしくはディレクトリ名を指定します  
     ディレクトリ指定の場合には配下の同一CSVファイル間を突合します  
※2: completeの場合、入出力の行数一致まで確認する / containの場合、実績値データ内に期待値がすべて含まれることを確認する

#### 一致確認条件

以下条件を満たす場合に突合OKとなる  


##### 期待値・実績値がディレクトリ指定の場合

1. 期待値ディレクトリ内に存在するファイルに該当する実績値データが存在する  
ファイル名が期待値・実績値で一致すること
2. 各期待値ファイルに関して以下を満たすこと
    1. 期待値ファイル内各行について該当カラムが実績値ファイル内に存在するすること
    2. 期待値ファイル内に存在しないカラムについては任意値をとる
    3. check_typeがcompleteの場合、期待値ファイル内各行がすべて実績値ファイルに存在し、余剰な行が存在しないこと

##### 期待値・実績値がファイル指定の場合

1. 指定された期待値ファイルに関して以下を満たすこと
    1. 期待値ファイル内各行について該当カラムが実績値ファイル内に存在するすること
    2. 期待値ファイル内に存在しないカラムについては任意値をとる
    3. check_typeがcompleteの場合、期待値ファイル内各行がすべて実績値ファイルに存在し、余剰な行が存在しないこと


### Send Request - APIリクエスト送信

#### 機能概要
ツールを用いてのAPIリクエスト送信を実施する
Newman(Postman)での実行形式をサポートする

#### Example
```
send_request:
  process: send_request
  args:
    request_json: [path]
    out_dir: [path]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| request_json | API実行リクエストjson | 文字列 |- | ※1 | 〇 |
| out_dir | 結果ファイル保管用ディレクトリ | 文字列 |- | ※1 | 〇 |

※1: ディレクトリ配下に結果ファイルを配置します 実行結果はjson,html形式の2つで出力されます

### Wait - 指定時間待機

#### 機能概要
指定時間だけ実行待機をする  
単位はMS

#### Example
```
wait:
  process: wait
  args:
    time: [time]
```

#### 引数

| 引数名 | 概要 | 入力型 | デフォルト値 | 設定可能値 | 必須 |
| --- | --- | --- | --- | --- | --- |
| time | 待機時間(ms) | 数値 |- | 0以上整数 | 〇 |


## 環境変数

env.jsonを実行フォルダ直下に配置することで全体の環境変数を設定することが可能  
設定できる変数の一覧は以下

### API

```
{
    "api": {
        "request_type": "xxxx"
    }
}
```

| 変数名 | 概要 | デフォルト値 |
| --- | --- | --- |
| request_type | APIリクエストに使用するツール | - |

### DB

```
{
    "db": {
        "db_type": "xxxx",
        "server": "xxxx",
        "port": "xxxx",
        "database": "xxxx",
        "user": "xxxx",
        "password": "xxxx"
    }
}
```
| 変数名 | 概要 | デフォルト値 |
| --- | --- | --- |
| db_type | 接続先DB種別 | - |
| server | 接続先server URL | - |
| port | 接続先DBポート番号 | - |
| database | 接続先DB名 | - |
| user | 接続ユーザー名 | - |
| password | 接続ユーザーパスワード | - |

### Log

```
{
    "log": {
        "log_type": "xxxx"
    }
}
```
| 変数名 | 概要 | デフォルト値 |
| --- | --- | --- |
| log | ログ取得の対象となるサービス | - |

### AWS

```
{
    "aws": {
        "region": "xxxx",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxx"
    }
}
```
| 変数名 | 概要 | デフォルト値 |
| --- | --- | --- |
| region | アクセス先リージョン | - |
| access_key_id | 使用IAMのアクセスキー | - |
| secret_access_key | 使用IAMのシークレットキー | - |

### DataDog

```
{
    "datadog": {
        "apikey": "xxxx",
        "applicationkey": "xxxx"
    }
}
```
| 変数名 | 概要 | デフォルト値 |
| --- | --- | --- |
| apikey | Datadogアクセスキー | - |
| applicationkey | Datadogアプリケーションキー | - |

## 変数設定
各パラメータには変数設定を行うことが可能  
`${変数名}` という形式で記載すると  
[システム変数](#システム変数) および [ユーザ設定変数](#ユーザ設定変数) に設定されている変数の実値を埋め込むことができる


### システム変数

| 変数名 | 概要 | データ型 |
| --- | --- | --- |
| start_date | 処理実行時刻 | 日時 |
| now | 現在時刻 | 日時 |

### ユーザ設定変数

[ユーザ設定](#export---変数設定) に従う

---
_Source: https://npm.io/package/ctrn · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
