본문 바로가기

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

(Pytest) Fixture 모아두기 - conftest.py conftest.py Django Pytest 에서 공통으로 사용되는 Fixture / Plugin / Module을 모아두는 파일이다. 테스트가 돌아갈 때, 공통적으로 호출되어야하는 Hook들도 이 파일에서 관리한다. conftest.py은 도메인 모듈 (디렉토리)별로 나눠서 관리하는걸 권장한다. 도메인별로 Fixture를 나눠서 관리하는게 좋고, Fixture를 여러개 만들면 테스트가 느려질 수 있기 때문이다. 샘플 보통 어떻게 활용하는지는 아래의 샘플 코드를 참고하면 감잡을 수 있다 :) saleor > conftest.py https://github.com/mirumee/saleor/blob/master/tests/conftest.py shuup > conftest.py https://github..
(Pytest) Fixture에 매개변수 넘겨주기 함수 호출부에서 Fixture의 일부 데이터를 변경하고 싶다면, 아래와 같이 Fixture에 매개변수를 넘겨주면 된다.@pytest.fixture() def facebook_user_data(): def _data(user_id, email): return { "hometown": "Your, Hometown", "birthday": "01/01/1985", "email": email, "id": id } return _data 호출 방식은 다음과 같다.class TestUserInfo: def test_get_data__회원기본정보와_페이스북정보를_반환한다(self, mocker, facebook_user_data): user = UserFactory.create() facebook_user_data ..
(Travis CI) GitHub에 테스트 CI 연동하기 Travis CI테스트코드 돌리는 CI 툴이다. 도커 컨테이너 기반으로 돌리는거여서, 테스트 서버 환경 구성 필요없이 온라인상에서 테스트 코드를 돌릴 수 있다.간단하게 테스트 CI를 설정할 수 있고, 오픈소스에서는 무료이기 때문에, 많은 오픈소스에서 Travis CI를 사용하고 있다. ( django-oscar, aws-codedeploy-agent 등등.. )But. 프라이빗은 유료다. gitlab은 지원하지 않는다. 😧 GitHub Repository 연결하는 방법1. 트레비스에 가입한다. 그 다음, 트레비스에 github 레파지토리 권한을 준다. 2. 레파지토리에 .travis.yml 파일을 추가해준다. 3. 연결되고 나면 github commit마다 테스트 결과가 뜬다. 아래에 뜬 check 박스..
TDD Coding Dojo - 테스트코드 작성 연습 방법 이번달에 유닛테스트 작성방법 관련 스터디를 시작했다 ㅎㅅㅎ. 진행방식을 조사하다가, TDD KATA, Coding Dojo 라는 학습 방식을 알게되어 정리해보고자 한다. Coding Dojo 란? dojo는 일본말이다. 한국말로는 도장이다. 태권도 도장의 도장. Coding Dojo란, 코딩 배우는 도장을 말한다. 함께 모여서, 실무가 아닌 연습 문제를 풀어보면서, 여러가지 프로그래밍 스킬을 학습하는 방법론을 의미한다. Coding Dojo로 기대하는 바는?좋은 코딩 습관 익히기그룹 단위로 학습하기 의도적으로, 기존과는 다른 스킬들을 익히기 재밌게 학습하기 Coding Dojo로 얻을 수 있는 스킬은? 단순한 코딩 스킬 뿐만 아니라 공동 학습을 통해 여러가지 스킬을 학습하는게 목표다.페어프로그래밍 방식P..
유닛테스트를 작성하는 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.pyimport pytest import mongoengine as me@pytest.fixture(scope=’function’) def mongo(request): db = me.connect(‘testdb’, host=’mongodb://localhost’) yield..
[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으로 변경해준다 끝 :)