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.
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.
Einfach ausgedrückt, verhält es sich wie folgt
--Erstellen Sie Ihre eigene Funktion, die Argumente akzeptiert.
Die Betriebsumgebung hat die folgenden Bedingungen
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.
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()
Wenn Sie es ausführen, wird es in der folgenden Form ausgegeben.
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 ...)
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 ...
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()
Versuchen Sie es auszuführen.
Da test.rb im aktuellen Verzeichnis erstellt wird, schauen wir uns den Inhalt an ...
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.
--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.