yaml 接口java_使用 Yaml 来做自动化测试 (Beta)

本文介绍了如何使用YAML格式编写自动化测试脚本来控制Android应用,以网易云音乐为例,展示了YAML脚本相较于原生Python写法的简洁性和稳定性。通过yaml文件,可以简化测试逻辑,提高脚本可读性,并且方便调试。
摘要由CSDN通过智能技术生成

背景

测试版本警告,目前功能这个功能刚写出来没多久,并不保证稳定。

ATX 中的python-uiautomator2目前来说还是以纯 Python 为主, 基本上都是过程式的写法,判断逻辑也都比较简单。

前段时间学习了思寒 @seveniruby 大佬的 appcrawler,发现用 yaml 写测试脚本获取是个很好的方法。

不了解 yaml 的看这里 YAML 教程

实践和使用说明

本地的 uiautomator2 库先升级到最新。

要实现的功能:打开网易云音乐,搜索周杰伦,播放布拉格广场,验证播放按钮存在

原生 Python 写法

import uiautomator2 as u2

d = u2.connect()

d.set_fastinput_ime(True)

d = d.session("com.netease.cloudmusic")

if d(text="跳过").exists(timeout=5):

d.click(text="跳过")

d(description="搜索").click()

d.send_keys("周杰伦")

d.press("enter")

d(textContains="布拉格广场").click()

assert d(description="播放暂停").exists(timeout=5)

保存成文件test.py 然后 python test.py 运行测试

Yaml 格式写法

---

title: 网易云音乐测试

packageName: com.netease.cloudmusic

steps:

- q: //*[@content-desc="搜索"]

- text: 周杰伦

- q: 布拉格广场

- q: 播放暂停

action: assertExists

watchers:

- q: 跳过

保存成文件test.yml,然后python -m uiautomator2.cli runyaml test.yml 运行

Yaml 文件的好处

脚本更简单和直观

使用非常少的接口dump_hierarchy, click。稳定性更好。

先通过dump_hierarchy接口获取界面 xml,然后通过 lxml 库分析所有组件的位置,调用 click 完成操作。

脚本运行的时候顺便输出日志,方便调试

性能数据、执行截图可以顺便一起做了(当前现在还没实现)

Yaml 用例运行时的日志输出

[I 180904 16:38:57 runyaml:119] Test begins: 网易云音乐测试

[I 180904 16:38:57 runyaml:120] launch app: com.netease.cloudmusic

[I 180904 16:39:02 runyaml:128] ==> {'query': '//*[@content-desc="搜索"]'}

[I 180904 16:39:02 runyaml:87] click: (940, 1602)

[I 180904 16:39:02 runyaml:56] trigger watcher: {'timeout': 0, 'query': '跳过'}

[I 180904 16:39:04 runyaml:87] click: (1008, 156)

[I 180904 16:39:04 runyaml:128] ==> {'text': '周杰伦'}

[I 180904 16:39:05 runyaml:45] input text: 周杰伦

[I 180904 16:39:07 runyaml:128] ==> {'q': '布拉格广场'}

[I 180904 16:39:08 runyaml:87] click: (123, 1194)

[I 180904 16:39:09 runyaml:128] ==> {'q': '//*[@content-desc="播放暂停"]'}

[I 180904 16:39:10 runyaml:87] click: (540, 1773)

[I 180904 16:39:11 runyaml:130] Finished

yaml 具体配置

title 随便写

packageName 写了之后会调用session函数启动应用

steps 包含每一个操作步骤

点击操作的完整的写法如下

- action: click

query: //*[@resource-id="tvb"]

timeout: 10

因为 action 默认就是 click,timeout 默认 10s,query 可以简写成q, 所以可以简写成

- q: //*[@resource-id="tvb"]

如果 q 以/开头代表代表 xpath, 如果是字符串,则会按照正则匹配没有元素的 text 字段

实现输入的写法

- text: 要输入的内容

运行 Python 代码的写法

- action: python

code: |-

print("Hello world")

断言的写法

- action: assertExists

q: 天气

watchers 这个字段的存在是为了方便点击弹窗,写法跟 steps 类似,区别就是 query 字段在这里是必须的,timeout 默认 0s

在每次操作 step 之前,都会先将 hierarchy 经过 watchers 处理。

后话

目前还只是 Beta 版,可以会有 Bug,可能功能还不完善,欢迎大家提意见,我们来一起把它完善了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,我们可以使用 PyYAML 库来读写 YAML 格式的文件。以下是一个示例,演示如何在自动化测试使用 YAML 存储和读取测试用例。 首先,我们需要安装 PyYAML 库: ``` pip install pyyaml ``` 然后,我们可以创建一个 YAML 文件来存储测试用例。假设我们要测试一个加法函数,我们可以创建一个名为 "test_addition.yml" 的文件,其中包含以下测试用例: ``` - name: Test case 1 input: [1, 2] expected_output: 3 - name: Test case 2 input: [0, 0] expected_output: 0 - name: Test case 3 input: [-1, 1] expected_output: 0 ``` 在测试脚本中,我们可以使用 PyYAML 库来读取测试用例,并运行测试: ```python import yaml # 读取测试用例 with open("test_addition.yml", "r") as f: test_cases = yaml.safe_load(f) # 执行测试 for case in test_cases: name = case["name"] input_data = case["input"] expected_output = case["expected_output"] # 调用加法函数 actual_output = add(*input_data) # 检查结果是否符合预期 assert actual_output == expected_output, f"{name} failed: expected {expected_output}, but got {actual_output}" ``` 在上面的代码中,我们首先使用 `yaml.safe_load()` 函数读取 YAML 文件并将其转换为 Python 字典。然后,我们逐个遍历测试用例,将输入数据传递给被测函数,并将结果与预期输出进行比较。 需要注意的是,PyYAML 库默认会将 YAML 文件中的缩进转换为 Python 中的嵌套字典或列表。因此,在读取 YAML 文件后,我们可以像操作普通 Python 对象一样访问测试用例的属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值