腾讯出品小程序自动化测试框架【Minium】系列(七)测试框架的设计和开发
前言
整个框架的开发及调通是在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.logger
4、数据源
这里我用的是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 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的测试报告颜值还可以,还可以看到历史的,感觉还不错,如下:
失败有截图还有日志:
B站看运行效果:
https://www.bilibili.com/video/BV1Dk4y147Sn
写在最后
到此,关于minium系列暂时告一段路了,感谢大家对我的支持,觉得我的文章对您有帮助,请帮忙转发!
我是六哥,后面还会陆续更新其他教程文章,还请继续关注我!
腾讯出品小程序自动化测试框架【Minium】系列(七)测试框架的设计和开发的更多相关文章
- 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明
一.写在前面 真的人这一散漫惯了,收心就很难了,上午把小程序开发环境启动后,在QQ游戏里,杀了三把象棋,5把2D桌球,一上午没了,还是没法心静下来去学点东西. 那就老样子,逼着自己开始,找到 &quo ...
- 腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)
写在前面 又有好久没更新小程序自动化测试框架Minium系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解! 上篇文章为大家分享关于Minium中Minium.App模块的API 使用,接 ...
- 腾讯出品小程序自动化测试框架【Minium】系列(一)环境搭建之第一个测试程序
一.什么是Minium? minium是为小程序专门开发的自动化框架,使用minium可以进行小程序UI自动化测试. 当然,它的能力不仅仅局限于UI自动化, 比如: 使用minium来进行函数的moc ...
- 腾讯出品小程序自动化测试框架【Minium】系列(三)元素定位详解
写在前面 昨天转发这篇文章时,看到群里有朋友这样说: 这么卷吗?这个框架官方已经不维护了. 姑且不说卷不卷的问题,要是能卷明白,别说还真不错: 不维护又怎样?我想学习,想会,分享给很期待这系列的文章的 ...
- 腾讯出品小程序自动化测试框架【Minium】系列(四)API详解(上)
写在前面 不知道是不是因为之前出过书的原因,在写教程之类的文章,会潜意识有自带目录和章节的感觉在里面,有点说不出的感觉吧. 上篇文章我们介绍了关于元素定位的使用方法,这篇文章将为大家分享关于Miniu ...
- 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理
写在前面 我发现一件神奇的事,当你学一门新技术或者新的知识点遇到不会的时候,真的可以先放一放,第二天再去学习,也许说不定也就会了. 为什么这么说? 昨天文章断断续续的写了近一天,有一个组件不认识,自然 ...
- 微信小程序自动化测试最佳实践(附 Python 源码)
本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序.微信公众号等.小程 ...
- appium+java(五)微信小程序自动化测试实践
前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...
- [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息
因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...
- 基于 Autojs 的 APP、小程序自动化测试 SDK
原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持 ...
随机推荐
- 第13章 MVC和Razor Pages过滤器管道(ASP.NET Core in Action, 2nd Edition)
本章包括 过滤器管道及其与中间件的区别 创建自定义筛选器以重构复杂的操作方法 使用授权筛选器保护您的操作方法和Razor页面 短路筛选器管道以绕过操作和页面处理程序执行 将依赖项注入筛选器 在第1部分 ...
- jsp第6个作业—jdbc
UsersDao.java package a; import java.sql.Connection; import java.sql.PreparedStatement; import java. ...
- 大胖子走迷宫【spfa跑状态】【到这个点,并且这个胖 = max(到这个点,按照时间变的这个胖)
大胖子走迷宫 题意 思路 普通的bfs走迷宫,多加了一个熟悉,就是胖的圈数.可以来回走,普通的bfs可能不太好处理,我们把这些状态放进spfa跑. 状态定义为{x,y,fat}:坐标位置,胖的圈数. ...
- UG二次开发-内存访问违例
在项目中修改路径参数后重算发生了内存访问违例的错误,经过调试,发现是下面这一行出的错 surfaceContourBuilder1.Commit(); 经过反复调试,发现这个东西不能随便放,不可以想当 ...
- 10.14 2020 实验 7:OpenDaylight 实验——Python 中的 REST API 调用
一.实验目的 对 Python 调用 OpenDaylight 的 REST API 方法有初步了解. 二.实验任务 本实验需要用另一种方法完成上一个实验相同的功能,即通过 Python 程序 ...
- windows 7 安装 vmtools 解决心得
win7 系统安装vmtools 他有几种报错 我见过三种 一种是sp0升级到sp1很恶心 升级到sp1还需要升级到sp2 第二种是 VGA服务缺失 他这个缺失之后需要补丁 第三种就是 安装得序无法自 ...
- 5G智能网关助力打造5G移动医疗车
医疗资源分布不均衡,是导致老百姓看病难的重要原因之一.随着新一代信息技术的快速发展和普及应用,基于5G远程通信技术.音视频数字化技术,解决医疗资源分布不均衡问题,打破空间限制,让群众在家门口就能享受到 ...
- 2.javaweb-begin
1.回顾前端知识 1.CSS 1) CSS的角色:页面显示的美观风格 2) CSS的基础语法:标签样式:类样式:ID样式:组合样式:嵌入式样式表:内部样式表:外部样式表 3) 盒子模型:border. ...
- websocket 数据分析
WebSocket是一种通过单个TCP连接提供全双工通信信道的协议.2011年,IETF将WebSocket协议标准化为RFC 6455,W3C正在对Web IDL中的WebSocket API进行标 ...
- [picoCTF]Insp3ct0r write up
根据提示,需要检查浏览器上的Web代码(动手翻译一下啦) (漫不经心的瞅瞅页面,curl+UUUUUUU(一只U就行)一下下,微微瞄一瞄,where is flag? fn+f12(或其它)打开源代码 ...