Kotlin Springboot -- 12부 게이지 와 kluent 와 ScenarioDataStore

何をしたいのか



作成したアプリの API を叩いて、RESPONSに期待する値が返ってくるかをtestしたい.


HTTP 요청용 Java 라이브러리



https://zetcode.com/kotlin/getpostrequest/

zetcode さんの kotlin 에서 GET/POST HTTP richestの記事を参考にした.

import com.thoughtworks.gauge.Step


데포르트에서 thinkworks の gauge の Step 은 수입하고 있습니다.

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("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 richestのinstantsを作成して,
URL を localhost8080 にする

Http craiantのinstancesの send を使って
いま組み立 て た リ ク EST を送信 し て、레스폰스変数に入れる.

레스폰스의 몸을 펼칠 수 있는

        println(response.statusCode())


これでレスポンスステータスコードも見れる.


레스폰스を시나리오데이타스트アに保存する



레스폰스에는 코레데미레타.
しかし、시나리오を分離するためには取ってきたレスポンスを保存して、それに対して個別に中身に何が有るか、アサーションをする必要が有る.

こういう場合、backクendではデータストアというものがある.
リフレッシュしても消えない保存場所で、Frontだとローカルストレージに当たるらしい.

https://www.javadoc.io/doc/com.thoughtworks.gauge/gauge-java/0.7.10/com/thoughtworks/gauge/datastore/ScenarioDataStore.html

게이지 で扱えるのは、시나리오데이타스트아그렇다고.

    @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 で値を登録する.
なので、시나리오데이타스트아노 넣어 메속드로
"StatusCode"라고 말하는 키로 레스폰스의 스테이타스코드를 유지합니다.

kluent でリクESTから返って きたレスポンスを期待値と比較する



https://github.com/MarkusAmshove/Kluent

shouldBeEqualTo などで自然言語っぽくtestの実装をするには
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 に追記する.



버전 については、GitHub のリリースタブをみると書いてある.

            <scope>test</scope>


범위 が 테스트 だと記載する ことで、testのprojektでも使えるようになる.

    @Step("<statusCode>が返る")
    fun shouldBeStatusCode(statusCode: Int) {
        ScenarioDataStore.get("StatusCode") shouldBeEqualTo statusCode
    }



ScenarioDataStore の get で、
先程作た "StatusCode"의 키에서 取り出し
引数の期待値とする statusCode と比較する.

* Persons一覧をリクエストする
* "200"が返る


すると, このように別の行でtestできる.

좋은 웹페이지 즐겨찾기