2017.05.23

SkyVisualEditorにおける権限テストの半自動化

こんにちは。 今日はSkyVisualEditor(以下SVE)の権限関係のテストで行っている半自動化と、そこで使っているツールについてご紹介します。

SVEはVisualforceページを出力するツールなので、 行うテストはページを開いたユーザのオブジェクトや項目についての権限ごとに、 どのように表示されるかを確認することになります。

現在このテストでは200程度のVisualforceページについてユーザの権限毎にテストを行っています。

自動化したこと

以下についてそれぞれタスクとして定義し、それぞれ個別に実行を可能にしています。

Salesforce環境構築
-テストオブジェクトのメタデータ生成/デプロイ
-ページレイアウトのメタデータ生成/デプロイ
-オブジェクト・項目権限のメタデータ生成/デプロイ
-テストで使用するプロファイルに組織内の全てのVisualforceページへのアクセス権を付与
テストデータ
-作成
-削除
SVEページデータ生成
-1つのページデータをひな形にオブジェクト毎に複製
デプロイしたページをユーザー毎や新規・編集としてそれぞれ開き、スクリーンショットを保存

Visualforceページへのアクセス権の追加については、beta版パッケージの削除のために全ページを削除した後に再度テストを実行するときに元のプロファイルメタデータに存在するページを全てデプロイするまでデプロイが通らなくなってしまうため、自動化されたブラウザでプロファイル設定ページを開き、デプロイ済みのページを全て選択することで一部のページのみでテストすることを可能にしています。

自動化していないこと

自動化しているのはページのスクリーンショット保存までで、その後の表示の確認は人力で行っています。 後でページを変更する可能性や時間的な問題から現在はアサーションまでは自動化していません。

ツール

上記のタスクを作成するにあたって使用しているツール群です。

JSforce

JSforceはnodeやブラウザからSalesforceのAPIにアクセスできるクライアントです。 ドキュメントを見ればわかる通り 対応しているAPIが幅広く、テストデータの作成・削除から 組織構築用のメタデータデプロイ、差分管理のためのメタデータ取得に使用しています。

Grunt / gulp

Gruntとgulpはどちらもnodeで動き、 npmから拾ってきたりプロジェクト独自に定義したタスクを実行するタスクランナーです。 今回は使っているのがzip圧縮/解凍プラグインくらいで、 ほとんどが独自に定義したタスクのなかでjsforceかNightmareを直接使っているのみなので使用する意味が少ないですが、 各タスクに説明を付けて--helpで参照する(&それをREADMEに張り付ける)程度の目的でつかっています。

元々はデプロイには Grunt + grunt-ant-sfdc を使用していましたがそのままだと Windows で動作しなかったので https://github.com/stomita/lightning-template-coffeescript/blob/master/gulpfile.coffee を参考に gulp + jsforce に移行しました。 (gulp-jsforce-deploy にプラグイン化されていることに気付いたのはこの記事を書いている最中です)

また、テストデータの作成/削除も最初はAPI消費数を気にして元々はCasperJS内でAjax Toolkitから作成していましたが、 今はjsforceからgulpタスクを通じて作成しています。 (削除に関してはAPI数を気にしてexecuteAnonymousでレコードを全件削除するApexコードを実行していますが)

現在はまだSVEページの生成タスクがGruntタスクとして残っていますが、いずれgulpに統一するつもりです。

PhantomJS

PhantomJSはJavaScriptで行う処理を記述できるヘッドレス(画面を持たない)ブラウザです。

この種のヘッドレスブラウザとしては他にSlimerJSやtrifleJSがあります。

PhantomJSのAPIはそのままでは様々なページを行き来するのは大変なため、下記のラッパーツールを使用しています。

CasperJS / Nightmare


CasperJS と Nightmare はどちらも PhantomJS のラッパーです。 他にも Horseman.js がありますが、こちらは試せていません。

CasperJSとNightmareはどちらもJavaScriptで操作をコーディングするPhantomJSラッパーですが、 書いたコードが実行される環境は違います。

CasperJSはnodeモジュールではなく独立したコマンドとして配布されており、 require先とスコープが共通だったり、npmモジュールが使用できなかったりします。 これはCasperJSようのコードがPhantomJSと同様のコンテキストで実行されるためでしょう。

それに対し、Nightmareはnodeからrequireして使用できるnpmモジュールです。 そのため、各種npm資産が使用できます(CasperJSもSpookyJSを使えばnodeから使えますが)。 ただ、NightmareはNightmareで、evaluateがコールバック形式になっているためにスクレイピングで取得した値を別のページで使いたい、などの処理が続くとコールバック地獄が待っています。

現在行っているテストのキャプチャに関しては慣れているCasperJSで実装しましたが、 これ以上パターンが増えたり、アサーションまで自動化するとなるとnpm資産を利用できるNightmareへの移行を 検討しようと思っています。

まとめ

いかがだったでしょうか。

こういったツールを使うことによってテスト用Salesforce環境の構築を自動化することで 環境を作り直すときにも楽になりますし、ソースコードとして保存しておけば構築時に特定の設定をわすれてしまう、ということもなくなります。

このような自動化の仕組みはこれからも積極的に取り入れていきたいものです。
17 件
     
  • banner
  • banner

関連する記事