파 이 썬 코드 를 어떻게 테스트 하 는 지 간단히 말 하 다

9079 단어 테스트Python코드
소개
테스트 를 작성 하여 프로그램의 모든 다른 기능 을 검사 합 니 다.모든 테스트 는 하나의 관심 사 에 집중 되 어 결과 가 기대 하 는 것 인지 아 닌 지 를 검증 한다.정기 적 으로 테스트 를 실시 하여 응용 프로그램 이 예상 한 대로 작업 하도록 확보 하 다.테스트 커버 가 많 을 때 테스트 를 실행 하면 수정 점 과 새로 추 가 된 점 이 응용 프로그램 에 영향 을 주지 않 을 것 이 라 고 자신 할 수 있 습 니 다.
지식 점
  • 단원 테스트 개념
  • unittest 모듈 사용
  • 테스트 용례 의 작성
  • 이상 테스트
  • 테스트 보급률 개념
  • coverage 모듈 사용
  • 2.테스트 범위
    가능 하 다 면 코드 라 이브 러 리 의 모든 코드 를 테스트 해 야 합 니 다.그러나 이것 은 개발 자 에 게 달 려 있 습 니 다.건장 한 테스트 를 쓰 는 것 이 현실 에 맞지 않 으 면 뛰 어 넘 을 수 있 습 니 다.마치Nick Coghlan_(Python 핵심 개발 자)는 인터뷰 에서 튼튼한 테스트 세트 가 있 습 니 다.큰 변경 을 할 수 있 고 외부 에서 볼 수 있 는 행위 가 변 하지 않 는 다 고 확신 할 수 있 습 니 다.
    3.단원 테스트
    위 키 백과 의 소 개 를 참조 합 니 다.
    컴퓨터 프로 그래 밍 에서 유닛 테스트(영어:Unit Testing)는 모듈 테스트 라 고도 부 르 며 프로그램 모듈(소프트웨어 디자인 의 최소 단위)을 대상 으로 정확성 검 사 를 하 는 테스트 작업 이다.프로그램 단원 은 응용 가능 한 최소 테스트 부품 입 니 다.프로 세 스 프로 그래 밍 에서 하나의 단원 은 하나의 프로그램,함수,과정 등 이다.대상 을 대상 으로 프로 그래 밍 할 때 가장 작은 단원 은 바로 방법 이다.기본 클래스(초 클래스),추상 류,또는 파생 클래스(하위 클래스)중의 방법 을 포함한다.
    유닛 테스트 모듈
    Python 에서 유닛 테스트 를 도와 줄 유닛 테스트 모듈 이 있 습 니 다.
    곱 하기 계산 프로그램
    이 예 에서 우 리 는 단 계 를 계산 하 는 프로그램factorial.py을 쓸 것 이다.
    
    import sys
    
    def fact(n):
        """
            
    
        :arg n:   
        :returns: n    
    
        """
        if n == 0:
            return 1
        return n * fact(n -1)
    
    def div(n):
        """
             
        """
        res = 10 / n
        return res
    
    
    def main(n):
        res = fact(n)
        print(res)
    
    if __name__ == '__main__':
        if len(sys.argv) > 1:
            main(int(sys.argv[1]))
    
    실행 프로그램:
    
    $ python3 factorial.py 5
    4.첫 번 째 테스트 사례
    어떤 함 수 를 테스트 합 니까?
    보시 다시 피fact(n)이 함 수 는 모든 계산 을 실행 하기 때문에 우 리 는 적어도 이 함 수 를 테스트 해 야 합 니 다.
    파일 편집factorial_test.py코드 는 다음 과 같 습 니 다.
    
    import unittest
    from factorial import fact
    
    class TestFactorial(unittest.TestCase):
        """
                
        """
    
        def test_fact(self):
            """
                
                `test_`              
            """
            res = fact(5)
            self.assertEqual(res, 120)
    
    
    if __name__ == '__main__':
        unittest.main()
    
    실행 테스트:
    
    $ python3 factorial_test.py
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK
    설명 하 다.
    우 리 는 먼저 유닛 테스트 모듈 을 가 져 온 후에 우리 가 테스트 해 야 할 함 수 를 테스트 했다.
    테스트 용례 는 하위 클래스 화unittest.TestCase를 통 해 만 들 어 졌 다.
    지금 우 리 는 테스트 파일 을 열 고 120 을 121 로 변경 한 후에 무슨 일이 일어 날 지 봅 시다.
    각종 assert 문장
    Method
    Checks that
    New in
    assertEqual(a, b)a == bassertNotEqual(a, b)a != bassertTrue(x)bool(x) is TrueassertFalse(x)bool(x) is FalseassertIs(a, b)a is b2.7
    assertIsNot(a, b)a is not b2.7
    assertIsNone(x)x is None2.7
    assertIsNotNone(x)x is not None2.7
    assertIn(a, b)a in b2.7
    assertNotIn(a, b)a not in b2.7
    assertIsInstance(a, b)isinstance(a, b)2.7
    assertNotIsInstance(a, b)not isinstance(a, b)2.7
    이상 테스트
    만약 우리 가factorial.py에서 호출div(0)한다 면,우 리 는 이상 이 던 져 지 는 것 을 볼 수 있 을 것 이다.
    우리 도 이런 이상 을 테스트 할 수 있다.이렇게:
    
    self.assertRaises(ZeroDivisionError, div, 0)
    전체 코드:
    
    import unittest
    from factorial import fact, div
    
    class TestFactorial(unittest.TestCase):
        """
                
        """
    
        def test_fact(self):
            """
                
                `test_`              
            """
            res = fact(5)
            self.assertEqual(res, 120)
    
        def test_error(self):
            """
                         
            """
            self.assertRaises(ZeroDivisionError, div, 0)
    
    
    
    if __name__ == '__main__':
        unittest.main()
    
    6.mountab.py
    mountab.py 에는 하나의mount_details()함수 만 있 고 함수 분석 및 마 운 트 상세 정 보 를 인쇄 합 니 다.
    
    import os
    
    
    def mount_details():
        """
                
        """
        if os.path.exists('/proc/mounts'):
            fd = open('/proc/mounts')
            for line in fd:
                line = line.strip()
                words = line.split()
                print('{} on {} type {}'.format(words[0],words[1],words[2]), end=' ')
                if len(words) > 5:
                    print('({})'.format(' '.join(words[3:-2])))
                else:
                    print()
            fd.close()
    
    
    if __name__ == '__main__':
        mount_details()
    
    mountab.py 재 구성
    현재 우 리 는 mountab 2.py 에서 위의 코드 를 재 구성 하고 우리 가 쉽게 테스트 할 수 있 는 새로운 함수parse_mounts()가 있 습 니 다.
    
    import os
    
    def parse_mounts():
        """
           /proc/mounts          
        """
        result = []
        if os.path.exists('/proc/mounts'):
            fd = open('/proc/mounts')
            for line in fd:
                line = line.strip()
                words = line.split()
                if len(words) > 5:
                    res = (words[0],words[1],words[2],'({})'.format(' '.join(words[3:-2])))
                else:
                   res = (words[0],words[1],words[2])
                result.append(res)
            fd.close()
        return result
    
    def mount_details():
        """
                
        """
        result = parse_mounts()
        for line in result:
            if len(line) == 4:
                print('{} on {} type {} {}'.format(*line))
            else:
                print('{} on {} type {}'.format(*line))
    
    
    if __name__ == '__main__':
        mount_details()
    
    같은 테스트 코드 로 mounttest.py 파일 을 작성 합 니 다:
    
    #!/usr/bin/env python
    import unittest
    from mounttab2 import parse_mounts
    
    class TestMount(unittest.TestCase):
        """
                
        """
    
        def test_parsemount(self):
            """
                
                `test_`              
            """
            result = parse_mounts()
            self.assertIsInstance(result, list)
            self.assertIsInstance(result[0], tuple)
    
        def test_rootext4(self):
            """
                     
            """
            result = parse_mounts()
            for line in result:
                if line[1] == '/' and line[2] != 'rootfs':
                    self.assertEqual(line[2], 'ext4')
    
    
    if __name__ == '__main__':
        unittest.main()
    
    실행 프로그램
    $ python3 mounttest.py
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s
    OK
    7.테스트 보급률
    테스트 보급률 은 코드 라 이브 러 리 가 테스트 되 지 않 은 부분 을 찾 는 간단 한 방법 이다.그것 은 결코 너 에 게 테스트 가 좋 은 지 아 닌 지 를 알려 주지 않 을 것 이다.
    Python 에서 우 리 는 우 리 를 돕 기 위해 좋 은 보급률 도 구 를 가지 고 있다.너 는 실험 건물 환경 에서 그것 을 설치 할 수 있다.
    
    $ sudo pip3 install coverage
    덮어 쓰기 예시
    $ coverage3 run mounttest.py
    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.013s
    OK
    $ coverage3 report -m
    Name           Stmts   Miss  Cover   Missing
    --------------------------------------------
    mounttab2.py      22      7    68%   16, 25-30, 34
    mounttest.py      14      0   100%
    --------------------------------------------
    TOTAL             36      7    81%
    다음 명령 을 사용 하여 덮어 쓰기 결 과 를 HTML 파일 로 출력 한 다음 브 라 우 저 에서 볼 수 있 습 니 다.
    
    $ coverage3 html
    此处输入图片的描述
    8.총화
    지식 포인트 회고:
  • 단원 테스트 개념
  • unittest 모듈 사용
  • 테스트 용례 의 작성
  • 이상 테스트
  • 테스트 보급률 개념
  • coverage 모듈 사용
  • 이 절 은 유닛 테스트 가 무엇 인지,유닛 테스트 모듈 을 어떻게 사용 하 는 지,테스트 사례 를 어떻게 쓰 는 지 알 게 되 었 습 니 다.그리고 마지막 으로 우 리 는 제3자 모듈 coverage 를 사용 하여 도달 율 테스트 를 실시 했다.
    실제 생산 환경 에서 테스트 절 차 는 매우 중요 한 일환 으로 테스트 엔지니어 에 게 뜻 을 두 지 않 더 라 도 앞으로 의 추 세 는 DevOps 이기 때문에 좋 은 테스트 기능 을 습득 하 는 것 도 유용 하 다.
    파 이 썬 코드 를 어떻게 테스트 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 테스트 파 이 썬 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기