基于appium的fixture应用之代码重构

一、痛点分析

  在appium自动化中,会话启动参数较多,我们使用了yaml配置文件来进行管理,并使用了PyYaml模块进行yaml文件内容的读取,我们知道,在测试场景中,不可能只会用到一种启动类型的参数,比如有时候启动会话需要重置会话状态,有的时候则不需要重置,hybrid混合页面又会改变不同的浏览器驱动版本,还有操作系统类型、操作系统版本、应用名称等的切换,我们不可能每遇到不同的场景都去构造一个yaml配置文件再读取出来使用,因此在fixture的应用中,我们进行代码重构,将我们经常使用的会话参数设定为一个不需要修改的模板,我们读取出来的时候同时修改或者添加值来满足当前的应用测试场景。

  模板如下:

  

二、代码重构之_baseDriver

  我们可以在conftest.py文件中定义一个私有方法,方法名称叫做_baseDriver,并通过可变参数进行传参来实时修改和添加模板内容参数:

import yaml
from appium import webdriver


def _baseDriver(**kwargs):
    '''
    yaml重构
    :param kwargs: 可变参数
    :return: driver对象
    '''
    # 读取yaml内容
    with open('desired_caps.yaml', encoding='utf-8') as fs:
        desired_caps = yaml.load(fs, Loader=yaml.FullLoader)
        # 重构yaml内容
        if kwargs:
            for key, value in kwargs.items():
                desired_caps[key] = value
    # 启动会话
    driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',
                              desired_capabilities=desired_caps)

    return driver

三、使用方法

  例如我们启动会话参数的要求为:

  1. 需要会话重置
  2. 指定chromedriver.exe驱动版本为66

  分析:

  1. 模板针对会话是不重置:noReset: True,那么需要修改noReset的值为False
  2. 模板并没有指定chromedriver.exe路径的参数项,那么我们需要新增键值对'chromedriverExecutable': r'G:\ChromeDriver\66\chromedriver.exe'

  使用方法(在conftest.py文件中定义一个方法,调用_baseDriver方法并传值):

import pytest


@pytest.fixture
def init_driver():
    '''
    1.会话不重置 2.指定chromedriver版本为66
    :return: driver对象
    '''
    driver = _baseDriver(noReset=False, chromedriverExecutable=r'G:\ChromeDriver\66\chromedriver.exe')
    yield driver

 

posted @ 2019-11-14 14:35  小公瑾  阅读(398)  评论(0编辑  收藏  举报