pytest接口自动化测试框架

回忆一下之前学习的接口自动化框架:

先看一下目录:

 

所涉及的代码:

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("哈哈哈哈")

5.明天写文件的跑批

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值