当前位置: 首页 > news >正文

接口自动化测试框架搭建全部过程

思想:
    1、基本目录的搭建
        report:静态输出目录(报告或者日志)
        
        data:静态输入目录(可以存放Excel数据,被读取的一些数据)
        
        utils:实用方法层(这里存放的是项目的公共方法,一般拿到别的项目可以直接使用,列如:读取Excel中的数据,连接数据库,)
        
        apis:接口请求层(这里封装的方法一般都是和项目有关系,列如:发送post请求,发送get请求,登录接口,注册接口,支付接口,加入购物车接口)
        
        testcases:用例目录(用来存放项目中涉及到的用例,用例即包含单接口用例,也包含关联接口用例,管理目录时,也可以通过目录分层结构管理)
        
        conftest:这里存放的是fixture,只对文件的所在目录生效,如果只是单目录用例那么可以在根目录下创建,如果分为分层目录结构的用例,那么为了
                 
                 满足当前目录的用例,可以在该目录下创建一个conftest,用来存放fixture,fixture是pytest框架的根髓
        
        pytest.ini:是pytest的配置文件,可用来存放一些运行配置项,如:-v -s ;或者配置日志输出渠道;该文件的具体配置,可百度学习
        
    2、接口框架的重要思想=======》金字塔的配置
        
        ①report=data---》utils=apis=---》conftest---》pytest.ini---》testcases
        
        ②以上相当于金字塔结构,从左至右为从底部到顶部的过程
        
        ③金字塔精髓之处在于,(上部依赖底部,底部不依赖于上部),举一个列子,(testcases中的用例,需要调用apis目录中的接口请求方法,而apis不会去主动调用testcases),所以
        
            在工作中,我们如果修改了某一个文件,需要往上找,看看谁调用了这个文件,相对应的进行修改

##########################utils中的db.py的封装
import pymysql#
# # 1. 连接数据库
# conn = pymysql.connect(
#     host='服务器地址',
#     port=3306,
#     user='用户名',
#     password='密码',
#     db='数据库名'
# )
# # 2. 建立游标
# cur = conn.cursor(pymysql.cursors.DictCursor)  # 没有s 有括号
#
# # 3. 执行sql
# # 3.1 执行查询
# cur.execute("SELECT * FROM cardInfo WHERE cardNumber='hzc_00011';")
# conn.commit()
# # 获取结果
# result = cur.fetchall()
# # result = cur.fetchone() # 取一条少一条
# # cur.fetchmany(3)
# print(result)
#
# # 3.2 执行修改
# # cur.execute("DELETE FROM cardInfo WHERE cardNumber='hzc_00011';")
# # conn.commit()
#
# # 4. 关闭
# cur.close()
# conn.close()class DB(object):def __init__(self):self.conn = pymysql.connect(host='服务器地址',port=3306,user='用户名',password='密码',db='数据库名',autocommit=True)self.cur = self.conn.cursor(pymysql.cursors.DictCursor)    #添加此配置项,默认commit了,即建立游标def do_sql(self, sql):print('执行sql', sql)self.cur.execute(sql)    #执行sql语句# self.conn.commit()    return self.cur.fetchall()    #返回查询到的所有结果class FuelCardDB(DB):    #继承DB"""执行具体的sql语句"""def del_card(self, card_number):"""执行删除语句"""self.do_sql(f"DELETE FROM cardInfo WHERE cardNumber='{card_number}'")def check_card(self, card_number):"""执行查询语句"""result = self.do_sql(f"SELECT * FROM cardInfo WHERE cardNumber='{card_number}';")if result:return Truereturn Falsedef add_card(self, card_number):"""执行添加语句"""result = self.check_card(card_number)if not result:self.do_sql(f"INSERT INTO cardInfo (cardNumber) VALUES ('{card_number}');")

#######################api文件的封装

思想:该文件可以将不同的请求方法,不同的请求地址接口,封装成一个类,然后在用例层用到了哪一个就去调取哪一个
以下实列是添加加油卡项目

import requestsDATA_SOURCE_ID = "bHRz"class Api(object):def __init__(self, base_url):self.url = base_url + '/gasStation/process'self.session = requests.session()def add_fuelcard(self, card_number):json_data = {"dataSourceId": DATA_SOURCE_ID, "methodId": "00A", "CardInfo": {"cardNumber": card_number}}res = self.session.post(self.url, json=json_data)print(res.text)return resdef bind_card(self, user_name, id_type, id_number, card_number):json_data = {"dataSourceId": DATA_SOURCE_ID,"methodId": "01A","CardUser": {"userName": user_name,"idType": id_type,"idNumber": id_number},"CardInfo": {"cardNumber": card_number}}res = self.session.post(self.url, json=json_data)print(res.text)return resdef query_card(self, user_id, card_number):#dataSourceId=bHRjczEx&userId=1039&cardNumber=1111111111&methodId=02Aparams = {"dataSourceId": DATA_SOURCE_ID,"methodId": "02A","userId": user_id,"cardNumber": card_number}res = self.session.get(self.url, params=params)print(res.text)return res

思想:该文件下主要封装的是fixtures方法,即为了简化用例层步骤,可以将操作前提步骤和过程步骤在此文件下完成,在该文件下
有一个base_url,这个是安装的插件,安装方法为pip install pytest-base-url

import pytest
from utils.db import FuelCardDB
from apis.fuelcard_api import Api@pytest.fixture(scope='session')
def db():#实例化一个对象return FuelCardDB()@pytest.fixture(scope='session')
def api(base_url):#实例化一个对象,并将配置文件中的base_url传给Api层的方法return Api(base_url)@pytest.fixture
def del_card(db):def _del_card(card_number):db.del_card(card_number)yielddb.del_card(card_number)return _del_card

#######################pytest.ini文件的封装

思想:上述已说明,该文件为pytest框架的配置文件,即运行用例时会默认执行该文件操纵,注意表达格式,conftest文件和api文件中
都用到了base_url,就是这里的base_url,目的是当服务器地址变了之后,不用去接口层去一一修改服务器地址,只需要修改这里的地址就行,但是
如果接口的请求地址变了,就要去一一修改了,毕竟针对不同的请求地址封装了不同的方法

[pytest]
addopts = -s --html=reports/report.html --self-contained-html
testpaths = testcases
base_url = http://***.***.***.***:***

#######################总结

①接口的主要框架基本已经出来了,当我们需要其他方法时,可以再去相对应的添加,例如读取excel表格数据的方法,可以再封装到utils目录下

②如果需要公共的方法时,可以去百度查一下别人写好的模块,说实话自己写半天也不如人家封装好的实用性更高,我们的目标就是会使用别人封装好的方法就OK了

③如果涉及到自己的业务模块,就要自己去封装了,例如上面所说的,api文件,conftest文件,都是和业务相关的

④对于初级的自动化测试人员,最主要的不是去写框架,而是去运用好别人写好的框架,来设计用例,写用例

⑤一条用例的基本流程:测试环境准备、测试数据准备、发送数据、获取数据响应结果、设置断言、环境清理

相关文章:

接口自动化测试框架搭建全部过程

思想: 1、基本目录的搭建 report:静态输出目录(报告或者日志) data:静态输入目录(可以存放Excel数据,被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法,一般拿到别…...

SQL学习(十)--DML_多表查询(针对数据表记录的join查询、子查询的操作)

目录 1. 多表查询 -- 内连接查询 1.1 显示内连接 1.2 隐式内连接 2. 多表连接 -- 外连接查询...

Docker容器部署

Docker容器部署 为什么使用Docker什么是Docker类比用途 Docker基于Windows集成IDEA在window上安装docker设置Docker配置IDEA连接Docker测试启动SpringBoot应用测试 Docker基于Linux集成IDEA连接宿主机redis服务连接Docker中redis服务 为什么使用Docker 在和前端联调的过程中&a…...

26岁转行网络安全,成功上岸安全开发!

前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…...

涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov8,内存更小、效率更高,秒杀Adam(W)

1.Lion优化器介绍 论文:https://arxiv.org/abs/2302.06675 代码:automl/lion at master google/automl GitHub 1.1 简单、内存高效、运行速度更快 1)与 AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半; 2)由于 Lion…...

5年测试经验,自动化都不会?月薪11K都难拿....

我接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的同行。 我从事软件自动化测试已经近十年,接触过底层服务端、API 、Web、APP、H5 等等,对自动化算是比较了解…...

低代码平台名声臭,用起来却真香——60%开发者不敢承认

群体盲从意识会淹没个体的理性,个体一旦将自己归入该群体,其原本独立的理性就会被群体的无知疯狂所淹没。——《乌合之众》 不知道从什么时候开始,“低代码不行”的论调充斥着整个互联网圈子,csdn、掘金、知乎、B站、脉脉……到处…...

PHP 的代码简洁之道(Clean Code PHP)

介绍 Robert C.Martin’s 的 软件工程师准则 Clean Code 同样适用于 PHP。它并不是一个编码风格指南,它指导我们用 PHP 写出具有可读性,可复用性且可分解的代码。 并非所有的准则都必须严格遵守,甚至一些已经成为普遍的约定。这仅仅作为指导方…...

delphi在两个窗口间用消息通讯

用SendMessage在窗口间通讯: 发送方 var HWD: THandle; str1,str2:string; sData: TCopyDataStruct; begin HWD:FindWindow(nil,pchar(aaaaaa)); // Integer(pchar(self.Edit2.Text)) str2:我来了中玉人; str1:我来了中玉人; sData.cbDa…...

如何高效提高倾斜摄影三维模型顶层合并的技术方法分析

如何高效提高倾斜摄影三维模型顶层合并的技术方法分析 1、倾斜摄影三维模型顶层合并 1.1倾斜摄影三维模型是一种基于倾斜摄影技术,通过多个角度拍摄同一区域的影像,利用计算机图像处理和三维重建技术生成的三维地理信息数据。由于一个大区域可能需要多块…...

【科普】PCB为什么常用50Ω阻抗?6大原因

在PCB设计中,阻抗通常是指传输线的特性阻抗,这是电磁波在导线中传输时的特性阻抗,与导线的几何形状、介质材料和导线周围环境等因素有关。 对于一般的高速数字信号传输和RF电路,50Ω是一个常用的阻抗值。 为什么是50Ω&#xff1f…...

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录 一、前言二、Linux U-boot 相关命令(1)help 命令(2)printenv 命令(3)setenv 函数(4)saveenv 函数 三、tftp启动linux内核步骤(1)进入u-boot模式&…...

使用Serv-U搭建FTP服务器并公网访问【内网穿透】

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能…...

后端大厂面试总结大全六

目录: 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用,导致Transactional失效 举…...

2023五一数学建模A题B题C题思路模型代码

占个位置吧,开始在本帖实时更新五一数学建模赛题思路代码,文章末尾获取! 持续为更新参考思路 赛题思路 会持续进行思路模型分析,下自行获取。 A题思路: (比赛开始后第一时间更新) B题思路…...

Redis --- 入门、数据类型

一、前言 1.1、什么是Redis Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。 基于内存存储,读写性能高适合存储热点…...

超级详解MySQL执行计划explain

1、什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构…...

C++流操作

C引入了ostringstream、istringstream、stringstream这三个类&#xff0c;要使用他们创建对象就必须包含<sstream>这个头文件。 在C中标准库提供三个类用于文件操作&#xff0c;统称为文件流类&#xff1a; ifstream&#xff1a;专用于从文件中读取数据&#xff1b;ofs…...

Django连接Redis、数据库、mongodb密码明文存储问题以及方案

文章目录 DDjango连接Redis、数据库、mongodb密码明文存储问题以及方案需求背景常见解决方案Django中redis、数据库密码明文加密存储方案 DDjango连接Redis、数据库、mongodb密码明文存储问题以及方案 需求背景 密码不应以明文出现在代码或配置文件中。 常见解决方案 在Dja…...

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02

上一篇设计了登录和聊天窗口&#xff0c;并实现了窗口切换&#xff0c;本章将继续实现其他模块 本章内容 完善登录验证实现自定义窗口的拖动效果 完善登录验证 对登录的输入框进行输入限定&#xff0c;这里我限制登录id为6位纯数字组合&#xff0c;密码长度不超过16位 设置…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...