– Python开发工具的回归测试包(Python教程)(参考资料)
test
– Python的回归测试包
注意
test
package仅供Python内部使用。它的文档是为了Python的核心开发人员的利益。不鼓励在Python的标准库之外使用这个包,因为这里提到的代码可以更改或删除,而不会在Python的发行版之间发送.
test
包包含Python的所有回归测试以及模块test.support
和test.regrtest
.test.support
用来增强你的测试test.regrtest
驱动测试套件.
中的每个模块test
名称以test_
开头的包是特定模块或功能的测试套件。所有新的测试都应该用unittest
或doctest
模块。一些较旧的测试使用“传统”测试样式进行编写,将打印输出与sys.stdout
;这种测试方式被认为是弃用的.
也可以看看
- 模块
unittest
- 编写PyUnit回归测试.
- 模块
doctest
- 文档字符串中嵌入的测试.
写单元测试test
包
它是首选测试使用unittest
模块遵循一些指导方针。一种是通过用test_
启动它来命名测试模块,并使用被测模块的名称结束。测试模块中的测试方法应以test_
最后描述该方法的测试方法。这是必需的,以便测试驱动程序astest方法识别这些方法。此外,不应包含该方法的文档字符串。吸音(如# Tests function returns only True or False
)应该用于提供测试方法的文档。这样做是因为如果文档字符串存在则会打印出来,因此正在运行的测试没有说明.
通常使用基本的样板:
import unittestfrom test import supportclass MyTestCase1(unittest.TestCase): # Only use setUp() and tearDown() if necessary def setUp(self): ... code to execute in preparation for tests ... def tearDown(self): ... code to execute to clean up after tests ... def test_feature_one(self): # Test feature one. ... testing code ... def test_feature_two(self): # Test feature two. ... testing code ... ... more test methods ...class MyTestCase2(unittest.TestCase): ... same structure as MyTestCase1 ...... more test classes ...if __name__ == "__main__": unittest.main()
此代码模式允许测试套件由test.regrtest
,作为支持unittest
CLI,或通过python -m unittest
CLI.
回归测试的目标是尝试破解代码。这导致遵循一些指导原则:
-
测试套件应该运用所有类,函数和常量。这不仅包括要呈现给外部世界的外部API,还包括“私有”代码.
-
白盒测试(检查测试时正在测试的代码)是首选。Blackbox测试(仅测试已发布的用户界面)不够完整,无法确保测试所有边界和边缘情况.
-
确保测试所有可能的值,包括无效值。这样可以确保不仅可以接受所有有效值,还可以正确处理不正确的值.
-
尽可能多地排除代码路径。测试分支发生的位置和thustailor输入,以确保通过代码的许多不同路径.
-
为测试代码发现的任何错误添加一个显式测试。如果在未来更改代码,这将确保错误不会再次出现.
-
确保在测试后清理(例如关闭并移除所有临时文件).
-
如果测试依赖于操作系统的特定条件,则在尝试测试之前验证已存在的条件.
-
尽可能少地导入模块并尽快完成。这最大限度地减少了测试的外部依赖性,并最大限度地减少了导入模块的副作用可能导致的异常行为.
-
尝试最大化代码重用。有时候,测试会因使用什么类型的输入而变化。通过使用指定输入的类继承abasic测试类来最小化代码重复:
class TestFuncAcceptsSequencesMixin: func = mySuperWhammyFunction def test_func(self): self.func(self.arg)class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = [1, 2, 3]class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = "abc"class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = (1, 2, 3)
使用此模式时,请记住从
unittest.TestCase
继承的所有类都作为测试运行。Mixin
上面例子中的类没有任何数据,因此无法自行运行,因此它不会从unittest.TestCase
.
使用命令行界面运行测试
test
包可以作为脚本运行,以驱动Python的regressiontest套件,这要归功于-m
选项: python -m test 。发动机罩,它使用test.regrtest
;在以前的Python版本中使用的调用 python -mtest.regrtest 仍然有效。单独运行脚本会自动开始在test
包中运行所有回归测试。这样做是通过查找包中的所有模块,以test_
开头,导入它们,并执行函数test_main()
(如果存在)或加载测试viaunittest.TestLoader.loadTestsFromModule if test_main
不存在。要执行的测试的名称也可以传递给脚本。指定单一回归测试( python -m test test_spam )将最小化输出并且只打印测试是否通过或失败.
运行test
直接允许可以使用哪些资源来设置。你这样做是使用-u
命令行选项。指定all
作为-u
选项的值启用所有可能的资源: python -m test -uall 如果只需要一个资源(更常见的情况),可以在all
之后列出不需要的以acomma分隔的资源列表。命令 python -m test -uall,-audio,-largefile 将运行test
除了audio
和largefile
资源以外的所有资源。有关所有资源和更多命令行选项的列表,请运行 python -m test -h .
执行回归测试的其他一些方法取决于正在执行的测试平台。在Unix上,你可以运行 make test 在构建Python的顶级目录中。在Windows上,从目录执行rt.batPCbuild
将运行回归测试.
test.support
– Python测试套件的实用工具
test.support
模块为Python回归测试套件提供支持.
注意
test.support
不是公共模块。这里记录了帮助Python开发人员编写测试。此模块的API可能会发生变化,而不会在发布之间出现向后兼容性问题.
该模块定义了以下例外:
- exception
test.support.
TestFailed
-
测试失败时引发异常。不赞成使用
unittest
基于测试和unittest.TestCase
断言方法
- exception
test.support.
ResourceDenied
-
的子类
unittest.SkipTest
。当资源(例如网络连接)不可用时引发。由requires()
功能
引发test.support
模块定义了以下常量:
test.support.
verbose
-
True
何时启用详细输出。当需要关于正在运行的测试的更详细信息时,应该检查。verbose是由test.regrtest
.
test.support.
is_jython
-
True
设置的,如果正在运行的翻译是Jython.
test.support.
is_android
-
True
如果系统是Android.
test.support.
unix_shell
-
Path for shell,如果不是在Windows上;否则
None
.
test.support.
FS_NONASCII
-
由
os.fsencode()
.
test.support.
TESTFN
-
设置为可安全用作临时文件名称的名称。创建的任何临时文件应该关闭并取消链接(删除).
test.support.
TESTFN_UNICODE
-
设置为临时文件的非ASCII名称.
test.support.
TESTFN_UNENCODABLE
-
设置为文件系统(str类型),不能通过严格模式下的文件系统编码进行编码。可能是
None
如果不能生成这样的文件名
test.support.
TESTFN_UNDECODABLE
-
设置为文件名(字节类型),该文件名不能通过严格模式下的文件系统编码进行解码。如果生成这样的文件名是不可能的
None
test.support.
TESTFN_NONASCII
-
设置为包含
FS_NONASCII
字符的文件名
test.support.
IPV6_ENABLED
-
设置为
True
如果在此主机上启用了IPV6,False
否则
test.support.
SAVEDCWD
-
//调成
os.getcwd()
.
test.support.
PGO
-
设置何时可以跳过测试,当它们对PGO无用时
test.support.
PIPE_MAX_SIZE
-
一个可能大于底层OS管道缓冲区大小的常量,使写入阻塞.
test.support.
SOCK_MAX_SIZE
-
一个可能大于底层操作系统套接字缓冲区大小的常量,使写入阻塞.
test.support.
TEST_SUPPORT_DIR
-
设置到包含
test.support
.
test.support.
TEST_HOME_DIR
-
设置为测试包的顶级目录.
test.support.
TEST_DATA_DIR
-
设置到测试包中的
data
目录.
test.support.
MAX_Py_ssize_t
-
设置为
sys.maxsize
进行大内存测试。
test.support.
max_memuse
-
通过设置
set_memlimit()
作为大内存测试的内存限制。由限制MAX_Py_ssize_t
.
test.support.
real_max_memuse
-
通过设置
set_memlimit()
作为大内存测试的内存限制。不受MAX_Py_ssize_t
.
test.support.
MISSING_C_DOCSTRINGS
-
返回
True
如果在CPython上运行,而不是在Windows上运行,并且配置没有设置WITH_DOC_STRINGS
.
test.support.
HAVE_DOCSTRINGS
-
检查是否存在docstrings.
test.support
模块定义了以下功能:
test.support.
unload
(name)-
删除name来自
sys.modules
.
test.support.
unlink
(filename)-
打电话
os.unlink()
上 filename。在Windows平台上,这将包含一个等待循环来检查文件的存在.
test.support.
rmdir
(filename)-
Call
os.rmdir()
on filename。在Windows平台上,这包含一个等待循环来检查文件的存在.
test.support.
rmtree
(path)-
Call
shutil.rmtree()
on path或致电os.lstat()
和os.rmdir()
删除路径及其内容。在Windows平台上,它包含一个等待循环来检查文件的存在.
test.support.
make_legacy_pyc
(source )-
将PEP 3147/488 pyc文件移动到其旧的pyc位置,并将文件系统路径返回到旧的pyc文件。sourcevalue是源文件的系统文件。它不需要存在,但PEP3147 / 488 pyc文件必须存在.
test.support.
is_resource_enabled
(resource)-
返回
True
如果resource已启用且可用。可用资源列表仅在test.regrtest
正在执行测试.
test.support.
python_is_optimized
()-
返回
True
如果Python不是用-O0
要么-Og
.
test.support.
with_pymalloc
()-
返回
_testcapi.WITH_PYMALLOC
.
test.support.
requires
(resource, msg=None)-
举起
ResourceDenied
如果resource不可用。msg是ResourceDenied
如果它被提出。总是回来True
如果被一个 的函数调用__name__
是"__main__"
。在test.regrtest
.
test.support.
system_must_validate_cert
(f)执行测试时使用-
在TLS认证验证失败时提升
unittest.SkipTest
.
test.support.
sortdict
(dict)-
用钥匙排序dict的回复
test.support.
findfile
// (filename, subdir=None)-
返回名为filename的文件的路径。如果没有找到匹配filename返回。这不等于失败,因为它可能是文件的路径.
设置subdir表示用于查找文件管理器的相对路径,而不是直接查看路径目录.
test.support.
create_empty_file
(filename)-
用filename创建一个空文件。如果已经存在,请将其截断.
test.support.
fd_count
()-
计算打开文件描述符的数量.
test.support.
match_test
(test)-
比赛 test到中设置的图案
set_match_tests()
.
test.support.
set_match_tests
(patterns)-
使用正则表达式定义匹配测试patterns.
test.support.
run_unittest
(*classes)-
执行
unittest.TestCase
子类传递给函数。该函数扫描类中以前缀test_
开头的方法并单独执行测试.将字符串作为参数传递也是合法的;这些应该是
sys.modules
中的键。每个相关模块将由unittest.TestLoader.loadTestsFromModule()
扫描。这通常见于以下test_main()
功能:def test_main(): support.run_unittest(__name__)
这将运行在命名模块中定义的所有测试.
test.support.
run_doctest
(module, verbosity=None, optionflags=0)-
运行
doctest.testmod()
在给定的module。返回(failure_count, test_count)
.如果verbosity是
None
,doctest.testmod()
用verbosityset运行到verbose
。否则,运行时将详细程度设置为None
. optionflags作为optionflags
传递给doctest.testmod()
.
test.support.
setswitchinterval
(interval)-
设置
sys.setswitchinterval()
给定的interval。定义Android系统的最小间隔以防止系统挂起.
test.support.
check_impl_detail
(**guards)-
使用此检查来保护CPython的特定于实现的测试或仅在实现时执行由参数保护:
check_impl_detail() # Only on CPython (default).check_impl_detail(jython=True) # Only on Jython.check_impl_detail(cpython=False) # Everywhere except CPython.
test.support.
check_warnings
(*filters, quiet=True)-
warnings.catch_warnings()
的便利包装器,可以重复测试是否正确引发了警告。调用warnings.catch_warnings(record=True)
与warnings.simplefilter()
设置为always
并使用选项自动验证记录的结果大致相等.check_warnings
接受2元组的形成("message regexp",WarningCategory)
作为位置参数。如果提供了一个或多个filters,或者可选的关键字参数quiet是False
,它会检查以确保警告符合预期:每个指定的过滤器必须至少匹配由附带的代码或测试引发的警告中的至少一个失败,并且如果引发的任何警告与任何指定的过滤器都不匹配,则测试失败。要禁用第一个检查,请将quiet设置为True
.如果未指定任何参数,则默认为:
check_warnings(("", Warning), quiet=True)
在这种情况下,将捕获所有警告并且不会引发任何错误.
进入上下文管理员后,回复了
WarningRecorder
实例。来自catch_warnings()
的基本警告列表可通过记录器对象的warnings
属性获得。为方便起见,也可以通过记录器对象直接访问表示最近警告的对象的属性(参见下面的示例)。如果没有引发警告,那么代表警告的对象所期望的任何属性都将返回None
.记录器对象也有一个
reset()
方法,它清除了警告列表.上下文管理器的设计是这样使用的:
with check_warnings(("assertion is always true", SyntaxWarning), ("", UserWarning)): exec("assert(False, "Hey!")") warnings.warn(UserWarning("Hide me!"))
在这种情况下,如果没有提出任何警告,或者其他警告被警告,则
check_warnings()
会引发错误.当测试需要更深入地查看警告时,而不是仅仅检查它们是否发生,可以使用这样的代码:
with check_warnings(quiet=True) as w: warnings.warn("foo") assert str(w.args[0]) == "foo" warnings.warn("bar") assert str(w.args[0]) == "bar" assert str(w.warnings[0].args[0]) == "foo" assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0
在版本3.2中更改:新的可选参数filters和quiet.
test.support.
check_no_resource_warning
(testcase)-
上下文管理器检查是否没有引发
ResourceWarning
。你必须在上下文管理器的末端之前删除可能发出ResourceWarning
的对象.
test.support.
record_original_stdout
(stdout)-
存储stdout。它意味着在regrtest开始的时候举行stdout
test.support.
get_original_stdout
()-
返回
record_original_stdout()
要么sys.stdout
如果没有设置的话
test.support.
strip_python_strerr
(stderr)-
从解释器的潜在调试输出中找出Python进程的stderr。这通常会在
subprocess.Popen.communicate()
.
test.support.
optim_args_from_interpreter_flags
()中的当前设置-
返回一个命令行参数列表,重现当前的优化
sys.flags
.
test.support.
captured_stdin
()test.support.
captured_stdout
()test.support.
captured_stderr
()-
用
io.StringIO
宾语。使用输出流的示例:
with captured_stdout() as stdout, captured_stderr() as stderr: print("hello") print("error", file=sys.stderr)assert stdout.getvalue() == "hello\n"assert stderr.getvalue() == "error\n"
使用输入流的示例:
with captured_stdin() as stdin: stdin.write("hello\n") stdin.seek(0) # call test code that consumes from sys.stdin captured = input()self.assertEqual(captured, "hello")
test.support.
temp_dir
(path=None, quiet=False)-
在pathandyields目录.
如果path是
None
,使用tempfile.mkdtemp()
。如果quiet是False
,上下文管理器在错误上引发异常。否则,如果指定了path并且无法创建,则只发出警告.
test.support.
change_cwd
(path, quiet=False )-
一个上下文管理器暂时将当前工作目录更改为path并生成目录.
如果quiet是
False
,上下文管理器引发异常错误。否则,它只发出警告并保持当前工作目录相同.
test.support.
temp_cwd
(name=”tempcwd”, quiet=False )-
临时管理器临时创建一个新目录并更改当前工作目录(CWD).
上下文管理器在当前目录中创建一个临时目录,名称为name暂时更改当前工作目录之前。如果name是
None
,则使用tempfile.mkdtemp()
.创建临时目录。如果quiet是
False
并且无法创建或更改CWD,会引发错误。否则,只会发出警告并使用原来的CWD .
test.support.
temp_umask
(umask )-
临时设置进程的上下文管理器umask.
test.support.
transient_internet
(resource_name, *, timeout=30.0, errnos=())-
当互联网连接出现各种问题时,上下文管理器会引发
ResourceDenied
exceptions.
test.support.
gc_collect
)取代-
强制收集尽可能多的对象。这是必需的,因为垃圾收集器无法保证及时释放。这意味着
__del__
方法的调用时间可能比预期的要晚,而且弱反应可能比预期的还要长.
test.support.
disable_gc
()-
垃圾收集器一旦进入,就可以退出.
test.support.
swap_attr
(obj, attr, new_val)-
用新的物体交换一个属性的文本管理器.
使用:
with swap_attr(obj, "attr", 5): ...
这将在
obj.attr
块的持续时间内将with
设置为5,恢复块末尾的旧值。如果attr
不在obj
上,它将被创建,然后在块的末尾删除.旧值(或
None
如果它不存在)将被分配到“as”子句的目标,如果有一个.
test.support.
swap_item
(obj, attr, new_val)-
翻译项目与一个新的对象.
使用
with swap_item(obj, "item", 5): ...
这将在
obj["item"]
块的持续时间内将with
设置为5,在结束时恢复旧值块。如果item
的上下文管理器不在obj
,它会在块的末尾创建然后删除.旧值(或
None
如果它不存在)将被分配到“as”子句的目标,如果有一个.
test.support.
calcobjsize
(fmt)-
返回
struct.calcsize()
为nP{fmt}0n
或者,如果gettotalrefcount
存在,2PnP{fmt}0P
.
test.support.
calcvobjsize
(fmt)-
返回
struct.calcsize()
nPn{fmt}0n
或者,如果gettotalrefcount
存在,2PnPn{fmt}0P
.
@
test.support.
skip_unless_symlink
-
用于运行需要支持的测试的装饰器象征性的链接.
@
test.support.
skip_unless_xattr
-
在Mac OS X上运行测试时,运行需要支持xattr.
@
test.support.
skip_unless_bind_unix_socket
-
用于运行测试的装饰器,需要Unixsockets的功能bind()
@
test.support.
anticipate_failure
(condition)-
装饰器用
unittest.expectedFailure()
有条件地标记测试。任何使用这个装饰器都应该有一个相关的注释来识别相关的跟踪器问题.
@
test.support.
run_with_locale
(catstr, *locales)-
一个装饰器,用于在不同的语言环境中运行一个函数,在它之后正确地重置它已完成。catstr是区域设置类别asa string(例如
"LC_ALL"
)。传递的locales将按顺序尝试,并且将使用第一个有效的语言环境.
@
test.support.
run_with_tz
(tz)-
用于在特定地方运行函数的装饰器时区,完成后正确设置.
@
test.support.
requires_freebsd_version
(*min_version)-
在FreeBSD上运行测试时的最低版本。如果FreeBSD版本低于最小值,则在Linux上运行测试时,将
unittest.SkipTest
.
@
test.support.
requires_linux_version
(*min_version)-
装饰器提升为最低版本。如果Linux版本小于最小版本,请加注
unittest.SkipTest
.
@
test.support.
requires_mac_version
(*min_version)-
Decorator以获得最低版本的测试的装饰器。如果MAC OS X版本小于最小版本,则引发
unittest.SkipTest
.
@
test.support.
requires_IEEE_754
-
用于在非IEEE 754平台上跳过测试的装饰器.
@
test.support.
requires_zlib
-
如果
zlib
不存在,则跳过测试的装饰器.
@
test.support.
requires_gzip
-
如果
gzip
跳过测试的装饰器不存在.
@
test.support.
requires_bz2
-
如果
bz2
不存在则跳过测试的装饰者.
@
test.support.
requires_lzma
-
如果
lzma
不存在,则跳过测试的装饰者.
@
test.support.
requires_resource
(resource)-
如果resource不可用,则跳过测试的装饰者.
@
test.support.
requires_docstrings
-
装饰器只运行测试如果
HAVE_DOCSTRINGS
.
@
test.support.
cpython_only
(test)-
装饰器测试只适用于CPython.
@
test.support.
impl_detail
(msg=None, **guards)-
装饰者在
check_impl_detail()
上调用guards。如果那回复False
,然后使用msg作为跳过测试的原因.
@
test.support.
no_tracing
(func)-
装饰者在测试期间暂时关闭跟踪.
@
test.support.
refcount_test
(test)-
用于测试的装饰器,涉及参考计数。如果它不是由CPython运行,装饰器不会运行测试。在测试期间不设置任何跟踪功能,以防止由跟踪功能引起的意外重新计数.
@
test.support.
reap_threads
(func)-
装饰器确保即使测试失败也能清理线程.
@
test.support.
bigmemtest
(size, memuse, dry_run=True)-
装饰师为bigmem测试.
size是测试所要求的大小(在任意的,测试解释的单元中。)memuse是测试的每个单位的字节数,或者是它的goodetimate。例如,需要两个字节缓冲区(4 GiBeach)的测试可以用
@bigmemtest(size=_4G, memuse=2)
.size参数通常作为anextra参数传递给装饰测试方法。如果dry_run是
True
,传递给testmethod的值可能小于请求的值。如果dry_run是False
,如果没有指定-M
,则表示测试不支持虚拟运行.
@
test.support.
bigaddrspacetest
(f)-
用于填充地址空间的测试的装饰器。f是函数towrap.
test.support.
make_bad_fd
()-
通过打开和关闭临时文件并返回其描述符来创建无效的文件描述符.
test.support.
check_syntax_error
(testcase, statement, errtext=””, *, lineno=None, offset=None)-
在statement中检查语法错误试图编辑statement.testcase是
unittest
测试的实例。errtext是SyntaxError
引起的错误的文字。如果lineno不是None,则与SyntaxError
的行进行比较。如果offset不是None,则比较SyntaxError
.
test.support.
open_urlresource
(url, *args, **kw)-
打开url。如果打开失败,加注
TestFailed
.
test.support.
import_module
(name, deprecated=False, *, required_on())-
此函数导入并返回指定的模块。与普通进口不同,此功能提升
unittest.SkipTest
如果模块无法导入.在此导入期间,模块和包弃用消息被抑制deprecated是
True
。如果某个平台上需要一个模块,但对于其他平台是必需的,请设置required_on到一个可迭代的平台前缀,它将与sys.platform
.版本3.1.
test.support.
import_fresh_module
(name, fresh=(), blocked=(), deprecated=False)-
此函数在导入之前通过从
sys.modules
删除命名模块来导入并返回指定Python模块的全新副本。注意,与reload()
不同,原始模块不受此操作的影响.fresh是一个可迭代的附加模块名称,在执行导入之前也会从
sys.modules
缓存中删除.blocked是一个可替换的模块名称,用
None
替换在导入期间在模块缓存中确保导入它们的尝试提升ImportError
.在开始导入之前保存命名模块和fresh和blocked参数中指定的任何模块然后在新导入完成时重新插入
sys.modules
在此导入过程中,模块和包弃用消息被抑制deprecated是
True
.此函数将引发
ImportError
如果指定的模块不能导入的话例如使用:
# Get copies of the warnings module for testing without affecting the# version being used by the rest of the test suite. One copy uses the# C implementation, the other is forced to use the pure Python fallback# implementationpy_warnings = import_fresh_module("warnings", blocked=["_warnings"])c_warnings = import_fresh_module("warnings", fresh=["_warnings"])
版本3.1.
test.support.
modules_cleanup
(oldmodules)-
的副本除去oldmodules和
encodings
为了保留内部缓存.
test.support.
threading_setup
()-
返回当前线程数和悬空线程的副本.
test.support.
threading_cleanup
(*original_values)-
清理original_values中未指定的线程。如果测试在后台运行线程,则设计为发出警告.
test.support.
join_thread
(thread, timeout=30.0)-
加入thread内 timeout。举起
AssertionError
如果在timeoutseconds.
test.support.
reap_children
()-
在
test_main
每当子流程开始时。这将有助于确保在寻找refleak时没有多余的孩子(僵尸)留在tohog资源并产生问题.
test.support.
get_attribute
(obj, name)-
得到一个属性,如果
unittest.SkipTest
被抬起AttributeError
test.support.
bind_port
// (sock, host=HOST)-
将套接字绑定到空闲端口并返回端口号。依赖onephemeral端口以确保我们使用未绑定的端口。这是非常重要的,因为许多测试可能同时运行,尤其是在abuildbot环境中。如果
sock.family
是AF_INET
和sock.type
是SOCK_STREAM
套接字上有SO_REUSEADDR
或SO_REUSEPORT
设置。测试不应该为TCP / IP套接字设置这些套接字选项。设置这些选项的唯一情况是测试多个UDP套接字的多播.此外,如果
SO_EXCLUSIVEADDRUSE
套接字选项可用(即在Windows上),它将在套接字上设置。这将防止其他任何人在测试期间绑定到我们的主机/端口.
test.support.
bind_unix_socket
(sock, addr)-
绑一个unix插座,举起
unittest.SkipTest
如果PermissionError
被抬起来
test.support.
find_unused_port
(family=socket.AF_INET, socktype=socket.SOCK_STREAM)-
回收一个应该适合绑定的未使用的端口。这是通过创建一个具有相同系列和类型的临时套接字
sock
参数(默认为AF_INET
,SOCK_STREAM
),并将其绑定到指定的主机地址(默认为0.0.0.0
)来实现的将端口设置为0,从OS中引出一个未使用的短暂端口。然后关闭并删除临时套接字,并恢复临时端口.这个方法或
bind_port()
应该用于服务器套接字需要绑定到特定端口以进行测试的任何测试。使用哪个测试取决于调用代码是创建Pythonsocket,还是需要在构造函数中提供未使用的端口传递到外部程序(即-accept
参数toopenssl的s_server模式)。总是喜欢bind_port()
overfind_unused_port()
在可能的情况。使用硬编码端口是因为它可以使多个测试实例无法同时进行,这对于buildbots来说是一个问题.
test.support.
load_package_tests
(pkg_dir, loader, standard_tests, pattern)-
用于测试包的
unittest
load_tests
协议的通用实现。pkg_dir是包的根目录; loader, standard_tests和pattern是load_tests
。在简单的情况下,测试包的__init__.py
可以是以下内容:import osfrom test.support import load_package_testsdef load_tests(*args): return load_package_tests(os.path.dirname(__file__), *args)
test.support.
detect_api_mismatch
(ref_api, other_api, *, ignore=())-
返回ref_api在other_api,除了在ignore.
中指定的此检查中要保留的已定义项目列表外,默认情况下,它会跳过以“_”开头的私有属性,但包括所有魔术方法,即以“__”开头和结尾的方法.
版本3.5中的新功能
test.support.
patch
// (test_instance, object_to_patch, attr_name, new_value)-
object_to_patch.attr_name/new_value///另外addcleanup程序test_instance为object_to_patch恢复attr_name。attr_name应该是object_to_patch.
test.support.
run_in_subinterp
(code)的有效属性-
在子解释器中运行code。举起
unittest.SkipTest
如果tracemalloc
启用了
test.support.
check_free_after_iterating
//(test, iter, cls, args=())-
请说iter在迭代后被解除分配。
test.support.
missing_compiler_executable
(cmd_names=[])-
在cmd_names时检查名称列在cmd_names的编译器可执行文件或所有编译器可执行文件是否存在是空的并返回第一个丢失的可执行文件或
None
当没有找到时丢错.
test.support.
check__all__
(test_case, module, name_of_module=None, extra=(), blacklist=())-
说
__all__
变量module包含所有公共名称.模块的公共名称(其API)是根据它们是否符合公共名称约定自动检测的,并在module.
中定义name_of_module参数可以指定(作为其字符串或元组)什么模块可以定义API以便被检测为publicAPI。一个例子是module从其他模块导入部分公共API,可能是C后端(如
csv
及其_csv
).extra参数可以是一组名称,否则将无法自动检测为“公共”,如没有正确的对象
__module__
属性。如果提供,它将被添加到自动检测到的.blacklist参数可以是一组名称,即使它们的名称另有说明,也不能将其视为公共API的一部分.
使用示例:
import barimport fooimport unittestfrom test import supportclass MiscTestCase(unittest.TestCase): def test__all__(self): support.check__all__(self, foo)class OtherTestCase(unittest.TestCase): def test__all__(self): extra = {"BAR_CONST", "FOO_CONST"} blacklist = {"baz"} # Undocumented name. # bar imports part of its API from _bar. support.check__all__(self, bar, ("bar", "_bar"), extra=extra, blacklist=blacklist)
版本3.6.
test.support
module定义了以下类:
- class
test.support.
TransientResource
(exc, **kwargs) -
实例是一个上下文管理器,它会引发
ResourceDenied
如果引发了指定的异常类型。任何关键字参数都被视为属性/值对,以与with
声明。只有当所有对匹配正确对抗异常时,才会ResourceDenied
凸起
- class
test.support.
EnvironmentVarGuard
-
用于临时设置或取消设置环境变量的类。实例可以用作上下文管理器,并具有完整的字典界面,用于查询/修改底层
os.environ
。从文本管理器退出后,对所有通过此实例完成的环境变量的更改将被回滚.在版本3.1中更改:添加了字典界面.
EnvironmentVarGuard.
set
(envvar, value)-
暂时将环境变量
envvar
设置为value
.
EnvironmentVarGuard.
unset
(envvar)-
的值暂时取消设置环境变量
envvar
.
- class
test.support.
SuppressCrashReport
-
上下文管理器用于尝试防止在预期会导致子进程崩溃的测试上出现崩溃对话框弹出窗口.
在Windows上,它使用SetErrorMode.
在UNIX上,
resource.setrlimit()
习惯用来设置resource.RLIMIT_CORE
软限制为0以防止核心转储文件的创建.在这两个平台上,旧值由
__exit__()
.
- class
test.support.
CleanImport
(*module_names) -
用于强制导入以返回新模块引用的上下文管理器。这对于测试模块级行为很有用,例如在导入时发出一个DeprecationWarning。用法示例:
with CleanImport("foo"): importlib.import_module("foo") # New reference.
- class
test.support.
DirsOnSysPath
(*paths) -
这是一个
sys.path
的副本,附加给定位置参数的任何目录,然后恢复sys.path
当上下文结束时复制设置.注意all
sys.path
文本管理器正文中的修改,包括替换对象,将在块结束时恢复.
- class
test.support.
SaveSignals
-
用于保存和恢复由Python signalhandler注册的信号处理程序的类
- class
test.support.
Matcher
-
matches
(self, d, **kwargs)-
尝试将单个dict与提供的参数匹配.
match_value
(self, k, dv, v)-
尝试匹配单个存储值(dv)和提供的值(v).
- class
test.support.
BasicTestRunner
-
run
(test )-
跑 test并返回结果.
- class
test.support.
TestHandler
(logging.handlers.BufferingHandler) -
记录支持类
- class
test.support.
FakePath
(path) -
简单路径对象。它实现了
__fspath__()
只返回path论点。如果path是一个例外,它将在__fspath__()
.
test.support.script_helper
中引发 – 用于Python执行测试的工具
test.support.script_helper
模块提供对Python’脚本执行的支持tests.
test.support.script_helper.
interpreter_requires_environment
()-
返回
True
如果sys.executable interpreter
所需的环境变量以便能够运行这是为了与
@unittest.skipIf()
一起使用来注释测试需要用assert_python*()
函数启动isolatedmode(-I
)或没有环境模式(-E
)子解释器进程.正常构建&测试不会遇到这种情况但是当尝试从解释器运行标准库测试套件时会发生这种情况,因为解释器没有Python的当前主页查找逻辑的显而易见的家.
设置
PYTHONHOME
是让大多数测试套件在这种情况下运行的一种方法。PYTHONPATH
或PYTHONUSERSITE
是可能影响解释器是否可以启动的其他常见环境变量.
test.support.script_helper.
run_python_until_end
(*args, **env_vars)-
基于env_vars设置环境,以便在子进程中运行解释器。值可以包括
__isolated
,__cleanenv
,__cwd
和TERM
.
test.support.script_helper.
assert_python_ok
(*args, **env_vars)-
断言用args和可选的环境变量env_vars成功(
rc == 0
)并返回(return code,stdout, stderr)
元组如果设置了
__cleanenv
关键字,env_vars用作新鲜环境
test.support.script_helper.
assert_python_failure
(*args, **env_vars)-
断言用args和可选的环境变量env_vars失败(
rc != 0
)并返回(return code,stdout, stderr)
元组查看
assert_python_ok()
以获取更多选项.
test.support.script_helper.
spawn_python
(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)-
使用给定的参数运行Python子进程.
kw是传递给
subprocess.Popen()
的额外关键字args。返回一个subprocess.Popen
object.
test.support.script_helper.
kill_python
(p)-
运行给定的
subprocess.Popen
进程直到完成并返回到了
test.support.script_helper.
make_script
//(script_dir, script_basename, source, omit_suffix=False)-
创建包含source在路径script_dir和script_basename。如果omit_suffix是
False
,请附上.py
。返回全文路径
test.support.script_helper.
make_zip_script
// (zip_dir, zip_basename, script_name, name_in_zip=None)-
在zip_dir和zip_basename创建拉链文件,加上
zip
其中包含script_name. name_in_zip中的文件是归档名称。返回一个包含(full path, full path of archive name)
.
test.support.script_helper.
make_pkg
(pkg_dir, init_source=””)的元组-
创建一个名为pkg_dir的目录一个
__init__
文件以init_source为内容.
test.support.script_helper.
make_zip_pkg
(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)-
创建一个路径为zip_dir和zip_basename含空
__init__
文件和文件script_basename包含source。如果compiled是True
,两个源文件都将被编译并添加到zip包中。返回完整zippath的元组和zip文件的存档名称.
评论被关闭。