整个框架的开发及调通是在3月27日晚上22点完成,如下:
这篇文章真的是拖了太久了,久到我居然把代码部分完成后,彻底给忘了,这记性,真的是年纪大了!
框架的设计开发1、框架搭建设计要素日志&测试步骤报告&失败截图配置文件&数据源设计公共函数&API封装测试数据&参数化、解耦测试套件&测试用例设计、组装2、工程结构3、日志日志可以很好辅助我们定位问题,示例代码如下:
【资料图】
class LogUtils: def __init__(self, log_path=log_path): """ 通过python自带的logging模块进行封装 """ self.logfile_path = log_path # 创建日志对象logger self.logger = logging.getLogger(__name__) # 设置日志级别 self.logger.setLevel(level=logging.INFO) # 设置日志的格式 formatter = logging.Formatter("%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s: %(message)s") """在log文件中输出日志""" # 日志文件名称显示一天的日志 self.log_name_path = os.path.join(self.logfile_path, "log_%s" % time.strftime("%Y_%m_%d")+".log") # 创建文件处理程序并实现追加 self.file_log = logging.FileHandler(self.log_name_path, "a", encoding="utf-8") # 设置日志文件里的格式 self.file_log.setFormatter(formatter) # 设置日志文件里的级别 self.file_log.setLevel(logging.INFO) # 把日志信息输出到文件中 self.logger.addHandler(self.file_log) # 关闭文件 self.file_log.close() """在控制台输出日志""" # 日志在控制台 self.console = logging.StreamHandler() # 设置日志级别 self.console.setLevel(logging.INFO) # 设置日志格式 self.console.setFormatter(formatter) # 把日志信息输出到控制台 self.logger.addHandler(self.console) # 关闭控制台日志 self.console.close() def get_log(self): return self.logger4、数据源这里我用的是Excel,示例如下:
示例代码如下:
class ExcelUtils(object): @staticmethod def get_element_Data(): """ 通过pandas读取excel中的数据,返回字典映射 """ data_list = pd.read_excel(excel_path).values.tolist() # reading file dict_elements = {} for data in data_list: dict_elements[data[0]] = data[1] + "," + data[2] return dict_elements可能评论区会有人说用yml、json、csv做数据源会更好,我不认同!
为什么用Excel做数据源?
yml、json是啥你怎么办,可以学,没错(互联网时代时间成本太昂贵了),不是不可能遇到,是因为最不可控的是使用者人群,不是吗?框架的一开始设计很重要,所以整体的设计要清晰明了。
感动自己的实现不重要,而是被团队需要的实现,才会显得自己重要!
5、基础层这里主要用于处理,元素对象和原生API的封装,部分代码示例如下图:
6、测试用例在action层写测试用例,示例代码如下:
class PageAction(BasePage): def order(self, taste: str): """ 根据口味选餐 :param taste: :return: """ # 将第一个五花肉石锅拌饭加入购物车 self.element_click("将第一个五花肉石锅拌饭加入购物车") # 选择口味 self.element_click(taste) # 确定选择 self.element_click("确定选择") # 共选择份数 total = self.get_elementText("共选择份数") return total调用action层,执行测试用例,示例代码如下:
# -*- coding: utf-8 -*-"""# @Time : 2023/03/20 20:55# @Author : longrong.lang# @FileName: order_test.py# @Software: PyCharm# @Blog :https://www.cnblogs.com/longronglang/# @Motto:ABC(Always Be Coding)"""import miniumfrom action.page_action import PageAction@minium.ddt_classclass OrderTest(minium.MiniTest): """ 测试登录功能 """ pageAction = None @minium.ddt_case( {"taste": "蒜香味", "count": " 1 "}, {"taste": "姜葱味", "count": " 1 "}, {"taste": "盐焗味", "count": "3"} ) def test_Order(self, value): try: self.pageAction = PageAction(self.mini, self.page) total = self.pageAction.order(value["taste"]) self.assertEqual(total, value["count"]) except AssertionError as err: self.pageAction.screen_shot() self.fail(err)7、测试报告觉得minium的测试报告颜值还可以,还可以看到历史的,感觉还不错,如下:
失败有截图还有日志:
B站看运行效果:https://www.bilibili.com/video/BV1Dk4y147Sn
写在最后到此,关于minium系列暂时告一段路了,感谢大家对我的支持,觉得我的文章对您有帮助,请帮忙转发!
我是六哥,后面还会陆续更新其他教程文章,还请继续关注我!
Copyright 2015-2022 现在知识产权网 版权所有 备案号:粤ICP备18023326号-5 联系邮箱:855 729 8@qq.com