본문 바로가기

소프트웨어-이야기/테스트-자동화

유닛테스트를 작성하는 3가지 접근방법 - Test First VS Test Last VS Test Driven 해당 글은 Unit Testing with Python: Why and When Should You Write Unit Tests? 세션의 요약본입니다 ㅎㅂㅎ. 개발할 때, 테스트 코드를 작성하는 접근 방식은 크게 3가지가 있다. Test Last 개발 다 하고, 오류가 없는지 검증하기 위한 목적으로 회귀 테스트를 작성하는 방식이다. Test Last 방식도 개발 중간에 테스트를 한다. 중간 중간에 수동테스트를 하면서, 기대한대로 코드가 동작하는지 확인한다. 테스트 케이스를 개발 이후, 마지막에 작성하는걸 선호하는 사람들이 많다. 나도 수동테스트를 할 때는, 개발을 다 하고나서 작성하는 편이다. ( 회귀 테스트란? 회귀 테스트는 한 모듈의 수정이 다른 부분에 영향을 끼칠 수도 있다고 생각하여 수정된 모듈..
(Pytest) mongoengine + factoryboy 조합으로 사용할 때, 데이터 리셋시키기 mongoengine + factory boy 조합 문제점 원래 factoryboy를 쓰면, 테스트 데이터가 롤백된다. 그런데 mongoengine을 factory boy로 매핑해서 사용하면, 데이터가 롤백되지 않는다. mongo에 테스트 데이터가 계속 쌓인다. 해결방법 테스트코드가 돌때마다 몽고 디비를 drop 시키면 된다. ( 이렇게하면 몹시 느리다 ㅋ ) A. 몽고 DB Drop fixture 만들기 ### FILE: fixtures.py import pytest import mongoengine as me @pytest.fixture(scope=’function’) def mongo(request): db = me.connect(‘testdb’, host=’mongodb://localhost’) ..
[Django]Django 테스트코드 라이브러리 unittest VS pytest Django를 시작하면서 파이썬 테스트코드 라이브러리를 찾아봤었다. 파이썬에서는 unittest와 pytest가 많이 사용되는 편이였다 Ruby On Rails의 Rspec 같은 BDD + Unit Test 라이브러리를 찾아봤는데, 마음에드는 라이브러리를 찾지 못했다. ( 예를 들면, mamba라는 라이브러리가 있었는데, 대중적이지 않아 보여서 믿음직하지 않았다 ) Unittest와 Pytest 간단 소개 이 둘은 테스트코드를 함수단위로 작성하는 Unit Test 툴이다. unnitest는 파이썬 표준 라이브러리에 포함된 라이브러리다. pytest는 2007년에 첫 커밋되었고, 계속 활발하게 커밋되고 있는 라이브러리다. 그리고 unitest로 작성된 테스트코드와 호환된다. But. pytest 전용으로 ..
[pytest] PyCharm 기본 테스트 라이브러리를 pytest으로 변경하기 PyCharm의 기본 테스트 코드 runner는 unittest로 되어있다. 그래서 pytest으로 테스트코드 돌릴 때에는 설정값들을 변경해줘야한다. 1. Pycharm Preferences > Django > Do not use Django test runner 체크해주기 2. Preference > Default test runner를 pytest으로 변경해준다 끝 :)
[pytest] 함수의 매개변수로 기대한 값이 전달되었는지 확인하는 테스트코드 작성하기 pytest에서 테스트 코드를 작성할 때, 특정 함수의 매개변수로 기대한 값이 잘 넘어갔는지 확인하고 싶을 때가 있습니다. 예를 들면, 외부 API와 연동하는 함수를 테스트해보고 싶을 때, 이 함수에 특정 값이 매개변수로 잘 전달되었는지 확인하고 싶어지죠. 이럴 때는 mocker 클래스와 assert_called_with 함수를 사용하면 됩니다. 예시아래의 예시는 viewset에서 내부 함수를 호출했을 때, 기대한 매개변수를 잘 전달했는지 확인하는 테스트코드입니다.class TestCommerceViewSet: def test_purchase_구매_이벤트가_로그에_남는다(self, rf, mocker): purchase_event = {'product_id': 1, 'created_time': datet..
(Django) Rspec VS PyTest 차이1. Pytest는 함수단위로, Rspec은 스펙 단위로 테스트코드를 작성한다.pytest는 함수 단위로 테스트 코드를 작성한다. 이런 느낌 Rspec은 BDD 기반의 테스트 코드다. 테스트 케이스를 구조화하고, 맥락이 비슷한 테스트케이스를 한군데에 모으고, 여러 코드를 재사용하기에는 Rspec이 더 편했다. describe '#destroy' do context 'when resource is found' do it 'responds with 200' it 'shows the resource' end context 'when resource is not found' do it 'responds with 404' end context 'when resource is not owned' do it 'r..
(Django) 마이그레이트를 하지 않고 PyTest 사용하기 백그라운드요즘 Ruby on Rails + Rspec 조합으로 살다가, Django + PyTest으로 머리를 포팅하고 있다. 마이그레이트를 사용하지 않는 장고 프로젝트에서 PyTest를 사용하는 방법을 삽질하면서 찾아봤는데 이걸 정리해보고자 한다. 방법 (두가지 방법 다 설정해줘야 한다. )1. pytest.ini에 설정값 추가해주기[pytest]addopts = --reuse-db --nomigration reuse-db는 데이터를 재사용한다는 옵션이다. pytest는 돌릴때마다 자동으로 database를 생성하고, 삭제해준다. reuse-db를 쓰면 한번 만든 데이터베이스를 테스트코드가 끝나고 나서도 삭제하지 않는다는걸 의미한다.그렇지만 reuse-db 옵션이 걸려있어도 PYTEST는 테스트가 돌때..
(테스트환경)로컬에 REDIS 환경 만들기 로컬 컴퓨터에서 테스트코드를 돌릴 수 있는 환경을 셋팅하려고, REDIS를 설치했다. 그리고 테스트용 찌꺼기 데이터들이 남는게 싫어서, 데이터들을 FLUSH 하는 방법도 찾아보았다. 설치 방법 설치 경로 : https://redis.io/downloa레디스를 설치한다.$ wget http://download.redis.io/releases/redis-4.0.0.tar.gz $ tar xzf redis-4.0.0.tar.gz $ cd redis-4.0.0 $ make서버 실행 방법redis를 다운받은 후, 압축해제한 폴더 경로에 들어가서 src/redis-server를 실행한다 클라이언트 실행방법redis 폴더 경로에 가서, src/redis-cli 를 친다. 데이터 FLUSH하기 CLIENT를 실행해서,..