python - 使用不同的设置运行相同的 pytest
问题描述
所以我想多次运行相同的测试(最好是并行,但那是另一回事),只是设置不同的变量。我需要在不同的设备上测试相同的东西,所以我必须在每次设置时更改设备名称。这是我已经走了多远,但它不起作用:
import pytest
from appium import webdriver
device_list = ["x", "y", "z"]
class TestLogin():
@pytest.mark.parametrize("device_setup", device_list)
def setup(self, device_setup):
self.driver = webdriver.Remote(command_executor='http://172.18.0.2:4444/wd/hub',
desired_capabilities= {
'deviceName': device_setup,
})
def teardown(self):
self.driver.quit()
def test_a(self):
# Do something
def test_b(self):
# Do another thing
解决方案
您不能参数化该setup
方法,但您可以使用自动使用的夹具:
device_list = ["x", "y", "z"]
class TestLogin:
@pytest.fixture(params=device_list, autouse=True)
def device_setup(self, request):
self.driver = webdriver.Remote(
command_executor='http://172.18.0.2:4444/wd/hub',
desired_capabilities={
'deviceName': request.param,
})
yield
self.driver.quit()
def test_a(self):
# Do something
这将使用设备列表的每个参数执行每个测试,就好像您将mark.parametrize
装饰器放在每个函数之前一样。
更新:如果您只想为每个参数运行一次设置,则可以使用会话范围的固定装置:
class TestLogin:
@pytest.fixture(params=device_list, autouse=True, scope="session")
def device_setup(self, request):
self.driver = webdriver.Remote(
command_executor='http://172.18.0.2:4444/wd/hub',
desired_capabilities={
'deviceName': request.param,
})
yield
self.driver.quit()
def test_a(self):
# Do something
def test_b(self):
# Do something
这将运行设置 3 次(每个驱动程序参数一次)而不是 6 次。
推荐阅读
- javascript - 如何在Javascript中的特定位置插入百分比
- service-worker - 如何使用 React 配置 Service Worker 以防止在 AWS CloudFront 的新部署中出现未捕获的语法错误
- oracle - 如何从多个表和列中从 Oracle 检索数据而不重复?
- ios - 将 CAGradientLayer 应用于 layer.borderColor
- apache-kafka - 流集:有没有办法使用流集来计算 Kafka 主题中的记录
- c - 如何为char数组使用指针?
- javascript - 使用 $project 时添加到数组的值
- python - 绘制直方图错误 - 想要交换 x 和 y 轴
- cassandra - DSE 6.0 和 6.7 是否禁用了 KeyCache?
- mysql - 如何在使用 flask_mysqldb 的烧瓶中创建单元测试?