RDS(mysql) + Django test

eaa0305·2022년 5월 25일
0

Django

목록 보기
6/6
python manage.py test auction.tests.AuctionBiddingTest

테스트 모듈을 만들어 실행하면 

default로 설정된 DB에 test_* db database(schema)를 만든다.
그러나 에러가 중간에 난다면 삭제가 되지 않고 process는 sleep되며,
data는 lock걸린 상태로 유지된다. timeout 시간이 지날때까지 기다릴수도 있지만,
query문에서 exec명령어를 날려 프로세스를 kill하면 바로 data lock이 풀려 사용가능하다.


show processlist;
kill [id];

drop database [database_name];
flush privileges;

이외로 mysql 파라미터 설정을 바꾸어 주기위해

show variables like 'skip_resolve_name';

같은 파라미터를 확인한후 custom parameter group를 만들어 rds에 적용해 주어 설정을 바꿀 수 있다.

class AuctionBiddingTest(TestCase):
    @classmethod
    def setUpTestData(cls):
      Placement.objects.create(
        placement_title = '테스트',
        placement_title_english = 'TEST',
        placement_description = '설명',
        placement_price=100000,
        unit_price=50000,
        placement_buynow_price = 1000000,
        )

      user1 = Users.objects.create_user('test1', 'eaa0305@naver.com', 'rkskekfk1')
      Verification.objects.create(user=user1, phone='01025806413', phone_verified=True)
      user2 = Users.objects.create_user('test2', 'eaa0103@gmail.com', 'rkskekfk1')
      Verification.objects.create(user=user2, phone='01025806413', phone_verified=True)
      user3 = Users.objects.create_user('test3', 'annalee98@naver.com', 'rkskekfk1')
      Verification.objects.create(user=user3, phone='01025806413', phone_verified=True)

    def setUp(self):
      p=Placement.objects.get(id=1)
      p.placement_price=100000
      p.unit_price=50000
      p.save()

    #1회응찰만
    def test_only_one_bid(self):
      for user in Users.objects.all():
        p=Placement.objects.get(id=1)
        #'one-bid', 'auto-bid', 'buynow-bid'
        placement_detail('POST', 1, user.id, 'one-bid', p.placement_price+(random.choice([1,2,3,4,5]))*p.unit_price)
      print('1회 응찰객체결과')
      for pbd in PlacementBid.objects.all().order_by('-placementbid_created'):
        print(pbd, pbd.placementbid_created, pbd.is_superior)

    #자동응찰만
    def test_only_auto_bid(self):
      li=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
      for i in range(3):
        for user in Users.objects.all():
          p=Placement.objects.get(id=1)
          #'one-bid', 'auto-bid', 'buynow-bid'
          placement_detail('POST', 1, user.id, 'auto-bid', p.placement_price+(random.choice(li[i]))*p.unit_price)
        print('\n자동응찰기')
        for a in AutoBid.objects.all():
          print(a, a.limit)

        print('\n자동 응찰객체결과')
        for pbd in PlacementBid.objects.all().order_by('-placementbid_created'):
          print(pbd, pbd.placementbid_created, pbd.is_superior)

    #1회응찰, 자동응찰
    def test_mix_one_auto_bid(self):
      for _ in range(3):
        self.test_only_auto_bid()
        self.test_only_one_bid()

    #1회응찰, 자동응찰, 바로구매 무작위
    def test_random(self):
      pass

profile
기억의 지배장

0개의 댓글