zoukankan      html  css  js  c++  java
  • 基于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:ChromeDriver66chromedriver.exe'

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

    import pytest
    
    
    @pytest.fixture
    def init_driver():
        '''
        1.会话不重置 2.指定chromedriver版本为66
        :return: driver对象
        '''
        driver = _baseDriver(noReset=False, chromedriverExecutable=r'G:ChromeDriver66chromedriver.exe')
        yield driver
  • 相关阅读:
    JQuery实现表格的全选和反选,以及分页勾选保存(laypage插件分页的使用)
    js之如何获取css样式
    JS正则表达式一些基本使用、验证、匹配、正则匹配时一个变量
    jQuery绑定事件的四种方式
    console命令详解
    实现a标签中的各种点击(onclick)事件的方法
    用JSON.parse和eval出现的问题
    js 将json对象转成字符串
    iOS主流机型更新
    * -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]’
  • 原文地址:https://www.cnblogs.com/xiaogongjin/p/11857086.html
Copyright © 2011-2022 走看看