- 前言
- 一、框架基础(从最小步骤入手_毛坯框架)
- 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)
总结
我们在平时,建立框架,一开始都会觉得非常难,而且会很麻烦,每个模块放入什么都完全不知道。对于这一点,我们需要理清思路,一步一步的来,先实现一个模块,再依次两个模块,慢慢地来,不要着急。一口气吃个大胖子,是不可能的。
对于我来说,我对这个框架的理解也花费了大量的时间,为了弄清这个框架,我从最基本的变量开始,重新学习。一步一步的到函数,再到类。当然里面也经历了其他对类的了解,里面看最基本的源码。虽然做不到深入了解,但是能够解决我最基本的问题。也算有利。
想要学好这个框架,里面的东西还有很多,但是不要放弃。比别人多知道一些,在职场或者公司都会更有优势。
慢慢学吧,慢慢地深入理解。