본문 바로가기

소프트웨어-이야기

[pytest] 함수의 매개변수로 기대한 값이 전달되었는지 확인하는 테스트코드 작성하기 pytest에서 테스트 코드를 작성할 때, 특정 함수의 매개변수로 기대한 값이 잘 넘어갔는지 확인하고 싶을 때가 있습니다. 예를 들면, 외부 API와 연동하는 함수를 테스트해보고 싶을 때, 이 함수에 특정 값이 매개변수로 잘 전달되었는지 확인하고 싶어지죠. 이럴 때는 mocker 클래스와 assert_called_with 함수를 사용하면 됩니다. 예시아래의 예시는 viewset에서 내부 함수를 호출했을 때, 기대한 매개변수를 잘 전달했는지 확인하는 테스트코드입니다.class TestCommerceViewSet: def test_purchase_구매_이벤트가_로그에_남는다(self, rf, mocker): purchase_event = {'product_id': 1, 'created_time': datet..
(데이터 시각화)Redash란? Redash는 데이터 조회 / 시각화를 편하게 해주는 툴입니다. (이런 느낌? ) 특징 - SQL문을 날리면, 반환된 값으로 그래프를 만들 수 있습니다. - 당연히, CSV 다운로드 기능도 있습니다. - RDB / ElasticSearch / NoSQL / Athena / BigQuery 등의 여러 데이터 소스를 연결해서 사용할 수 있습니다. API를 호출해서 얻은 JSON 결과값, CSV, 구글스프레드 시트, JIRA도 지원합니다. - 여러 데이터 소스에서 얻은 쿼리 결과를 JOIN해서 사용할 수 있습니다. 예를 들면, ElaticSearch에서 나온 결과값과 Postgre SQL에서 나온 결과값을 JOIN 할 수 있습니다. Redash에는 하나의 Query로 여러 데이터 소스를 JOIN하는 기능은 없..
(애자일) 팀원들과 플로우 차트 함께 그려보기 배경 이전 회사에서 프로젝트를 시작할 때, 디자이너 + PO + 클라이언트 개발자 + 서버 개발자들이 같이 모여서 화이트 보드에 플로우를 그려본적이 있다. 다 같이 플로우를 그리고 논의하는 미팅은 시간이 오래 소요된다. 당시에 한 제품에 대한 플로우를 그리는 데에 몇시간씩 여러번의 회의를 했었다. 그럼에도 의미가 있는 시간이었다. 와이어프레임, UI, 유저스토리 등.. 제품 분석/설계가 확정지어지지 않은 상황에서 이 방법을 사용하면 유용했다. 장점 1. 팀원들이 같은 제품을 생각하는 데에 도움이 된다.팀원들이 기능을 서로 다르게 생각할 수 있다. 그런데 플로우를 그려나가면서, 각자가 상상한 것들을 이야기하면서 점점 싱크가 맞아진다. 2. 예외 케이스들을 사전에 빠르게 파악할 수 있다.집단 지성의 힘 같은..
(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는 테스트가 돌때..
Django VS Ruby On Rails Django가 루비온레일즈를 보고 만들었다고 하는데, 어떤 점이 같고 다른지 정리해보고자 한다. 공통점1. 마이그레이트 파일로 테이블을 관리한다. 레일즈가 schema_migrations 테이블에 마이그레이트 코드를 관리한다면, 장고는 애플리케이션이름과 마이그레이트 파일명 단위로 마이그레이트 코드를 관리한다. 2. 기타 등등* 마이그레이트로 테이블을 만들면, 자동으로 id 필드를 추가해준다. * 모델의 CRUD 페이지를 자동으로 만들어주는 어드민 기능이 루비온레일즈의 스캐폴드 기능이랑 유사하다. * 루비온레일즈에서 레코드가 추가/수정된 시각을 created_at, updated_at에 저장하는 것 처럼, 장고도 비슷한 개념이 있다. 다른점1. 루비온레일즈는 MVC 모델을 기반으로 작성된다. 그런데 Dja..
레일즈에 Service/Decorator Layer 적용하기 (8) - 끝~ 이 포스팅은
레일즈에 Service/Decorator Layer 적용하기 (7) - Helper 대신에 Decorator 사용하기 이 포스팅은