본문 바로가기

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

(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 'responds with 404' end end


2. PyTest는 DB Connection을 맺는 테스트코드는 명시적으로 설정해줘야한다.

PyTest는 @pytest.mark.django_db을 명시해줘야만 DB에 붙을 수 있다. 안그러면 에러난다. 

이상하게 장고에서는 DB 관련된 로직이면 테스트가 도는게 좀 느린거 같다. 내부적으로 database create를 날려서 그런건가..? 


3. PyTest는 테스트 데이터베이스에 항상 test_를 붙여준다.

PyTest는 마이그레이트할 때, 설정되어 있는 데이터베이스 이름에 test_을 붙여서 DB를 만든다.

혹여나의 실수를 막으려고 그런거 같다.

Rspec은 그냥 database.yml의 test 항목에 추가해준 데이터베이스 명을 그대로 가져다가 사용한다.


4. PyTest는 기본으로 데이터베이스를 매번 새로 생성하고 삭제한다.


공통점

django 패키지에도 faker와 factory Bot이 있다. 그런데 django에서 factory bot 이름은 factory boy다.