概要
PHPUnitで自動テストをしていますが、ローカル環境では動かない機能のテストが一部あったため、実行環境を判定してスキップしてやろうって話。
目標
- 実行環境の判定関数を作りたいので、適当な判定条件を作る。
条件
- 本番環境とテスト環境ではテストを実行したいが、ローカル環境では特定のテストを実行したくないので、これらを区別する必要がある。
- 本番環境とテスト環境はAWSのEC2上で動いている。
- ローカルの開発環境はxamppやらVM+vagrantやらDockerやら各々色々。
- PHPUnitはコンソールから直接実行する場合もある。
結果
東京リージョンのEC2を判定する例
function is_local() {
if (strpos(gethostname(), 'ap-northeast-1.compute.internal') === false) {
return true;
}
return false;
}
備考
- 「アジアパシフィック (東京)」リージョンのEC2インスタンスはhostnameが
ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal
といった形式になるようで、ローカルの開発環境ではこうはならないため、都合が良いと判断し採用。 $_SERVER['HOSTNAME']
は実行条件によってEC2インスタンス上でもNULLになってしまう場合があったため不採用。gethostname()
の挙動が安定しないようなことがあれば再考。- PHPの実行時にenvを宣言するみたいなことができるらしく、本来はそうした方がスマートなのかなと思うけど今回は見送り。