SoapUI が今も得意とすること

  • SOAP と WSDL。 最近のツールの多くが後回しにするか、そもそも扱わない領域を、本格的にサポートしています。

  • 複雑なメッセージの構築。 XML の踏み込んだ操作とアサーションに対応しており、これはエンタープライズ統合がまさに必要とするものです。

  • モックサービス。 開発の相手となるダミーのエンドポイントを立ち上げる機能を、標準で備えています。

SOAP 中心の業務であれば、何を手放すことになるのかを慎重に見極めてください。ここでの対応範囲の広さは本物です。

それでも代替が探される理由

デスクトップ前提のワークフロープロジェクトファイルは誰かのマシン上に置かれ、レビューしづらい形式です。プルリクエスト上では、どの変更が誰によるものかも追いにくくなります。
パイプラインとの摩擦ヘッドレス実行は可能ですが、快適であることはまずありません。レポートも、CI の他の結果が集まる場所には届きません。
REST の使い勝手モデルは SOAP のために作られています。REST も動きますが、後から持ち込まれたものという印象が残ります。

SoapUI の代替を比較する観点

観点SoapUITestSprite
対応プロトコルの範囲SOAP、WSDL、REST、JMS など稼働中のサービスに対する REST API
テストの置き場所デスクトップクライアントで編集するプロジェクトファイルプロジェクト内に置かれ、自然な言葉で記述
カバレッジの作り方リクエストとアサーションを一つずつ人が組み立てる仕様または探索パスから生成
セッションと状態自分で保守するプロパティとスクリプトAuto-Authentication と Dynamic Variables
実行順序とクリーンアップテストケースの順序と teardown スクリプト自動的に導き出される実行順序と Auto-Cleanup
パイプラインとの適合ヘッドレスランナーと、切り離されたレポート変更をトリガーに実行し、結果はプルリクエスト上に

状態の扱いの仕組みについては、 API テストのドキュメント。

移行前に確認すべきこと

実際に SOAP なのはどれかを棚卸ししてください。スイートの 9 割が REST で、残りは何年も誰も触れていないレガシーな SOAP エンドポイントが数個だけ、という発見はよくあります。そうであれば、移行の規模は見た目よりずっと小さく、残った SOAP は今の場所に置いたままで構いません。

本当に SOAP 中心であれば、使い勝手を理由に移行すべきではありません。対応範囲の広さのほうが重要です。

候補をどう評価するか

意図的に壊してみてください。保存しても値が残らなくなるといった、実際に起こりうるリグレッションを仕込み、それぞれの候補が何を報告するかを見ます。テストは失敗するか。その失敗は実際の食い違いを言い当てているか。修正する人はその出力を起点に、経緯を一から組み立て直さずに着手できるか。アサーションに到達しなかった実行を成功と報告するツールは、唯一意味のあるテストに落第しています。

移行前にスイートを分割する

うまくいく移行が一度にすべてを動かすことは、ほとんどありません。そして分割は見た目より簡単です。SOAP と REST が同じテストの中で入り混じることは、めったにないからです。

まず、すべてのテストケースをプロトコルごとにタグ付けするところから始めます。多くのチームで見つかるのは 3 つのグループです。レガシーサービスに対する本物の SOAP、新しいサービスに対する REST、そしてワークフローが世代をまたぐために両方に触れる少数のケースです。1 つ目のグループは今の場所に残り、スイート全体をそこに留めておく理由ではなくなります。2 つ目は移行します。3 つ目は個別に見る価値があり、必要からではなく都合で 1 つにまとめられていた 2 つのテストに分かれることが少なくありません。

先にタグ付けをしておけば、移行に目に見える終わりが生まれます。これが、完了するプロジェクトと、1 年後もまだ中途半端なままのプロジェクトを分ける違いです。

始め方

ターミナル

npm install -g @testsprite/testsprite-cli
testsprite setup

何もインストールしたくない場合は、ダッシュボードでも同じことができます。コマンドラインでできるそれ以外の操作については、 CLI リポジトリ。

  • GitHub App は、TestSprite のダッシュボードで設定する webhook です。パイプラインがすでに発行しているデプロイイベントを待ち受けるため、リポジトリ側は何も変わりません。

  • GitHub Actions は、ターミナルから設定し、自分のワークフローの中にステップを組み込みます。

TestSprite が REST 側でカバーすること

スイートの REST 部分がこれまで担っていたことはすべてカバーしつつ、ワークフローはデスクトップではなくパイプラインに合わせてあります。テストケースはプロジェクト内に置かれ、自然な言葉で記述され、同じやり方で磨き込めるため、変更はほかの人がレビューできるものになります。

状態の扱いは製品機能として提供されます。Auto-Authentication、Dynamic Variables、Dependency Chains、Auto-Cleanup がそれにあたり、SoapUI では自分で保守するプロパティ、転送ステップ、テストケースの順序、teardown スクリプトに相当します。

実行はデプロイ、または自分のワークフローからトリガーされ、結果はプルリクエストへのコメントとして届きます。SOAP の資産は適切にサポートされている場所に残り、移行は 1 年後も中途半端なままになるのではなく、目に見える終わりを迎えます。

TestSprite は SOAP に対応していますか。

対象としているのは、稼働中のサービスに対する REST API です。SOAP 中心のスイートであれば、SOAP をきちんと扱えるものはそのまま残し、REST の領域にこちらを使ってください。

SoapUI のプロジェクトを変換できますか。

変換する対象としてではなく、何が存在するかの一覧として活用してください。価値があるのは、エンドポイントの一覧と、人々が重視してきたアサーションの中身です。

モックサービスはどうなりますか。

これは別の機能であり、頼っているなら残しておく価値があります。モック化と検証は別の仕事です。

乗り換えずに Pro 版を使う価値はありますか。

不満が機能にあるなら、その可能性はあります。不満がワークフローとパイプラインの噛み合わなさにあるなら、ライセンスの階層を変えても解決しません。

移行期間中に両方を動かすにはどうすればよいですか。

それぞれに別の範囲を担当させ、どちらも CI から実行してください。一度で切り替える理由はありません。

まとめ

スイートのうち実際に SOAP なのはどれくらいかを確認してください。

SoapUI の代替が意味を持つのは、デスクトップ前提のワークフローがパイプラインに合わなくなったときであり、多くのスイートはふたを開ければほとんどが REST です。本物の SOAP の作業には SoapUI を残し、REST の領域は自分たちのリリースの進め方に合う場所へ移してください。