运行 多个测试,单个 initialization/destruction 个对象要测试
Running several tests with single initialization/destruction of objects to test
TL;DR:是否可以使用 pytest 创建一个对象的实例,然后 运行 在同一实例上进行一系列测试?
我有一个自定义 C API,它使用 posix 线程并在串行端口上执行操作。我的 API 是带有 master/slave 消息传递的 custom/proprietary 协议的实现。使用 C(或 Python)中的简单测试程序,它可以正常工作。
但是,对于 pytest,在测试消息的发送和接收时,pytest 重复 open/close COM 端口和 create/delete 后台线程,因为每个单元测试都是按以下方式编写的:
def test_send_message_XXX(serial1, serial2):
master = my_api.Master(serial1)
slave = my_api.Slave(serial2)
message = my_api.SomeCustomMessage()
master.send_message(message)
## tempo to be sure the message was sent
time.sleep(0.5)
rec = slave.receive()
slave.close()
## master is closed when the object is destroyed
assert rec == message.data
问题是,大多数时候,当我 运行 测试时,我要么遇到 pytest 崩溃(以段错误结束),要么遇到一些无法打开 COM 端口的随机情况,或已打开但读取会抛出错误的文件描述符(运行ning ls /dev
显示串行设备,而其他一些“较低级别”测试 运行ning 正确)。
当我在“生产”(模拟)上下文中使用此 API 时,这些错误从未出现。
有没有办法只初始化 master
和 slave
一次,然后 运行 在同一实例上进行所有测试?
您可以使用 Fixtures 或 set-up/tear-down 灯具
TL;DR:是否可以使用 pytest 创建一个对象的实例,然后 运行 在同一实例上进行一系列测试?
我有一个自定义 C API,它使用 posix 线程并在串行端口上执行操作。我的 API 是带有 master/slave 消息传递的 custom/proprietary 协议的实现。使用 C(或 Python)中的简单测试程序,它可以正常工作。
但是,对于 pytest,在测试消息的发送和接收时,pytest 重复 open/close COM 端口和 create/delete 后台线程,因为每个单元测试都是按以下方式编写的:
def test_send_message_XXX(serial1, serial2):
master = my_api.Master(serial1)
slave = my_api.Slave(serial2)
message = my_api.SomeCustomMessage()
master.send_message(message)
## tempo to be sure the message was sent
time.sleep(0.5)
rec = slave.receive()
slave.close()
## master is closed when the object is destroyed
assert rec == message.data
问题是,大多数时候,当我 运行 测试时,我要么遇到 pytest 崩溃(以段错误结束),要么遇到一些无法打开 COM 端口的随机情况,或已打开但读取会抛出错误的文件描述符(运行ning ls /dev
显示串行设备,而其他一些“较低级别”测试 运行ning 正确)。
当我在“生产”(模拟)上下文中使用此 API 时,这些错误从未出现。
有没有办法只初始化 master
和 slave
一次,然后 运行 在同一实例上进行所有测试?
您可以使用 Fixtures 或 set-up/tear-down 灯具