[내일배움단 ai트랙 3기] TIL 221114

2022. 11. 15. 09:45스파르타코딩클럽[AI트랙 3기]/TIL

221114

어떻게 보면 가능한 일일지도? 모르겠다는생각이 든다.. 음 강의도 차근차근 듣고있고.. 어찌됐던 나는 낭비할 시간이 없기에 최선을 다해 보는 수 밖에!! 팀원들 덕분에 정말 좋은 효과를 보는 것 같다.. 진작에 이랬다면 얼마나 좋았을까 싶다 ㅠ

 


ㅁdrf 1,2주차 강의

https://pocachips.tistory.com/146

 

[장고DRF]1,2주차(CRUD)

ㅁdrf 1주차 1,2 강 오티 3.강프론트와 백엔드 나누는다는 의미 1)퓨어장고 루틴 urls로 요청 > views.py의 함수와 연결(views.함수) > 함수 실행(return 해서 템플릿으로 보여줌) > *template app > .html 파일에서

pocachips.tistory.com

 

ㅁ도커 3주차 절반

https://pocachips.tistory.com/149

 

[도커실무] #3

ㅁ도커 3주차 3주차에 배울 것 -리눅스와 도커 활용해서 배포하기 1)구니콘을 이용해 장고 배포환경 구축 2)장고와 포스트그레sql 디비 연동하기 3)엔진엑스를 활요해 외부에서 내가 만든 서버에

pocachips.tistory.com

 

test 코드 강의

1.drf에서 test코드 작성하기

-작업진행 방식 : 구현 > 웹브라우저로 확인 > 개선점 찾기

-문제점 : 시간낭비, 복잡도증가, 허점

-테스트 코드

파이선 유니테스트 모듈

2.프로젝트 설정과 첫 테스트코드

-프로젝트 코드

1)가상환경설정, 실행

2)패키지 설치 requirements.txt

3)python manage.py test

4)앱들어가서 test.py 확인하기

*test.py

class TestView(TestCase):

def test_two_is_three(self):

self.assertEqual(2,3)

>>>python manage.py test > failed

def test_two_is_two(self):

self.assertEqual(2,2)

 

3.장고에서 쓸 수 있는 테스트툴들

drf에서 테스팅하기 drf testing 구글링

장고 drf에서 사용하는 툴 > unitest 또는 pytest (설치 필요)

 

4.회원가입 테스트

1)user url 만지기

*users > urls.py

path(‘’,views.UserView.as_view(), name=“user_view”),

*test.py

from django.urls import reverse

from rest_framework.test import APITestCase

from rest_framework import status

 

class UserRegisterationAPIViewTestCase(APITestCase):

def test_registration(self):
url = reverse(“user_view“)

user data = {

“username”:“testuser”

“fullname”:“테스터

“email”:“test@testuser.com

“password”:“password”

}

response = self.client.post(rul, user_data)

self.assertEqual(response.status_code, 200)

>python manage.py test 하면 결과 나옴. 무슨에러인지 확인하고 싶으면 self 윗줄에 print(response.data)

 

5.로그인테스트

class는 그대로 가져오고

def test_login(self):
url = reverse(“token_obtain_pair“)

user data = {

“username”:“testuser”

“fullname”:“테스터

“email”:“test@testuser.com

“password”:“password”

}

response = self.client.post(rul, user_data)

self.assertEqual(response.status_code, 200)

401 에러 나옴. 레즈스트레이션에서 정상적으로 등록되었음에도 불구하고 왜 없을까?

 

6.setup 메소드

테스트에서는 메소드 하나를 실행할때마다 디비를 임시로만들어서 확인하고 없애버림. 그래서 디비에 안들어온다고생각하면 됨(모든 테스트는 독립적). 따라서 test_login에서는 데이터가 없는 상태라 위와같이 오류가 나옴.

def setup메소드는 모든 테스트실행 전에 실행됨.

+)def teatdDown() : 마지막으로 실행하는 것.

 

7setup을 이용한 로그인테스트

위에 로그인 테스트 지우고 새로 클래스 생성

class LoginUserTest(APITestCase):

def setUp(self):

 

self.data = {‘username’:‘john’,‘password’:‘johnpassword’}

self.user = User.objects.create_user(‘john’,‘johnpassword’) #modeldef create_user를 씀. usernamepassword 받아줌.

 

def test_login(self):

response = self.client.post(reverse(‘token_obtain_pair’), self.data)

print(response.data[“access”])

self.assertEqual(response.status_code, 200)

#모델에 print 가입이 있어서 가입도 나오는데 이부분도 지워줘야함.

 

8.drf 테스트코드 작성하기 ot

 

9.사용자 정보 가져오기 테스트

class LoginUserTest에서 이미 setup을 해뒀기 때문에 아래에 바로 생성하면 됨.

def test_get_user_data(self):

access_token = self.client.post(reverse(‘token_obtain_pair’),self.data).data[‘access’]

response self.client.get

path=reverse(“user_view”), #accesstoken을 해더에 싣어서 get요청을 ser_view url

HTTP_AUTHORIZATION=f“Bearer {acess_token}”

 

self.assertEqual(response.status_code, 200)

self.assertEqual(response.data[‘username’], self.data[‘username’])

>python manage.py test users #users에있는 test만 진행

 

ㅁ에러잡기 

1)포스트맨 에러 

런타임 오류 > put 써줄때 url 마지막에 /로 닫아줘야 정상작동.

 

2)

-에러: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
리턴값없으면 이렇게 된다. 항상 마지막에 return Response()를 적어줄 것