一、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