何をしたいのか
作成したアプリの API を叩いて、レスポンスに期待する値が返ってくるかをテストしたい。
HTTP Request 用の Java ライブラリをインポートする
https://zetcode.com/kotlin/getpostrequest/
zetcode さんの kotlin での GET/POST HTTP リクエストの記事を参考にした。
import com.thoughtworks.gauge.Step
デフォルトで thoughtworks の gauge の Step は import されている。
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
java.net から http のクライアント、リクエスト、レスポンス
これらのライブラリをインポートする
HTTP ライブラリを使ってレスポンスを取得する
この Java.net の HTTP ライブラリで HTTP リクエストをする Step を実装する。
@Step("Persons一覧をリクエストする")
fun requestPersons() {
val client = HttpClient.newBuilder().build();
val request = HttpRequest.newBuilder()
.uri(URI.create("http://localhost:8080/persons"))
.build();
val response = client.send(request, HttpResponse.BodyHandlers.ofString());
println(response.body())
}
Http クライアントのインスタンスを作成
Http リクエストのインスタンスを作成して、
URL を localhost8080 にする
Http クライアントのインスタンスの send を使って
いま組み立てたリクエストを送信して、レスポンス変数に入れる。
レスポンスのボディを出力する
println(response.statusCode())
これでレスポンスステータスコードも見れる。
レスポンスをシナリオデータストアに保存する
レスポンスはこれでみれた。
しかし、シナリオを分離するためには取ってきたレスポンスを保存して、それに対して個別に中身に何が有るか、アサーションをする必要が有る。
こういう場合、バックエンドではデータストアというものがある。
リフレッシュしても消えない保存場所で、フロントだとローカルストレージに当たるらしい。
gauge で扱えるのは、シナリオデータストアという。
@Step("Persons一覧をリクエストする")
fun requestPersons() {
val client = HttpClient.newBuilder().build();
val request = HttpRequest.newBuilder()
.uri(URI.create("https://www.google.com"))
.build();
val response = client.send(request, HttpResponse.BodyHandlers.ofString());
ScenarioDataStore.put("StatusCode", response.statusCode())
}
データストアは key value で値を登録する。
なので、シナリオデータストアの put メソッドで
"StatusCode" という key でレスポンスのステータスコードを保存する。
https://webliker.info/web-skill/how-to-use-localstrage/
フロントのローカルストレージも同じように
localStorage.{set,get}Item で key value で使えるようだ。
kluent でリクエストから返ってきたレスポンスを期待値と比較する
https://github.com/MarkusAmshove/Kluent
shouldBeEqualTo などで自然言語っぽくテストの実装をするには
kluent が便利。
https://github.com/MarkusAmshove/Kluent#maven
<dependency>
<groupId>org.amshove.kluent</groupId>
<artifactId>kluent</artifactId>
<version>{version}</version>
<type>pom</type>
</dependency>
公式で Maven での導入方法をみて、pom.xml に追記する。
version については、GitHub のリリースタブをみると 1.68 と書いてある。
<scope>test</scope>
scope が test だと記載することで、テストのプロジェクトでも使えるようになる。
@Step("<statusCode>が返る")
fun shouldBeStatusCode(statusCode: Int) {
ScenarioDataStore.get("StatusCode") shouldBeEqualTo statusCode
}
ScenarioDataStore の get で、
先程作った "StatusCode" の key から取り出し
引数の期待値とする statusCode と比較する。
* Persons一覧をリクエストする
* "200"が返る
すると、このように別の行でテストできる。
Top comments (0)