在web自动化中我们的环境管理是在conftest模块下设置了一个环境管理的函数,并且运用fixture,例如:
import pytest
from selenium.webdriver import Chrome
@pytest.fixture()
def init_app():
driver=Chrome()
driver.get('www.baidu.com')
yield
driver.quit()
上面代码,就是一个简单的打开浏览器并关闭,也就是说这里只有一种场景
但是在app里面我们可能涉及到多种初始化环境:比如,我们的手机版本不同,初始化是否重置app,是否要直接进入首页,或者是不直接进入(因为有的app有引导页需要滑动屏幕)
针对以上种种需求,那么我们怎么同时测试多种场景?
不同的场景也就是不同的caps,举例,第一种场景是我需要重置app也就是清空数据,第二种场景不重置。
import pytest
from selenium.webdriver import Remote
@pytest.fixture(param=['reset','noreset'])
def init_app(request) #此处的request是固定用法不可更改
print(request.param)
driver=Remote(desired_capabilities=request.param)
这是我们在初始化环境里面设置的代码,那么如何在测试类里面调用
@pytest.usefixture('init_app')
class Test_case():
def test_01(init_app)
pass
因此使用这样的参数化就可以大大的减少我们的测试用例代码量。
当然我们还有一种思路就是将caps存放在列表里面,利用测试函数的参数化,例如unittest里面的ddt数据分离,或者pytest里面的parameterize(英文怕是没写对,哈哈自行看源码去),这两种方法的都是可以实现app初始化的参数化。