블록체인 (Block Chain)/이더리움

[브라우니 (Brownie)] 16. 픽스처 및 마커 참조

2023. 6. 18. 17:27
728x90
반응형
SMALL

 

브라우니에는 프로젝트를 테스트할 때 사용할 수 있는 사용자 정의 fixtures 및 markers가 포함되어 있습니다.

세션 fixtures

이러한 fixtures는 테스트 중 자주 사용되는 Brownie 객체에 빠르게 액세스할 수 있도록 제공됩니다. 이러한 객체에 익숙하지 않은 경우 목차에서 "핵심 기능"으로 나열된 문서를 읽으시기 바랍니다.

accounts

활성 프로젝트에 대한 Accounts 컨테이너를 생성하여 로컬 계정과 상호 작용하는 데 사용됩니다.

def test_account_balance(accounts):
    assert accounts[0].balance() == "100 ether"

a

accounts 픽스처의 약식 형태.

def test_account_balance(a):
    assert a[0].balance() == "100 ether"

chain

로컬 테스트 체인과 상호 작용하고 블록 데이터에 액세스하는 데 사용되는 Chain 객체를 반환합니다.

def test_account_balance(accounts, chain):
    balance = accounts[1].balance()
    accounts[0].transfer(accounts[1], "10 ether")
    assert accounts[1].balance() == balance + "10 ether"

    chain.reset()
    assert accounts[1].balance() == balance

Contract

Contract 클래스는 활성화된 프로젝트 외부의 계약과 상호 작용하는 데 사용됩니다.

@pytest.fixture(scope="session")
def dai(Contract):
    yield Contract.from_explorer("0x6B175474E89094C44Da98b954EedeAC495271d0F")

history

활성 프로젝트에 대한 TxHistory 컨테이너를 생성하고, 트랜잭션 데이터에 접근하는 데 사용됩니다.

def test_account_balance(accounts, history):
    accounts[0].transfer(accounts[1], "10 ether")
    assert len(history) == 1

interface

활성 프로젝트에 대한 InterfaceContainer 개체를 반환하여 프로젝트 인터페이스에 대한 액세스를 제공합니다.

@pytest.fixture(scope="session")
def dai(interface):
    yield interface.Dai("0x6B175474E89094C44Da98b954EedeAC495271d0F")

pm

설치된 패키지를 대상으로 테스트하는 데 사용되는 Project 객체에 대한 액세스를 제공하는 호출 가능한 픽스처입니다.

@pytest.fixture(scope="module")
def compound(pm, accounts):
    ctoken = pm('defi.snakecharmers.eth/compound@1.1.0').CToken
    yield ctoken.deploy({'from': accounts[0]})

state_machine

state_machine 메서드는 Stateful 테스트 실행에 사용됩니다.

def test_stateful(Token, accounts, state_machine):
    token = Token.deploy("Test Token", "TST", 18, 1e23, {'from': accounts[0]})

    state_machine(StateMachine, accounts, token)

web3

Web3 객체를 반환합니다.

def test_account_balance(accounts, web3):
    height = web3.eth.block_number
    accounts[0].transfer(accounts[1], "10 ether")
    assert web3.eth.block_number == height + 1

계약 픽스처

Brownie는 프로젝트 내의 각 ContractContainer 객체에 액세스하기 위해 동적으로 이름이 지정된 픽스처를 생성합니다. 배포 가능한 모든 계약 및 라이브러리에 대해 픽스처가 생성됩니다.

예를 들어 - 프로젝트에 Token이라는 계약이 포함되어 있으면 Token 픽스처를 사용할 수 있습니다.

def test_token_deploys(Token, accounts):
    token = accounts[0].deploy(Token, "Test Token", "TST", 18, 1e24)
    assert token.name() == "Test Token"

격리 픽스처

격리 픽스처는 테스트를 실행할 때 깨끗한 테스트 환경을 보장하고 테스트 결과가 다음 테스트에 영향을 미치지 않도록하는 데 사용됩니다. 이러한 픽스처를 사용하는 방법에 대한 정보는 격리 픽스처(Isolation Fixtures)을 참조하십시오.

module_isolation

테스트 모듈을 실행하기 전에 로컬 체인을 재설정하고 테스트가 완료된 후에도 재설정합니다.

fn_isolation

테스트를 실행하기 전에 체인의 스냅샷을 가져오고 테스트가 완료된 후에 그것으로 되돌립니다.

마커

Brownie는 다음과 같은 마커를 제공하여 테스트에서 사용합니다:

pytest.mark.require_network(network_name)

활성 네트워크가 network_name으로 명명된 경우에만 해당 테스트가 실행되도록 지정합니다. 이는 개발 환경에서 몇 가지 테스트를 수행하고 포크된 메인넷에서 다른 테스트를 수행하는 경우에 유용합니다.

@pytest.mark.require_network("mainnet-fork")
def test_almost_in_prod():
    pass

pytest.mark.no_call_coverage

이 표시는 호출이 아닌 이 테스트 중에 수행된 트랜잭션만 커버리지를 평가합니다. 이 마커는 동일한 뷰 메서드에 대한 많은 호출을 포함하는 느린 테스트를 가속화하는 데 유용합니다.

def test_normal(token):
    # during coverage analysis this call is handled as a transactionassert token.balanceOf(accounts[0]) == 900

@pytest.mark.no_call_coverage
def test_no_call_cov(Token):
    # this call is handled as a call, the test execution is quickerassert token.balanceOf(accounts[1]) == 100

pytest.mark.skip_coverage

커버리지 평가가 활성화되어 있는 경우 테스트를 건너뛴다.

@pytest.mark.skip_coverage
def test_heavy_lifting():
    pass

 

728x90
반응형
LIST

'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글

[브라우니 (Brownie)] 18. 상태 기반 테스트  (1) 2023.06.18
[브라우니 (Brownie)] 17. 속성 기반 테스트  (0) 2023.06.18
[브라우니 (Brownie)] 15. 단위 테스트 작성하기  (0) 2023.06.18
[브라우니 (Brownie)] 14. 데이터 유형  (0) 2023.06.16
[브라우니 (Brownie)] 13. 트랜잭션 검사 및 디버깅하기  (0) 2023.06.16
'블록체인 (Block Chain)/이더리움' 카테고리의 다른 글
  • [브라우니 (Brownie)] 18. 상태 기반 테스트
  • [브라우니 (Brownie)] 17. 속성 기반 테스트
  • [브라우니 (Brownie)] 15. 단위 테스트 작성하기
  • [브라우니 (Brownie)] 14. 데이터 유형
gsroot
gsroot
gsrootgsroot 님의 블로그입니다.
gsroot
gsroot
gsroot
전체
오늘
어제
  • 분류 전체보기 (126)
    • 파이썬 (Python) (3)
    • 데이터 과학 (Data Science) (29)
      • 데이터브릭스 (11)
      • Apache Superset (9)
    • 인공지능 (AI) (43)
      • 머신러닝 (ML) (19)
      • LLM (8)
      • MCP (8)
      • OpenAI Agents SDK (7)
    • 블록체인 (Block Chain) (37)
      • 이더리움 (36)
      • 코스모스 (0)
    • 웹 (Web) 개발 (9)
    • 앱 (App) 개발 (0)
    • 데브옵스 (DevOps) (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 선형회귀
  • 웹 개발
  • GPT
  • openai agents sdk
  • cognosys
  • FastAPI
  • redis
  • 블록체인
  • LLM
  • Ai
  • Superset
  • DevOps
  • 솔리디티
  • NLP
  • 자연어 처리
  • 데이터브릭스
  • claude
  • 스마트컨트랙트
  • ci/cd
  • 데이터 과학
  • 데이터 시각화
  • Redis Sentinel
  • 브라우니
  • 자동화
  • cursor
  • 머신러닝
  • Python
  • 파이썬
  • 이더리움
  • MCP

최근 댓글

최근 글

반응형
250x250
hELLO · Designed By 정상우.
gsroot
[브라우니 (Brownie)] 16. 픽스처 및 마커 참조
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.