翼度科技»论坛 编程开发 python 查看内容

腾讯出品小程序自动化测试框架【Minium】系列(七)测试框架的设计和开发

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
前言

整个框架的开发及调通是在3月27日晚上22点完成,如下:

这篇文章真的是拖了太久了,久到我居然把代码部分完成后,彻底给忘了,这记性,真的是年纪大了!
框架的设计开发

1、框架搭建设计要素


  • 日志&测试步骤
  • 报告&失败截图
  • 配置文件&数据源设计
  • 公共函数&API封装
  • 测试数据&参数化、解耦
  • 测试套件&测试用例设计、组装
2、工程结构


3、日志

日志可以很好辅助我们定位问题,示例代码如下:
  1. class LogUtils:
  2.     def __init__(self, log_path=log_path):
  3.         """
  4.         通过python自带的logging模块进行封装
  5.         """
  6.         self.logfile_path = log_path
  7.         # 创建日志对象logger
  8.         self.logger = logging.getLogger(__name__)
  9.         # 设置日志级别
  10.         self.logger.setLevel(level=logging.INFO)
  11.         # 设置日志的格式
  12.         formatter = logging.Formatter('%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s: %(message)s')
  13.         """在log文件中输出日志"""
  14.         # 日志文件名称显示一天的日志
  15.         self.log_name_path = os.path.join(self.logfile_path, "log_%s" % time.strftime('%Y_%m_%d')+".log")
  16.         # 创建文件处理程序并实现追加
  17.         self.file_log = logging.FileHandler(self.log_name_path, 'a', encoding='utf-8')
  18.         # 设置日志文件里的格式
  19.         self.file_log.setFormatter(formatter)
  20.         # 设置日志文件里的级别
  21.         self.file_log.setLevel(logging.INFO)
  22.         # 把日志信息输出到文件中
  23.         self.logger.addHandler(self.file_log)
  24.         # 关闭文件
  25.         self.file_log.close()
  26.         """在控制台输出日志"""
  27.         # 日志在控制台
  28.         self.console = logging.StreamHandler()
  29.         # 设置日志级别
  30.         self.console.setLevel(logging.INFO)
  31.         # 设置日志格式
  32.         self.console.setFormatter(formatter)
  33.         # 把日志信息输出到控制台
  34.         self.logger.addHandler(self.console)
  35.         # 关闭控制台日志
  36.         self.console.close()
  37.     def get_log(self):
  38.         return self.logger
复制代码
4、数据源

这里我用的是Excel,示例如下:

示例代码如下:
  1. class ExcelUtils(object):
  2.     @staticmethod
  3.     def get_element_Data():
  4.         """
  5.         通过pandas读取excel中的数据,返回字典映射
  6.         """
  7.         data_list = pd.read_excel(excel_path).values.tolist()  # reading file
  8.         dict_elements = {}
  9.         for data in data_list:
  10.             dict_elements[data[0]] = data[1] + "," + data[2]
  11.         return dict_elements
复制代码
可能评论区会有人说用yml、json、csv做数据源会更好,我不认同!
为什么用Excel做数据源?

  • 所有的测试框架和测试工具,都应该以使用者角度考虑问题,以易用性和上手难度为先。
  • 所有做测试工具及平台、测试框架,都是为他人服务,所以越简单,越好操作,更好,后期可以再优化、
  • 上面做数据源,可能自我感觉技术上显得高大上,很牛逼,但是抱歉,使用者,根本不知道yml、json是啥你怎么办,可以学,没错(互联网时代时间成本太昂贵了),不是不可能遇到,是因为最不可控的是使用者人群,不是吗?
框架的一开始设计很重要,所以整体的设计要清晰明了。
感动自己的实现不重要,而是被团队需要的实现,才会显得自己重要!
5、基础层

这里主要用于处理,元素对象和原生API的封装,部分代码示例如下图:


6、测试用例

在action层写测试用例,示例代码如下:
  1. class PageAction(BasePage):
  2.     def order(self, taste: str):
  3.         """
  4.         根据口味选餐
  5.         :param taste:
  6.         :return:
  7.         """
  8.         # 将第一个五花肉石锅拌饭加入购物车
  9.         self.element_click("将第一个五花肉石锅拌饭加入购物车")
  10.         # 选择口味
  11.         self.element_click(taste)
  12.         # 确定选择
  13.         self.element_click("确定选择")
  14.         # 共选择份数
  15.         total = self.get_elementText("共选择份数")
  16.         return total
复制代码
调用action层,执行测试用例,示例代码如下:
  1. # -*- coding: utf-8 -*-
  2. """
  3. # @Time    : 2023/03/20 20:55
  4. # @Author  : longrong.lang
  5. # @FileName: order_test.py
  6. # @Software: PyCharm
  7. # @Blog    :https://www.cnblogs.com/longronglang/
  8. # @Motto:ABC(Always Be Coding)
  9. """
  10. import minium
  11. from action.page_action import PageAction
  12. @minium.ddt_class
  13. class OrderTest(minium.MiniTest):
  14.     """
  15.     测试登录功能
  16.     """
  17.     pageAction = None
  18.     @minium.ddt_case(
  19.         {"taste": "蒜香味", "count": " 1 "},
  20.         {"taste": "姜葱味", "count": " 1 "},
  21.         {"taste": "盐焗味", "count": "3"}
  22.     )
  23.     def test_Order(self, value):
  24.         try:
  25.             self.pageAction = PageAction(self.mini, self.page)
  26.             total = self.pageAction.order(value["taste"])
  27.             self.assertEqual(total, value["count"])
  28.         except AssertionError as err:
  29.             self.pageAction.screen_shot()
  30.             self.fail(err)
复制代码
7、测试报告

觉得minium的测试报告颜值还可以,还可以看到历史的,感觉还不错,如下:

失败有截图还有日志:


B站看运行效果:

写在最后

到此,关于minium系列暂时告一段路了,感谢大家对我的支持,觉得我的文章对您有帮助,请帮忙转发!
我是六哥,后面还会陆续更新其他教程文章,还请继续关注我!

来源:https://www.cnblogs.com/longronglang/p/17298138.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具