运行测试#
这是我们的测试框架。
目标:
它应该与py.测试并且操作非常相似(或完全相同)
does not require any external dependencies
最好所有的功能应该只在这个文件中
没有魔法,只需导入测试文件并执行测试函数,就这样
便携式的
- class sympy.testing.runtests.PyTestReporter(verbose=False, tb='short', colors=True, force_colors=False, split=None)[源代码]#
Py.测试就像记者。应产生与py.测试.
- class sympy.testing.runtests.SymPyDocTestFinder(verbose=False, parser=<doctest.DocTestParser object>, recurse=True, exclude_empty=True)[源代码]#
一个类,用于从给定对象的docstring及其包含的对象的docstring中提取与给定对象相关的doctest。doctest目前可以从以下对象类型中提取:模块、函数、类、方法、staticmethods、classmethods和properties。
对doctest版本进行了修改,以查找来自不同模块的代码。例如,@vectorize decorator使函数看起来像来自多维.py即使他们的代码存在于其他地方。
- class sympy.testing.runtests.SymPyDocTestRunner(checker=None, verbose=None, optionflags=0)[源代码]#
用于运行DocTest测试用例并积累统计信息的类。这个
run方法用于处理单个DocTest案例。它返回一个元组(f, t)在哪里t是尝试的测试用例数,以及f失败的测试用例数。已从doctest版本修改为不重置系统显示挂钩(见第5140期)。
有关详细信息,请参见原始DocTestRunner的docstring。
- run(test, compileflags=None, out=None, clear_globs=True)[源代码]#
在中运行示例
test,并使用writer函数显示结果out.示例在命名空间中运行
test.globs. 如果clear_globs为true(默认值),则在测试运行后将清除此命名空间,以帮助进行垃圾回收。如果要在测试完成后检查命名空间,请使用clear_globs=False.compileflags给出了在运行示例时,Python编译器应该使用的一组标志。如果未指定,则它将默认为应用于globs.每个示例的输出都使用
SymPyDocTestRunner.check_output,结果由SymPyDocTestRunner.report_*方法。
- class sympy.testing.runtests.SymPyOutputChecker[源代码]#
与stdlib中的OutputChecker相比,OutputChecker类支持对doctest示例输出中出现的浮点进行数值比较
- class sympy.testing.runtests.SymPyTestResults(failed, attempted)[源代码]#
- attempted#
字段编号1的别名
- failed#
字段编号0的别名
- sympy.testing.runtests.convert_to_native_paths(lst)[源代码]#
将“/”分隔路径列表转换为本机路径列表(九月如果系统不区分大小写,则路径和转换为小写。
- sympy.testing.runtests.doctest(*paths, subprocess=True, rerun=0, **kwargs)[源代码]#
Runs doctests in all *.py files in the SymPy directory which match any of the given strings in
pathsor all tests if paths=[].笔记:
路径可以本机系统格式或unix正斜杠格式输入。
黑名单上的文件可以通过提供它们的路径进行测试;只有在没有给出路径的情况下才会排除它们。
实例
>>> import sympy
运行所有测试:
>>> sympy.doctest()
运行一个文件:
>>> sympy.doctest("sympy/core/basic.py") >>> sympy.doctest("polynomial.rst")
在sympy/functions/和某些特定文件中运行所有测试:
>>> sympy.doctest("/functions", "basic.py")
运行名称为doc/src/modules的任何多项式文件/多项式.rst,主题/功能/特殊/多项式.py,和sympy/polys/多项式.py:
>>> sympy.doctest("polynomial")
这个
split选项将测试运行拆分为多个部分。分割目前只分割测试档案,不过这可能会在将来改变。split应该是“a/b”形式的字符串,它将运行部件a属于b. 请注意,常规doctest和Sphinx doctest是分开的。例如,要运行测试套件的前半部分:>>> sympy.doctest(split='1/2')
The
subprocessandverboseoptions are the same as with the functiontest()(see the docstring of that function for more information) except thatverbosemay also be set equal to2in order to print individual doctest lines, as they are being tested.
- sympy.testing.runtests.get_sympy_dir()[源代码]#
Returns the root SymPy directory and set the global value indicating whether the system is case sensitive or not.
- sympy.testing.runtests.raise_on_deprecated()[源代码]#
上下文管理器使不推荐警告引发错误
正在从库中捕获doctydes和proceptions代码。在每个单独的测试/文档测试中使用此上下文管理器非常重要,以防某些测试修改警告筛选器。
- sympy.testing.runtests.run_all_tests(test_args=(), test_kwargs=None, doctest_args=(), doctest_kwargs=None, examples_args=(), examples_kwargs=None)[源代码]#
运行所有测试。
Right now, this runs the regular tests (bin/test), the doctests (bin/doctest), and the examples (examples/all.py).
这是什么
setup.py test使用。您可以将参数和关键字参数传递给支持它们的测试函数(目前是test、doctest和示例)。有关可用选项的说明,请参见这些函数的docstrings。
例如,要在禁用颜色的情况下运行解算器测试,请执行以下操作:
>>> from sympy.testing.runtests import run_all_tests >>> run_all_tests(test_args=("solvers",), ... test_kwargs={"colors:False"})
- sympy.testing.runtests.run_in_subprocess_with_hash_randomization(function, function_args=(), function_kwargs=None, command='/xpy/bin/python3', module='sympy.testing.runtests', force=False)[源代码]#
在启用哈希随机化的Python子进程中运行函数。
如果给定的Python版本不支持哈希随机化,则返回False。否则,它将返回命令的退出值。函数传递给系统出口(),因此函数的返回值将是返回值。
环境变量PYTHONHASHSEED用于为Python的散列随机化设定种子。如果设置了它,此函数将返回False,因为在这种情况下不需要启动新的子进程。如果没有设置,则随机设置一个,然后运行测试。请注意,如果在Python启动时设置了此环境变量,则会自动启用哈希随机化。若要强制创建子进程,即使设置了PYTHONHASHSEED,请传递
force=True. 此标志不会强制不支持哈希随机化的Python版本中的子进程(见下文),因为这些版本的Python不支持-R旗帜。function应该是可从模块导入的函数的字符串名称module,比如“测试”。的默认值module是“sympy.testing.runtests公司".function_args和function_kwargs分别是reptuple和reptuple。默认的Python命令是系统可执行文件,这是当前正在运行的Python命令。这个函数是必需的,因为hash随机化的种子必须在Python启动之前由环境变量设置。因此,在开始一个预先确定的Python测试时,我们必须使用一个子进程。
散列随机化是在Python次要版本2.6.8、2.7.3、3.1.5和3.2.3中添加的,并且在3.3.0之后(包括3.3.0)的所有Python版本中默认启用。
实例
>>> from sympy.testing.runtests import ( ... run_in_subprocess_with_hash_randomization) >>> # run the core tests in verbose mode >>> run_in_subprocess_with_hash_randomization("_test", ... function_args=("core",), ... function_kwargs={'verbose': True}) # Will return 0 if sys.executable supports hash randomization and tests # pass, 1 if they fail, and False if it does not support hash # randomization.
- sympy.testing.runtests.split_list(l, split, density=None)[源代码]#
将列表拆分为b的a部分
split应该是“a/b”形式的字符串。例如,“1/3”表示三分之一。
如果列表的长度不能被拆分数整除,则最后一次拆分将包含更多项。
\(density\) 可以指定为列表。如有规定,应平衡试验,以使每个劈裂处的质量尽可能相等 \(density\) .
>>> from sympy.testing.runtests import split_list >>> a = list(range(10)) >>> split_list(a, '1/3') [0, 1, 2] >>> split_list(a, '2/3') [3, 4, 5] >>> split_list(a, '3/3') [6, 7, 8, 9]
- sympy.testing.runtests.sympytestfile(filename, module_relative=True, name=None, package=None, globs=None, verbose=None, report=True, optionflags=0, extraglobs=None, raise_on_error=False, parser=<doctest.DocTestParser object>, encoding=None)[源代码]#
测试给定文件中的示例。返回(#失败,#测试)。
可选关键字arg
module_relative指定应如何解释文件名:如果
module_relative为True(默认值),则filename指定模块相对路径。默认情况下,此路径相对于调用模块的目录;但是如果package参数,则它是相对于该包的。为了确保操作系统的独立性,filename应使用“/”字符分隔路径段,且不应是绝对路径(即,它不能以“/”开头)。如果
module_relative那是假的filename指定特定于操作系统的路径。路径可以是绝对路径或相对路径(相对于当前工作目录)。
可选关键字arg
name提供测试的名称;默认情况下使用文件的基名称。可选关键字参数
package是Python包或Python包的名称,其目录应用作模块相关文件名的基目录。如果没有指定包,则调用模块的目录将用作模块相关文件名的基目录。指定是错误的package如果module_relative是假的。可选关键字arg
globs给出执行示例时用作全局参数的dict;默认情况下,使用{}。实际上,每个docstring都使用了这个dict的副本,因此每个docstring的示例都是一个干净的开始。可选关键字arg
extraglobs给出一个字典,该字典应合并到用于执行示例的全局变量中。默认情况下,不使用额外的全局变量。可选关键字arg
verbose如果为true,则打印大量内容;如果为false,则只打印失败;默认情况下,如果“-v”在系统argv.可选关键字arg
report如果为真,则在结尾打印摘要,否则在结尾不打印任何内容。在详细模式下,摘要是详细的,否则非常简短(实际上,如果所有测试都通过了,则为空)。可选关键字arg
optionflags或加上模块常数,默认为0。可能值(请参阅文档了解详细信息):DONT_ACCEPT_TRUE_FOR_1
DONT_ACCEPT_BLANKLINE
NORMALIZE_WHITESPACE
ELLIPSIS
SKIP
IGNORE_EXCEPTION_DETAIL
REPORT_UDIFF
REPORT_CDIFF
REPORT_NDIFF
REPORT_ONLY_FIRST_FAILURE
可选关键字arg
raise_on_error在第一个意外异常或失败时引发异常。这允许事后调试失败。可选关键字arg
parser指定应用于从文件中提取测试的DocTestParser(或子类)。可选关键字arg
encoding指定用于将文件转换为Unicode的编码。advancedtomoolery:testmod运行类的本地实例的方法医生测试仪,然后将结果合并到(或创建)全局Tester实例中博士学位. 方法博士学位也可以直接调用,如果你想做一些不寻常的事情。将report=0传递给testmod对于延迟显示摘要尤其有用。援引博士、硕士、总结(冗长)当你摆弄完了。
- sympy.testing.runtests.test(*paths, subprocess=True, rerun=0, **kwargs)[源代码]#
在指定的测试*.py文件中运行测试。
特定测试中的测试_ .py file are run if any of the given strings in ``paths`` matches a part of the test file's path. If ``paths=[]``, tests in all test_ .py文件已运行。
笔记:
如果sort=False,测试将以随机顺序运行(不是默认)。
路径可以本机系统格式或unix正斜杠格式输入。
黑名单上的文件可以通过提供它们的路径进行测试;只有在没有给出路径的情况下才会排除它们。
试验结果说明
产量
意义
.
通过
F
失败
X
XPassed(预期失败但通过)
F
XFAILed(预期失败,实际上失败)
S
跳过
W
缓慢的
T
超时(例如,何时
--timeout已使用)K
键盘中断(当用
--slow,您可以在不杀死测试运行程序的情况下中断其中一个)颜色没有其他含义,只是用来帮助解释输出。
实例
>>> import sympy
运行所有测试:
>>> sympy.test()
运行一个文件:
>>> sympy.test("sympy/core/tests/test_basic.py") >>> sympy.test("_basic")
在sympy/functions/和某些特定文件中运行所有测试:
>>> sympy.test("sympy/core/tests/test_basic.py", ... "sympy/functions")
在sympy/core和sympy/utilities中运行所有测试:
>>> sympy.test("/core", "/util")
从文件运行特定测试:
>>> sympy.test("sympy/core/tests/test_basic.py", ... kw="test_equality")
从任何文件运行特定测试:
>>> sympy.test(kw="subs")
在上以详细模式运行测试:
>>> sympy.test(verbose=True)
Do not sort the test output:
>>> sympy.test(sort=False)
打开验尸pdb:
>>> sympy.test(pdb=True)
关闭颜色:
>>> sympy.test(colors=False)
强制使用颜色,即使输出不是到终端(这很有用,例如,如果要管道连接到
less -r你还需要颜色)>>> sympy.test(force_colors=False)
回溯详细程度可以设置为“short”或“no”(默认为“short”)
>>> sympy.test(tb='no')
这个
split选项将测试运行拆分为多个部分。分割目前只分割测试档案,不过这可能会在将来改变。split应该是“a/b”形式的字符串,它将运行部件a属于b. 例如,要运行测试套件的前半部分:>>> sympy.test(split='1/2')
The
time_balanceoption can be passed in conjunction withsplit. Iftime_balance=True(the default forsympy.test), SymPy will attempt to split the tests such that each split takes equal time. This heuristic for balancing is based on pre-recorded test data.>>> sympy.test(split='1/2', time_balance=True)
可以使用单独的子进程禁用正在运行的测试
subprocess=False. Python版本支持随机化。如果subprocess=False,则根据调用Python进程中是否启用了哈希随机化来启用/禁用。但是,即使启用了seed,也无法打印它,除非从新的Python进程调用它。散列随机化是在Python次要版本2.6.8、2.7.3、3.1.5和3.2.3中添加的,并且在3.3.0之后(包括3.3.0)的所有Python版本中默认启用。
如果不支持哈希随机化
subprocess=False自动使用。>>> sympy.test(subprocess=False)
要设置哈希随机化种子,请设置环境变量
PYTHONHASHSEED在运行测试之前。这可以在Python中使用>>> import os >>> os.environ['PYTHONHASHSEED'] = '42'
或从命令行使用
$PYTHONHASHSEED=42./bin/测试
如果未设置种子,将选择一个随机种子。
请注意,要重现相同的哈希值,必须同时使用相同的种子和相同的体系结构(32位与64位)。