Python+unittest+DDT 데이터 구동 테스트 실현

머리말
데이터 구동 테스트:
반복 코드 작성 피하 기데이터 와 테스트 스 크 립 트 분리
4.567917.데이터 구동 테스트 를 통 해 여러 그룹의 데이터 테스트 장면 을 검증 합 니 다.4.567918.
4.567917.일반적으로 유닛 테스트 와 인터페이스 테스트 에 많이 사용 된다.
ddt 소개
Data-Driven Tests(DDT)는 데이터 구동 테스트 로 서로 다른 데이터 가 같은 테스트 사례 를 실행 할 수 있 습 니 다.ddt 의 본질은 바로 장식 기 이 고 한 조 의 데이터 한 장면 이다.
ddt 모듈 은 하나의 종류의 장식 기 ddt 와 세 가지 방법의 장식 기 를 포함 합 니 다.
data:테스트 용례 에 전달 하고 자 하 는 여러 개의 인 자 를 포함 합 니 다.목록,모듈,사전 등 을 포함 할 수 있 습 니 다.
file_data:json 이나 Yml 에서 데 이 터 를 불 러 옵 니 다.
unpack:다음 예제 와 같이 요 소 를 분할 합 니 다.
@data([a,d],[c,d])
@unpack 이 없 으 면[a,b]매개 변수 전송 사례 로 실 행 됩 니 다.
@unpack 이 있 으 면[a,b]가 분해 되 어 용례 중의 두 매개 변수 에 따라 전 달 됩 니 다.
설치 하 다.
pip install ddt
data 장식 기 사용 하기
전체 목록,사전,모듈 전달

import unittest
from ddt import ddt,data,unpack
def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  # @data([1,2,3,4,5,6,7])
  @data({"a":"1","b":2})
  # @data((1,2,3))
  def test(self,data):
    print(data)
if __name__ == '__main__':
  unittest.main(verbosity=2)
포 함 된 목록,모듈,사전 의 전체 전달 방식

import unittest
from ddt import ddt,data,unpack
def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  # @data(*[[1,2,3],[1,0,1],[0,0,0],[1,1,3]])
  # @data(*[{"a":1}, {"a":2}, {"a":3}, {"a":4}])
  @data(*[(1,5), (4,2), (6,7), (5,6)])
  def test(self,data):
    print(data)

if __name__ == '__main__':
  unittest.main(verbosity=2)
unpack 장식 기 사용 하기
unpack 순차 전달 모듈

import unittest
from ddt import ddt,data,unpack
def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  @data((1,2,3),(1,0,1),(0,0,0),(1,1,3))
  @unpack
  def test(self,a,b,c):
    print(a,b,c)
    if a+b == c:
      print(True)
    else:
      print(False)
if __name__ == '__main__':
  unittest.main(verbosity=2)
출력 결과:
1 2 3
True
1 0 1
True
0 0 0
True
1 1 3
False
순차 전달 사전

import unittest
from ddt import ddt,data,unpack

def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  @data({"a":1,"b":1,"c":2},
     {"a":0,"b":0,"c":0},
     {"a":-1,"b":1,"c":0})
  @unpack
  def test(self,a,b,c):
    print(a,b,c)
    if a + b == c:
      print(True)
    else:
      print(False)

if __name__ == '__main__':
  unittest.main(verbosity=2)
출력 결과:
1 1 2
True
0 0 0
True
-1 1 0
True
순차 전달 목록

import unittest
from ddt import ddt,data,unpack

def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  @data([1,2,3],[1,0,1],[0,0,0],[1,1,3])
  @unpack
  def test(self,a,b,c):
    print(a,b,c)
    if a + b == c:
      print(True)
    else:
      print(False)

if __name__ == '__main__':
  unittest.main(verbosity=2)
출력 결과:
1 2 3
True
1 0 1
True
0 0 0
True
1 1 3
False
file 사용데이터 장식 기
ddt 는 파일 에서 데 이 터 를 불 러 오 는 것 을 지원 합 니 다.@filedata()장식 기 는 json 이나 Yml 에서 데 이 터 를 불 러 옵 니 다.".yml"과".yaml"로 끝 나 는 파일 만 Yaml 파일 로 불 러 옵 니 다.모든 다른 형식 파일 은 txt 와 같은 json 파일 로 불 러 옵 니 다.
제 이 슨 데이터 전달
test.json 파일

{
  "case1": {
    "a": 1,
    "b": 1,
    "c": 2
  },
  "case2": {
    "a": -1,
    "b": 1,
    "c": 0
  },
  "case3": {
    "a": 0,
    "b": 0,
    "c": 0
  }
}

import unittest
from ddt import ddt,file_data

def add(a,b):
  return a+b

@ddt
class MyTest(unittest.TestCase):
  @file_data("test.json")
  def test(self, a, b, c):
    print(a,b,c)


if __name__ == '__main__':
  unittest.main(verbosity=2)
다 중 json 파일 전달
test.json 파일

{
  "case1": {
    "data": {
      "a": 1,
      "b": 1
    },
    "result": 2
  },
  "case2": {
    "data": {
      "a": 0,
      "b": 1
    },
    "result": 1
  },
  "case3": {
    "data": {
      "a": 0,
      "b": 0
    },
    "result": 0
  }
}

import unittest
from ddt import ddt,file_data

def add(a,b):
  return a+b

@ddt
class MyTest(unittest.TestCase):
  @file_data("test.json")
  def test(self,data,result):
    print(data,result)

if __name__ == '__main__':
  unittest.main(verbosity=2)
yml 데이터 전달
yml 설치 필요 yml(pip install PyYAML)
test.yml

def add(a,b):
  return a+b
@ddt
class MyTest(unittest.TestCase):
  @file_data("test.yml")
  def test(self,a,b,c):
    print(a,b,c)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기