自动化测试框架搭建

思想:
    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文件,都是和业务相关的

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx学习

在Nginx配置中,以$符号开头的变量通常是内置变量或者从请求上下文中提取的变量。这些变量用于获取请求的各种信息,例如请求头、URI等。以下是一些常见的以$符号开头的变量: $uri:请求中的URI(不包括查询字符串&#x…

汽车产线设备CAN总线一键刷写方案

汽车产线设备CAN总线一键刷写方案 一、概述 随着汽车工业的不断发展,CAN总线技术在汽车产线设备中得到了广泛应用。然而,在实际生产过程中,设备的软件升级和配置更改是不可避免的。为了提高生产效率,我们推出了一键刷写CAN总线解…

初识QT。

文章目录 前言一、QWidget1、了解内容main文件中的基本内容。.pro项目文件的内容。mywidget.h文件内容。命名规范和快捷键Qt助手 2、button按钮3、对象树4、信号和槽5、自定义信号和槽函数拓展 6、Lambda表达式7、练习 二、QMainWindow1、菜单栏和菜单项2、工具栏3、状态栏4、铆…

UKP3d和AutoPDMS管道出图线宽的设置

杭州的一家用户A截轴测图在群里,不料被杭州另一家细心的用户B捕捉到了,B带着疑惑,不相信的口吻问到:“优易抽出来的轴测图吗?我的单线图线很细,这个是怎么设置的?” 可惜,杭州用户A回…

SpringBoot 启动流程

一、SpringBoot 启动流程主要可以概括为以下几个步骤: 加载启动类 当 SpringBoot 项目启动时,会在当前工作目录下寻找有SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点。如果找不到这样的主类,则会打印错误信…

Macos下修改Python版本

MacOS下修改Python版本 安装 查看本机已安装的Python版本:where python3 ~ where python3 /usr/bin/python3 /usr/local/bin/python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3如果没有你想要的版本,去python官网下载安装包。…

科技云报道:“存算一体”是大模型AI芯片的破局关键?

科技云报道原创。 在AI发展历史上,曾有两次“圣杯时刻”。 第一次发生在2012年10月,卷积神经网络(CNN)算法凭借比人眼识别更低的错误率,打开了计算机视觉的应用盛世。 第二次是2016年3月,DeepMind研发的…

解决Java调用Python代码返回中文乱码问题

解决Java调用Python代码返回中文乱码问题 一、乱码原因分析 在Java调用Python代码执行时遇到乱码,我们的第一反应可能是检查文件编码设置是否一致。但在本例中,无论是Java还是Python,编码格式均已设为“UTF-8”,因此排除了编码不…

SSRF扫描工具汇总记录

目录 漏洞简单描述 常出现的位置 工具介绍 SSRFmap 介绍 输入参数

无公网ip如何随时随地远程查看本地群晖NAS存储的文件资源

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是前排提醒: 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机:1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

Linux单主机模拟测试docker macvlan网络

在单台宿主机上使用Linux Bridge,桥接不同网络命名空间(namespace)的方式,模拟测试docker macvlan网络,记录如下: 参考 链接: Macvlan network driver链接: Docker 网络模型之 macvlan 详解,图…

HackTheBox - Medium - Linux - UpDown

UpDown UpDown 是一台中等难度的 Linux 机器,暴露了 SSH 和 Apache 服务器。在Apache服务器上,有一个Web应用程序,允许用户检查网页是否已启动。服务器上标识了一个名为“.git”的目录,可以下载以显示目标上运行的“dev”子域的源…

三、C++运算符(2)算数运算符

一、递增递减 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespace std; int main() {//1、前置递增int a 10;a; //让变量1cout << "a" << a << endl;//2、后置递增int b 10;b;cout << &q…

在 Centos 7.9 下搭建 Nginx Web 服务器的步骤

Nginx是一款高性能的Web服务器&#xff0c;以下是在Linux环境中安装和配置Nginx的详细步骤。 1. 安装必要的软件包 首先&#xff0c;安装gcc-c、pcre、pcre-devel、zlib、zlib-devel、openssl以及openssl-devel等必要的软件包。 yum install -y gcc-c yum install -y pcre y…

Neo4j备份

这里主要讲Neo4j在windows环境下如何备份&#xff0c;Linux环境同理 Neo4j恢复看这里:Neo4j恢复-CSDN博客 Step1:停服 关闭neo4j.bat console会话窗口即可 Step2: 备份 找到数据目录&#xff0c;并备份、压缩 copy即可 data - 20240108.7z Step3: 启动服务 进入命令行&am…

Hive数据库:嵌入、本地、远程全攻略(下)

先介绍一下本地模式和远程模式&#xff1a; 当使用本地模式时&#xff0c;Hive将其元数据存储在本地数据库&#xff08;例如MySQL&#xff09;中&#xff0c;使其成为一个独立的数据处理系统。在本地模式中&#xff0c;Hive的配置文件&#xff08;hive-site.xml&#xff09;中…

浏览器缓存引发的odoo前端报错

前两天&#xff0c;跑了一个odoo16项目&#xff0c;莫名其妙的前端报错&#xff0c; moment.js 报的错&#xff0c; 这是一个时间库&#xff0c;不是我自己写的代码&#xff0c;我也没做过任何修改&#xff0c;搞不清楚为什么报错。以为是odoo的bug&#xff0c;所以从gitee下载…

DevEco Studio for Mac:zsh: command not found: ohpm

一、检查是否配置有ohpm环境 1、新打开一个终端输入export&#xff0c;查看是否有 ohpm路径&#xff1a; 二、如果没有找到ohpm路径&#xff0c;开始配置环境 。 1、查找本机ohpm路径&#xff0c;并记录ohpm解释器的路径&#xff1a; 2、打开终端工具&#xff0c;执行命令 ech…

[力扣 Hot100]Day3 最长连续序列

题目描述 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 出处 思路 此题可用带排序的哈希表&#xff0c;先构建哈希表&#xff0…

现代操作系统复习笔记【核心考点知识+重点复习题】

文章目录 一、核心考点基础知识第一章 概述1、操作系统的基本概念、基本功能2、分时系统、批处理系统、实时系统的主要特征3、用户接口、系统调用过程4、单到与多道程序技术5、操作系统虚拟机体系结构6、CPU工作模式&#xff1b;7、部分课后习题 第二章 进程与线程1、进程的基本…