Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.

PyQCheck

PyQCheck wurde Ende August letzten Jahres veröffentlicht. Die ganze Zeit für Python 2.7 veröffentlicht und setup.py erstellt Ich habe es also im Repository gelassen Ich dachte, es sei eine Verschwendung, also habe ich die folgenden Maßnahmen ergriffen.

Es hat nur schlechte Eigenschaften, aber ich denke, es kann ziemlich gut verwendet werden.

Wie es geschaffen wurde

Ich habe die Details vergessen, aber die Bibliothek mit dem Namen QuickCheck war an einem bestimmten Ort in einem sehr kleinen Bereich aufgeregt. QuickCheck-like für Leute, die verschiedene Lieblingssprachen in ihren Lieblingsprogrammiersprachen haben Ich denke, das lag daran, dass ich ein Framework erstellt habe, das das Testen ermöglicht.

Was ist zu tun

Einfach ausgedrückt, verhält es sich wie folgt

--Erstellen Sie Ihre eigene Funktion, die Argumente akzeptiert.

Lassen Sie es uns vorerst verwenden

Betriebsumgebung

Die Betriebsumgebung hat die folgenden Bedingungen

Installation

Sie können es mit dem folgenden Befehl installieren. ... Bereiten Sie die Installationsumgebung mit pyvenv vor, um eine Verschmutzung der Systemumgebung zu vermeiden. Lassen Sie beispielsweise Distribute fallen und setzen Sie easy_install ein, um die Installation vorzubereiten.

> 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

Dies ist das Ende der Vorbereitung.

Mal sehen, wie es funktioniert

Das Code-Snippet für das Operationsbeispiel ist unten angefügt.

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()

Lauf

Wenn Sie es ausführen, wird es in der folgenden Form ausgegeben.

pyqcheck-1.png

Was machst du

  1. Für eine Funktion, bei der Arbitrary zwei Argumente akzeptiert, beträgt die minimale Länge 10, die maximale 10, dh 10 Zeichen. Übergeben Sie eine Zeichenfolge
  2. Gleiche Länge wird an a und b übergeben
  3. Gibt True zurück, da es sich um eine Zeichenfolge gleicher Länge handelt
  4. Wenn Sie den Test zehnmal versuchen, ist alles in Ordnung, daher wird er mit dem Symbol ☀ gefüllt

Nach alldem

Für die zu testende Funktion als Verarbeitung des von der Funktion empfangenen automatischen Arguments Generieren Sie entsprechend einen Wert, der den unterstützten Typ und die unterstützte Datenlänge usw. angibt. Besteht es den Test richtig? Kann überprüft werden. Versuchen Sie es 100 Mal, 1000 Mal, 10000 Mal, und wenn Sie gehen, ist es wahrscheinlich in Ordnung, Ich fühle mich so. (Obwohl es sich möglicherweise von der ursprünglichen Idee von QuickCheck unterscheidet ...)

Ändern Sie den Schreibstil

Sie können auch mit einem Dekorateur schreiben.

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()

Ich denke, diese Art zu schreiben ist sauberer ...

Ungewöhnliche Verwendung

Sie können Folgendes auch als ungewöhnliche Verwendung von PyQCheck verwenden. Lassen Sie uns das folgende Skript ausführen. Für die Ausführung muss Python3 mit dem Link mit aktiviertem sqlite3 erstellt werden.

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()

Lauf

Versuchen Sie es auszuführen.

pyqcheck-2.png

Da test.rb im aktuellen Verzeichnis erstellt wird, schauen wir uns den Inhalt an ...

pyqcheck-3.png

Verwenden Sie die Eigenschaft, einen Textwert von PyQCheck zu generieren und an eine Funktion zu übergeben. Es wird gesagt, dass es verwendet wurde, um Dummy-Daten zu generieren. Amerikanische Staaten, Weltlandnamen, Versuchen Sie, häufig verwendete Vor- und Nachnamendaten als willkürlich zu erstellen Wenn Sie das tun, kann es meiner Meinung nach verwendet werden, um Dummy-Daten zu generieren.

von jetzt an

--Erlauben Sie Benutzern und Benutzern, ihre eigenen definierten Arbitrary zu erstellen

Ich habe das Paket bei PyPI registriert und möchte daher die Wartung fortsetzen.

Recommended Posts

Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Ich möchte mit einem Roboter in Python arbeiten.
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Veröffentlichen / Hochladen einer in Python erstellten Bibliothek in PyPI
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Eine Geschichte, die verschwunden ist, als ich einen Pfad angegeben habe, der mit tilda (~) in Python Open beginnt
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
[Python] Ich habe meine eigene Bibliothek erstellt, die dynamisch importiert werden kann
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Erstellt eine Bibliothek für Python, die die morphologische Teilung problemlos handhaben kann
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe die Jumbo-Lotterie zum Jahresende mit Python gekauft und analysiert, die in Colaboratory ausgeführt werden kann
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
[Python] Ein Programm, das Treppen mit # erstellt
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
Ich habe eine generische Python-Projektvorlage erstellt
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe eine Heatmap mit Seaborn [Python] gezeichnet.
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Versuchen Sie es mit APSW, einer Python-Bibliothek, die SQLite ernst nehmen kann
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
Ich habe eine funktionale Sprache mit Python ausprobiert
[DSU] Lesen der AtCoder-Bibliothek mit Green Coder ~ Implementierung in Python ~
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Was ich mit Python-Arrays gemacht habe
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Ich habe mit Python eine Hex-Map erstellt
Eine typisierte Welt, die mit Python beginnt
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Code lesen von faker, einer Bibliothek, die Testdaten in Python generiert
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.