测试学习记录,仅供参考!
Python 基础知识
学习了解 API 接口自动化测试所需要的 python 基础知识点,此处仅简单介绍;
八、文件操作
5、YAML 文件
Yaml是一种简洁的非标记语言,Yamll以数据为中心,使用空白、缩进、分行组织数据,从而使得表示更加简洁意读。由于实现简单,解析成本很低,Yaml特别适合在脚本语言中使用,Yaml是专门用来写配置文件的语言,非常简洁强大,远比JSON格式方便,一般使用 yaml 文件做数据配置比较多,但也有做参数化的,在接口自动化测试中,可用作配置文件,配置一些服务器域名、mysql配置、登录信息、toekn等数据信息,方便快速读取,像是接口的一些相关信息,都是用 yaml 文件去管理的;
建议参考学习:使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 23--数据驱动--参数化处理 Yaml 文件
Yaml 文件语法特点(规则):
1、大小写敏感,英文字母区分大小写;
2、使用缩进表示层级关系;
3、缩进时不允许使用Tab键,只允许使用空格;
4、缩进的空格数目不重要亦不固定,只需要相同层级的元素左侧对齐即可;
5、文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
6、key值前面带**-**表示这组数据是一个列表类型,两组数据的-属于同级关系的话,数据存在一个列表里面;
7、Yaml 文件中的注释标识符为 # 井号,在所在行最前面增加标识符 # 即为注释本行;
Yaml 文件数据结构
对象:键值对的集合(简称 "映射或字典"),包含key和 value;
键值对中间使用冒号 ":" 结构表示,冒号与值之间需用空格分隔;
key:描述对象属性的字符串;
value:可以是纯量、对象结合、数组;
数组:一组按序排列的值(简称 "序列或列表")
数组前加有 "-" 符号,以 - 开头的行表示构成一个数组,符号与值之间需用空格分隔;
纯量(scalars):单个的、不可再分的值(例如:字符串、bool值、整数、浮点数、时间、日期、Null等)
yaml文件与json文件类似,或可参考:https://www.ruanyifeng.com/blog/2016/07/yaml.html
pyyaml文档 https://pyyaml.org/wiki/PyYAMLDocumentation
安装第三方库;例如:pyyaml
使用前需要先导包:import yaml
pip install pyyaml
解析数据
# 导包
import yaml
# 定义数据一个数组--实际就是一个字符串
data = '''
- Cat
- Dog
- Goldfish
'''
# 打印--解析yaml.safe_load()--会把数据转换成一个列表
print(yaml.safe_load(data))
输出运行结果:
['Cat', 'Dog', 'Goldfish']
把python格式转换成yaml文件--字典→yaml格式字典;
# 导包
import yaml
# 定义字典
data = {
'username':'root',
'password':'123456'
}
# 打印--使用yaml.safe_dump()方法--转换成yaml数据
print(yaml.safe_dump(data))
输出运行结果:
password: '123456'
username: root
写入文件
# 导包
import yaml
# 定义字典
data = {
'username':'root',
'password':'123456'
}
# 使用with open--yaml文件名、权限w、编码格式--文件流
with open('data.yaml', mode='w',encoding='utf8') as outfile:
# 写入文件
yaml.dump(data,outfile)
# yaml.safe_dump(data,outfile)
运行→成功后(当前目录下)→新生成一个"data.yaml"文件→打开查看:

# 导包
import yaml
# 定义字典
data = {
'testdata':[1,2,3],
'username':'root',
'password':'123456'
}
# 使用with open--yaml文件名、权限w、编码格式--文件流
with open('data.yaml', mode='w',encoding='utf8') as outfile:
# 写入文件
yaml.dump(data,outfile)
# yaml.safe_dump(data,outfile)
运行后查看文件:

读取文件
# 导包
import yaml
# 使用with open--yaml文件名、权限r、编码格式--文件流
with open('data.yaml', mode='r',encoding='utf8') as outfile:
# 读取文件--使用yaml.safe_load()
yaml_out = yaml.safe_load(outfile)
# 打印
print(yaml_out)
输出运行结果:
{'password': '123456', 'testdata': [1, 2, 3], 'username': 'root'}
6、Excel 文件处理
建议参考学习:使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 24--数据驱动--参数化处理 Excel 文件
九、模块包导入等
模块和包
在 Python 的标准安装中,包含了一组自带的模块,这些模块被称为"标准库";例如常用的 math、random、datetime、os、json 等等;除此之外,还有很多的第三方模块,例如常见的 pymysql、numpy、requests、pandas 等等;通过这些强大的扩展库,形成了 Python 的强大"生态圈"。
模块的概念
一般情况下基本上是用 python 解释器来编程,如果是从 Python 解释器退出再进入,那么定义的所有的方法和变量就都消失了;为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。
Python 中的模块(Module)是一个包含 Python 定义和语句的文件,其实就是以 .py 结尾的 Python 文件,模块里面可以定义类,变量,函数,以及可执行的代码;通过模块,可以将代码组织成可重用的单元,便于管理和维护。只要带入相对应的模块,就可以直接使用这些模块的功能。
模块的作用
- 代码复用:将常用的功能封装到模块中,可以在多个程序中重复使用。
- 命名空间管理:模块可以避免命名冲突,不同模块中的同名函数或变量不会互相干扰。
- 代码组织:将代码按功能划分到不同的模块中,使程序结构更清晰。
模块导入有两种方法:
方法一:import 语句
import 模块名1[ as 别名1 ], 模块名2[ as 别名2 ], ..., 模块名n[ as 别名n ]; 导入整个模块;
备注:这里导入的整个模块内的所有成员,包括变量、函数、类等。
方法二:from ... import 语句
from 模块名 import 成员名1[ as 别名1], 成员名2[ as 别名2 ],...,成员名n[ as 别名n ]; 导入模块中指定成员;
备注:成员可以是变量、函数、类等。
自定义模块
Python 中已经有很多的内置模块,以及也有很多的第三方优秀模块,我们直接导入使用即可。
当然我们有时候也需要自己定义一些自定义模块,来实现我们的项目的功能。
Python 包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
对于一个需要实际应用的模块而言,往往会具有很多程序单元,包括变量、函数和类等,如果将整个模块的所有内容都定义在同一个 Python 源文件中,这个文件将会变得非常庞大,显然并不利于模块化开发。
为了更好地管理多个模块源文件,python 提供了包的概念;那么问题来了,什么是包呢?
- 从物理上看,包就是一个文件夹,在该文件夹下包含了一个 init.py 文件,该文件夹可用于包含多个模块源文件。
- 从逻辑上看,包的本质依然是模块。
目录只有包含一个叫做 init.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
最简单的情况,放一个空的 :file:init.py就可以了。当然这个文件中也可以包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。
用户可以每次只导入一个包里面的特定模块;
包还提供一个额外的属性__path__。这是一个目录列表,里面每一个包含的目录都有为这个包服务的__init__.py,你得在其他__init__.py被执行前定义哦。可以修改这个变量,用来影响包含在包里面的模块和子包。不过这个功能并不常用,一般用来扩展包里面的模块。
使用Python包的方法是要加上包名
导入整个模块:
import 包名.模块名
导入模块中指定成员:
from 包名 import 模块名.成员名
其他,烦请自行学习了解。
未完待续。。。