MagicPodのローカルPC実行で定期実行を実現したお話

この記事は「株式会社エス・エム・エス Advent Calendar 2024」シリーズ1の12/17の記事です。

はじめに

介護/障害福祉事業者向け経営支援サービス「カイポケ」でQAを担当している中村です。気づけば入社して3年が経ちました。現在は複数のQAチームに横断的に関わりつつ、チームのサポートや改善活動の推進など、幅広い業務を担当しています。

弊社では以前から、ノーコードのテスト自動化ツール「MagicPod」を使用し、E2Eテスト自動化を推進しています。今回の記事では今年取り組んだ「ローカルPC実行で定期実行を実現したこと」をテーマにお話ししていきます。

昨年のAdvent Calendarでも、E2Eテスト自動化のことを記事にしているので、ぜひそちらもご覧ください 🙏 tech.bm-sms.co.jp

取り組みのお話

1.前提

カイポケにおける自動テストの状況を簡単に説明します。

  • 開発環境がプライベートネットワークなのでMagicPodのクラウド実行機能を使えない
  • リモートワーク主体でプライベートネットワーク内で安定した通信が求められるので、自動テストの実行環境は仮想環境を使用している
  • カイポケの推奨環境に準拠して自動テストの実行環境はWindowsとしている

これらの制約がある中で開発環境に対して定期実行を可能にする方法を検討していきました。

2.構成

仮想環境にPowerShellを配置し、それをWindowsのタスクスケジューラで定期実行する構成としました。JenkinsなどのCIツールを利用する選択肢も検討したのですが、以下の理由から今回の構成を採用しました。

  • CIツールの保守にコストをかけたくない
  • テスト実行環境を軽量で運用したい

2-1. 構成イメージ

2-2. 実行フロー

  1. スケジューラにタイマーをセットする
  2. スケジューラでセットした時刻にPowerShellを実行する
  3. MagicPodDesktopを起動し自動テストを実行する

3.テスト実行スクリプト(PowerShell)

PowerShellでは、MagicPod公式のヘルプ「コマンドライン一括テスト実行(ローカルPC環境)」も参考にしながら、主に以下の処理を行っています。

  1. Proxy設定の更新
  2. MagicPodDesktop設定ファイルの更新
  3. テスト実行

次に、コードを交えながら各処理内容を簡単に紹介していきます。なお、説明のために処理を分割していますが、実際には1つのスクリプトで完結するように構成しています。

3-1. Proxy設定の更新

## テスト環境を指定(実際には引数で取得)
$targetProxy = "XXX"

## テスト環境向けのProxyServerを定義
$proxyList = @{
    "STG" = "<STG_URL>:<STG_PortNumber>";
    "DEV" = "<DEV_URL>:<DEV_PortNumber>";
}

Function changeProxy {
    param(
        $targetProxy
    )
        
    try{
        # 接続先のProxyServerを設定
        New-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name "ProxyServer" -PropertyType "String" -Value "$targetProxy" -Force
        
        # Proxy設定をon
        Set-ItemProperty -Path ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings’ -Name ProxyEnable -Value 1
        Write-Host "Proxyが設定されました: $Proxy" -ForegroundColor Green
    }

    catch{
        # Proxy設定をOff
        Set-ItemProperty -Path ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings’ -Name ProxyEnable -Value 0
        Write-Output "Proxy設定でエラーが発生しました" -ForegroundColor Red
        Write-Output $_ -ForegroundColor Yellow
        exit
    }
}

3-2. MagicPodDesktop設定ファイルの更新

## テスト実行用のパラメータを指定(実際には引数で取得)
$testNumber = "XXX"
$testPattern = "XXX"

## ファイルパスを指定
$magicPodConfig = "$HOME\AppData\Roaming\magic_pod_desktop\magic_pod_config.json"

Function updateConfig {
    try{
        # MagicPodConfig.jsonを読み込んで更新する
        $jsonContent = Get-Content -Path $magicPodConfig -Encoding UTF8 -Raw | ConvertFrom-Json

        # テストケースを指定
        $jsonContent.testSettingsNumber = $testNumber
        $jsonContent.testSettingsPatternName = $testPattern

        # JSONに変換
        $updatedJson = ConvertTo-Json $jsonContent

        # UTF-8(BOMなし)で出力
        [IO.File]::WriteAllLines($magicPodConfig,$updatedJson)
        Write-Host "設定ファイルが正常に更新されました。" -ForegroundColor Green
    }

    catch{
        Write-Output "configファイルの更新でエラーが発生しました" -ForegroundColor Red
        Write-Output $_ -ForegroundColor Yellow
        exit
    }
}

3-3. テスト実行

## ファイルパスを指定
$magicPod = ls $HOME\AppData\Local\magic_pod_desktop\app-*\MagicPodDesktop.exe
$magicPodConfig = "$HOME\AppData\Roaming\magic_pod_desktop\magic_pod_config.json"

## 実行コマンドオプションを指定
$argConfig = "run --magic_pod_config=`"$magicPodConfig`""

Function startMagicPod {
    Start-Process -FilePath "$magicPod" -ArgumentList $argConfig
}

さいごに

今回紹介した方法により、本番環境だけでなく開発環境でも定期実行を実現することができました。定期実行を導入することで、何か問題があった際にすぐに気づける安心感を得られたことは、大きな成果だと感じています。また、テストに問題が発生した時もすぐに改修できるため、テストケースの保守性向上にも役立っています。

ただし、現時点では定期実行の実現にとどまっています。今後はCI/CD連携を進めて、リリースプロセスに密接に関わる形に発展させることで、さらなる開発サイクルの高速化や品質向上を目指していきたいと考えています。

エス・エム・エスでのテスト自動化の取り組みは着実に進んでいますが、まだ発展途上であり、さまざまなチャレンジができる環境です。(常に「より良く」を目指しているので、終わりはないかもしれませんが…😅)

現在、QAエンジニアを積極採用中です!少しでも興味をお持ちいただけましたら、ぜひカジュアル面談でお話ししましょう!!