要实现让获取设备号和连接uiautomator2只执行一次的效果,你可以使用pytest的一些特性,如conftest.py
文件和pytest.fixture
装饰器。
首先,你可以在项目的根目录下创建一个conftest.py
文件,用来定义全局的测试夹具(fixture)。在conftest.py
文件中,你可以编写测试用例运行前的一些初始化代码,确保这些代码只执行一次。代码示例如下:
import pytest
import uiautomator2 as u2
@pytest.fixture(scope="session", autouse=True)
def setup_and_teardown():
# 初始化代码
device = u2.connect() # 连接uiautomator2
device_id = device.device_info["serial"] # 获取设备号
# 可以在这里实现一些全局的初始化操作
yield device_id, device
# 清理代码
# 可以在这里实现一些全局的清理操作
在上述代码中,setup_and_teardown
是一个会话级别的fixture,用来执行初始化和清理操作的代码。autouse=True
参数指定这个fixture自动在每个测试用例运行前后执行。yield
关键字之前的部分是初始化代码,通过uiautomator2
连接设备并获取设备号。yield
关键字之后的部分是清理代码,可以在这里实现一些全局的清理操作。
接下来,在你的测试用例文件中,你可以直接使用setup_and_teardown
这个fixture来获取设备号和连接uiautomator2。代码示例如下:
import pytest
@pytest.mark.usefixtures("setup_and_teardown")
class TestExample:
def test_case1(self, setup_and_teardown):
device_id, device = setup_and_teardown
# 在这里使用device_id和device进行测试操作
def test_case2(self, setup_and_teardown):
device_id, device = setup_and_teardown
# 在这里使用device_id和device进行测试操作
# 其他测试用例...
在上述代码中,我们使用了@pytest.mark.usefixtures("setup_and_teardown")
装饰器将setup_and_teardown
夹具应用到测试用例中。
这样,每个测试用例都可以通过setup_and_teardown
夹具获取设备号和连接uiautomator2,并且这部分代码只会在测试开始前执行一次,避免了重复初始化的问题。
请注意,根据需要和实际情况,你可以根据setup_and_teardown
夹具的定义,自定义一些初始化和清理操作。另外,你也可以根据需要创建其他的夹具来实现更多的全局操作。