python 테스트에서 Mock 사용 방법

4425 단어 python테스트mock

Mock 개념


mock의 뜻은 시뮬레이션, 즉 시뮬레이션 인터페이스가 되돌아오는 정보를 기존의 정보로 대체하여 의존하는 모듈에 대한 테스트를 실현하는 것이다.
일반적으로 두 가지 장면이 있습니다.
  • 백엔드 인터페이스에 대한 모크
  • 백엔드 서비스 간의 테스트에 관련된mock은 단원 테스트에서 자주 발생한다
  • 프런트엔드 mock은 몇 가지 도구를 통해 완성할 수 있습니다.
  • 클러치 도구 Fiddler, Charles를 사용하여 실현하고 에이전트가 되돌아오는 데이터를 수정하여 다양한 장면의 테스트를 실현한다
  • 일부 API 관리 도구를 사용하여 시뮬레이션을 한다. 예를 들어 야피, Easy Mock 등이다
  • 당연히 인코딩 능력이 있고 node도 사용할 수 있습니다.js,python의fastAPI로 시뮬레이션
  • 백엔드의 Mock은 인터페이스의 측면에서 만약에 하나의 인터페이스 A가 되돌아오는 데이터가 다른 인터페이스 B에 의존해야 한다면 민첩한 개발 중 B 인터페이스가 아직 완전히 개발되지 않았을 때 여기에 Mock을 사용해야 한다.
    테스트 인원에 대해 인터페이스 테스트를 할 때 일부 인터페이스는 아직 개발이 완료되지 않았으며 인터페이스 정의를 약정한 후에도 Mock을 사용하여 시뮬레이션할 수 있다.
    python3에서X에서 Mock 모듈이 unittest에 통합되었습니다.

    Mock 클래스


    class Mock(spec=None,side_effect=None,return_value=DEFAULT,name=None)
  • spec: Mock 대상의 속성 값을 정의합니다. 목록, 문자열, 대상의 실례가 될 수 있습니다
  • side_effect: 이상을 던지거나 동적으로 되돌아오는 값을 바꿀 수 있습니다.return_value
  • return_value:mock의 반환 값을 정의합니다
  • name:mock 대상의 표지는 print에서 볼 수 있습니다
  • 간단한 예로 Mock의 기능 특징을 체험해 보세요.

    
    from unittest import mock
    def add(num1,num2):
     return num1 + num2 # pass
     
    add = mock.Mock(return_value=200) #  mock 
     
    print( add(10,20) )
    입력한 매개 변수가 무엇이든지 출력 결과는 200이라는 것을 알게 될 것이다.방법이 Mock에 의해 차단되어 처리된 것과 같다.

    비교적 공식적인 Mock 예


    정상:
    
    import requests
    def request_scm():
     # res = requests.get('http://www.mysx-scm.com')
     res = requests.get('http://baidu.com')
     return res.status_code
    
    import unittest
    from unittest import mock
    class TestScmApi(unittest.TestCase):
     
     def testUrl(self):
      # request_scm = mock.Mock(return_value=200)
      self.assertEqual(request_scm(), 200, msg='testUrl  ')
    
    if __name__ == '__main__':
     unittest.main()
    두 개의 # 주석을 다음 문장으로 옮길 수 있습니다.

    완전한 테스트 예

    
    import requests
    
    class scmapi():
     def request_scm():
      res = requests.get('http://www.mysx-scm.com')
      # res = requests.get('http://baidu.com')
      return res.status_code
    
     def pay_alipay():
      '''
       
      return 200
      '''
      return 0
     
    
    import unittest
    from unittest import mock
    
    class TestScmApi(unittest.TestCase):
     
     needmock = True
     def setUpClass():
      print("setUpClass(): ")
    
     def tearDownClass():
      print("tearDownClass(): ")
      
     def setUp(self):
      self.scmapi = scmapi()
      print("setUp(): ")
    
     def tearDown(self):
      print("teardown(): ")
     
     def test_request_scm(self):
      if self.needmock:
       scmapi.request_scm = mock.Mock(return_value=200)
      self.assertEqual(scmapi.request_scm(), 200, msg='test_request_scm  ')
    
     def test_pay_alipay(self):
      if self.needmock:
       scmapi.pay_alipay = mock.Mock(return_value=200)
      self.assertEqual(scmapi.pay_alipay(), 200, msg='test_pay_alipay  ')
    
    if __name__ == '__main__':
     unittest.main()

    단언 방법


    기본적인 단언 방법은 테스트 결과가 True인지 False인지 제공했다.모든 단언 방법은 msg 매개 변수가 있습니다. msg 매개 변수의 값을 지정하면 이 정보를 실패한 오류 정보로 되돌려줍니다.
    번호
    단언 방법
    단언 설명

    assertEqual(arg1, arg2, msg=None)
    검증arg1=arg2, 부등칙fail

    assertNotEqual(arg1, arg2, msg=None)
    arg1 확인!=arg2, 같다면 fail

    assertTrue(expr, msg=None)
    검증 expr은true,false라면fail

    assertFalse(expr,msg=None)
    검증 expr은false,true라면fail

    assertIs(arg1, arg2, msg=None)
    arg1,arg2가 같은 대상인지 확인하지 않으면fail

    assertIsNot(arg1, arg2, msg=None)
    arg1,arg2가 같은 대상이 아님을 검증하고fail

    assertIsNone(expr, msg=None)
    expr이 None인지 아닌지 확인하려면 fail

    assertIsNotNone(expr, msg=None)
    expr이 None이 아님을 확인하려면 fail

    assertIn(arg1, arg2, msg=None)
    arg1이arg2의 하위 문자열인지 확인하고fail

    assertNotIn(arg1, arg2, msg=None)
    arg1이arg2의 하위 문자열이 아님을 검증하고fail
    십일
    assertIsInstance(obj, cls, msg=None)
    obj가 cls의 실례임을 검증합니다. 아니면fail
    십이
    assertNotIsInstance(obj, cls, msg=None)
    obj가cls의 실례가 아님을 검증하는 것은fail
    이상은python이 테스트에서 Mock을 어떻게 사용하는지에 대한 상세한 내용입니다. 더 많은 python 테스트에서 Mock을 사용하는지에 대한 자료는 저희 다른 관련 글에 주목하세요!

    좋은 웹페이지 즐겨찾기