python怎么搭建接口测试框架_接口测试自动化基本框架搭建

news/2024/7/8 2:38:52

接口测试基本框架搭建(common部分)

项目基本结构

1.common:封装的各种处理的方法

2.conf:配置文件

3.data:用例数据

4.logs:日志文件

5.reports:测试报告

6.testcases:封装测试用例类

7.runner.py:启动文件

4e4bc9b7ed3372e47d88a47d70d0df03.png

**

common-----------handle_path

处理项目路径,其他模块只需导入此模块对象

```python

import os

#根路径

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 测试用例的目录路径

CASE_DIR = os.path.join(BASE_DIR,'testcase')

# 测试报告的目录路径

REPORT_DIR = os.path.join(BASE_DIR,"reports")

# 日志目录的项目路径

LOG_DIR = os.path.join(BASE_DIR,"logs")

# 用例数据的项目路径

DATA_DIR = os.path.join(BASE_DIR,"data")

# 配置文件目录的路径

CONF_DIR = os.path.join(BASE_DIR,"conf")

common-----------myddt

对原生ddt进行一些修改,用于第三方测试报告展示用例描述,修改后可显示用力描述

```python

for name, func in list(cls.__dict__.items()):

if hasattr(func, DATA_ATTR):

for i, v in enumerate(getattr(func, DATA_ATTR)):

test_name = mk_test_name(name, getattr(v, "__name__", v), i)

# 源码

# test_data_docstring = _get_test_data_docstring(func, v)

# 修改

#----start----

if v.get("title"):

test_data_docstring =v["title"]

else:

test_data_docstring = _get_test_data_docstring(func, v)

#----end------

common-----------handle_logs

设置日志文件的等级(配置文件),按天进行记录,设置输出格式

import logging

from logging.handlers import TimedRotatingFileHandler

from common.handle_path import BASE_DIR,LOG_DIR

import os

from common.handle_config import conf

file_path = os.path.join(LOG_DIR, conf.get("logging","log_name"))

def create_logger():

#创建日志收集器

log = logging.getLogger("jiaru")

#设置收集器等级

log.setLevel(conf.get("logging","level"))

#创建日志输入渠道

fh = TimedRotatingFileHandler(file_path, when='d',

interval=1, backupCount=7,

encoding="utf-8")

#设施文件输出等级

fh.setLevel(conf.get("logging","fh_level"))

#添加到收集器中

log.addHandler(fh)

# 4、设置日志输出格式

formatter = "%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s"

mate = logging.Formatter(formatter)

fh.setFormatter(mate)

return log

log = create_logger()

common-----------handle_excel

处理excel文件的读取以及写入

import openpyxl

class excel:

def __init__(self,file_name,sheet_name):

self.file_name = file_name

self.sheet_name = sheet_name

def open_excel(self):

# 第一步:将excel文件加载到一个工作簿对象中

self.wb = openpyxl.load_workbook(self.file_name)

# 第二步:选择文件中的表单

self.sh = self.wb[self.sheet_name]

def read_data(self):

"""读取数据"""

self.open_excel()

#数据放到列表里面(以行区分)

res = list(self.sh.rows)

#遍历出第一行当作key

title = []

for i in res[0]:

title.append(i.value)

cases_data = []

#遍历其他行当作value

for o in res[1:]:

data = []

for p in o:

data.append(p.value)

r = dict(zip(title,data))

cases_data.append(r)

return cases_data

def write_data(self, row, column, value):

"""写数据"""

self.open_excel()

self.sh.cell(row=row, column=column, value=value)

self.wb.save(self.file_name)

commom-----------handle_config

处理配置文件

import os

from configparser import ConfigParser

from common.handle_path import CONF_DIR

class Config(ConfigParser):

def __init__(self, filename, encoding='utf-8'):

super().__init__()

self.read(filename, encoding=encoding)

# 创建一个配置文件解析器

conf = Config(os.path.join(CONF_DIR, "config.ini"))

原文链接:https://blog.csdn.net/weixin_49971207/article/details/108041729


http://www.niftyadmin.cn/n/3528584.html

相关文章

mysql数据库还原myl_MySQL帐户管理

MySQL用户帐户管理这一部分我们将会讨论如何为我们的MySQL服务器客户端设置帐户。我们将会讨论下面的一些问题:1在MySQL中使用的帐户的用户以及密码的含义并与我们在操作系统中使用的用户以及密码进行比较2如何设置新的帐户以及删除已经存在的帐户3如何更改密码4安全…

mysql innodbdatahomedir_mysql homedir迁移

随着数据库的增长,innodb文件和日志文件会越来越大,如果是默认安装的mysql,这些文件一般是放在 /usr/lib/mysql下面进行转移:1,安全关闭mysqlmysqladmin -u root -p shutdown2,复制mysql文件夹,…

python分类器实现_Python实现基于SVM的分类器的方法

本文代码来之《数据分析与挖掘实战》,在此基础上补充完善了一下~代码是基于SVM的分类器Python实现,原文章节题目和code关系不大,或者说给出已处理好数据的方法缺失、源是图像数据更是不见踪影,一句话就是练习分类器(?㉨?メ)源代…

最全的mysql 5.7.13_MySQL_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐!,linux环境Mysql 5.7.13安装教程分 - phpStudy...

最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐!linux环境Mysql 5.7.13安装教程分享给大家,供大家参考,具体内容如下1系统约定安装文件下载目录:/data/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置&…

java滑块_Java Swing JSlider滑块的实现示例

1. 概述JSlider,滑块。以图形方式在有界区间内通过移动滑块来选择值的组件。滑块可以显示主刻度标记以及主刻度之间的次刻度标记。刻度标记之间的值的个数由 setMajorTickSpacing(int) 和 setMinorTickSpacing(int) 来控制。刻度标记的绘制由 setPaintTicks(boolean…

java 本地事务_java事务(二)——本地事务

本地事务事务类型事务可以分为本地事务和分布式事务两种类型。这两种事务类型是根据访问并更新的数据资源的多少来进行区分的。本地事务是在单个数据源上进行数据的访问和更新,而分布式事务是跨越多个数据源来进行数据的访问和更新。在这里要说的事务是基于数据库这…

fitnesse java_从Fitnesse中学习Java单元测试

从第一次知道Fitnesse这个集成测试工具到现在也已经差不多有2年多的时间了。在这个期间把Fitnesse的源码也算是反反复复阅读了很多遍,算是对其实现的原理和方法有所了解。在最近一次对Fitnesse最新版本代码的研究中我发现,Fitnesse除了是一个很好的开源集…

java 获得basepath_JavaWeb项目获取绝对路径basePath

1. freemarker获取系统相对路径方式spring-mvc.xml 中配置其中是关键。ftl页面中设置首页js文件中获取pathvar base document.getElementById("base").href;// 与后台交互_send function(async, url, value, success, error) {$.ajax({async : async,url : base /…