Faker

  • 더미데이터를 만든다.

https://pypi.org/project/django-faker/

pip install Faker

 

from faker import Faker

faker = Faker()
# 이름에만 한글이 적용됨
faker = Faker("ko_KR")

print(faker.name())
print(faker.first_name())
print(faker.last_name())
print(faker.word())
print(faker.sentence())
print(faker.text())

 

 

Faker로 게시글 여러개 만들기

from articles.models import Article
from faker import Faker
# 그 밖에 import 안 한게 있다면 추가하기

class ArticleReadTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.faker = Faker()
        cls.articles = []
        #10명의 유저가 게시글 작성
        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,
                )
            )

 

 

 

 

(app - urls.py)

urlpatterns = [
    path('<int:pk>/', views.ArticleDetailView.as_view(),name='article_detail_view'),
]

 

(app - models.py)

from django.urls import reverse

class Article(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    #추가하기
    def get_absolute_url(self):
        # 'pk'값으로 self.pk값을 kwargs에 넣어줌
        # article_detail_view에 pk 값을 넣고 그 url의 문자열을 가져옴
        return reverse('article_detail_view', kwargs={'pk':self.pk})

 

(app - views.py)

class ArticleDetailView(APIView):
    def get(self, request, pk):
        article = ArticleModel.objects.get(pk=pk)
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

 

(app - test.py)

from articles.serializers import ArticleSerializer


class ArticleReadTest(APITestCase):
    def test_get_article(self):
        for article in self.articles:
            # 함수의 return 값으로 url 값을 가져옴
            url = article.get_absolute_url()
            response = self.client.get(url)
            serialize = ArticleSerializer(article).data

            #items : key와 value를 뽑아내고 싶을 때 사용
            for k, v in serialize.items():
                # response.data[k]는 reponse의 value값
                self.assertEqual(response.data[k], v)
                print(k, v)
            
            #위와 똑같음
            #self.assertEqual(article.title, response.data['title'])

 

 

(app - models.py)  유저를 이름으로 보여주기

class ArticleSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()

    # get + 언더바(_) + serializers.SerializerMethodField()
    def get_user(self, obj):
        return obj.user.username

 

'Python > Django' 카테고리의 다른 글

[DRF] 16. setUpTestData  (0) 2023.04.30
[DRF] 15. setUp, @classmethod, @staticmethod  (0) 2023.04.27
[DRF] 14.5 테스트 코드 종류  (0) 2023.04.27
[DRF] 14. 테스트 코드란?  (0) 2023.04.27
[DRF] 13. 개인페이지 (Q객체, F객체)  (0) 2023.04.27

+ Recent posts