はじめに
今まで自動テストを作成したことは無かったのですが、半年程前から業務で自動テストを作成するようになりました。その際に複数の自動テストで流用している汎用性の高いコードがありましたので、それらをまとめてみようと思いました。
1. リストから変数の名前を検索し、見つかった際にアクションする
steps.listTest()
.statusIs(200)
.getResponse()
.as(new TypeRef<List<Response>>() {
})
.stream()
.filter(test -> test.getName().equals(NAME))
.findFirst()
.ifPresent(test -> {
testId = test.getId();
steps.install(testId);
});
解説
Testのリストを取得し、そのリストから名前が「NAME」のものを検索する。見つかった場合は「testId」に「NAME」のIDを入れてそのテストをインストールする。
2. レスポンスを10分間確認し、変化があった際に条件分岐する
for (int i = 0; i <= 600; i++) {
Thread.sleep(1000);
var response = steps.get(id)
.getResponse()
.as(Response.class);
if (response.getStatus().equals("UP")) {
serviceName = response.name;
break;
}
}
if (serviceName.isEmpty()) {
fail("The status does not become ");
}
解説
10分間毎秒「response」のステータスを確認し、「UP」になったら「serviceName」に「response」の名前を代入する。「UP」にならなかった際はエラーメッセージを表示する。
3. 複数の条件が全てtrueだった際にアクションする
boolean logsExist = Objects.nonNull(logsResponse) &&
Objects.nonNull(logsResponse.status) &&
logsResponse.status != 0;
if (logsExist) {
logs = logsResponse;
} else {
fail("log does not exist");
}
解説
「logsResponse」がnullではなく、ステータスがnullでも0でもない時に「logs」に「logsResponse」を代入する。条件に当てはまらなかった際はエラーメッセージを表示する。
最後に
今まで自動テストを作成したことが無かった私ですが、既存のテストコード確認やグーグル検索、AIに質問をすることで作成できるようになってきました。この記事にも書いていますが、一度作成したテストコードは他のテストにも流用できることが多いので、1つテストを作成できると2つ目以降はスムーズに作成できるようになりました。他の方がどのように自動テストを作成しているかはわかりませんが、もし参考になりましたら幸いです。