Golang 종단간 HTTP API 테스트 baloo 라이브러리 알아보기

오늘은 Golang으로 구현된 종단간 HTTP API 테스트할 수 있는 baloo 라이브러리를 알아보려 합니다.

baloo 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 baloo 패키지를 설치합니다.

go get -u gopkg.in/h2non/baloo.v3

홈의 go 폴더에 baloo 소스코드와 패키지 파일이 생성됩니다.

예제

package test

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언하지 않고 테스트를 위해 다른 이름을 적습니다.

import (
	"errors"
	"net/http"
	"testing"

	"gopkg.in/h2non/baloo.v3"
)

errors, http, testing과 baloo를 가져옵니다.

var balooClient = baloo.New("http://httpbin.org")

HTTP 요청을 테스트할 baloo 클라이언트 객체를 만듭니다.

const schema = `{
	"title": "Example Schema",
	"type": "object",
	"properties": {
	  "origin": {
		"type": "string"
	  }
	},
	"required": ["origin"]
  }`

요청 본문과 같은 스키마를 정의합니다.

func assert(res *http.Response, req *http.Request) error {
	if res.StatusCode >= 400 {
		return errors.New("Invalid response")
	}
	return nil
}

assertion 함수를 작성합니다.

StatusCode가 400이상이면 새로 정의한 오류로 작동합니다.

func TestBFunc(t *testing.T) {
	balooClient.Get("/get").
		Expect(t).
		Status(200).
		Header("Server", "nginx").
		Type("json").
		JSONSchema(schema).
		AssertFunc(assert).
		Done()
}

테스트 함수를 만들고, 응답 코드, 헤더, 타입, 스키마등을 테스트합니다.

Written on October 18, 2019