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

  • 前言
  • 一、框架基础(从最小步骤入手_毛坯框架)
    • 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)

 


总结

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

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

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值