글

라벨이 Test인 게시물 표시

K6 testing 간단한 GET 부하 테스트

이미지
 테스트 프로젝트에 js파일을 생성합니다. (testing1.js) // simpleGetTest/testing1.js import http from 'k6/http' ; import { sleep } from 'k6' ; export default function () { http . get ( '[테스트 하기 위한 URL정보]' ); sleep ( 1 ); } 매우 간단한 테스트 입니다. 1회만 해당 URL에 GET요청을 하고 status코드가 200이 오는지 확인합니다. import { sleep } from "k6" import http from "k6/http" // 테스트 옵션 // 10명의 가상 유저들이 30초간 export const options = { vus : 10 , // 10명의 가상 유저 duration : "30s" , // 30초간 } export default function () { http . get ( "[테스트 하기 위한 URL정보]" ) sleep ( 1 ) } 다음 테스트는 옵션을 줘서 10명의 유저가 30초간 GET요청을 하는 테스트입니다. import { sleep } from "k6" import http from "k6/http" // 테스트 옵션 export const options = { stages : [ { duration : "30s" , target : 20 }, // 30초동안 20명의 유저가 점진적으로 늘어난다 { duration : "1m30s" , target : 10 }, // 1분30초동안 10명의 유저가 유지된다. { duration : "20s" , target...

K6 Testing 테스팅툴 설치방법(Ubuntu 20.04)

이미지
서버 또는 웹을 개발하다 보면 해당 시스템이 얼마나 트래픽을 견딜수 있는지 확인할 필요가 있습니다. 하지만 1000명이 동시에 GET Request를 수동으로 구현하는 것은 쉽지가 않습니다. 피시방 여러군대를 매수해서 1000대의 PC에서 한 웹사이트에 GET요청을 해도 비용이 어마어마하게 나갈것이기 때문입니다.  확인을 하다가 오픈소스 툴인 K6를 추천받았습니다. Document를 읽으니 생각보다 사용하기 쉬워보여서 스터리를 진행하게 되었습니다. 일단 자세한 설치법은 공식 Document에도 나와있지만 저만의 글을 작성해서 설치법도 아래 적도록 하겠습니다. 공식문서 링크 : https://k6.io/docs/get-started/installation/#linux gpg를 이용하여 키 생성 $ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69 copy gpg를 이용하여 키 생성중 에러발생시 참고 --------------------------------------------- 위 사진처럼 에러 발생시 대처 방법 에러 발생시 참고 공식문서 링크 : https://k6.io/docs/get-started/installation/troubleshooting/ sudo를 이용하여 gpg 루트 생성 $ sudo gcg -k copy 셋팅 완료 --------------------------------------------- deb설치 k6 $ echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb s...

TypeScript_JEST TypeScript로 Node TestCast만들기 : 커버리지(Coverage) 생성하고 사용하기 -4

이미지
  // jest.config.ts import type { Config } from '@jest/types' const config : Config . InitialOptions = { roots : [ '<rootDir>/src' ], transform : { '^.+ \\ .tsx?$' : 'ts-jest' }, testRegex : '(/__test__/.*|( \\ .|/)(test|spec)) \\ .[jt]sx?$' , moduleFileExtensions : [ 'ts' , 'tsx' , 'js' , 'jsx' , 'json' , 'node' ], verbose : true , collectCoverage : true , // 커버리지 사용 collectCoverageFrom : [ '<rootDir>/src/app/**/*.ts' ] // rootDir(루트 경로)에서 src/app폴더안 모든(**)폴더, 파일 및 모든 TypeScript 파일*.ts } export default config ; 커버리지를 사용한다고 하면 위 사진과 같이 테스트 결과가 다르게 나오는 것을 알수 있습니다.  HTML문서로 해당 테스트의 커버리지를 확인을 할수 있습니다.

TypeScript_JEST TypeScript로 Node TestCast만들기 : 에러상황을 테스트하기 -3

이미지
  // src/app/Main.ts import { parse , UrlWithParsedQuery } from "url" ; export class Fun { public static parseUrl ( url : string ) : UrlWithParsedQuery { if (! url || url . length <= 0 ) throw Error ( 'url is empty' ) // url이 비어있을시 에러발생 return parse ( url , true ); } public static toUpperC ( arg : string ){ return arg . toUpperCase (); } } // src/test/Main.test.ts import { Fun } from '../app/Main' describe ( 'Main test suite' , () => { // 해당 describe테스트에서 아래만 제외한다. test ( 'first test' , () => { console . log ( 'test work!!!' ) const str = Fun . toUpperC ( 'str' ); expect ( str ). toBe ( 'STR' ); // Fun.toUpper의 결과가 문자열 STR 이어야 한다 }); test ( 'parse URL' , () => { const url : string = 'http://localhost:3000/signup' ; const port : string = url . split ( 'localhost:...

TypeScript_JEST TypeScript로 Node TestCast만들기 : 실제 테스트 진행 -2

이미지
이제 연산작용을 적용해서 실제 JEST에서 테스트를 진행해 보겠습니다. 이전글 : TypeScript_JEST TypeScript로 Node TestCast만들기 : npm 프로젝트 생성 및 샘플 테스팅 -1 // src/test/Main.test.ts import { Fun } from '../app/Main' describe ( 'Main test suite' , () => { test ( 'first test' , () => { console . log ( 'test work!!!' ) const str = Fun . toUpperC ( 'str' ); expect ( str ). toBe ( 'STR' ); // Fun.toUpper의 결과가 문자열 STR 이어야 한다 }); }) 코드1) "STR"을 기대했지만 실제로 ""을 받았습니다. 실제 함수의 용도를 보면 들어간 문자열을 대문자로 바꾸는 기능이라고 할수 있는데 이 테스트에서 failed가 나왔습니다. 그럼 이제 실제 함수를 수정하도록 하겠습니다. // src/app/Main.ts export class Fun { public static toUpperC ( arg : string ){ return arg . toUpperCase (); } } 코드2) 하지만 실제로는 코드1처럼 간단하게 작성해서 테스트 하지 않습니다.  // src/app/Main.ts import { parse , UrlWithParsedQuery } from "url" ; export class Fun { public static parseUrl ( url : string ) : UrlWithParsedQuery { ...

TypeScript_JEST TypeScript로 Node TestCast만들기 : npm 프로젝트 생성 및 샘플 테스팅 -1

이미지
 JEST는 FaceBook에서 개발한 JavaScript 테스팅 툴입니다. 이는 TypeScript에도 적용이 가능하며 이번 시리즈로 설명하도록 하겠습니다. JEST공식문서 : https://jestjs.io/docs/getting-started 프로젝트를 만들겠습니다. 1. npm 프로젝트 생성하기 - 해당폴더에 npm 프로젝트를 자동 생성합니다. package.json파일 생성 $ npm init --y copy 이제 테스팅이 필요한 devDependencies를 설치하겠습니다. 타입스크립트를 작성하기 위해서 필요합니다. - 개발용으로만 사용할 npm 모듈을 설치합니다 : typescript,ts-node,@types/node $ npm install -D typescript ts-node @types/node copy 이제 실제 테스트에 필요한 JEST 모듈을 설치하겠습니다. - 개발용으로만 사용할 npm 모듈을 설치합니다 : jest, ts-jest, @types/jest $ npm install -D jest ts-jest @types/jest copy { "name" : "testtutorial" , "version" : "1.0.0" , "description" : "" , "main" : "index.js" , "scripts" : { "test" : "echo \" Error: no test specified \" && exit 1" }, "keywords" : [], "author" : "" , "license" : "ISC" , "de...

Postman 소켓IO 테스트하기

이미지
 안녕하세요. 알렉스입니다. 이번에 postman에서 소켓IO를 테스트 할수 있는 기능을 추가했습니다. 하지만 이 기능은 베타(2022.07.04기준)이기 때문에 버그나 기능을 수정하고 있습니다.  소켓IO를 테스트 하기 위한 서버는 아래 링크를 참고해 주시기바랍니다. 해당 서버를 Postman 소켓IO테스트에 사용할 예정입니다. 링크 : NestJS SocketIO - 방을 선택해서 들어가는 채팅방 만들기 사진1) Postman 메인 사진2) 새로운 Tab생성 사진3) New Tab 선택창(WebSocket Request 선택) 사진4) Socket.IO 선택 사진5) 소켓서버 실행 사진5) 소켓주소 입력후 Connect클릭 사진6) SocketIO입력 방법은 JSON타입 선택 사진7) 전송할 JSON데이터 및 Listenting할 방을 작성 사진8) join을 subscribe하여 방을 생성한다. 사진8에서 'join'뿐만 아니라 참여할려는 방도 갖이 Listeners을 해야 합니다. 여기서는 'num1'입니다. 사진9) 서버에서 유저가 참여후 Broad Cast 사진10) 유저 Alex가 채팅 작성 사진11) 같은방 유저도 갖이 메세지 확인 Postman socketIO는 현재 베타버전이기 때문에 동작이 제대로 안되는 경우가 있습니다. 이때 Postman을 재시작 하거나 PC를 재시작 하는 것을 추천 드립니다.

JavaScript Test Case 유용한 팁2(JEST : Test Watch Mode)

이미지
 안녕하세요. 이번에는 JEST로 테스트 케이스를 만들때 일일이 저장하고 cli로 테스트를 돌려 확인하는 방법을 지금까지 하였습니다. 하지만 nodemon처럼 세이브 할때마다 테스트 케이스의 결과를 확인하는 방법이 있습니다. JEST의 테스트를 watch mode로 감시하기 cli : npm test -- --watchAll copy 위의 사진처럼 터미널에 'npm test'를 쳐서 수동으로 테스트 상황을 확인해야 합니다.  하지만 'npm start -- --watch' cli를 사용하면 세이브를 진행할때마다 해당 테스트 케이스가 다시 실행됩니다. 상황에 따라 하나의 테스트 케이스만 적용하고 싶을수 있습니다. 위 터미널에서 테스트 케이스가 2개가 있다. 이때 PASS한 테스트 케이스를 놔두고 FAIL만 watch모드로 감시하는 방법이 있다. JEST의 특정 테스트를 watch mode로 감시하기 cli : npm test -- --watch -- [테스트파일 제목] copy 위 터미널에서 'npm test -- --watch -- functions.test.js'을 입력하고 나온 결과이다. 이제 'functions.test.js'을 저장할때 해당 테스트 케이스가 실행되어 터미널에 결과가 출력이 된다.

JavaScript Test Case 유용한 팁1(JEST : coverage)

이미지
 안녕하세요. 알렉스 입니다. 이번에는 테스트 코드를 작성하면서 유용한 정보를 포트스 하도록 하겠습니다.  JEST의 테스트 범위(coverage)를 확인하기 cli : npm test -- --coverage copy JS코드를 test.js코드로 테스트 할때 실제 어느정도 범위를 커버하고 있는지 나타내 줍니다. 위 사진에서 보면 현재 100% 범위로 테스트가 된것이 아니라는 것을 알수 있습니다. coverage를 실행하게 되면 프로젝트 폴더 안에 'coverage'라는 폴더가 생성이 됩니다. 이후 'lcov-report'폴더에 들어가서 'index.html'에 들어가면 JEST로 테스트한 범위에 대해서 자세하게 나와있습니다. JEST의 커버리지 상 JEST가 검사하지 못한부분(붉은색) 위 사진처럼 붉은색이 나온 부분은 JEST가 아직 검사를 하지 못한 부분이다. 테스트의 완성도를 높이기 위해서는 위와 같이 붉은색 부분을 순차적으로 제거해야 한다.  해당 붉은 부분의 테스트를 작성하고 coverage를 하면 위 사진과 같이 사라집니다.