Python—数据驱动(JSON、Yaml、CSV、Excel)
数据驱动:在自动化测试中,需要把测试的数据分离到JSON、Yaml等文件中。
一、JSON
其中json文件中写代码必须是双引号
step1:新建一个名为“数据驱动”的包,再在这个包里新建一个文件名为“login.json”文件,再建一个python file,名叫“opertationJson.py”的文件,如下图所示:
step2:在“login.json”文件中写入如下代码:
{ "login": {"username": "Lucy","password": "17166230"} }
假设我要读取:“17166230”
注意:冒号(:)后要空一格
step3:在“opertationJson.py”文件中写入如下代码:
1 import json 2 def readJson(): 3 return json.load(open(file="login.json",mode="r",encoding="UTF-8")) 4 print(readJson(),type(readJson())) 5 print(readJson()["login"]["password"])
运行结果如下:
{'login': {'username': 'Lucy', 'password': '17166230'}} <class 'dict'> 17166230 Process finished with exit code 0
二、Yaml
Yaml:是一个可读性高,用来表达数据序列化的格式。
Yaml是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
Yaml的配置文件后缀为.yml。如:login.yaml
Yaml对大小写很敏感,而且缩进表示层级关系,缩进不允许使用tab,只允许空格
Python操作Yaml文件需要单独安装第三方的库,安装的命令具体如下:
pip install pyyaml
step1:新建一个名为“数据驱动”的包,再在这个包里新建两个文件一个名为“login.yaml”,一个名为“data.Yaml”文件,再建一个python file,名叫“opertationYaml.py”的文件,如下图所示:
step2:在“login.yaml”文件中写入如下代码:
注意:冒号(:)后要空一格,而且这种形式一般都是字典型。
假设我要读取:“黛西”和“黛西西小店”
“data.Yaml”文件中写入如下代码:
注意:冒号(:)后要空一格,而且这种形式一般都是列表型。
假设我要读取:“黛西”和“Lucy”
step3:在“opertationYaml.py”文件中写入如下代码:
1 #假设我要读取:“黛西”和“黛西西小店” 2 import yaml 3 def readYaml(): 4 with open(file="login.yaml",mode="r",encoding="UTF-8") as f: 5 return yaml.safe_load(f) 6 print(readYaml(),type(readYaml())) 7 print(readYaml()["login"]["username"]) 8 print(readYaml()["ali"]["taobao"]["shop"]["name"]) 9 10 11 #假设我要读取:“黛西”和“Lucy” 12 import yaml 13 def readYamlList(): 14 with open(file="data.Yaml",mode="r",encoding="UTF-8") as f: 15 return list(yaml.safe_load_all(f)) 16 print(readYamlList(),type(readYamlList())) 17 print(readYamlList()[0]["login"]["username"]) 18 print(readYamlList()[1]["login"]["username"])
运行结果如下:
#假设我要读取“黛西”和“黛西西小店”,运行结果如下: {'login': {'username': '黛西', 'password': 17166230}, 'ali': {'taobao': {'shop': {'name': '黛西西小店'}}}} <class 'dict'> 黛西 黛西西小店 Process finished with exit code 0 #假设我要读取“黛西”和“Lucy”,运行结果如下: [{'login': {'username': '黛西'}}, {'login': {'username': 'Lucy'}}] <class 'list'> 黛西 Lucy Process finished with exit code 0
三、CSV
在Python中读取csv⽂件,直接使⽤标准库csv就可以的,在csv的库⾥⾯,读取⽂件的⽅式主要分为两种⽅式,字典或者是列表的⽅式来读取数据,下⾯分别展示这两种读取⽂件的⽅式:
3-1:列表
step1::新建一个名为“数据驱动”的包,再在这个包里新建一个文件名为“data.csv”,的文件,再建一个python file,名叫“csv学习.py”的文件,如下图所示:
step2:在“data.csv”文件中写入如下代码:
假设我要读取:第二,三行的内容
step3:在“csv学习.py”文件中写入如下代码:
1 import csv 2 def readCsvList(): 3 lists=[] #新建一个列表,将要提取的数据放到这个新列表里 4 with open(file="data.csv",mode="r",encoding="UTF-8") as f: 5 reader=csv.reader(f) #读取列表样式.reader() 6 next(reader) #不读取第一行username,password,city 7 for item in reader: 8 lists.append(item) 9 return lists 10 print(readCsvList())
运行结果如下:
[['黛西', '17166230', '中国西安'], ['Lucy', '17166230', '西安']] Process finished with exit code 0
3-2:字典
step1:和上面的一致
step2:和上面的一致
假设我要读取:第二,三行的内容
step3:在“csv学习.py”文件中写入如下代码:
1 import csv 2 def readCsvList(): 3 lists=[] 4 with open(file="data.csv", mode="r", encoding="UTF-8-sig") as f: #注意:encoding="UTF-8-sig" 5 reader=csv.DictReader(f) #读取字典样式.DictReader() 6 for item in reader: 7 lists.append(dict(item)) 8 return lists 9 print(readCsvList())
运行结果如下:
[{'username': '黛西', 'password': '17166230', 'city': '中国西安'}, {'username': 'Lucy', 'password': '17166230', 'city': '西安'}] Process finished with exit code 0
四、Excel
在Python中,操作Excel的文件需要使用第三方的库xlrd,需要单独安装,安装命令为:
pip3 install xlrd
step1:首先在桌面新建一个名为“data.xlsx”的Excel文件”,输入如下内容:
step2:在PyCharm里新建一个名为“数据驱动”的包,在这个包里新建一个python file,名叫“excel学习.py”的文件,再将step1里“data.xlsx”文件移入到“数据驱动”的包里,如下图所示:
假设我要读取:第二,三行的内容
step3:在“excel学习.py”文件中写入如下代码:
1 import xlrd #引入xlrd包 2 #读取行 3 def readCsvList(): 4 lists=[] 5 book=xlrd.open_workbook("data.xlsx") #打开Excel文件,存在book里(不用一定叫book,改成别的名字也可以,但是要记得下面一行的book也要替换) 6 sheet=book.sheet_by_index(0) #索引是0的是第一张表 7 for item in range(1,sheet.nrows): #按行读取,for循环就是输出所要求的行 8 lists.append(sheet.row_values(item)) #转换为表格形式 9 return lists 10 print(readCsvList()) 11 #读取列 12 def readCsvList(): 13 lists=[] 14 book=xlrd.open_workbook("data.xlsx") 15 sheet=book.sheet_by_index(0) 16 for item in range(1,sheet.ncols): #按列读取 17 lists.append(sheet.col_values(item)) 18 return lists 19 print(readCsvList())
运行结果如下:
[['黛西', 17166230.0, '中国西安'], ['Lucy', 17166230.0, '西安']] [['password', 17166230.0, 17166230.0], ['city', '中国西安', '西安']] Process finished with exit code 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)