pytest框架学习——大纲
import pytest
pytest落地
一、准备阶段
pip install pytest
命名规范
执行方式
pycharm右击执行
使用main函数
执行命令行
-s:打印信息
-v:更详细的信息
-m:执行标签
-x:遇到错误停止
--maxfail=2:错误超过两次就停止
-k:通过关键字执行
--help:帮助
二、独立脚本封装
封装之前的准备:
先在普通脚本中调通之后再进行封装
错误异常处理:
抛出异常:
try:
print('')
except:
print('')
finally:
print('异常后的处理')
修改脚本的检查点
脚本优化:
前置方法
setup:分为下面四个级别
_function:针对方法级别的,所有的方法执行之前都会执行一遍
_method:此级别是执行所有的方法之前都需要执行一遍:只针对类里面的方法
_class:此级别是在执行脚本之前只需要执行一遍,只针对class里面的方法
_model:所有的方法都只执行一次,不管在不在类里面
后置方法
teardown:也分为四个级别
_function:
_method: 此级别是执行所有的方法之后都需要执行一遍
_class: 此级别是在执行脚本之后只需要执行一遍
_model:
数据标签
@pytest.mark.parametrize('a,b,c',([1,2,3],[5,2,1]))
三、业务脚本封装
独立无序:
独立有序:
默认按照ASCLL码进行执行
@pyest.mark.run(order=1) #需要导入import ordering库
按照roder数值大小来控制执行顺序
@pytest.mark.skip('说明') #跳过这个参数
@pytest.mark.skipif(con=='猫眼',reason='不执行') #根据条件跳过,需要在脚本最上方赋值con
关联+传递独立参数:
@pytest.fixture():
放在需要参数话的方法上面就可以。
调用的时候只需把参数化的方法直接引用就可以(不要加“()”)
如果需要使用其他文件中的方法/类,需要引入:from 文件路径.文件名 import 方法名
全局变量:
通过配置文件实现:conftest.py:一般放在根目录
配置文件的方法想要使用直接调用方法名就可以
在当前脚本内部需要传递参数用@pytest.fixture(),偶发性使用其他脚本参数,可以引入该文件用@pytest.fixture()。
或者使用普通函数方法传递@pytest.mark.parametrize()
若是大批量的脚本需要使用的方法或数据,可以使用conftest.py公用文件,直接引用就可以
可以使用全局变量:globals_list(需要放在脚本最上方)
关联+传递多个参数:
一样是使用@pytest.fixture(),只是方法输出的值是列表或者字典之类的包含多个值
四、公共配置
使用pytest.ini文件
[pytest]
markers=
mo:这是第一个标签
addopts=-vs -s
testpaths=文件夹路径
五、DDT技术
数据结构:
列表
字典
json串
文件:
txt
打开TXT文件:
file = open('文件', 'r', encoding='utf-8')
读取文件:
file.read()
写入文件内容
file1 = open('文件', 'aw')
file1.write('内容')
关闭文件:
file.close()
file1.close()
csv
导入类库
import csv
打开csv文件
#打开文件
file = open('D:\\test.csv','r')
读取csv文件
#定义一个列表
data = []
# 读文件
txt = csv.reader(file)
#跳过首行
txt.__next__()
#取出内容
for i in txt:
print(type(i[1]),i[1])
# 内容放入一个列表中,方便引用
data.append(i[1])
print(data)
写入csv文件
file02 = open("文件",'ab')
writers = csv.writer(file02)
writers.writerows('需要写入的内容最好是列表')
关闭csv文件
file1.close()
file02.close()
excel
导入类库
import pandas as pd
第一次使用需要安装pandas库和xlrd库
读取Excel
file03 = pd.read_excel('文件路径')
提取相应行
cle = file03.loc[[1, 2]].values # 读取跳过首行的第1行或第2行,从0开始计算行数
提取相应列
list1 = file03['列名'].values # 获取到的类型是<class 'numpy.ndarray'>,需要我们转换为list使用
数据库:
导入类库
import pymysql
数据库链接
conn = pymysql.connect(
host="", # 域名
port=int(3306), # 端口号,需要是整形
user='', # 用户名
password='', # 密码
db='', # 链接的库名称
charset='utf8' # 如果查询有中文需要指定数据库编码,此处的编码是utf8不是utf-8
)
数据库访问
cursor = db.cursor()
提取内容
cursor.execute('SQL命令')
# 获取查询结果。cur.fetchall()
response = cur.fetchall()
#更改数据库信息:
cur.execute("SQL命令")
# 提交更改数据,修改的数据必须提交才能生效
conn.commit()
# 回滚所有操作:
conn.rollback() # 回滚所有更改(注意用的是conn)
# 4、使用完成之后需要关闭游标和链接
关闭数据库链接
cur.close() # 关闭游标
conn.close() # 关闭链接
六、测试报告
HTML报告
pytest 本身自带html格式的测试报告
导入类库:pytest-htnl
生成测试报告:pytest --html=文件名.html
allure可视化报告:
安装库:allure
生成测试结果文件:pytest --allureders=测试结果文件路径
生成报告:allure serve 测试结果文件路径(生成直接打开)
生成报告到本地:allure generate 测试结果文件路径
七、日志