在pytest钩子函数中判断Android和iOS设备(方法一)
在一个UI自动化工程里可以执行iOS UI 自动化和Android UI 自动化,那么在有些公共方法里就需要区分是Android手机还是iOS手机,例如,pytest的钩子函数。
在 pytest_runtest_makereport 这个钩子函数中我添加了,截图和重启app的指令,这就需要在执行指令之前知道是Android手机还是iOS手机,这样才能创建相应的driver,为了区分不同平台,可以这样判断:
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
rep = outcome.get_result()
if rep.when == 'call':
if rep.failed:
logger.error(f"Test {item.nodeid}: FAILED\n")
driver = None
if "ios" in item.keywords:
logger.info("进入了iOS的判断case")
driver = item.funcargs['ios_driver']
elif "android" in item.keywords:
logger.info("进入了Android的判断case")
driver = item.funcargs['android_driver']
(ios_driver和android_driver是两个创建驱动的fixture)
通过上面的代码还不能实现判断是Android还是iOS,需要在测试用例中显式添加标记,比如 @pytest.mark.android 和 @pytest.mark.ios,然后在钩子中通过 item.keywords 检测这些标记。
# 在测试用例中使用标记
@pytest.mark.android
def test_android_login():
pass
@pytest.mark.ios
def test_ios_login():
pass
这样就可以动态判断是Android还是iOS了。