python——数据驱动
函数:
1、参数
形式参数:在定义函数时,函数里面的参数叫形式参数
实际参数:函数被调用的时候,给参数赋予的值叫实际参数
参数调用的注意事项:
默认参数:在定义函数的时候给形式参数指定了参数的值
def add(b,c):
d = b+c
print(d)
add (b = 3,c = 5)
add(1,2)
输出:
8
3
def add(b,c = 3):
d = b+c
print(d)
add(2)
add(b = 3 , c = 5)
输出:
5
8
动态参数
*:代表元组
**:代表字典
def func(*args,**kwargs):
print(args)
print(type(args))
print(kwargs)
print(type(kwargs))
func()
func([1,2,3])
func(a=1,b=2)
func(**{"name":"wuya","age":18})
func((1,2,3))
函数的返回值
return后面的值是函数的返回值,比如编写的函数输出的值其他函数需要,那么这个函数就需要把值返回
def login(username='wuya',password='admin'):
if username=='wuya'and password=='admin':
return 'abcd'
else:
return '账户或者密码错误'
def profile():
'''个人主页'''
if login()=='adcd':
print("欢迎访问主页信息")
def registry():
username=input('输入账户:\n')
password=input('输入密码:\n')
return username,password
print(registry())
username,password=registry()
print(username)
print(password)
输出结果:
wuya
输入密码:
admin
wuya
admin
内部函数
一些默认定义好的函数,直接使用,常用的有max(),min(),sum(),len(),type(),id()等等'''
list=[1,2,3,4,5,6]
print(max(list))
print(min(list))
输出结果:
6
1
匿名函数
func=lambda a,b:a+b
print(func(3,5))
func1=lambda a,b:a*b
print(func1(2,5))
输出结果:
8
10
列表推导式
list1=[x for x in range(10) if x>2]
print(list1)
list1=[x for x in range(100) if x%3==0 and x!=0]
print(list1)
输出结果:
[3, 4, 5, 6, 7, 8, 9]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
过滤函数filter
list4=filter(lambda a:a>2,[x for x in range(10)])
print(list(list4))
输出结果:
[3, 4, 5, 6, 7, 8, 9]
map:对所有的元素做同样的操作
list5=map(lambda a:a+10,[x for x in range(10)])
print(list(list5))
输出结果:
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
OS模块
在python中, os模块提供了对操作系统进行操作的接口。查看os模块使用的方法为dir(),查看该模块的帮助方法为help()。
import os
#获取当前级别目录
print(os.path.dirname(__file__))
base_dir=os.path.dirname(__file__)
#获取上级目录
base_dir=os.path.dirname(os.path.dirname(__file__))
print(os.path.join(base_dir,'函数','login.md'))
with open(os.path.join(base_dir,'函数','login.md'),'r') as f:
print(f.read())
print(os.path.join(base_dir,'data','login.txt'))
with open(os.path.join(base_dir,'data','login.txt'),'r') as f:
print(f.read())
时间模块
JSON 序列化与反序列化
序列化:把python对象转为json的字符串过程:dumps()
反序列化:把json字符串转为python字符串的过程:loads()
这里的对象指的是数据类型字典,元组,列表,我们经常使用的json模块的方法为:dumps(),loads(),dump(),load(),其中dump()和load()是对文件的操作以及处理
import json
dict1={"name":"wuya","age":18,"city":"xian","address":"陕西省"}
dict_str=json.dumps(dict1,indent=True,ensure_ascii=False)
print(type(dict1))
print(dict1)
print(type(dict_str))
print(dict_str)
str_dict=json.loads(dict_str)
print(type(str_dict))
print(str_dict)
list=[1,2,3,4,5]
list_str=json.dumps(list)
print(type(list_str))
print(list_str)
str_list=json.loads(list_str)
元组的序列化与反序列化:
元组序列化后的数据类型为字符串,但表现形式是列表,反序列后的数据类型为列表
tuple=(1,2,3)
tuple_str=json.dumps(tuple)
print(type(tuple_str))
print(tuple_str)
str_tuple=json.loads(tuple_str)
print(type(str_tuple))
print(str_tuple)
文件序列化中load()和dump()的用法:
需要先把数据写入到文件中,然后进行序列化和反序列化的操作。
序列化dump():把内容写道文件里面
反序列化load():从文件里面读取内容
import json
#写文件dump()
json.dump('hello world',open('data.txt','w'))
#读文件load()
print(json.load(open('data.txt','r')))
结果为:

数据驱动
自动化测试中,需要把测试的数据分离到JSON,YAML等文件中
1、首先需要安装yaml:pip install yaml
2、创建yaml文件data.yaml,文件具体内容如下:
3、yaml文件读取的方法为yaml.safe_load()
4、一般来讲yaml文件的返回类型为字典
login: 请输入你的登录账户
email:
login:
username: 2030004302@qq.com
实战练习1:
import yaml
def readYaml():
with open('data.yaml','r',encoding='utf-8') as f:
return yaml.safe_load(f)
print(readYaml())
print(type(readYaml()))
print(readYaml()['login'])
print(readYaml()['email']['login']['username'])
输出结果:
<class 'dict'>返回类型是字典
{'login': '请输入你的登录账户', 'email': {'login': {'username': '2030004302@qq.com'}}}
请输入你的登录账户
2030004302@qq.com
实战练习2:读取yaml文件返回列表类型的数据,读取方法为safe_load_all()。
import yaml
def readYaml():
with open('lists.yaml', 'r', encoding='utf-8') as f:
return list(yaml.safe_load_all(f))
print(readYaml())
print(type(readYaml()))
print(readYaml()[0]['login'])
print(readYaml()[1]['login'])
输出结果为:
[{'login': '请输入账户'}, {'login': '输入账户为空'}]
<class 'list'>
请输入账户
输入账户为空
数据存储之CSV
csv的读取有两种形式
1.列表的形式
2.字典的形式
创建CSV文件,内容如下:
username,password,text
ASDFzedf,sdzfxgty,请输入符合规范的邮箱
ASdzdf@sina.com,wedefr,账户密码错误
实战练习1:
import csv
#以字典类型读取csv数据
def readDictCsv():
lists=[]
with open('data.csv','r',encoding='utf-8') as f:
reader=csv.DictReader(f)
for i in reader:
lists.append(dict(i))
return lists
print(readDictCsv())
print(readDictCsv()[0]['text'])
print(readDictCsv()[1]['text'])
输出结果为:
[{'username': 'ASDFzedf', 'password': 'sdzfxgty', 'text': '请输入符合规范的邮箱'}, {'username': 'ASdzdf@sina.com', 'password': 'wedefr', 'text': '账户密码错误'}]
请输入符合规范的邮箱
账户密码错误
实战练习2:
#以列表类型读取csv文件
import csv
def readListCsv():
list1=[]
with open('data.csv','r',encoding='utf-8') as f:
reader=csv.reader(f)
next(reader)
for i in reader:
list1.append(i)
return list1
print(readListCsv())
print(readListCsv()[0][2])
print(readListCsv()[1][2])
------------
输出结果为:
[['ASDFzedf', 'sdzfxgty', '请输入符合规范的邮箱'], ['ASdzdf@sina.com', 'wedefr', '账户密码错误']]
请输入符合规范的邮箱
账户密码错误
浙公网安备 33010602011771号