0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ToscaでJSONのElementからLoop実行する(既存のExcelデータ活用)

0
Posted at

この記事では、既存のExcelテストデータからJSONファイルを作成し、ToscaでJSON配列(Element)を1件ずつ読みながらループ実行する方法を紹介します。
Excelではなく既存のJSONファイルを活用する場合は、記事の後半から参照してください。

前回紹介したODBC接続手法によるExcelデータ処理と異なり、環境差分を減らして「データをファイルとして管理」しやすくするのが狙いです。

背景:ODBCを避けたい理由と、JSONに寄せるメリット

ExcelをそのままODBCで読む構成は便利な一方で、開発現場だと次の理由で詰まりがちです。

  • 実行端末ごとにODBCドライバ/DSNの準備が必要(運用負荷・環境差分)
  • Excelロックや更新タイミングで、再現性に揺れが生じる
  • CI/CDや複数人実行で扱いづらい

そこで「Excelは入力(原本)として残しつつ、実行はJSONで回す」構成にします。

  • JSONはリポジトリ管理しやすい(差分が見える)
  • 実行時にExcelを開く必要がなく、ロック問題が減る
  • JSONPathで「欲しい要素だけ」取り出しやすい

この記事で紹介するもの

  1. Excel(原本)からJSONファイルを生成する(前処理)
  2. ToscaでJSONの配列 items を読み、{REPETITION} を使って items[i] を取り出す
  3. 取り出した値をBuffer(変数)に入れて、同じテストケースを繰り返す

🧾 事前準備:Excelの形式(ヘッダ行必須)

Excelは 1シートに1つのテーブル表がある事を前提とします。

例:Form5 シート

Email Phone Username Password
test@example.com 123456789 Test Password1!
john@example.com 987065401 John Password1!

列名は英数字 + _ 推奨です(JSONのキーとしてそのまま使うため)。


Step 1:Excel → JSONを作成する(PowerShell例)

ここではImportExcelモジュールを使ったPowerShell例を載せます。

生成するJSONの形

{
  "count": 2,
  "data": [
    {
      "Record": 1.0,
      "E-Mail": "test@example.com",
      "Phone": "123456789",
      "Username": "Test",
      "Password": "Password1!",
      "Confirm Password": "Password1!",
      "Comments": "Test Comment."
    },
    {
      "Record": 2.0,
      "E-Mail": "John@example.com",
      "Phone": "987065401",
      "Username": "John",
      "Password": "Password1!",
      "Confirm Password": "Password1!",
      "Comments": "テストコメント."
    }
  ]
}

PowerShell(例)

param(
    [Parameter(Mandatory=$true)]
    [string]$XlsxPath,

    [Parameter(Mandatory=$true)]
    [string]$WorksheetName,

    [Parameter(Mandatory=$true)]
    [string]$TableName,

    [Parameter(Mandatory=$true)]
    [string]$OutDir,

    [string]$OutFileName = "export.json"
)

# ---- Validate paths ----
if (-not (Test-Path $XlsxPath)) {
    throw "Excel file not found: $XlsxPath"
}

New-Item -ItemType Directory -Path $OutDir -Force | Out-Null
$outFile = Join-Path $OutDir $OutFileName

# ---- Ensure ImportExcel ----
if (-not (Get-Module -ListAvailable -Name ImportExcel)) {
    Install-Module ImportExcel -Scope CurrentUser -Force
}

# ---- Get table address via EPPlus ----
$pkg = Open-ExcelPackage -Path $XlsxPath
$ws  = $pkg.Workbook.Worksheets[$WorksheetName]
if (-not $ws) {
    Close-ExcelPackage $pkg
    throw "Worksheet not found: $WorksheetName"
}

$tbl = $ws.Tables[$TableName]
if (-not $tbl) {
    Close-ExcelPackage $pkg
    throw "Table not found: $TableName"
}

$addr = $tbl.Address
Close-ExcelPackage $pkg

# ---- Read only table range ----
$data = Import-Excel `
    -Path $XlsxPath `
    -WorksheetName $WorksheetName `
    -StartRow    $addr.Start.Row `
    -EndRow      $addr.End.Row `
    -StartColumn $addr.Start.Column `
    -EndColumn   $addr.End.Column

# ---- Wrap with count ----
$result = [ordered]@{
    count = $data.Count
    data  = $data
}

# ---- Export JSON ----
$result |
    ConvertTo-Json -Depth 50 |
    Set-Content -Path $outFile -Encoding UTF8

Write-Host "Exported JSON:" $outFile
Write-Host "Record count:" $data.Count

Excel COMは「実行端末にExcelが必要」かつ「プロセスが残る」事故が起きやすいので、運用で使う場合は後述の注意点も確認してください。

PowerShell(実行例:ファイル名:excel2json.ps1)

.\excel2json.ps1 `
  -XlsxPath "C:\Files\Tosca_Test_Data\Vehicle_Test_Data.xlsx" `
  -WorksheetName "Form1" `
  -TableName "form1" `
  -OutDir "C:\Files\Tosca_Test_Data\JSON" `
  -OutFileName "Vehicle_Test_Data_form1.json"

パラメータ 値
XlsPath エクセルファイルのパス
WorksheetName 出力対象のシート名
TableName 対象のテーブルの名称(名前範囲の定義)
OutDir JSON出力フォルダ
OutFileName JSON出力ファイル名

Step 2:ToscaからJSON生成を呼び出す(前処理として組み込む)

ローカルで手動生成して準備しても良いですし、Excelが更新されている場合はTosca実行の先頭でJSONを生成しておくと事故が減ります。

  • 例:TBoxの「コマンド実行」で上記PowerShellを実行
  • 引数で ExcelPath / SheetName / JsonPath を渡せる形にしておくと運用しやすい

image.png


Step 3:JSONモジュールの作成

3-1 JSONファイルからモジュールの作成

  • JSONファイルを取り扱うにはAPIスキャンからJSONファイルのモジュール作成を行います。Tosca Commanderの API Testingから API Scanを起動します。

  • API Scan 画面にてFileを選択しJSONファイルを読込みます。

  • 読み込んだファイルの内容を確認しAPI Test Case XML/JSON Test Caseと進みます。

  • これにてTosca Commander上にてJSONモジュールが作成されます。

  • 複数のJSONファイルをテストする場合は、上記を繰り返した後、API Scan画面を閉じます。

image.png

image.png

3-2 作成したモジュールの修正

実際にテストで利用するに当たってはJSONモジュールを汎用的に利用できるよう修正が必要です。
ここではレコードの分作成された、Item#の#2以降を削除します。

image.png

またItemを特定するための情報をPropertyの中から探し、ここではNameを削除します。

image.png

出来上がった状態が以下のようなModuleです。
dataの中にはItem#1のみを残し、Item#1のPropertyからNameを削除した状態です。

ここまで来れば事前準備が完了しTest Caseの作成にうつります。

image.png


Step 4:JSONのElementから値を取り出してLoopする(items[{REPETITION}])

4-1: JSON Resourceの読込

Toscaの中でJSON操作をするには、まず内部のResourceへ読み込む必要が有ります。
Open/Create JSON Fileというモジュールを開き作成したJSONファイルを読込ませます。その際に任意のResource名をアサインします(ここではform1)

image.png

また取得したRecordの件数をLoopの上限として処理したいので、
Step3で作成したモジュールを設定し、Countの箇所にBuffer変数を設定します。

4-2: Loop処理設定

ここではWhile Loopを利用します。
Exit Criteriaの設定を行います。

Exit Criteria(例)

  • While {REPETITION} < {$TableCount} + 1 のように上限で止める

image.png

4-3: 実処理の中でのJSONの値の利用

JSONファイルの中身はそのままでは呼び出しが出来ませんので
ここではRecordに連番が含まれているので、その値を利用します。
Loop処理中に自動生成されるカウンターの{REPETITION} Propertyを活用しConstraintを設定しておきます
(連番などの項目がない場合はテーブルに作成するか、Item#1のPropertyの設定を活用する事で対応可能です)

image.png

上記では各項目をそれぞれBuffer変数に保存し、後処理で活用できる処理を行います。


4-4: Buffer変数の活用

ここまで来ると最後の処理は通常のToscaの操作と同様です。
保存しておいたBuffer変数をTest Stepの中で利用するだけです。

image.png

Step 5:実行

ここまで来れば、作成したTest Caseを実行するだけです。
実際に実行すると1テストケースで10回分のデータパターンのテストを高速で実行する事も可能です。

image.png


まとめ:Excelは“入力”、実行はJSONにて実施

  • ODBCを使わず、Excel → JSONに変換してからToscaでLoopする構成を紹介しました
  • ループ中は items[{REPETITION}] を軸に、JSONPathで要素を取り出してBufferへ流し込みます
  • 環境差分/ロック問題を減らしつつ、データドリブン実行を継続できます
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?