티스토리 뷰
개요
이번 글에서는 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
링크
TAG
- Eclipse
- 로드바이크
- bootstrap
- chrome
- jsp
- kotlin
- JHipster
- 구동계
- 평속
- Tomcat
- Kendo UI
- maven
- JavaScript
- jpa
- DynamoDB
- 알뜰폰
- 로드 바이크
- 태그를 입력해 주세요.
- Spring MVC 3
- jstl
- node.js
- Spring Boot
- Docker
- MySQL
- CentOS
- graylog
- Kendo UI Web Grid
- 자전거
- java
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함