Hypothesis扩展,允许基于正则表达式生成字符串
项目描述
Hypothesis扩展,允许基于正则表达式生成字符串。如果您有一些模式(例如JSON模式)已经具有验证数据的正则表达式,这将很有用。
示例
from hypothesis_regex import regex
import requests
import json
EMAIL_REGEX = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]{2,}\.[a-zA-Z0-9-.]{2,}$"
@given(regex(EMAIL_REGEX))
def test_registering_user(email):
response = requests.post('/signup', json.dumps({'email': email}))
assert response.status_code == 201
功能
正则表达式策略返回始终与给定正则表达式匹配的字符串(此检查由过滤器强制执行),并且它试图以有效的方式进行,以过滤掉更少的生成示例。然而,某些正则表达式构造可能会降低策略效率,因此应谨慎使用
字符串中间的“^”和“$” - 不做任何事情。
“\b”和“\B”(单词边界和不是单词边界) - 不做任何事情,而是仅依赖顶层正则表达式匹配过滤器来过滤掉不匹配的示例。
正向先行断言和先行断言仅生成它们应该匹配的数据(就像它是前一个/后一个部分的一部分一样)。
负向先行断言和先行断言不做任何事情,因此它依赖于前一个/后一个部分来生成正确的字符串(否则示例将被过滤掉)。
“(?(id)yes-pattern|no-pattern)”实际上并不检查具有给定ID的组是否确实被使用,而是仅生成yes-或no-pattern。
正则表达式策略试图对生成的数据进行疯狂处理(例如,字符串末尾的“$”可能不生成任何内容或生成换行)。其想法不是生成看起来很漂亮的字符串,而是任何疯狂的意外组合,这些组合仍然可以匹配给定的正则表达式,这样您就可以为它们做好准备,并以最合适的方式处理它们。
您可以使用正则表达式标志来获得更多控制策略
re.IGNORECASE - 字面量或字面量范围同时生成小写和大写字母。例如 r'a' 将生成 “a” 和 “A”,或者 ‘[a-z]’ 将生成小写和大写英文字符。
re.DOTALL - “.” 字符将能够生成换行
re.UNICODE - 字符类别(“\w”、“\d” 或 “\s”及其否定)将生成 Unicode 字符。这是 Python 3 的默认值,请参阅 re.ASCII 以反转它。
有两种方法可以传递正则表达式标志
通过传递具有该标志的编译正则表达式:regex(re.compile(‘abc’,re.IGNORECASE))
通过使用内联标志语法:regex(‘(?i)abc’)
安装
$ pip install hypothesis-regex
要求
Python >= 2.7 和 <= 3.6
hypothesis >= 3.8
项目链接
许可证
MIT 许可。有关更多详细信息,请参阅捆绑的 LICENSE 文件。
项目详细信息
哈希值 for hypothesis_regex-0.3.1-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b1b851c08f1480abf34fea05ee6ad3362c5754c76dd83ef7ce8651e064a4fc61 |
|
MD5 | 9adbf1b8f8ea4636a4f7cc4badd11b1d |
|
BLAKE2b-256 | 4a5e66e12e5bab7aaa5cf8a20fc22d877c575969f4b308e1db3d69e590a6fbcf |