回忆一下之前学习的接口自动化框架:
先看一下目录:
所涉及的代码:
1.对yaml文件的操作,来对不同py文件全局变量进行管理
import os
import yaml
from api_pytest.controller.log import loger
class Yamlutil():
def read_extract_yaml(self,key):
# 打开当前工作目录下的extract.yaml文件,以只读模式打开
with open(os.getcwd()+'/extract.yaml', mode='r', encoding='utf-8') as file:
value = yaml.load(stream=file,Loader=yaml.FullLoader)
loger.info("读取yaml文件中"+key)
return value[key];
def write_extra_yaml(self,data):
with open(os.getcwd()+'/extract.yaml', mode='a',encoding='utf-8') as file:
yaml.dump(data=data,stream=file,allow_unicode=True)
loger.info("写入yaml文件中"+data)
def clear_extract_yaml(self):
with open(os.getcwd()+'/extract.yaml', mode='w',encoding='utf-8') as file:
file.truncate()
loger.info("清空yaml数据")
if __name__=="__main__":
data={"key8n":"肖战"}
Yamlutil().write_extra_yaml(data)
a=Yamlutil().read_extract_yaml("key5n")
print(a)
2.封装请求,断言
import requests
import json
import jsonpath as jsonpath
import requests
# from baseclass.log import loger
from .log import loger
class Class_Base:
# get请求
def do_get(self, url, params=None, **kwargs):
res= requests.get(url, params=params, **kwargs)
loger.info(res.text)
loger.info(url)
return res
# post请求
def do_post(self, url, data=None, **kwargs):
res =requests.post(url, data=data, **kwargs)
loger.info(res.text)
loger.info(url)
return res
#put请求
def do_put(self, url, data=None, **kwargs):
res = requests.put(url, data=data, **kwargs)
loger.info(res.text)
return res
# 文本获取:断言校验的时候需要获取相应的文本,然后进行断言,推荐使用jsonpath
def get_text(self, text, key):
try:
text = json.loads(text)
values = jsonpath.jsonpath(text, '$..{}'.format(key))
# jsonpath获取的结果是以list格式保存,如果没有获取到返回False
if values:
if len(values) == 1:
return values[0]
else:
return values
return values
return values
except Exception as e:
print(e)
return False
3.对conftest的文件的使用
import pytest
import pymysql.cursors
from api_pytest.common.yaml_util import Yamlutil
@pytest.fixture(scope="function")
def connect_mysql():
# 前置操作
connection = pymysql.connect(
host="101..95", #IP地址
user="root",#用户名
password="888",#密码
database="test")#数据库
cursor = connection.cursor()#建立游标卡尺
sql5 = "select * from xiaozhan where name='王一博'"#编写sql语句。
cursor.execute(sql5)
a = cursor.fetchone() # 获取第一条符合条件的数据'''将符合条件的第一条数据获取出来并赋值给变量a。
b = cursor.fetchall() # 获取所有符合条件的数据```将符合条件的数据全部获取出来并赋值给变量b。
print(a)
print(b)
yield connection.close()
@pytest.fixture(scope="function")
def read_yaml():
Yamlutil().read_extract_yaml("token")
@pytest.fixture(scope="session")
def clear_yaml():
Yamlutil().clear_extract_yaml()
4.设置日志
import logging
from datetime import datetime
import os
# 创建logger对象
loger = logging.getLogger(__name__)
# 设置日志级别
loger.setLevel(logging.INFO)
# 设置控制台打印的对象
ch = logging.StreamHandler()
# 设置日志报错到文件的对象
# 拼接日志文件地址
# fileDir = "./Log" # 文件夹存储是按月存储,每个月会新增一个文件夹
dirName = datetime.strftime(datetime.today(),"%Y-%m") # 获取当前的年份月份
dirPath = os.path.dirname(__file__) # 获取当前文件的绝对路径
fileDir = os.path.join(dirPath, "") # 返回上级目录
fileDir = os.path.join(fileDir, "../Log") # 进入Log目录
fileDir = os.path.join(fileDir,dirName) # 进入当前的月份目录
print(fileDir)
os.makedirs(fileDir, exist_ok=True)
fileName = datetime.strftime(datetime.today(),"%Y-%m-%d")
a = os.path.join(fileDir,f"{fileName}.log")
ch2 = logging.FileHandler(filename=a, encoding="utf8")
ch2.setLevel(logging.INFO)
# 设置日志格式变量
formater = logging.Formatter("%(asctime)s--%(name)s--%(levelname)s--%(message)s")
# 将日志格式放到ch对象里面
ch.setFormatter(formater)
ch2.setFormatter(formater)
# 添加控制台打印到loger对象
loger.addHandler(ch)
# 添加文件保存的loger对象
loger.addHandler(ch2)
if __name__ == "__main__":
loger.info("哈哈哈哈")