关于参数化获取手机名称deviceName和系统版本号platformVersion;并存入yaml;

本文介绍了一个Python脚本,该脚本使用ADB命令获取连接的Android设备名称和平台版本信息,并将这些信息写入YAML文件中。此外,还展示了如何从YAML文件读取这些信息,用于自动化测试或设备管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import subprocess
def attached_devices():
    device=[]
    formate = ["deviceName","platformVersion"]
    n = subprocess.Popen("adb devices", shell=True, stdout=subprocess.PIPE,
                              stderr=subprocess.PIPE).stdout.readlines()
    for i in n:
        l = []
        t = i.decode().split("\t")
        if len(t) >= 2:
            l.append(t[0])
            s = "adb -s %s shell getprop ro.build.version.release"%t[0]
            v = subprocess.Popen(s, shell=True, stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE).stdout.readlines()
            for i in v:
                a = i.decode().split("\n")
                l.append(a[0].replace("\r",''))

            d = dict(zip(formate,l))
            # device.append(d)

    return d

json_path = os.path.dirname('D:\\trunk\\cases\\citymeia965\\Resources\\basic\\') + "\element.yaml"
jsdate = attached_devices()
# print(jsdate)
jsdate['appActivity']='com.android.jsbcmasterapp.Welcome'
# print(jsdate)
with open(json_path, "w", encoding="utf-8") as f:
   yaml.dump(jsdate, f, Dumper=yaml.Dumper)

 

def init_yaml():
    yamlpath = os.path.dirname(__file__) + "/element.yaml"
    #print(yamlpath)
    with open(yamlpath, encoding='utf-8') as f:
        x = yaml.load(f,Loader=yaml.Loader)
    return x

 

x = init_yaml()
capailities = {
   'platformName': 'Android',
   'deviceName': x['deviceName'],
   'platformVersion': x['platformVersion'],
### 如何在 Pytest 中加载或处理 YAML 文件 #### 加载 YAML 数据 为了在 pytest 测试框架中加载并处理 YAML 文件,可以利用 Python 的 `yaml` 库完成此操作。以下是具体实现方式: 1. **安装依赖库** 需要先确保已安装 `pyyaml` 库,可以通过以下命令安装: ```bash pip install pyyaml ``` 2. **编写函数读取 YAML 文件** 使用 `yaml.safe_load()` 方法可以从指定路径的 YAML 文件中提取数据[^1]。 下面是一个通用的函数用于读取 YAML 文件的内容: ```python import yaml def load_yaml(file_path): """从给定路径加载 YAML 文件""" try: with open(file_path, "r", encoding="utf-8") as file: data = yaml.safe_load(file) return data except FileNotFoundError: print(f"Error: File not found at path {file_path}") return None except Exception as e: print(f"An error occurred while loading the YAML file: {e}") return None ``` 3. **将 YAML 数据传递到测试用例** 可以通过 `@pytest.mark.parametrize` 装饰器将 YAML 文件中的数据作为参数传测试函数。 假设有一个名为 `data.yaml` 的文件,其内容如下: ```yaml - a: 1 b: 2 - a: 20 b: 30 ``` 对应的测试代码可写成这样: ```python import pytest import yaml def load_yaml_data(): """加载 YAML 数据供 parametrize 使用""" with open("data.yaml", "r", encoding="utf-8") as file: return yaml.safe_load(file) @pytest.mark.parametrize("case", load_yaml_data()) def test_addition(case): result = case['a'] + case['b'] print(f"{case['a']} + {case['b']} = {result}") ``` 4. **动态更新 YAML 文件** 如果需要动态生成或修改 YAML 文件的数据,则可以在运行时调用相应的方法来更新文件内容[^3]。例如,在某些场景下可能需要基于 API 返回的结果重新构建 YAML 文件。 5. **Appium Capabilities 配置** 在 Appium 自动化测试项目中,通常会使用 YAML 来存储设备能力服务器连接信息等配置项[^4]。下面展示了一个例子说明如何读取这些设置: ```python caps_config = load_yaml('desired_caps.yaml') desired_caps = { 'platformName': caps_config.get('platformName'), 'platformVersion': caps_config.get('platformVersion'), 'deviceName': caps_config.get('deviceName'), 'appActivity': caps_config.get('appActivity'), 'appPackage': caps_config.get('appPackage'), 'automationName': caps_config.get('automationName'), 'autoGrantPermissions': caps_config.get('autoGrantPermissions', True), 'noReset': caps_config.get('noReset', True), 'url': f"http://{caps_config.get('url')}:{caps_config.get('port')}" } ``` 以上就是关于如何在 pytest 中加载处理 YAML 文件的具体方法[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linmumum

吃饱睡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值