在我的功能测试中,我需要创建一个对象(与虚拟服务器相关 - 不是模拟的),它将由一组测试共享。服务器是使用一些py.test所使用的设备(环境,主机等)来指定它应该在哪个环境下设置 - 测试运行在多个不同的环境中。我目前的做法是丑陋的,这样抽象的例子:Pytest - 创建一个由多个测试共享的对象
# [host, env, dns are fixtures, defined in conftest.py and passed from
# commandline args - py.test recognizes them so they can be changed
# each time the test is invoked from CLI]
@pytest.mark.parametrize(parameters_from_parametrize)
def test_something(host, env, dns):
server = Server(host,env, dns, random_name, random_passwd)
server.create()
server.do_stuff(parameters_from_parametrize)
check_stuff()
server.delete()
但是,这会为每个组parameters_from_parametrize的一个新的服务器。有没有办法用灯具创建一台服务器,然后运行该服务器?
中,例如:
server = Server(host,env, dns, random_name, random_passwd)
server.create()
@pytest.mark.parametrize(parameters_from_parametrize)
def test_something(server):
server.do_stuff(parameters_from_parametrize)
check_stuff()
server.delete()
这样服务器将只创建一次。上面的示例不起作用,因为在测试功能之前不能使用灯具(并且测试功能外的代码不会与它们共享范围),所以在测试功能之外添加服务器失败。我尝试过安装和拆卸,但是我无法使用它来使用灯具。
有没有办法做到这一点?我认为我可以使用setup/teardown或者创建一个测试课来完成,但是我失败了。
我希望这不是一个非常不讨好的问题,但它可能是。
这里有一个小的错字 - 'score ='session'' - 应该是范围,而不是分数。 –
@TomDalton修正了,谢谢! – bereal
是的!我只需要改变host,env和dns的作用域以匹配'session'作用域,并且它完美地工作。此外,它不会中断其余的测试,所以我可以开始以这种方式编写新测试,并在此期间修改旧测试。 你是我今天的英雄,我能不能给你买啤酒? :) – Taku