一,前言

在之前的appium自动化测试示例中,我们都是把构造driver实例对象的数据(即Desired Capabilities)写在业务代码里,如下:

# -*- coding:utf-8 -*-
# @author: 给你一页白纸 from appium import webdriver desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"automationName": "UiAutomator2",
"unicodeKeyboard": True,
"resetKeyboard": True,
"noReset": True,
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

这种情况下,如果我们要更换测试机测试的话,就需要去代码里面修改这些信息,从项目维护的角度来说显然是不方便的,应该考虑将这些测试配置信息写在专门的配置文件里,使用的时候直接调用即可。

二,使用yaml文件配置Capabilities示例

目录结构如下:

config下的desired_caps.yml文件里capabilities数据如下(Python中yaml文件的读写方法点这里):

platformName: Android
platformVersion: '10'
deviceName: PCT_AL10
appActivity: .activity.MainActivity
appPackage: com.ss.android.article.news
automationName: UiAutomator2
resetKeyboard: true
noReset: true
unicodeKeyboard: true
ip: 127.0.0.1
port: 4723

common下的baseDriver.py文件中构造driver的函数如下:

# -*- coding:utf-8 -*-
# @author: 给你一页白纸 import yaml, os
from appium import webdriver # 项目根目录路径,即android-ui-autotest文件夹的路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# capabilities配置文件desired_caps.py路径
DESIRED_CAPS_YAML_PATH = CONFIG_PATH + '/config/desired_caps' def android_driver():
# 从desired_caps.yaml读取driver配置数据
stream = open(DESIRED_CAPS_YAML_PATH, 'r')
data = yaml.load(stream, Loader=yaml.FullLoader) desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platformVersion'] = data['platformVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['automationName'] = data['automationName']
desired_caps['unicodeKeyBoard'] = data['unicodeKeyBoard']
desired_caps['resetKeyboard'] = data['resetKeyboard']
desired_caps['noReset'] = data['noReset'] driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
driver.implicitly_wait(8) return driver

三,更新yaml文件的内容

有时候我们需要通过脚本修改yaml文件里的配置信息。比如更换了测试机,capabilities里的platformVersion、deviceName都变了,脚本自动获取新测试机的这两个参数,并更新至desired_caps.yml文件里。

更新yaml文件思路:

1,先读取需要更新的yaml文件的内容;

2,将读取内容里需要更改内容替换成新的内容;

3,再写入yaml文件。

示例代码如下:

# -*- coding:utf-8 -*-
# @author: 给你一页白纸 import yaml def update_yaml():
with open('./config/desired_caps', 'r', encoding='utf-8') as f:
content = yaml.load(f, Loader=yaml.FullLoader) content['platformVersion'] = 'newPlatformVersion'
content['deviceName'] = 'newDeviceName' with open('./config/desired_caps', 'w', encoding='utf-8') as nf:
yaml.dump(data=content, stream=nf, allow_unicode=True)

Python+Appium自动化测试(14)-yaml配置Desired capabilities的更多相关文章

  1. python+Appium自动化:yaml配置capability

    场景 学习了yaml之后就是要将capability的各项参数值与代码分离开. 先创建一个capability.yaml文件,把各项参数存放在其中,然后用load()进行读取. 例子: capabil ...

  2. Appium移动自动化测试-----(七)Desired Capabilities

    Desired Capabilities Desired Capabilities 在启动 session 的时候是必须提供的. Desired Capabilities 本质上是以 key valu ...

  3. python+Appium自动化:Capability配置简介

    Capability配置简介 desired capability的功能是配置Appium会话. Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的 ...

  4. Python+Appium自动化测试(15)-使用Android模拟器(详细)

    做APP的UI自动化测试时,我们往往会使用真机跑自动化测试脚本,因为这样才是最真实的使用场景.但前期调试脚本的话,可以先使用模拟器,这样相对更加方便. 不推荐使用Android SDK里自带模拟器,太 ...

  5. Python+Appium自动化测试(1)-appium环境搭建

    用python+appium做appUI自动化测试,系统为Windows.首先是JDK与Android SDK的安装与环境变量的设置. 一,安装JDK,配置JDK环境变量 1,下载jdk jdk8官网 ...

  6. Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法

    在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...

  7. python+appium自动化测试(一)-----环境搭建

    基础背景: windows7系统 +python3.4版本 环境搭建目标: 使用python编写app自动化测试脚本并成功执行. 搭建步骤:   1.安装python3,安装步骤详见:https:// ...

  8. Python+Appium自动化测试(13)-toast定位

    一,前言 在app自动化测试的过程中经常会遇到需要对toast进行定位,最常见的就是定位toast或者获取toast的文案进行断言,如下图,通过定位"登录成功"的toast就可以断 ...

  9. Python+Appium自动化测试(2)-appium连接真机启动app

    app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...

随机推荐

  1. [BUUOJ记录] [GXYCTF2019]Ping Ping Ping

    主要考察RCE的防护绕过,感觉考的还是比较全的 先构造Payload: ?ip=127.0.0.1;ls 看到目录下有两个文件,fuzz一下发现过滤了 空格 / + * ? { } ( ) [ ]等符 ...

  2. 0vscode基本插件

    Bracket Pair Colorizer auto-close-tag Auto Rename Tag Bracket Pair Colorizer Dracula ESLint  Code Sp ...

  3. JS中有趣的内置对象-JSON

    前言 在以前的web开发中,我们多数选择纯文本或XML作为我们的提交的数据格式,大多数是XML,少数纯文本.其实从AJAX(Asynchronous JavaScript and XML)的命名我们也 ...

  4. upstream--负载

    语法格式: upstream 负载名 { [ip_hash;] server ip:port  [weight=数字]  [down]; server ip:port  [weight=数字]; } ...

  5. Fastbin attack——Double Free

    ptmalloc ptmalloc的基本思路是将堆上的内存区域划分为多个chunk,在分配/回收内存时,对chunk进行分割.回收等操作.在32位系统下,chunk头的大小为8 Bytes,且每个ch ...

  6. 使用Azure DevOps Pipeline实现.Net Core程序的CD

    上一次我们讲了使用Azure DevOps Pipeline实现.Net Core程序的CI.这次我们来演示下如何使用Azure DevOps实现.Net Core程序的CD. 实现本次目标我们除了A ...

  7. boostrap栅格系统自适应的布局

    1.栅格系统 ​ Bootstrap是基于移动优先的原则开发的,使用了一系列的媒体查询(media queries)方法,为我们的布局和界面创建自适应的的分界点.这些分界点主要是基于视口宽度的最小值, ...

  8. Python中的枚举enumerate

  9. [LeetCode]面试题14- I. 剪绳子(DP/贪心)

    题目 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]k[1]...* ...

  10. Badboy脚本录制工具

    Badboy 目录 Badboy 1.Badboy安装 2.脚本的录制 1.Badboy安装 下载地址: http://www.badboy.com.au/download/index 安装其实傻瓜式 ...