[k6] 스크립트 작성하기 (미완)

Coastby·2023년 3월 29일
0

성능테스트

목록 보기
4/4

공식 홈페이지의 예제를 참고하여 작성하였다.

import http from 'k6/http';
import { check, group, sleep, fail } from 'k6';

export const options = {
  stages: [{ target: 15, duration: '30s' }],
  thresholds: {
    'http_req_duration': ['p(95)<500', 'p(99)<1500'],
    'http_req_duration{name:PublicCrocs}': ['avg<400'],
    'http_req_duration{name:Create}': ['avg<600', 'max<1000'],
  },
};

const USERNAME = `user`; // Set your own email or `${randomString(10)}@example.com`;
const PASSWORD = 'user';
const BASE_URL = 'https://daengnyang.store';

export function setup() {
  // register a new user and authenticate via a Bearer token.
  const loginRes = http.post(`${BASE_URL}/api/v1/users/login`, {
    userName: USERNAME,
    password: PASSWORD
  });
   
  const authToken = loginRes.json('result.accessToken');
  check(authToken, { 'logged in successfully': () => authToken !== '' });

  return authToken;
}

export default (authToken) => {
  const requestConfigWithTag = (tag) => ({
    headers: {
      Authorization: `Bearer ${authToken}`,
      "Content-Type": 'application/json;charset=UTF-8'
    }
  });

  group('Record', () => {
    let URL = `${BASE_URL}/api/v1/pets/2/records`;

    group('Create records', () => {
      const payload = {
        title: '맛있는 간식이 먹고싶어요',
    	body: '간식 사주세요',
    	tagId: 2,
    	isPublic: true
      };

      const res = http.post(URL, payload, requestConfigWithTag({ name: 'Create' }));

      if (check(res, { 'Records created correctly': (r) => r.status === 200 })) {
        URL = `${URL}/${res.json('id')}`;
      } else {
        console.log(`Unable to create a Record ${res.status} ${res.body}`);
        return;
      }
    });

    group('Update Record', () => {
      const payload = {
        tagId: 2,
        title: '다온아 안녕',
        body: '별이야 안녕?',
        isPublic: true
      };
      const res = http.put(URL, payload, requestConfigWithTag({ name: 'Update' }));
      const isSuccessfulUpdate = check(res, {
        'Update worked': () => res.status === 201,
        'Updated name is correct': () => res.json('title') === '다온아 안녕',
      });

      if (!isSuccessfulUpdate) {
//        console.log(`Unable to update the record ${res.status} ${res.body}`);
        return;
      }
    });

    const delRes = http.del(URL, null, requestConfigWithTag({ name: 'Delete' }));

    const isSuccessfulDelete = check(null, {
      'Record was deleted correctly': () => delRes.status === 200,
    });

    if (!isSuccessfulDelete) {
//      console.log(`Croc was not deleted properly`);
      return;
    }
  });

  sleep(1);
};
profile
훈이야 화이팅

0개의 댓글