前言
这里是清安,前段时间停更了很久,主要是在是自动化框架,也就是本文所述的这些东西。框架已经写完了,剩下的就是慢慢分解,写成文章的形式呈现出来。
readyaml
本章还是说上一章所没有讲到的内容。读取yaml文件。我们是以yaml文件作为自动化用例的基础的。所以读取它必不可少。即使是excel也是一样的。
看代码
# encoding=utf-8 # ----清安—--- # 微信:qing_an_an # 公众号:测个der import yaml class YamlRead: def __init__(self, yamlPath): '''如果是第一次调用,读取yaml文件,否则直接返回之前保存的数据''' if os.path.exists(yamlPath): self.yamlPath = yamlPath else: raise FileNotFoundError('yaml文件不存在') self._data = None # 保存yaml的数据 @property # 把一个方法变成属性来调用, def getData(self): if not self._data: with open(self.yamlPath, mode='rb') as f: self._data = yaml.load(f, Loader=yaml.FullLoader) return self._data
此处有一定注释,简单的理解就是传入了一个yaml文件路径,做了一系列的判断,最后获取其中的内容,并返回结果值。其他的代码都是做的校验这么一个操作,处理异常情况的。
这里为了后面调用不打(),所以这里加了一个装饰器,将getData当作属性来调用。如果不懂或者不理解的,可以看看前面的python文章。
如何运用
结合上节所说的configs类,在case中写一个yaml文件。上代码:
# encoding=utf-8 # ----清安—--- # 微信:qing_an_an # 公众号:测个der import os class Config: ''' 项目下所有文件的相对路径''' Base_Path = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + '/..') Base_yaml = Base_Path + r'\case\login.yaml' re = Config()
随后调用打印一下就能看到,路径拼接已经OK了。那么这个是不是万能的呢?答案是,不是的。这只是方便某些文件的管理,并不是万能的方法。
写完这里,我们随后直接在上述的YamlRead中调用一下
from configs.readconfig import re r = YamlRead(re.Base_YAML).getData print(r)
上述例子中我省略了其中的代码,重复复制太麻烦了,调用后打印就能得到如下结果:
[{'mode': 'time', 'time': 5}, {'until': 'presence_located', 'mode': 'inputs_', 'loc': 'id', 'ele': 'com.mxchip.project352:id/etPhone', 'value': '123456', 'time': 10}, {'until': 'presence_located', 'mode': 'inputs_', 'loc': 'class name', 'ele': 'android.widget.EditText', 'value': 'jx123456', 'num': 1}, {'until': 'visibility_located', 'mode': 'clicks_', 'loc': 'id', 'ele': 'com.mxchip.project352:id/cbAgree'}, {'mode': 'time', 'time': 5}, {'until': 'text_element', 'mode': 'clicks_', 'loc': 'xpath', 'text': '登录', 'ele': '//*[@text="登"]'}]
最后,贴出我的yaml文件格式出来:
总结
如果你成功读出后,结果跟我一致,那么恭喜你,本章内容成功学完。
「最后项目的源码地址贴出来:https://gitee.com/qinganan/App_352life.git」感兴趣的可以直接clone到本地研究。