当前位置: 首页 > news >正文

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析

文章目录

  • 1 框架工具说明
  • 2 技术栈说明
  • 3 框架截图
  • 4 源码解析/common目录
    • 4.1 common/baseinfo.py
    • 4.2 common/creenShot.py
    • 4.3 common/logOut.py
    • 4.4 common/reportOut.py
    • 4.5 common/sendMail.py

注:
1、本文为本站首发,他用请联系作者并注明出处,谢谢!
2、源码解析/common目录


1 框架工具说明

工具说明
使用Unittest框架开源自动化测试框架,直接使用
批量或指定用例运行Unittest框架可支持此功能
log日志使用Python的logging库即可
生成HTML测试报告使用BeautifulReport模块可实现此功能
用例设计和结果分离PO模式
用户登录封装直接把登录功能模块化,使用Unittest框架中的setup,teardown即可
定制测试报告模板使用BeautifulReport模块
报告多语言使用BeautifulReport模块
截图功能使用UIAutomation的CaptureToImage方法

2 技术栈说明

技术版本及说明
PythonV3.x(本文为3.7)===编程语言支撑
UIAutomation控件的识别、定位及操作
BeautifulReport生成Html测试报告
LoggingPython自带===生成log日志
UnittestPython自带===自动化测试框架
SmtplibPython自带===邮件服务
emailPython自带===邮件服务
osPython自带===系统模块
PyCharmCommunity 2020.2汉化版
操作系统Windows10旗舰版64位

3 框架截图

4 源码解析/common目录

4.1 common/baseinfo.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/2/17 
# 文件名称:baseInfo.py
# 作用: 封装公用方法-登录模块import time
import os
import uiautomation                                                     # 引入自动化测试工具
import logging                                                          # 引入日志模块
from common.creenShot import save_creenshot                             # 引入截图功能class InitInfor(object):"""封装公用方法-登录模块"""def __init__(self):self.log = logging.getLogger()                                  # 初始化logos.system()# 酷狗音乐Testself.login_name = "xxxx"self.login_password = "yyyy"os.startfile(r"D:\KGMusic\KuGou.exe")                            # 按安装路径打开酷狗音乐self.kugou = uiautomation.WindowControl(Name="酷狗音乐")          # 定位到酷狗音乐窗口time.sleep(2)if self.kugou.ButtonControl(Name="最大化").Exists():              # 最大化窗口self.kugou.ButtonControl(Name="最大化").Click()else:passdef login(self):self.log.info("=======登录模块=======")  # 加入logself.log.info("登录")self.kugou.TextControl(Name="登录").Click()                      # 登录按钮self.kugou.HyperlinkControl(foundIndex=1).Click()               # 点击其它方式登录save_creenshot(self.kugou)self.kugou.ButtonControl(Name="关闭").Click()                    # 关闭登录窗口# 用户名、密码、登录# 同样的方法使用qq、手机号、微信等进行登录即可# 根据自己的项目修改此处的代码进行软件登录即可(后续demo默认不进行登录,只是打开登录窗口然后关闭窗口)def login_out(self):time.sleep(0.5)self.kugou.ButtonControl(Name="关闭").Click()                    # 关闭窗口退出酷狗音乐,前提是设置酷狗音乐关闭按钮为直接退出程序self.log.info("关闭窗口,退出酷狗")if __name__ == "__main__":b = InitInfor()b.login()b.login_out()

4.2 common/creenShot.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/2/17 
# 文件名称:creenShot.py
# 作用:封装截图功能并调用import timedef save_creenshot(Windows):now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))  # 获取当前时间pic_path = "../creenshot/"+now+'_screen.png'                           # 保存截图到指定路径Windows.CaptureToImage(savePath=pic_path)                              # 截图功能

4.3 common/logOut.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/2/17 
# 文件名称:logOut.py
# 作用:封装log日志功能import logging                        # 引入日志模块
import timedef log_out(log_dir, name_project):''':log_dir : 日志路径:name_project : 项目名称=>用于日志命名:return:'''now = time.strftime("%Y_%m_%d %H_%M_%S")   # 获取当前时间,格式:年月日时分秒logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename=log_dir + now + '-' + name_project + '_test_log.log',filemode='w')"""level: 打印日志的级别,INFO:详细; WARNING:警告;ERROR:错误...format: 为处理程序使用指定的格式字符串;datefmt:使用特定的时间日期格式;filename:log日志的文件名称规则;filemode:文件读写模式。"""

4.4 common/reportOut.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/2/17 
# 文件名称:reportOut.py
# 作用:封装测试报告功能import time
import unittest
from BeautifulReport import BeautifulReport as bf     # 引入BeautifulReport报告模板def report_out(test_dir, report_dir, name_project):''':test_dir: 用例路径:report_dir : 报告路径:name_project : 项目名称=>用于报告命名及描述:return:'''now = time.strftime("%Y_%m_%d %H_%M_%S")discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')      # 加载测试用例report_name = now + '-' + name_project + '_test_report.html'          # 报告名称run = bf(discover)run.report(filename=report_name, report_dir=report_dir, description=U"酷狗音乐UI自动化功能回归测试")"""filename:报告名文;report_dir:测试报告存放路径;description:报告描述;"""

4.5 common/sendMail.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/2/17
# 文件名称:sendMail.py
# 作用:封装邮件服务模块import time
import smtplib
import getpass
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import email
import osdef send_main(file_path, mail_to='xxx@126.com'):mail_from = 'zzz@126.com'f = open(file_path, 'rb')mail_body = f.read()f.close()# msg = email.MIMEMultipart.MIMEMultipart()msg = MIMEMultipart()# 构造MIMEBase对象做为文件附件内容并附加到根容器contype = 'application/octet-stream'maintype, subtype = contype.split('/', 1)# 读入文件内容并格式化data = open(file_path, 'rb')# file_msg = email.MIMEBase.MIMEBase(maintype, subtype)file_msg = MIMEBase(maintype, subtype)file_msg.set_payload(data.read())data.close()# email.Encoders.encode_base64(file_msg)encoders.encode_base64(file_msg)# 设置附件头basename = os.path.basename(file_path)file_msg.add_header('Content-Disposition', 'attachment', filename=basename)msg.attach(file_msg)print(u'msg 附件添加成功')msg1 = MIMEText(mail_body, "html", 'utf-8')msg.attach(msg1)if isinstance(mail_to, str):msg['To'] = mail_toelse:msg['To'] = ','.join(mail_to)msg['From'] = mail_frommsg['Subject'] = u'酷狗音乐UI自动化功能回归测试'msg['date'] = time.strftime('%Y-%m-%d-%H_%M_%S')print(msg['date'])smtp = smtplib.SMTP()smtp.connect('smtp.126.com')smtp.login('yyyyy@126.com', 'mmmmm')  # 登录账号和密码(密码为之前申请的授权码)smtp.sendmail(mail_from, mail_to, msg.as_string())smtp.quit()print('email has send out !')# if __name__=='__main__':
#     sendmain('../report/2017-08-18-10_18_57_result.html')

相关文章:

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析

文章目录1 框架工具说明2 技术栈说明3 框架截图4 源码解析/common目录4.1 common/baseinfo.py4.2 common/creenShot.py4.3 common/logOut.py4.4 common/reportOut.py4.5 common/sendMail.py注: 1、本文为本站首发,他用请联系作者并注明出处,谢…...

c++提高篇——queque容器

一、queque容器基本概念 Queue是一种先进先出(FIFO)的教据结构,它有两个出口 队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据。 queque容器可以形象化为生活中…...

MyBatis-XML映射文件详解

一、XML 映射器 1.概述 使用 xml 文件去配置 SQL 代码,比传统的 jdbc 简单方便,能够少写代码,减少使用成本,提高工作效率。 1.1SQL 映射文件中的顶级元素 cache – 该命名空间的缓存配置。 cache-ref – 引用其它命名空间的缓…...

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…...

webstom找不到vue全局组件

我真多服气,引入了自动组件注册 // 自动引入组建import { ElementPlusResolver } from unplugin-vue-components/resolversComponents({directoryAsNamespace: true,resolvers: [ElementPlusResolver()]}),生成了 components.d.ts 但是我在webstom中定义了标签 除非…...

ESP32设备驱动-内置霍尔磁力传感器数据读取

内置霍尔磁力传感器数据读取 文章目录 内置霍尔磁力传感器数据读取1、ESP32霍尔磁力传感器介绍2、软件准备3、硬件准备4、读取霍尔磁力传感值5、运行结果ESP32开发板具有内置霍尔效应传感器,可检测周围磁场的变化。本文将介绍如何在Arduino IDE中读取ESP32霍尔效应传感器的数据…...

2023面试准备之--mysql

文章目录mysql存储引擎索引聚簇索引和非聚簇索引事务锁MVCC机制(类似于copy on write)主从复制为什么要主从同步?怎么处理mysql的慢查询?mysql clint ---->server ----> 存储引擎 存储引擎 Innodb 是MySQL5.5版本及之后默…...

yolov5源码解读--训练策略

yolov5源码解读--训练策略超参数解读命令行参数train模型迭代超参数解读 hyp.scratch.yaml lr0: 0.0032 初始学习率 lrf: 0.12 使用余弦函数动态降低学习率(lr0*lrf) momentum: 0.843 动量 weight_decay: 0.00036 权重衰减项 warmup_epochs: 2.0 预热(…...

基于Django的员工管理系统

目录 一、新建项目 二、创建app 三、设计表结构 四、在MySQL中生成表 五、静态文件管理 六、添加页面 七、模板的继承 一、新建项目 django-admin startproject 员工管理系统 二、创建app startapp app01 三、设计表结构 app01/migrations/models.py from django.db impo…...

企业数智化转型在即,看看低代码软件公司如何做!

在信息爆炸的现代社会中,利用先进技术为企业提升办公协作效率,是一件事半功倍的事。当前,数字化转型升级已经是发展趋势,不少企业已经在朝着数智化转型方向迈进。作为一家低代码软件公司,流辰信息看到了市场发展前景&a…...

如何将pdf版的文书文字提取出来?

//在线工具地址https://ocr.bytedance.zj.cn/image/ImageText在当今信息爆炸的时代,图文并茂已经成为了一个广告宣传的常用方式。然而,图片中的文字信息往往难以获取,尤其对于那些需要快速获取信息的人们来说,阅读图片中的文字会是…...

设计模式——工厂模式

工厂模式 1.需求 抽奖活动 新用户注册即参与抽奖&#xff0c;奖品为&#xff1a;1.优惠券&#xff0c;2.优酷会员&#xff0c;3.京东卡 2.无模式 public class FreeGoodsController{public Result<?> send(AwardInfo awardInfo){int awardType awardInfo.getAward…...

PCB设计中降低噪声与电磁干扰的24个窍门

电子设备的灵敏度越来越高&#xff0c;这要求设备的抗干扰能力也越来越强&#xff0c;因此PCB设计也变得更加困难&#xff0c;如何提高PCB的抗干扰能力成为众多工程师们关注的重点问题之一。本文将介绍PCB设计中降低噪声与电磁干扰的一些小窍门。 下面是经过多年设计总结出来的…...

设计模式浅谈

什么是设计模式 设计模式是一种软件设计的思想。是在软件开发过程中&#xff0c;经过验证的、用于解决在特定环境下重复出现的、特定问题的解决方案。 设计模式的设计原则 原文链接&#xff1a;https://blog.csdn.net/qq_43471489/article/details/124067150 设计原则 1、…...

【kubernetes】使用crictl对k8s节点进行调试

crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序。 可以Github上下载最新的发布版本: https://github.com/kubernetes-sigs/cri-tools/releases 包名大小发布日期...

数字经济讨论题

自2001年以来&#xff0c;Alphabet&#xff08;Google&#xff09;已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…...

gcc/g++、动静态库、make/makefile

目录 gcc/g gcc和g的对比 "一段代码的使命" ●预处理 ●编译 ●汇编 ●链接 ●动/静态链接 make/makefile gcc/g gcc和g的对比 对于c文件而言&#xff0c;使用gcc或者g并没有什么区别。而对于cpp文件&#xff0c;在预处理、编译、汇编这三部分&#xff0c;…...

北京博奥智源,浅谈图书馆的馆情展示系统细则

功能特点&#xff1a; 1、支持智慧大屏的定制&#xff0c;内置精美的主题模板。 2、提供丰富的数据模块&#xff0c;可通过拖拽自由组合&#xff0c;配置灵活。 3、支持屏幕分辨率自定义&#xff0c;自适应屏幕大小。 4、支持背景颜色的更换&#xff0c;同时可上传图片更换背景…...

Docker----------day-mysql8主从复制

1.安装master 1.1拉取镜像 docker search mysql docker pull mysql mkdir -p /home/mysql8/data mkdir -p /home/mysql8/conf mkdir -p /home/mysql8/log1.2 2.启动交互式添加容器数据卷 #不添加容器数据卷 docker run -p 3307:3306 --name mysql_master -e MYSQL_ROOT_PASS…...

【Nginx】【一】Nginx简介

Nginx简介 背景介绍 Nginx&#xff08;“engine x”&#xff09;一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】&#xff0c;同时也是一个【POP3/SMTP/IMAP代理服务器】&#xff0c;是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的&#xff0c;Nginx的第一个版本是200…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...