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

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

时间:2023-04-08 10:56:44浏览次数:48  
标签:logging log 框架 taste self 测试 path 日志 Minium

前言

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

image.png

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

框架的设计开发

1、框架搭建设计要素

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

2、工程结构

image.png

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.logger

4、数据源

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

image.png

示例代码如下:

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的封装,部分代码示例如下图:

image.png

image.png

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 minium

from action.page_action import PageAction


@minium.ddt_class
class 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的测试报告颜值还可以,还可以看到历史的,感觉还不错,如下:

image.png

失败有截图还有日志:

image.png

image.png

B站看运行效果:
https://www.bilibili.com/video/BV1Dk4y147Sn

写在最后

到此,关于minium系列暂时告一段路了,感谢大家对我的支持,觉得我的文章对您有帮助,请帮忙转发!

我是六哥,后面还会陆续更新其他教程文章,还请继续关注我!

标签:logging,log,框架,taste,self,测试,path,日志,Minium
From: https://www.cnblogs.com/longronglang/p/17298138.html

相关文章

  • 压力测试系统的建设过程
    容量规划离不开对业务场景的分析,分析出场景后,就要对这些场景进行模拟,也就是容量的压力测试,用来真实地验证系统容量和性能是否可以满足极端业务场景下的要求。同时,在这个过程中还要对容量不断进行扩缩容调整,以及系统的性能优化。一、压测粒度1.单机单应用压力测试优先摸清单个应用的......
  • Scrapy爬虫框架 -- 图片爬取
    一、新建一个tupian爬虫项目scrapystartprojecttupian二、进入到tupian项目,新建一个image爬虫文件cdtupianscrapygenspiderimagewww.xxx.com三、修改配置文件settingsROBOTSTXT_OBEY=FalseLOG_LEVEL='ERROR'USER_AGENT="Mozilla/5.0(WindowsNT10.0;Win64;x64)......
  • iOS开发_常用框架简要说明
    ①UIKit:用于构建iOS应用程序的框架,提供了应用程序的基本结构,例如UI类和控制器类。②Foundation:提供了一系列基于Cocoa的基本服务,如Unicode字符串、网络服务和数据管理。③CoreData:用于管理应用程序中的数据对象和关系图。④CloudKit:提供一个云端数据存储和......
  • 主题测试二
    主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试二主题测试......
  • 《渗透测试》安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用 202
    PHPStorm:专业PHP开发IDEPhpStudy:ApacheMYSQL环境NavicatPremium:全能数据库管理工具 #数据导入-mysql架构&库表列1、数据库名,数据库表名,数据库列名2、数据库数据,格式类型,长度,键等 #数据库操作-mysqli函数&增删改查PHP函数:连接,选择,执行,结果,关闭等参考:https://......
  • 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
    内卷的来源内卷最早的“出处”是几张名校学霸的图片。大学生们刷爆朋友圈的几张“内卷”图片是这样的:有的人骑在自行车上看书,有的人宿舍床上铺满了一摞摞的书,有的人甚至边骑车边端着电脑写论文。这些图片最早在清华北大的学霸之间流传。之后,“边骑车边看电脑”的“清华卷王”等......
  • Flask框架之信号、sqlalchemy
    目录信号flask-scriptsqlalchemysqlalchemy介绍sqlalchemy快速使用sqlalchemy创建表和操作数据信号Flask框架中的信号基于blinker(安装这个模块pipinstallblinker),其主要就是让开发者可是在flask请求过程中定制一些用户行为,flask和django都有信号观察者模式,又叫发布-订阅(Pu......
  • 测试主题
    用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测试博客主题搭建是否成功用于测......
  • 渗/透测试信息收集
    公开渠道和搜索引擎公司网站:通过访问公司的官方网站,了解公司的业务范围、产品和服务、组织结构和人员信息等。社交媒体:通过浏览公司在社交媒体平台上的信息,例如Facebook、Twitter、LinkedIn等,了解公司的最新动态、员工信息等。行业新闻:通过访问行业新闻网站,了解公司的发展历程、市......
  • flask框架04 导出项目 local flask生命执行流程 wtforms
    今日内容详细目录今日内容详细1请求上下文分析(源码:request原理)1.1导出项目的依赖1.2函数和方法1.3threading.local对象1.4偏函数1.5flask整个生命执行流程(1.1.4版本为例)2wtforms(了解)1请求上下文分析(源码:request原理)1.1导出项目的依赖#之前pipfreeze>requ......