<더미데이터를 위한 Faker 사용법>
- 참고 문서 : Faker · PyPI
- Faker는 임의의 이름, 단어, 문장, 주소 등을 생성해주는 파이썬 패키지다
- 더미데이터를 쌓을 때 사용하기 좋다
- 설치
pip install Faker
- 위 명령어로 설치한다
- 새로운 패키지나 라이브러리를 설치한 후에는 requirements.txt에 반영하는 작업을 잊지 않는다
pip freeze > requirements.txt
- 이름 생성
- Faker를 사용하기 위해 먼저 import를 해준다
from faker import Faker
- Faker()를 사용해서 인스턴스를 만든다
fake = Faker()
- 이름을 생성해보자
print(fake.name()) # Michael Wolf
print(fake.name()) # Scott Dyer
print(fake.name()) # Timothy Shaw
print(fake.name()) # Brian Simpson
print(fake.name()) # Jesse Macdonald
print(fake.name()) # Emily Gordon
print(fake.name()) # Robin Gordon
- 이런 식으로 사용할 수 있고 실행할 때마다 다른 이름이 생성된다
print(fake.first_name()) # Anthony
print(fake.last_name()) # Martinez
- 성과 이름을 따로 생성할 수도 있다
fake = Faker("ko_KR")
print(fake.name()) # 한준영
print(fake.first_name()) # 명숙
print(fake.last_name()) # 장
- 인스턴스 생성 시 Faker의 인자를 "ko_KR"로 하면 한국어 이름을 생성할 수 있다
- 아쉽게도 단어나 문자 등 나머지는 한글 지원이 안 된다
- 단어 생성
- 이제 단어를 생성해보자
print(fake.word())
- 실행할 때마다 임의의 단어가 생성된다
- 문장 생성
- 문장 하나를 생성한다
print(fake.sentence())
- 실행할 때마다 임의의 문장 1개가 생성된다
- 여러 문장 생성
- 짧은 글을 생성한다
print(fake.text())
- 실행할 때마다 임의의 짧은 글이 생성된다
- 무슨 말인지는 잘 모르겠다 ^^;;;
<DRF로 테스트코드 작성하기>
- 상세게시글 조회 테스트
setUpTestData 작성
- 먼저 더미데이터가 setUpTestData에 쌓이도록 작성해준다
class ArticleReadTest(APITestCase):
@classmethod
def setUpTestData(cls):
cls.faker = Faker()
cls.articles = []
for i in range(10):
cls.user = User.objects.create_user(cls.faker.name(), cls.faker.word())
cls.articles.append(Article.objects.create(title=cls.faker.sentence(), content=cls.faker.text(), user=cls.user))
- 일단 faker 라는 인스턴스와 articles라는 빈 리스트를 생성한다
- 10개의 게시글을 작성하려고 for문을 돌린다
- user에는 임의의 이름과 비밀번호를 생성해서 만든다 for문이 10번 돌아가기 때문에 10명의 user가 생성된다(근데 email 형식인데 왜 오류 없이 그냥 생성되는 거지....? name은 email 형식이 아닌데...)
- articles에는 임의의 제목, 내용 및 위에서 생성한 user가 담겨서 리스트로 붙는다
- 이제 test_get_article 함수를 생성할 건데 그 전에 article 모델에서 article의 아이디를 url에 붙이는 작업을 해줘야 한다
# articles/urls.py
...
urlpatterns = [
...
path('<int:article_id>/', views.ArticleDetailView.as_view(),
name='article_detail_view'),
...
]
- 현재 상세 게시글에 접속하는 url에는 게시글 id번호가 붙어있기 때문이다
# articles/models.py
...
class Article(models.Model):
...
def get_absolute_url(self):
return reverse("article_detail_view", kwargs={"article_id": self.pk})
- 참고문서: django.urls utility functions | Django documentation | Django (djangoproject.com)
- 장고에서 reverse() 함수를 어떻게 쓰는지 위 문서에서 확인할 수 있다
- 내 블로그에 정리도 하긴 했는데 다른 사람 블로그 보는 게 더 나은 거 같다 ㅋㅋㅋ
- url에 <int:pk>라고 썼으면 kwargs={"pk":self.pk} 이렇게 쓰면 된다
- 여튼 models.py 를 이렇게 수정하고 다시 tests.py로 넘어간다
# articles/tests.py
...
class ArticleReadTest(APITestCase):
@classmethod
def setUpTestData(cls):
...
def test_get_article(self):
for article in self.articles:
url = article.get_absolute_url()
response = self.client.get(url)
serializer = ArticleSerializer(article).data
for key, value in serializer.items():
self.assertEqual(response.data[key], value)
print(f"{key} : {value}")
- setUpTestData에서 작성된 글들이 담긴 articles를 for문으로 하나씩 돌려준다
- url에는 models.py에서 작성한 함수를 이용해서 게시글 각각의 id가 붙은 url을 담는다
- response에는 get요청을 담는데 url만 있으면 된다
- serializer에 게시글을 담아 게시글 하나하나를 돌려가며 게시글이 잘 불러와지는지 확인한다
- print문은 어떤 게시글들이 담겨있는지 확인하기 위해 적었다
- 시리얼라이저를 쓴 이유는 값을 비교하기 위해 쓴 것 같다...아마도....?
- url을 불러서 response.data에 담긴 값(view 함수가 실행돼서 담기는 값)과 방금 생성한 데이터들(시리얼라이저에 담긴 값)이 일치하는지를 assertEqual을 통해 알아보는 거다(이해를 하긴 한 것 같은데 설명이...잘 안 되네..)
python manage.py test articles
- 터미널창에 위 명령어를 실행해보면 아래와 같이 나온다
Found 4 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
...id : 1
user : Stephanie Dunn
comments : []
likes : []
title : Member season minute soon style skin data.
content : Must feel ok upon alone. Relationship night vote view upon. Yet approach second here. Field media man probably age check.
image : None
created_at : 2023-05-06T08:21:10.843394Z
updated_at : 2023-05-06T08:21:10.843394Z
id : 2
user : Thomas Smith
comments : []
likes : []
title : Argue kitchen director.
content : Improve site know finish. Congress run fact kid. Community scene street ground official reach.
Choose write old budget apply billion. Production if letter charge.
image : None
created_at : 2023-05-06T08:21:11.202724Z
updated_at : 2023-05-06T08:21:11.202724Z
id : 3
user : Amanda Miller
comments : []
likes : []
title : Particular education training fast get hair fine way.
content : Audience bill establish method. A time grow easy task across word. Information everyone measure situation again ago officer southern.
Structure budget day although. Kid newspaper time sport anyone.
image : None
created_at : 2023-05-06T08:21:11.565994Z
updated_at : 2023-05-06T08:21:11.565994Z
id : 4
user : Christine Hansen
comments : []
likes : []
title : Choose home environment skill.
content : Age oil mention without. Remember treat approach listen structure candidate take. Interest imagine prove manager lose.
Market pay they onto expect. Country behind soon feeling miss question past.
image : None
created_at : 2023-05-06T08:21:11.926453Z
updated_at : 2023-05-06T08:21:11.926453Z
id : 5
user : Natalie Hall
comments : []
likes : []
title : Opportunity unit eye.
content : Modern play natural interview likely a employee. Yes painting line.
Five ball research.
Those figure look tell. Business report ball him sound old behavior. Put sort option people however music fast.
image : None
created_at : 2023-05-06T08:21:12.295746Z
updated_at : 2023-05-06T08:21:12.295746Z
id : 6
user : William Mason
comments : []
likes : []
title : Even happen use bill prevent.
content : Camera so forward action friend. Keep necessary fill game until. Lose leader middle long.
Into matter official land style. Role minute table campaign.
image : None
created_at : 2023-05-06T08:21:12.647832Z
updated_at : 2023-05-06T08:21:12.647832Z
id : 7
user : Carlos Morris
comments : []
likes : []
title : Industry pressure wear remember.
content : Act local meeting tend. Green bad at they somebody if. Organization allow effect whether answer.
Determine street nor she. Individual out station national. Bag dark lay spring.
image : None
created_at : 2023-05-06T08:21:13.023058Z
updated_at : 2023-05-06T08:21:13.023058Z
id : 8
user : Jennifer Dixon
comments : []
likes : []
title : Who move information begin imagine.
content : Sing wind know. Campaign pretty recent whatever. Easy civil voice hope.
Behavior factor eat his notice. Attack television worker. According analysis light back sing.
image : None
created_at : 2023-05-06T08:21:13.383711Z
updated_at : 2023-05-06T08:21:13.383711Z
id : 9
user : Jonathan Mullen
comments : []
likes : []
title : Bar fast data send nearly else.
content : General pattern including us sign reflect face training. Discover sport last look piece. South similar worker reach accept professor leader together.
Lose should always.
image : None
created_at : 2023-05-06T08:21:13.743767Z
updated_at : 2023-05-06T08:21:13.743767Z
id : 10
user : Shelley Wright
comments : []
likes : []
title : Growth relate myself less force movement thought character.
content : Option wall she pull street sign. Than already again short often or. Population consumer service charge onto may life.
Behavior call whether interest drug how. Least cost which great site.
image : None
created_at : 2023-05-06T08:21:14.105051Z
updated_at : 2023-05-06T08:21:14.105051Z
.
----------------------------------------------------------------------
Ran 4 tests in 5.894s
OK
Destroying test database for alias 'default'...