본문 바로가기
카테고리 없음

[백엔드] django logfire 연결 + test 작성기

by alpakaka 2024. 8. 7.

django Logfire 적용하기

로그파일을 작성했는데 멘토님 의견으로 logfire 를 적용하는게 낫다는 의견을 받았다.

원래는 잘 몰랐는데 로그로 많은 내용들이 들어가는 걸 알았다. 나는 response 데이터를 넣은 것 부터가 너무 많은 내용을 로그에 담은 건가 했는데 멘토님의 의견을 들어보니 오히려 너무 적게 들어갔다는 피드백을 받았다.

그리고 logfire 나 sentry 를 적용하는 것에 대한 추천을 받았다.

일단 우리 팀은 sentry 를 적용할 예정인데 지원금을 받기 전까지는 일단 무료인 서비스들을 사용해볼 예정이다.

그래서! django 에서 logfire 를 적용해 볼 예정이다.

일단 logfire에 깃으로 회원가입을 진행한 후 프로젝트를 생성하였다.

 

이런식으로 잘 작성되어있어서 따라했다.

이런식으로 일단 연결은 완료해놨으니 내일 로그파일을 넣는 방식으로 진행해야겠다.

 

Test File

테스트 파일을 모두 작성 완료했다.

import pytest
from rest_framework.test import APIClient
from django.urls import reverse
from django.contrib.auth import get_user_model
from todos.models import Todo, Category, SubTodo, User

User = get_user_model()
client = APIClient()

@pytest.fixture
def create_user(db):
    user = User.objects.create_user(
        username='testuser',
        email='testuser@example.com',
        password='testpassword'
    )
    return user

@pytest.fixture
def create_category(db, create_user):
    category = Category.objects.create(
        user_id=create_user,
        title='Test Category',
        color='#FFFFFF',
        order='0|hzzzzz:'
    )
    return category

@pytest.fixture
def create_todo(db, create_user, create_category):
    todo = Todo.objects.create(
        user_id=create_user,
        start_date='2024-08-01',
        end_date='2024-08-30',
        category_id=create_category,
        content='Test Todo',
        order='0|hzzzzz:',
        is_completed=False
    )
    return todo
'''
======================================
# SubTodo Post checklist #
- correct test
- order validation
- date validation (later)
- todo_id validation
- user_id validation
======================================
'''
@pytest.mark.django_db
def test_create_subtodo_success(create_todo):
    url = reverse('subtodos') 
    data = [{
        'content' : 'Test SubTodo',
        'date' : '2024-08-02',
        'todo' : create_todo.id,
        'order' : '0|hzzzzz:',
        'is_completed' : False
    }]
    response = client.post(url, data, format='json')
    assert response.status_code == 201
    response_data = response.data[0]  # 리스트의 첫 번째 항목 접근
    assert 'id' in response_data


@pytest.mark.django_db
def test_create_subtodo_invalid_order(create_todo):
    SubTodo.objects.create(
        content='Test SubTodo',
        date='2024-08-01',
        todo=create_todo,
        order='0|hzzzzz:',
        is_completed=False
    )
    url = reverse('subtodos')
    data = [{
        'content': 'Test SubTodo2',
        'date': '2024-08-01',
        'todo': create_todo.id,
        'order': '0|hzzzzz:',
        'is_completed': False
    }]
    response = client.post(url, data, format='json')
    assert response.status_code == 400
    assert response.data['error'] == 'Invalid order'

이런식으로 category 와 todos 를 전부 작성했다. 약 600줄 정도가 나왔다...ㅎㅎ...
해당 테스트에 대해 받은 피드백은 다음과 같다
주석 처리하고 지웠다고 하지말고 확실하게 삭제할 것 (깃이 기억합니다 :b)
하드코딩으로 작성되어있는데 이런 방식을 사용하지 말것
겹치는 함수들은 밖으로 빼서 사용하기 쉽도록 작성할 것
그리고 테스트는 했는데 좀 더 Categorizing 이 되어있을 것

을 요청받아서 내일 lint 와 함께 적용해볼 예정이다.