티스토리 뷰

개요

이번 글에서는 Mocha, Chai, Request 기반의 원격 REST API에 대한 테스트 환경을 구축하는 방법을 설명하고자 한다.

패키지 설치하기

아래와 같이 테스트를 위한 프로젝트를 생성하고 필요한 패키지를 설치한다.

$ md rest-api-test
$ cd rest-api-test
$ npm init -y
$ npm install mocha mocha-junit-reporter -g
$ npm install chai request --save
  • Mocha [링크]Node.js 기반의 Test 프레임워크이다. 어디서든 mocha 명령을 실행하기 위해 전역 범위로 패키지를 설치한다.

  • mocha-junit-reporter는 테스트 결과를 JUnit 형식의 XML 파일로 생성하여 Jenkins에서 인식할 수 있도록 해주는 리포터이다.

  • Chai [링크]는 테스트 시나리오 작성에 필요한 메써드를 제공하는 Assertion 라이브러리이다. 대표적으로 should, expect, assert를 제공한다.

  • Request [링크]는 직관적인 문법의 HTTP 클라이언트 라이브러리이다. 원격지의 REST API를 테스트하기 위해 사용한다.

테스트 케이스 작성하기

테스트 케이스는 반드시 프로젝트 루트의 /test 디렉토리에 작성해야 한다. 아래와 같이 test.js를 작성한다.

const request = require('request')
const expect = require('chai').expect;

describe('GET http://jsonobject.com', function () {
    it('200을 리턴해야 한다.', function (done) {
        request.get('http://jsonobject.com', function (err, res, body) {
            expect(res.statusCode).to.equal(200)
            done()
        })
    })
})

테스트 케이스 타임아웃 지정하기

  • Mocha의 각 테스트 케이스마다 요청 타임아웃을 지정할 수 있다.
describe(... function() {
    it(..., function(done) {
        // 테스트 케이스 작성에 앞서 요청 타임아웃을 지정, 1000ms는 1초를 의미
        this.timeout(1000)
        ...
        done()
    }
})

테스트 케이스마다 지연 시간 삽입하기

  • Mocha의 각 테스트 케이스마다 지연 시간을 삽입할 수 있다. 라이브러리의 도움이 필요하다.
// thread-sleep 라이브러리를 로드
const sleep = require('thread-sleep')
describe(... function() {
    it(..., function(done) {
        // 테스트 케이스 작성에 앞서 지연시킬 시간을 작성, 1000ms는 1초를 의미
        sleep(1000)
        ...
        done()
    }
})

테스트 케이스 실행하기

테스트 케이스를 실행할 차례이다. 프로젝트 루트에서 아래와 같이 실행한다.

$ mocha


  GET http://jsonobject.com
    √ 200을 리턴해야 한다. (329ms)


  1 passing (343ms)

테스트 결과를 JUnit 형식의 리포트 파일로 생성하려면 아래와 같이 실행한다.

$ mocha --reporter mocha-junit-reporter

$ type test-results.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Mocha Tests" time="0.384" tests="1" failures="0">
  <testsuite name="Root Suite" timestamp="2017-04-20T13:28:15" tests="0" failures="0" time="0">
  </testsuite>
  <testsuite name="GET http://jsonobject.com" timestamp="2017-04-20T13:28:15" tests="1" file="D:\Project\chai-http-test\test\rest-api-test.js" failures="0" time="0.384">
    <testcase name="GET http://jsonobject.com 200을 리턴해야 한다.." time="0.384" classname="200을 리턴해야 한다..">
    </testcase>
  </testsuite>
</testsuites>

참고 글

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함