一、yaml文件介绍
yaml是一个专门用来写配置文件的语言。
1. yaml文件规则
- 区分大小写;
- 使用缩进表示层级关系;
- 使用空格键缩进,而非Tab键缩进
- 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
- 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
- 注释标识为#
2. yaml文件数据结构
- 对象:键值对的集合(简称 "映射或字典")
键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔 - 数组:一组按序排列的值(简称 "序列或列表")
数组前加有 “-” 符号,符号与值之间需用空格分隔 - 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
None值可用null可 ~ 表示
3、安装yaml
pip install pyyaml
4、使用yaml
from ruamel import yaml
5、用途:
在我们做自动化测试中,可用作配置文件,配置一些服务器域名、mysql配置、登录信息、toekn等很方便快速读取
二、将字典写入yaml文件
-
-
desired_caps = {
-
'platformName':
'Android哈哈哈',
#移动设备系统IOS或Android
-
'platformVersion':
'7.1.2',
#Android手机系统版本号
-
'deviceName':
'852',
#手机唯一设备号
-
'app':
'C:\\Users\\wangli\\Desktop\\kbgz-v5.9.0-debug.apk',
#APP文件路径
-
'appPackage':
'com',
#APP包名
-
'appActivity':
'cui.setup.SplashActivity',
#设置启动的Activity
-
'noReset':
'True',
#每次运行不重新安装APP
-
'unicodeKeyboard':
'True',
#是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true
-
'resetKeyboard':
'True',
#隐藏键盘
-
'autoGrantPermissions':
'True',
-
'autoAcceptAlerts':[
"python",
"c++",
"java"],
-
'chromeOptions': {
'androidProcess':
'com.tencent.mm:tools'}
-
}
-
with open(
"test.yaml",
"w",encoding=
"utf-8")
as f:
-
yaml.dump(desired_caps,f,Dumper=yaml.RoundTripDumper)
-
-
-
-
写入文件如下:
-
deviceName:
'852'
-
unicodeKeyboard:
'True'
-
autoAcceptAlerts:
-
- python
-
- c++
-
- java
-
autoGrantPermissions:
'True'
-
platformVersion:
7.1
.2
-
platformName:
"Android\u54C8\u54C8\u54C8"
-
app: C:\Users\wangli\Desktop\kbgz-v5
.9
.0-debug.apk
-
appPackage: com
-
chromeOptions:
-
androidProcess: com.tencent.mm:tools
-
appActivity: cui.setup.SplashActivity
-
noReset:
'True'
-
resetKeyboard:
'True'
三、将列表写入yaml文件
-
list=[
'python',
'java',
'c++',
'C#',{
'androidProcess':
'com.tencent.mm:tools'},[
"python",
"c++",
"java"]]
-
with open(
"test.yaml",
"w",encoding=
"utf-8")
as f:
-
yaml.dump(
list,f,Dumper=yaml.RoundTripDumper)
-
-
写入文件如下:
-
-
- python
-
- java
-
- c++
-
- C
#
-
- androidProcess: com.tencent.mm:tools
-
- - python
-
- c++
-
- java
四、读取yaml文件中字典
用python读取yaml文件案例,先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的
-
yaml文件内容
-
chromeOptions:
-
androidProcess: com.tencent.mm:tools
-
appActivity: cui.setup.SplashActivity
-
noReset:
'True'
-
app: C:\Users\wangli\Desktop\kbgz-v5
.9
.0-debug.apk
-
appPackage: com
-
platformVersion:
7.1
.2
-
resetKeyboard:
'True'
-
autoGrantPermissions:
'True'
-
deviceName:
'852'
-
autoAcceptAlerts:
-
- python
-
- c++
-
- java
-
unicodeKeyboard:
'True'
-
platformName:
"Android\u54C8\u54C8\u54C8"
-
-
-
读取yaml
-
with open(
'test.yaml',
'r', encoding=
'utf-8')
as f:
-
print(yaml.load(f.read(),Loader=yaml.Loader))
-
-
-
-
读出内容如下
-
{
'platformVersion':
'7.1.2',
'resetKeyboard':
'True',
'appPackage':
'com',
'autoAcceptAlerts': [
'python',
'c++',
'java'],
'autoGrantPermissions':
'True',
'deviceName':
'852',
'appActivity':
'cui.setup.SplashActivity',
'unicodeKeyboard':
'True',
'noReset':
'True',
'platformName':
'Android哈哈哈',
'app':
'C:\\Users\\wangli\\Desktop\\kbgz-v5.9.0-debug.apk',
'chromeOptions': {
'androidProcess':
'com.tencent.mm:tools'}}
五、读取yaml文件中列表
-
yaml文件内容
-
- python
-
- java
-
- c++
-
- C
#
-
- androidProcess: com.tencent.mm:tools
-
- - python
-
- c++
-
- java
-
-
读取yaml文件
-
with open(
'test.yaml',
'r', encoding=
'utf-8')
as f:
-
print(yaml.load(f.read(),Loader=yaml.Loader))
-
-
读取出内容如下
-
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
-
[
'python',
'java',
'c++',
'C#', {
'androidProcess':
'com.tencent.mm:tools'}, [
'python',
'c++',
'java']]
-
-
Process finished
with exit code
0
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true"> <use xlink:href="#csdnc-thumbsup"></use> </svg><span class="name">点赞</span> <span class="count"></span> </a></li> <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-Collection-G"></use> </svg><span class="name">收藏</span></a></li> <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-fenxiang"></use> </svg>分享</a></li> <!--打赏开始--> <!--打赏结束--> <li class="tool-item tool-more"> <a> <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg> </a> <ul class="more-box"> <li class="item"><a class="article-report">文章举报</a></li> </ul> </li> </ul> </div> </div> <div class="person-messagebox"> <div class="left-message"><a href="https://blog.csdn.net/qq_36502272"> <img src="https://profile.csdnimg.cn/6/7/5/3_qq_36502272" class="avatar_pic" username="qq_36502272"> <img src="https://g.csdnimg.cn/static/user-reg-year/2x/3.png" class="user-years"> </a></div> <div class="middle-message"> <div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_36502272" data-report-click="{"mod":"popu_379"}" target="_blank">橙子全栈测试</a></span> </div> <div class="text"><span>发布了105 篇原创文章</span> · <span>获赞 70</span> · <span>访问量 2万+</span></div> </div> <div class="right-message"> <a href="https://im.csdn.net/im/main.html?userName=qq_36502272" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信 </a> <a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a> </div> </div> </div>