前言

整个框架的开发及调通是在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】系列(七)测试框架的设计和开发的更多相关文章

  1. 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明

    一.写在前面 真的人这一散漫惯了,收心就很难了,上午把小程序开发环境启动后,在QQ游戏里,杀了三把象棋,5把2D桌球,一上午没了,还是没法心静下来去学点东西. 那就老样子,逼着自己开始,找到 &quo ...

  2. 腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)

    写在前面 又有好久没更新小程序自动化测试框架Minium系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解! 上篇文章为大家分享关于Minium中Minium.App模块的API 使用,接 ...

  3. 腾讯出品小程序自动化测试框架【Minium】系列(一)环境搭建之第一个测试程序

    一.什么是Minium? minium是为小程序专门开发的自动化框架,使用minium可以进行小程序UI自动化测试. 当然,它的能力不仅仅局限于UI自动化, 比如: 使用minium来进行函数的moc ...

  4. 腾讯出品小程序自动化测试框架【Minium】系列(三)元素定位详解

    写在前面 昨天转发这篇文章时,看到群里有朋友这样说: 这么卷吗?这个框架官方已经不维护了. 姑且不说卷不卷的问题,要是能卷明白,别说还真不错: 不维护又怎样?我想学习,想会,分享给很期待这系列的文章的 ...

  5. 腾讯出品小程序自动化测试框架【Minium】系列(四)API详解(上)

    写在前面 不知道是不是因为之前出过书的原因,在写教程之类的文章,会潜意识有自带目录和章节的感觉在里面,有点说不出的感觉吧. 上篇文章我们介绍了关于元素定位的使用方法,这篇文章将为大家分享关于Miniu ...

  6. 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理

    写在前面 我发现一件神奇的事,当你学一门新技术或者新的知识点遇到不会的时候,真的可以先放一放,第二天再去学习,也许说不定也就会了. 为什么这么说? 昨天文章断断续续的写了近一天,有一个组件不认识,自然 ...

  7. 微信小程序自动化测试最佳实践(附 Python 源码)

    本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善,很多公司的产品业务形态逐渐从 App 延升到微信小程序.微信公众号等.小程 ...

  8. appium+java(五)微信小程序自动化测试实践

    前言: 上一篇<appium+java(四)微信公众号自动化测试实践>中,尝试使用appium实现微信公众号自动化测试,接着尝试小程序自动化,以学院小程序为例 准备工作 1.java-cl ...

  9. [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

    因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

  10. 基于 Autojs 的 APP、小程序自动化测试 SDK

    原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持 ...

随机推荐

  1. Android studio的使用2

    运行按钮First activity: package com.example.activity;import androidx.appcompat.app.AppCompatActivity;imp ...

  2. selenium定位元素位置-xpath

    xpath定位元素位置: 1.定位父兄节点: <div> <span>我是span1标签</span> <a id="1" href=&q ...

  3. 20181224《网络攻防技术》Exp 8 Web综合

    20181224<网络攻防技术>Exp 8 Web综合 目录 20181224<网络攻防技术>Exp 8 Web综合 相关知识点总结 web前端 web后端 数据库编程 实验内 ...

  4. Linux 配置nginx 代理tomcat,配置ssl

    我就直接干活不废话: 配置文件nginx, nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_l ...

  5. mysql可参考的查询

    获取批量修改列为大写SQL脚本 1 SELECT 2 concat( 'alter table ', TABLE_NAME, ' change column ', COLUMN_NAME, ' ', ...

  6. Python笔记(3)——列表二:操作列表(Python编程:从入门到实践)

    一.遍历列表 1. 遍历整个列表:使用for循环 1 colors=['red','yellow','blue','green'] #定义列表 2 for color in colors: #使用循环 ...

  7. IT工具知识-14:如何通过adb操作安卓剪切板?

    1.安装apk 下载地址 2.运行服务(每次重启系统都需要运行一次) adb shell am startservice ca.zgrs.clipper/.ClipboardService 3.设置剪 ...

  8. Linux(CentOS)安装脚本

    此文以CentOS为例,乌班图的是有区别的,请参照https://www.cnblogs.com/takako_mu/p/11725733.html. 安装.Net Core (能访问外网的情况下采用 ...

  9. c# datagridview列宽自适应设置

  10. linux环境变量配置错误后命令无法使用解决方案

    环境变量配置时多复制了一个空格,导致执行source /etc/profile后提示错误,无法编辑和查看文件 解决方案: 查看当前系统变量:echo $PATH 临时修改:export PATH=/u ...