首页 > 数据库 >Python+requests+Pytest+logging+allure+pymysql框架详解

Python+requests+Pytest+logging+allure+pymysql框架详解

时间:2024-04-04 17:33:22浏览次数:25  
标签:__ logging name Python 环境变量 allure logger data gen

一、框架目录结构

  • 1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言 数据库断言 前置sql等方法;
  • 2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据 图片数据等;
  • 3)testcases目录用来存放测试用例,一个python文件对应一个接口模块的测试用例,不同接口分别别多个不同的python文件;
  • 4)outputs里有reports和logs,report目录用来存放测试报告,报告是HTML格式的;logs是存放框架日志的;
  • 5)run.py是用来执行所有接口用例的入口文件;

二、框架结构代码图解

在这里插入图片描述

三、各文件内容详解

tools扩展封装类详解

handle_path.py :文件路径处理

from pathlib import Path

log_path = Path(__file__).absolute().parent.parent/"outputs"/"logs"/"mytest.log"

# excel表格的路径处理
exc_path = Path(__file__).absolute().parent.parent /"datas" / "testcase_mall.xlsx"

# 上传文件 路径
pic_path = Path(__file__).absolute().parent.parent /"datas"




handle_excel.py:读取excel文件内容


from pathlib import Path
from openpyxl import load_workbook

def read_data(exc_path,sheetname):
    """
    这是读取excel表格函数
    :param exc_path: 用例文件的路径
    :param sheetname: 用例表单的名字
    :return:
    """
    wb = load_workbook(exc_path)
    sh = wb[sheetname]
    cases = list(sh.values)  # 所有的用例的列表  [(第一行-title),(第二行用例),(),()]
    title = cases[0] # 得到标题行
    list_case = []
    for case in cases[1:]:
        data = dict(zip(title,case))  # 第一条用例的字典
        list_case.append(data)  # 每一条用例追加到列表里。
    return list_case

if __name__ == '__main__':
    exc_path = Path(__file__).absolute().parent.parent /"datas" / "testcase_mall.xlsx"
    print(read_data(exc_path, "登录"))

envi_data.py:存储环境变量



# 这个类就是为了存储环境变量 实现环境变量的共享的
class EnviData:
    pass

handle_replace.py
检查excel读取的内容是否需要替换变量,
需要替换变量,先提取需要替换的变量名,
再查通过需要替换的变量名在环境变量中查询对应的值
替换变量的值并返回。

"""
1、def封装
2、参数化
3、返回值: 最终要拿到替换后的字符串 ---  头部 参数 要用于发送接口测试的
4、加上日志: 但凡你想确认数据结果的地方 都可以加上日志
5、因为有些接口不需要做数据提取,所以判空处理:
6、异常捕获: 因为有可能环境变量里没有这个属性名 和属性值

"""
import re

import allure
from loguru import logger
from tools.envi_data import EnviData
from tools.handle_generate import GenData


@allure.step("替换占位符变量")
def replace_mark(str_data):
    while True:
        if str_data is None:
            return
        result = re.search("#(.*?)#",str_data)
        if result is None:  # 如果没有占位符 就是None 跳出循环
            break
        mark = result.group()  # 结果是  #prodId# --要被替换的子字符串| #gen_unregister_phone()#
        logger.info(f"要被替换的子字符串:{
     mark}")
        if "()" in mark:
            fun_name = result.group(1)  # 第一个分组的值 结果是 gen_unregister_phone()
            logger.info(f"要提取环境变量的函数名:{
     fun_name}")
            # 通过eval拖引号之后,不可以直接GenData().gen_unregister_name(),要导包
            gen_data = eval(f'GenData().{
     fun_name}')  # 接口函数的返回值结果-生成的数据
            logger.info(f"生成的随机的数据是:{
     gen_data}")
            # 1、存数据到环境变量里 -- 类属性的名字 函数名去掉()
            var_name = fun_name.strip("()")   # 结果是 gen_unregister_phone
            setattr(EnviData,var_name,gen_data)   # 属性名:gen_unregister_phone 属性值: gen_data
            logger.info(f"环境变量的属性值:{
     EnviData.__dict__}")
            # 2、完成第一条的参数的替换  用刚刚生成的数据替换
            str_data = str_data.replace(mark,str(gen_data))
            logger.info(f"替换完成后的字符串是:{
     str_data}")
        else:
            var_name = result.group(1) # 第一个分组的值 结果是 prodId
            logger.info(f"要提取环境变量的属性名:{
     var_name}")
            try:
                var_value = getattr(EnviData,var_name)  # 结果 : 7717--int类型
            except AttributeError as e:
                logger.error(f"环境变量里不存在这个属性:{
     var_name}")
                raise e
            logger.info(f"要提取环境变量的属性值:{
     var_value}")
            str_data = str_data.replac

标签:__,logging,name,Python,环境变量,allure,logger,data,gen
From: https://blog.csdn.net/qq_35283902/article/details/137240935

相关文章

  • Python从0到100(十):Python集合介绍及运用
    一、集合定义定义:由不同元素组成的集合,集合是一组无序排列可hash值,可作为字典的key。特性:集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,无须纠结于集合中的单个值。(1、不同元素组成2、无序3、集合中的元素必须是不可变类型)二、创建集合在Python中......
  • Python常用算法思想--递归算法思想详解【附源码】
    递归算法能够重复性的将问题分解为同类的子问题,然后解决这些子问题,最终达到解决最开始的问题为目的。以下从解决“阶乘”问题、“汉诺塔”问题、“斐波那契数列”问题、“最大公倍数和最小公约数”问题、“小球弹跳”、“深度优先”与“广度优先”问题等六个经典递归算法的案例......
  • 使用 Python 和 TensorFlow 构建深度人脸检测模型
    在本教程中,我们将逐步介绍使用Python和TensorFlow构建用于人脸检测的深度学习模型的过程。人脸检测是许多计算机视觉应用的重要组成部分,包括人脸识别、监控和图像理解。我们将利用卷积神经网络(CNN)和VGG16架构的强大功能来完成此任务。1.设置和数据收集1.1安装......
  • 使用 Python 构建第一个 CNN 机器学习模型的完整指南
    在这篇博文中,我们将逐步介绍如何使用Python构建第一个卷积神经网络(CNN)机器学习模型。由于CNN能够捕获数据中的空间层次结构,因此被广泛用于图像识别和分类任务。第1步:导入必要的库首先,让我们导入构建CNN模型所需的库:importnumpyasnpimportmatplotlib.pyplo......
  • Allure测试报告
    allure安装Mac安装方式1brewinstallallure2pipinstallallure-pytestWindows安装方式1https://github.com/allure-framework/allure2/releases2下载解压后将allure.bat添加进系统环境变量中3pipinstallallure-pytestallure特性分析  allure运行   ......
  • python中*args和**kwargs的理解
    python中*args和**kwargs的理解在Python中,*args和**kwargs是两种用于函数定义的参数,它们允许函数接受不定数量的参数。这种特性在需要创建灵活的函数时非常有用,尤其是在事先不知道将要传递多少参数的情况下。1.*args(非关键字参数):*args用于函数定义中,它允许函数接......
  • 如何系统地学习Python(六)实践项目
    一、Web开发1、Flask框架使用Flask框架可以轻松构建简单的Web应用。下面是一个简单的示例,展示了如何使用Flask创建一个包含一个路由的Web应用。首先,确保已经安装了Flask框架:pipinstallflask接下来,创建一个Python脚本(例如app.py),并导入Flask模块:fromflaskimportFlask......
  • Python八字教程1简介&快速入门
    1简介&快速入门1.1简介https://github.com/china-testing/bazi是基于Python的八字排盘工具。它清晰看出冲刑合会、阴阳等关系,并有凝聚大师多年经验的评判。另有合婚、风水等功能。是目前市面功能最强大的免费开源八字排盘工具,适合具有编程基础者在电脑上使用。1.1.1帮助pyt......
  • python 推导式
    推导式说明推导式(Comprehensions)是Python中一种非常有用和灵活的工具,允许以简洁的方式从一个或多个迭代器快速创建数据结构。Python支持的推导式主要有四种:列表(List)推导式、字典(Dictionary)推导式、集合(Set)推导式和生成器(Generator)推导式。列表推导式用途:快速生成列表。语法:[返......
  • 【递推与递归】python例题详解
    文章目录1、递归实现指数型枚举2、递归实现排列型枚举3、递归实现组合型枚举4、简单斐波那契5、带分数6、翻硬币1、递归实现指数型枚举题目从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一......