Python之测试框架搭建【一】(毛坯框架)

news2025/1/19 23:06:33

  • 前言
  • 一、框架基础(从最小步骤入手_毛坯框架)
    • 1)首先我们自己建立一个项目,这个项目里面有testcases文件夹,testdatas文件夹
    • 2)在testdatas里面放测试数据
    • 3)建立一个main文件
    • 4)输出测试报告
  • 二、框架进阶(从最小步骤入手_毛坯框架上优化)
    • 1、优化测试报告的位置
    • 2、优化路径位置
    • 3、优化main文件里面的路径
    • 4、在测试用例里面加上日志
    • 5、现在我们把日志输入到专门的文件夹
  • 三、框架进阶(从最小步骤入手_毛坯框架上优化_加入tools工具)
  • 总结

前言

用自己的理解方式,建立最简单的测试框架。


一、框架基础(从最小步骤入手_毛坯框架)

1、测试一个登录接口(只需要成功,不考虑失败)

1)首先我们自己建立一个项目,这个项目里面有testcases文件夹,testdatas文件夹

 2)在testdatas里面放测试数据(一般有2种,Excel表格 和 直接py文件里面写数据)

如果想要简便,而且又不太容易出错,就直接在py文件里面写测试数据,在传递数据的时候,直接导包引用数据就可以了。不好的地方:就是数据如果多了就不是那么美观,其他都还好。

在testcases里面的test_login文件中写入测试用例,在这个用例里面会使用ddt 装饰器。

3)建立一个main文件(这个主要用来作为执行文件,里面主要是收集用例和运行)

 

4)输出测试报告一般使用测试报告的库,都会使用到第三方的库

 

毛坯框架归纳总结:

1、以上的4个步骤(自动化简单4部曲)就是最容易理解的,也是最容易记忆。不需要复杂的修饰

2、这个毛坯框架已经建立成功。总结所创建的文件夹有(一共就三个文件夹):

testcases

testdatas

main

report.html(这个是点击执行文件后生成的,就不算在文件夹中了)

二、框架进阶(从最小步骤入手_毛坯框架上优化)

前景回顾:

我们已经搭建好了毛坯框架,也运行成功。现在我们需要在毛坯框架的基础上,再优化点小细节,比如规范一下文件夹。在测试用例里面加入一些标题,日志。

1、优化测试报告的位置

之前我们是放在当前文件夹下面(也就是在项目的根目录下面),现在我们把它专门放在一个文件夹里面

2、优化路径位置

之前我们都把各种路径都写在main文件里面,现在我们单独建立一个文件,专门存放路径。

3、优化main文件里面的路径

之前我们写在main文件里面的路径,现在全不用变量来替换

4、在测试用例里面加上日志

其实这个日志不用写的很详细,能够帮助我们定位到一个大致范围就可以了

 

5、现在我们把日志输入到专门的文件夹

在这里我们把日志的路径写到sitting文件中,然后在main文件中,直接调用路径就行

注意:这里的日志中加入了时间,以及格式化时间(这里的知识点设计到了时间格式的转换,以及格式化字符串)

 上述的步骤如果比较麻烦,那么我们用简单的方式进行

简单方法一:就把路径直接写在main文件,这样的好处就是不需要繁琐的知识点

简单方法二:直接路径拼接(常用)

易错点讲解:

1、日志不在控制台输出,只需要在文件夹中显示

使用:logger.remove(handler_id=None) # 清除之前的设置

这里handler_id=None字段必填

2、日志里面的时间问题,在日志里面的时间,这里不需要我们再去调用时间模块,就直接按照它给的格式就行

logger.add("file_{time}.log")

注意:这种写法目前我知道的也仅仅存在于日志模块,如果按照常规的理解,那么就是一个写死的字符串。

优秀的博主(解决了很多日志的问题):

https://www.cnblogs.com/leeyong49/p/16773087.html

Python编程:loguru管理日志输出_彭世瑜的博客-CSDN博客

重置loguru输出:只输出到文本,不向console输出_loguru日志输出到指定文件不显示在控制台_jiangjiane的博客-CSDN博客

三、框架进阶(从最小步骤入手_毛坯框架上优化_加入tools工具)

tools文件夹里面主要是存放自己写的或者封装的一些类(主要就是方便自己调用)

那么这里就放入操作Excel表格的类

 

注意:一般的我们从Excel表格里面读取出来的数据,系统都会把它视为字符串,那么有些地方我们明明需要的是字典。那么这个时候,我们就需要把字符串外壳剥离了,要里面的字典数据。

例如:

现在我们需要里面的字典,处理方式为:

使用eval()函数:

 

 总结:

eval()函数里面,传人的参数必须是一个字符串,这个函数专门是用来剥离字符的,其他类型不想要报错:

在用例里面改成后:

 

 上传一些代码:

import os  # 导入os模块
from openpyxl import load_workbook  # 从openpyxl里面导入load_workbook函数


class Operate_Excel:
    def __init__(self, path: str):
        if os.path.isfile(path):  # 判断文件路径是否存在
            print("是一个文件")
            if path.endswith(".xlsx"):  # 判断这个文件是否是以.xlsx结尾
                print("路径正确")
                self.wb = load_workbook(path)  # 加载一个工作簿
            else:
                print("文件的后缀名错误,不是.xlsx")
        else:
            raise FileExistsError  # 路径不存在的时候,抛出异常

    def get_all_sheet_names(self):  # 定义一个函数,用于获取Excel表格的所有的sheet页的名称
        sheet_names = self.wb.sheetnames
        return sheet_names

    def get_sheet_datas(self, sheetname: str):  # 获取指定表单里面所有的数据
        # if sheetname in self.get_all_sheet_names(): # 这里是一种写法,直接把函数写在if的判断语句里面
        if sheetname in self.wb.sheetnames:  # 如果传进来的表单名称在所有表单中存在
            self.get_all_sheet_names()  # 这里使用了上面的函数(原本的目的是为了拿取返回值sheet_names)
            sh = self.wb[sheetname]  # 获取指定的表单,返回一个对象
            print(sh.values)  # 获取指定表单的所有的值
            all_data = list(sh.values)  # 把值转化为列表对象
            return all_data  # 这里返回了一个列表的对象
        else:
            print(f"没有这个{sheetname}表单!")  # 这里做了一个传进来的表单名称,没有时的校验

    def get_sheet_list_datas(self, sheetname: str):  # 定义了一个获取详表单数据的函数
        list_data = []  # 定义了一个空列表
        key = self.get_sheet_datas(sheetname)[0]  # 这里调用了上面的函数,并且获取了列表的第一组数据
        for value in self.get_sheet_datas(sheetname)[1:]:  # 这里是迭代列表中除第一组数据的其他数据
            new_data = dict(zip(key, value))  # 使用zip函数来组合键值对
            # print(new_data)
            list_data.append(new_data)  # 把数据追加进空的列表里面
        return list_data  # 返回一个列表


# 在当前页面进行测试
if __name__ == "__main__":
    a = Operate_Excel(r"C:\Users\Administrator\Desktop\想整理一个完整自己的框架代码\test1.xlsx")
    # print(a.get_all_sheet_names())
    # print(a.get_sheet_datas())
    c = a.get_sheet_datas1("城市数据")
    print(c)

 


总结

我们在平时,建立框架,一开始都会觉得非常难,而且会很麻烦,每个模块放入什么都完全不知道。对于这一点,我们需要理清思路,一步一步的来,先实现一个模块,再依次两个模块,慢慢地来,不要着急。一口气吃个大胖子,是不可能的。

对于我来说,我对这个框架的理解也花费了大量的时间,为了弄清这个框架,我从最基本的变量开始,重新学习。一步一步的到函数,再到类。当然里面也经历了其他对类的了解,里面看最基本的源码。虽然做不到深入了解,但是能够解决我最基本的问题。也算有利。

想要学好这个框架,里面的东西还有很多,但是不要放弃。比别人多知道一些,在职场或者公司都会更有优势。

慢慢学吧,慢慢地深入理解。

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

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

相关文章

ASP.NET 记录 HttpRequest HttpResponse HttpServerUtility

纯属个人记录,会有错误 HttpRequest Browser是获取客户端浏览器的信息 Cookies是获取客户端的Cookies QueryString是获取客户端提交的数据 ServerVariables是获取服务器端或客户端的环境变量信息 Browser 语法格式: Request.Browser[“浏览器特性名”] 常见的特性名 名称说…

【grafana】使用多级变量解决Granfana模板变量中的大小限制

前言 最近对公司的Kafka 集群集成了 exporter prometheus granfana 服务,我们将 topic 变量抽象成模板变量,此时发现 granfana 变量有 10k 的个数限制。导致我们显示 topic 名称不全。 效果如下:全选后只有 10k 个变量。 解决 一番百度…

【Python】【进阶篇】二十二、Python爬虫的BS4解析库

目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号&#xff0…

C语言函数大全-- k 开头的函数

C语言函数大全 本篇介绍 C语言函数大全-- k 开头的函数 1. kcalloc 1.1 函数说明 函数声明函数功能void *kcalloc(size_t n, size_t size, gfp_t flags);它是 Linux 内核中的一个函数,用于在内核空间分配一块连续的指定大小的内存,它与标准库函数 ca…

RK3568平台开发系列讲解(设备驱动篇)内核空间与用户空间数据交互实验

🚀返回专栏总目录 文章目录 一、内核空间与用户空间二、用户空间和内核空间数据交换三、实验程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍对内核空间与用户空间的数据交换功能。 一、内核空间与用户空间 Linux 系统将可访问的内存空间分为了两个部…

指针的运算

在C语言中,指针是一个非常重要的概念。指针可以用来访问和修改内存中的数据,也可以用来进行指针的运算。在本篇博客中,我们将探讨指针的解引用、指针与整数的加减运算、同类型指针间的减法运算和指针的关系运算。 指针的解引用 在C语言中&a…

网络安全运维人员面临的痛点分析

1. 工作压力大:网络安全运维人员需要时刻关注系统的安全状况,发现并修复漏洞,保护系统免受攻击和数据泄露的风险。这需要他们不断学习新知识、掌握新技能,并且在短时间内快速响应和处理各种安全问题,这种高强度的工作压…

Arcgis小技巧【12】——ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的…

pr 是什么——可以做什么

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

Boosting算法预测银行客户流失率

Boosting算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大。以便银行的客户服务部门更加有针对…

TS+Axios的封装(vue3.x环境)

1. 创建axios实例 # 项目src下新建utils/request.ts # npm i axios 是必须滴 import axios from axiosconst baseURL https://ilovesh.com // 基地址 const instance axios.create({baseURL,timeout: 3000 // 请求超时时间 (3秒超时) })export { baseURL, instance } 2. 添加…

龙蜥社区理事长马涛当选开放原子开源基金会 TOC 副主席

近日,开放原子开源基金会举办了技术监督委员会(以下简称“TOC”)第六十九次全体会议,会上针对新一届 TOC 成员改选进行了公正公平的投票,龙蜥社区理事长马涛当选开放原子开源基金会 TOC 副主席。 (图左二/龙…

(排序8)归并排序(非递归实现),归并排序的外部排序应用(文件排序)的简单了解

归并排序递归版本 void _MergeSort(int* arr, int left , int right, int* tmp) {if (left > right){return;}int mid (left right) / 2;_MergeSort(arr, left, mid, tmp);_MergeSort(arr, mid 1, right, tmp);int begin1 left;int end1 mid;int begin2 mid 1;int e…

一文掌握 Python、Anaconda、PyCharm 的安装和使用

本文将介绍一个较为全面的 Python 开发环境的搭建与基本使用,包括 Python 解释器的安装使用、PyCharm 编辑器的安装使用、Anaconda 的安装使用和库管理工具 pip 的使用。 PyCharm Anaconda 是一个很完备的 Python 开发环境,也是绝大多数开发者使用的开发…

E6410安装PVE直通显卡安装LibreELEC系统

文章目录查看cpu是否支持直通音频笔记本关盖设定BIOS设定启动内核IOMMU支持添加驱动黑名单绑定核显到vfio模块然后新建一个虚拟机安装LibreELEC注意事项重启 VM 时 GPU 直通失败如果直通后遇到问题了,开机出现各种问题,进不去系统,或者网页进…

【MySQL数据库原理】数据库批量导入美团NLP分类数据集Meituan-Dianping/asap

目录 数据集简单介绍完整代码实现参考资料数据集简单介绍 美团点评数据集 (Meituan-Dianping/asap) 是一个中文自然语言处理 (NLP) 数据集,由美团点评公司收集和发布。该数据集用于评估和开发中文文本分类和情感分析模型,包括情感极性分类、食物安全文本分类和自定义分类等任…

【分布式应用】Zabbix——安装

目录 第一章zabbix概述 1.1.什么是监控概念 1.2.zabbix概述 1.3.zabbix 主要特点 1.4.zabbix主要功能 1.5.zabbix运行机制 1.6.zabbix 监控原理 1.7zabbix的架构,数据流向以及原理在图中做总结 1.8.数据采集模式 1.9.zabbix监控模式 第二章.安装 部署 za…

Hyper-v下安装CentOS-Stream-9

1、我不想要动态扩展的硬盘,固定大小硬盘性能更高,所以这里我先创建一个固定硬盘(如果你想用动态扩展的硬盘,那么可以省略前面几步,直接从第7步开始,并在第12步选择创建可动态扩展的虚拟硬盘)&a…

JAVA开发(神乎其神的区块链概念和技术)

由于我最近需要做一个关于区块链的项目,所以想写篇博文记录一下自己的一些疑惑。区块链技术最火爆的时间应该是2016年和2017年。它产生的背景是B特币兴起,一时间说虚拟货币将取代所有实物货币炒的沸沸扬扬。它的主要思想思想是去中心化。网络上给了很多概…

ubuntu虚拟机下搭建zookeeper集群,安装jdk压缩包,搭建Hadoop集群与spark集群的搭建【上篇】

系列文章目录 在vmbox里面安装Ubuntu16.04并且配置jdk以及Hadoop配置的教程【附带操作步骤】 虚拟机vmware下安装Ubuntu16.04修改屏幕尺寸与更新源,以及对应的安装vim和vim常见的操作 Hadoop与主机连接以及20版本的Hadoop配置网络的问题_hadoop连不上网 Hadoop升…