PyPI에 PyQCheck을 등록했습니다. 이 Python에서 QuickCheck을 할 수 있는 프로그램 라이브러리입니다.

10916 단어 PythonPyQCheck

PyQCheck


지난해 8월 말 공개PyQCheck됐다.
Python 2.7로 계속 발행되며 setup입니다.만들다
창고에 넣어둔 상태라서.
아쉬운 마음에 다음과 같은 대응을 했다.
  • 파이톤 3.3에 대응(전전의 3.1,3.2 및 2.x계 불보증)
  • PyPI에 등록(설치 단순화)
  • 세부 사항에 대해 약간의 대응을 한다(자신에게 대응하는 init.py의 코드 이식 -> 디렉터리 import 대책...)
  • 비록 미약한 기능만 있지만, 나는 그런대로 사용할 수 있다고 생각한다.

    생성 프로세스


    자세한 내용은 잊었지만 QuickCheck 이 프로그램 라이브러리는 어딘가의 아주 작은 범위 내에서 떠들썩해졌다
    언어를 잘 쓰는 사람들을 각자 잘하고 좋아하는 프로그래밍 언어로 QuickCheck 스타일로
    테스트를 할 수 있는 틀을 만든 것을 계기로 한 것 같아요.

    뭐 해요?


    간단하게 말하면 다음과 같은 동작
  • 스스로 매개 변수를 만드는 함수입니다.
  • 이 매개 변수를 처리할 수 있는 범위의 보증 유형의 값을 넣고 실행
  • 함수에서 되돌아오는 값이 True,False인지 이상 구토인지에 따라 판단
  • 일단 써볼게요.


    작업 환경


    동작 환경으로서 다음과 같은 조건이 있다
  • 파이톤 3.3 이상 설치
  • 설치하다.


    다음 명령을 사용하여 설치할 수 있습니다.
    ...시스템 환경 오염을 방지하기 위해pyvenv를 이용하여 설치 환경을 조정합니다.
    distribute를 없애 easy.설치 준비 같은 거 설치할 거 넣고.
    > mkdir ~/Sandbox/PyQCheck
    > cd ~/Sandbox/PyQCheck
    > pyvenv .venv
    > source .venv/bin/activate
    > curl -O http://python-distribute.org/distribute_setup.py
    > python distribute_setup.py
    > easy_install PyQCheck
    
    이상 준비 완료.

    동작을 보다


    다음은 샘플을 조작하는 데 사용되는 코드 쪽지를 동봉합니다.
    equal_length.py
    # -*- coding:utf-8 -*-
    
    from pyqcheck import PyQCheck, Arbitrary
    
    def equal_length(a, b):
      return len(a) == len(b)
    
    PyQCheck(verbose=True).add(
      Arbitrary(
        ('string', dict(min=10, max=10)), 
        ('string', dict(min=10, max=10))
      ).property(
        'len(a) == len(b)', equal_length
      )
    ).run(10).result()
    

    실행


    다음 형식으로 출력해 보십시오.

    뭐 해요?

  • Arbitrary는 두 개의 매개 변수를 취하는 함수에 대해 길이가 최소 10, 최대 10, 10글자인
    전송 문자열
  • equal_length가 a, b에 문자열 전달
  • 문자열 길이가 같으므로 True
  • 로 반환
  • 10번의 시험 결과는 모두 OK였다.☀아이콘 채우기
  • 결국


    테스트 대상의 함수로 함수를 수신하는 자동 매개 변수의 처리
    지정한 지원 형식과 데이터 길이 등의 값을 적당히 생성합니다
    시험에 적절히 탈락하여 통과했습니까?이런 검사를 할 수 있다.
    100번, 1000번, 10000번을 시도해 봤는데 통과하면 거의 괜찮아요.
    이런 느낌.(QuickCheck의 원래 생각과 차이가 있을 수 있습니다.)

    서법을 바꾸다


    장식물로 쓸 수도 있어요.
    equal_length.py
    # -*- coding:utf-8 -*-
    
    from pyqcheck import PyQCheck, set_arbitrary
    
    @set_arbitrary(
      ('string', dict(min=10, max=10)), 
      ('string', dict(min=10, max=10))
    )
    def equal_length(a, b):
      '''
      len(a) == len(b)
      '''
      return len(a) == len(b)
    
    PyQCheck(verbose=True).run(10).result()
    
    나는 이 작법이 더욱 간결할 것이라고 생각한다...

    이상한 사용법


    PyQCheck의 이상한 사용법도 다음과 같은 방법을 사용할 수 있다.
    다음 스크립트를 실행합니다.
    실행에 관해서는 sqlite3과 링크를 효과적으로 하는 형식으로 Pythn3을 미리 구축해야 합니다.
    insert_random_value_to_the_sqlite.py
    # -*- coding:utf-8 -*-
    
    import sqlite3
    from pyqcheck import PyQCheck, set_arbitrary
    
    DB_NAME = 'test.db'
    
    @set_arbitrary(
      ('integer', dict(min=0, max=100)),
      ('string', dict(min=3, max=10))
    )
    def insert_to_sqlite3(age, name):
      con = sqlite3.connect(DB_NAME)
      cur = con.cursor()
      cur.execute('''
        SELECT `name` FROM `sqlite_master` 
          WHERE `type`='table' AND name='users';
      ''')
    
      if cur.fetchone() is None:
        cur.execute('''
          CREATE TABLE `users` (
            `id` INTEGER NOT NULL PRIMARY KEY,
            `age` INTEGER NOT NULL,
            `name` STRING NOT NULL
          );
        ''')
        con.commit()
    
      cur.execute('''
        INSERT INTO `users` (`age`, `name`) 
          VALUES (?, ?)
      ''', (age, name))
      con.commit()
    
      return True
    
    PyQCheck(verbose=True).run(30).result()
    

    실행


    실행해봐.

    test.rb는 현재 디렉터리에서 만들어졌습니다. 내용을 봅시다.

    PyQCheck의 텍스트 값을 생성하여 함수에 전달하는 특성 활용
    듣자니 그는 가상 데이터의 생성에 사용하려고 시도했다고 한다.
    미국의 주요, 세계의 국명입니다.
    자주 사용하는 이름 데이터를 Arbitrary로 만들어 보세요.
    나는 그렇게 하면 가상 데이터를 생성하는 데 쓸 수 있다고 생각한다.

    금후

  • 사용자 및 사용자가 직접 정의한 Arbitrary를 만들 수 있음
  • 계속 출시 목표
  • 파일로의 출력
  • PyPI에 포장을 등록했기 때문에 계속 유지하고 싶어요.

    좋은 웹페이지 즐겨찾기