본문 바로가기

개발하자

주피터 노트북 내부에서 pytest 테스트 기능

반응형

주피터 노트북 내부에서 pytest 테스트 기능

나는 파이썬 테스트 옵션에 대한 프레젠테이션을 하고 있는데, 내가 시연하고 싶은 기술 중 하나는 파이테스트이다. 나는 주피터/이피톤 노트북에서 발표를 할 계획이다. 이상적으로 나는 셀에서 테스트 기능을 정의한 다음 해당 기능을 실행하기 위해 파이테스트를 사용할 수 있기를 원한다. 그렇게 하면 파이테스트의 개별 기능 등을 시연할 수 있다.

이것을 할 수 있는 기존의 방법이 있나요? 내가 파이테스트 API에서 본 상호작용 기능 중 어떤 것도 청구서에 맞지 않는 것 같지만, 나는 확실히 파이테스트 전문가가 아니다. 나는 그것을 하기 위해 플러그인을 기꺼이 쓸 것이므로, 그 방향에 대한 최고의 접근 방식에 대한 어떤 조언도 좋을 것이다.

나는 피테스트-아이핀을 보았지만, 그것은 내가 필요로 하는 것을 하지 않는 것 같다. 만약 그 평가가 틀리면, 그것을 사용하는 방법에 대한 조언도 좋을 것이다.




나는 이 목적을 위해 그것을 만들었고 사용했다.

다음과 같은 도구를 사용합니다:

%%pytest

def test_my_stuff():
    assert 42 == 42

안타깝게도 노트북에 정의된 기능과 클래스를 테스트 셀의 기능을 테스트할 수 있는 방법을 찾을 수 없었습니다. 나는 누군가가 그것에 대한 해결책을 제시해주면 감사하겠다.




매우 성숙해 보이는 유사한 모듈이 있습니다:

@akaiola에서 개발한 모듈에 참조되어 보다 활성화되고 정기적으로 업데이트/유지관리됩니다.

특히, 테스트는 노트북 내부에서 테스트를 수행하는 전체 목적인 다른 셀에 정의된 일부 기능을 사용할 수 있습니다(아래 예 참조).

사용 방법:

  1. 다음의 가져오기 및 구성을 셀에 넣습니다:
import ipytest
ipytest.autoconfig()
  1. 셀에 몇 가지 테스트 기록
  2. 테스트가 있는 각 셀에 대해 마법을 사용하여 테스트가 있는 셀을 실행하십시오... 또는 시험 후에 감방에 감방을 넣는다

공식 예제를 확인할 수 있습니다:

아니면 내가 한 예:

example 1

그리고 또 다른 예는:

another example




이미 이 문제를 2배로 해결했기 때문에 여기 2센트가 있고 두 번 모두 이 사이트로 돌아온다. 미래의 나를 위해:

다음과 같이 구성된 프로젝트의 경우

prod_folder:
* data
* code
    * run_notebook.ipynb
* tests
   * test_some_test.py

만약 당신이 다음 셀 매직 내에서 실행하고 싶다면, 내 목적에 맞게 실행할 수 있습니다:

!pytest ../tests



Google Colab에서 나는 일반적으로 다음 절차를 수행합니다:

  1. 각 셀의 파일 이름을 만듭니다:

다음은 예입니다:

%%file test_list.py

# find the mismatched elements in list `l1` which are not in list `l2`

def solution(l1: list, l2: list) -> list:
    return [
        e
        for e in l1
        if e not in [e for e in l2]
    ]

import pytest

a = [1,2,3]
b = [3,4,None,None]
TEST_CASES = [[a,b]]

class TestCase:
    @pytest.mark.parametrize("test_case", TEST_CASES)
    def test_events(self, test_case):
        assert solution(test_case[0], test_case[1]) == [1,2]
  1. 다른 셀에서 실행:
!python -m pytest test_list.py 

출력:

============================= test session starts ==============================
platform linux -- Python 3.8.16, pytest-3.6.4, py-1.11.0, pluggy-0.7.1
rootdir: /content, inifile:
plugins: typeguard-2.7.1
collected 1 item                                                               

test_list.py .                                                           [100%]

=========================== 1 passed in 0.02 seconds ===========================



2023년부터 새로워짐

  1. #(주피터 커널 버전과 함께)
  2. 이전 주피터 셀에서:
    import  ipytest

    ipytest.autoconfig()
  1. 셀에서 테스트:
    %%ipytest -qq
    
    def test_my_stuff():
        assert 42 == 42
        
    def test_my_stuff1():
        assert 42 == 41
  1. 결과:
.F.                                                                                          [100%]
============================================= FAILURES =============================================
__________________________________________ test_my_stuff1 __________________________________________

    def test_my_stuff1():
>       assert 42 == 41
E       assert 42 == 41

/tmp/ipykernel_17418/2873229183.py:5: AssertionError
===================================== short test summary info ======================================
FAILED t_018b5863b93c4104bce0209d0ad789b9.py::test_my_stuff1 - assert 42 == 41

반응형