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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析

1 框架工具说明

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

2 技术栈说明

技术 版本及说明
Python V3.x(本文为3.7)===编程语言支撑
UIAutomation 控件的识别、定位及操作
BeautifulReport 生成Html测试报告
Logging Python自带===生成log日志
Unittest Python自带===自动化测试框架
Smtplib Python自带===邮件服务
email Python自带===邮件服务
os Python自带===系统模块
PyCharm Community 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()                                  # 初始化log
        os.system()
        # 酷狗音乐Test
        self.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:
            pass

    def login(self):
        self.log.info("=======登录模块=======")  # 加入log
        self.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 time


def 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 time


def 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 os


def 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_to
    else:
        msg['To'] = ','.join(mail_to)
    msg['From'] = mail_from
    msg['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')
目录
相关文章
|
5天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
25天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
47 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
14天前
|
存储 数据采集 数据格式
Python自动化Office文档处理全攻略
本文介绍如何使用Python自动化处理Word、Excel和PDF文档,提升办公效率。通过安装`python-docx`、`openpyxl`、`pandas`、`PyPDF2`和`pdfplumber`等库,可以轻松实现读取、修改、创建和批量处理这些文档。具体包括:自动化处理Word文档(如读取、修改内容、调整样式),Excel文档(如读取、清洗、汇总数据),以及PDF文档(如提取文本和表格数据)。结合代码示例和实战案例,帮助你掌握高效办公技巧,减少手动操作的错误率。
35 1
|
14天前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
26 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
|
2月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
106 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
2月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
131 15
|
2月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
91 3
|
4月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
144 2
|
7天前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
5天前
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。

热门文章

最新文章

推荐镜像

更多