python单元测试复盘

unittest框架---4大核心

1)TestCase---测试用例

2)TestSuite---测试套件:收集用例,引进测试用例

  常使用【目录】unittest.TestLoader().discover(搜索目录)--- 默认在test*.py中搜索用例

3)TextTestRunner---执行用例/呈现结果

4)Fixture---前置后置

流程:

1、引入unittest模块,创建类并继承unittest.TestCase;

2、定义测试函数,函数名以test_开头(表示一个测试用例)

3、测试用例中:

     3.1 测试数据、期望结果

     3.2 用例步骤

     3.3 断言

由此产生三个文件(以注册为例):register.py(功能逻辑)、test_cases.py、main.py(测试报告生成)

优化代码:

1)ddt数据驱动,配合测试框架使用,将多组数据依次传递给一个测试流程;

2)将数据写入excel中后读取,引入模块openpyxl:

①加载excel数据文件

②根据表单名称选择表单,wb['表单名称']

③单元格对象

 1 sh = wb["register"]
 2 # 拿到字典的key值
 3 titles = []
 4 for item in list(sh.rows)[0]: # 遍历第一行中的每一列
# (<Cell 'login'.A1>, <Cell 'login'.B1>, <Cell 'login'.C1>)
5 titles.append(item.value) 6 7 data_lists = [] 8 # 把key和value组合到一起,形成一个字典,再将字典放到列表当中 9 for item in list(sh.rows)[1:]: # 遍历每一行 10 value_dict = {} 11 for index in range(len(item)): # 获取每一行的单元格数据 12 value_dict[titles[index]] = item[index].value 13 data_lists.append(value_dict) # 将每一行测试数据追加到列表中
14 # 或者使用zip()函数
15 for item in list(sh.rows)[1:] # 遍历数据行
16   value = []
17   for val in item: # 获取每一行的值
18    values.append(val.value)
20   res = dict(zip(titles, values)) # titles和每一行数据打包成字典
21   res["check"] = eval(res["check"]) # 将check的字符串转换为字典对象
22   all_datas.append(res) # 追加到列表

④封装成文件handle_excel.py

3)增加日志(封装)---> my_logger.py

第一步:创建一个日志收集器logging.getLogger("收集器的名字")
第二步:给日志收集器,设置日志级别:logger.setLevel(logging.INFO)
第三步:给日志收集器创建一个输出渠道handle=logging.StreamHandler()
第四步:给渠道,设置一个日志输出内容的格式
第五步:将设置的格式,绑定到渠道当中,将格式与渠道关联起来
第六步:将设置好的渠道,添加到日志收集器上

import logging

logger = logging.getLogger("收集器")
logger.setLevel(logging.INFO)

# 设置日志输出在哪些渠道
handle1 = logging.StreamHandler()
handle1.setLevel(logging.ERROR)

# 设置渠道的输出内容格式
fmt = '%(asctime)s %(name)s %(levelname)s %(filename)s'
formatter = logging.Formatter(fmt)

# 将日志格式绑定到渠道中
handle1.setFormatter(formatter)
# 将设置好的渠道添加到日志收集器上
logger.addHandler(handle1)

# 添加fileHandle
handle2 = logging.FileHandler("my_log.log",encoding="utf-8")
handle2.setFormatter(formatter)
logging.addHandler(handle2)

4)增加配置文件(重点.ini)---> 对my_logger.py文件进行再加工

①创建一个.ini的配置文件 [section] option=value

②python读取ini文件的数据

首先引入ConfigParse类

其次实例化ConfigParse类,调用read方法,读取ini文件

conf = ConfigParse()
conf.read(file,encoding="utf-8")

读取出来默认是字符串

conf.get(section名字,option名字)

支持读取出来为:bool,int,float

conf.getboolean(section,option)
conf.getint(section,option)
conf.getfloat(section,option)

加工后的my_logger.py:

 1 import logging
 2 from class_config.handle_config import conf
 3 
 4 class MyLogger(logger.Logger):
 5         
 6     def __init__(self,file=None):
 7         # 设置输出级别、输出渠道、输出日志格式
 8         super().__init__(conf.get("log","name"),conf.get("log","level"))
 9         # 日志格式
10         fmt = '%(asctime)s %(name)s %(levelname)s %(filename)'
11         formatter = logging.Formatter(fmt)
12         
13         # 控制台渠道
14         handle1 = logging.StreamHandler()
15         handle.setFormatter(formatter)
16         self.addHandler(handle1)
17         
18         if file:
19             # 文件渠道
20             handle2 = logging.FileHandler(file,encoding="utf-8")
21             handle2.setFormatter(formatter)
22             self.addHandler(handle2)
23 
24 # 是否需要写入文件
25 if conf.getboolean("log","file_ok"):
26      file_name=conf.get("log","file_name")
27 else:
28     file_name=None
29 
30 logger = MyLogger(file_name)

以上,写于西安科技大学临潼校区2021.4.11凌晨。

posted @ 2021-04-11 01:03  快意游天下  阅读(11)  评论(0)    收藏  举报