一文带你了解UI自动化测试框架

news2024/11/19 18:43:44

Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用

------login_business.py


from Page_Object.Common_Page.login_page import Login_Page
from HTMLReport import logger
import time


def login(driver, username, password):
    """
    登录业务
    :param driver:浏览器驱动
    :param username:用户名
    :param password:密码
    :return:None
    """
    logger().info(f"使用用户名:{username},密码:{password}进行登陆")
    login_page = Login_Page(driver)
    login_page.send_username(username)
    login_page.send_password(password)
    login_page.submit()
    time.sleep(2)

----Base_url.py:对应的url地址

2、Common:与业务无关的公共模块,如对Selenium的二次封装,方便后期的调用,还有一些工具类,如在读取数据时需要对读取文件进行封装

3、PageOBject:这个就应该不用多说了,页面元素的封装,这个根据自己公司系统的业务去做分层封装(不做过多解释)

4、report:测试报告

5、TestCase:测试用例层,下面以logincase为例子

---logincase.py

import unittest
from Business.Base_url import url_index
import ddt
from Common.tools.read_txt import read_txt
from HTMLReport import logger
from Page_Object.Common_Page.index_page import Index_Page
from Common.selenium_library import SeleniumBase
from Business.login_business import login


@ddt.ddt
class Test_login(unittest.TestCase):

    def setUp(self):
        self.driver = SeleniumBase().get_web_driver()

    def tearDown(self):

        SeleniumBase(self.driver).quit()

    @ddt.unpack
    @ddt.data(*read_txt('TestData/login_user_password.txt'))
    def test_login(self, username, password, assert_type):
        se = SeleniumBase(self.driver)
        se.get(url_index)
        login(self.driver, username, password)
        se.add_page_screen_shot()

        if assert_type == '1':
            logger().info("断言登陆成功")
            text = Index_Page(self.driver).login_success()

            self.assertIn("测试", text, '登陆成功断言')

        elif assert_type == "2":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "3":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "4":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        else:
            logger().info(f"未知断言类型{assert_type}")
            self.assertTrue(False, "未知断言类型")

6、TestData:测试数据,对应用例的数据都是在这里去取

7、TestSuite:测试套件,以登录套件为例

---loginsuite.py

import unittest

from TestCase.LoginCase import login_case


def return_suite():
    suite=unittest.TestSuite()

    loader=unittest.TestLoader()

    suite.addTests(loader.loadTestsFromTestCase(login_case.Test_login))

    return suite

8、browser.ini:浏览器配置文件

[local]
local_browser = False
wait_time = 10

[browser]
name = chrome
;name = firefox
;name = ie
window_width =
window_height =

[grid]
command_executor = http://127.0.0.1:4444/wd/hub
headless = False
proxy =

9、run.py:整体运行文件

import unittest
from TestSuite.LinesSuite import lines_suite
from TestSuite.LinesSuite import itinerary_suite

import HTMLReport

suite = unittest.TestSuite()

# suite.addTests(login_suite.return_suite())
suite.addTests(lines_suite.return_suite())
suite.addTests(itinerary_suite.return_suite())

HTMLReport.TestRunner(
    report_file_name="test",
    title='WEB UI 自动化',
    description='登陆',
    thread_count=3
).run(suite)


10、整体框架结构图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九龙证券|首月定增市场“开门红” 上市公司密集融资谋扩产

2023年首月,A股定增市场迎来“开门红”。 据上海证券报记者统计,年初至今,已有35家公司完成定增,合计募资986.86亿元,较上年同期的477.3亿元大幅增长超100%,延续了2022年末的高位运行态势。同时&#xff0c…

前端项目发布后,如何使正在使用的用户更新为最新的版本?

1.背景 每次项目上线后,异常监控总是零零散散报一些资源加载或者解析失败的告警 仔细对比chunk的hash值会发现已经是上一版本的js文件为什么会出现这个问题呢?也不难想到,项目是单页应用,页面使用懒加载分多个chunk打包&#xff…

SDP零信任网络安全架构

安全狗零信任SDP接入解决方案基于“以身份认证为中心,以信任为基础,持续动态授权认证”的理念,打造企业全方位立体业务访问安全体系。 其SDP零信任网络安全架构如下图: SDP零信任产品优势 1、多维度终端环境感知 系统风险感知&…

浅谈--声调

声调 根据声调的有无,我们可以把世界上的语言分为声调语言和非声调语言两大类。 非声调语言,并不是说音节没有高低升降的音高变化,只是这种变化只能改变语气作用,并不能区别意义。如:在英语单词book,音高…

Nacos 初始

1.Nacos 的安装使用。 nacos的安装步骤 1.端口配置 Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。 如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口&am…

(考研湖科大教书匠计算机网络)第三章数据链路层-第五节:点对点协议PPP

专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:点对点协议(PPP)概述二:PPP协议组成部分三:PPP协议帧格式四:PPP协议的透明传输(1)字节填充法…

磨金石教育摄影技能干货分享|优秀摄影作品如何表现创意与思想的

在摄影活动中并不是简单的利用镜头把事物拍下来,而是要尽量的融入作者对当时当地事物的情意表达出来。利用摄影技术,因时制宜展现个人的创意,然后表达自己的思想。下面给大家分享一组摄影大赛获奖作品,看看这些获奖作品如何做到的…

vue(iviewui) 输入框历史记录

安装:npm install good-storage -S 缓存cache.js: /*把搜索的结果保存下来*/ /*用export把方法暴露出来*/ /*定义存储搜索的key _search_定义内部使用的key*/ let searches_list [] const SEARCH_MAX_LENGTH15 /*插入方法 arr存储的数据 val传入存储的值 comp…

leetcode-每日一题-1664-生成平衡数组的方案数(中等,动态规划)

时间长不做动态规划的题目,现在突然看过去有些生疏,第一眼看到这个题目想了一下暴力,然后突然注意到了题目的难度是中等,力扣里面的中等难度的题目都是没有暴力可以做出来的,目前我做这么多题来看的话,第一…

StarRocks荣获开源中国“2022 年度优秀开源技术团队”

近日,国内知名开源技术社区开源中国(OSCHINA),综合了平台上各大认证官方技术团队、开源社区账号年度发表的内容频率及质量、开展各种活动运营积极性等多方面表现,向StarRocks颁发了 OSCHINA“2022年度优秀开源技术团队…

编译原理学习笔记19——语义分析和中间代码生成4

编译原理学习笔记19——语义分析和中间代码生成419.1 常用的控制语句19.2 控制语句的属性文法19.3 控制语句的属性计算19.4 一遍扫描翻译控制语句19.5 一遍扫描翻译控制语句示例19.1 常用的控制语句 常用的控制语句 S → if E then S1S → if E then S1 else S2S → while E …

机器学习笔记之生成对抗网络(二)全局最优解的求解逻辑

机器学习笔记之生成对抗网络——全局最优解的求解逻辑引言回顾:生成对抗网络的判别过程关于生成对抗网络的一些特性最优解的求解过程引言 上一节介绍了生成对抗网络,并介绍了其判别过程,本节将介绍关于模型参数的求解逻辑。 回顾&#xff1…

建立建筑领域科学的碳排放核算方法(江亿)

中国工程院院士、清华大学江亿教授受邀参加2022年12月28日“2022中国建筑节能协会年会暨第五届全国建筑节能与绿色建筑技术创新大会”并作了题为“建立建筑领域科学的碳排放核算方法”的报告。 实现能源转型,由碳基能源转为零碳能源,是中央确定的未来战…

九龙证券|锂离子电池在安全性能上应当满足哪些条件?

锂离子电池具有分量轻、容量大、无回忆效应等优势,因而得到了普遍运用——今朝的许多数码设备都采用了锂离子电池作电源,虽然其价格相对来说比较昂贵。锂离子电池的能量密度很高,它的容量是同分量的镍氢电池的1.5~2倍,而且具有很低…

Redis集群搭建

Redis集群搭建1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试基于CentOS7下的Redi…

数据库session分析表

目录 Active Session 活动会话 gv$active_session_history 每秒采集一次 dba_hist_active_sess_history 每10秒采集一次 背景 说明: 常用sql 直接使用V$ACTIVE_SESSION_HISTORY的sql 与其他表和视图共同查询…

神经网络数学原理与编码逻辑(一) 无隐层模型

概述 几年前就想写这篇文章,但是要上班应付各种工作内容,在解析神经网络的理论问题上也是断断续续,加上个人能力有限,很多问题并没有研究的很明白,以及神经网络本身高维问题的复杂性,导致这个问题的理解也…

OAuth2代码流程演示

目录 一,创建项目 二,项目结构 一,创建项目 新建项目时,如果换了工作区间我们一定要记得改maven地址,不然下载插件时不仅占用C盘内存,还会下载的很慢。 导入项目 导入新项目后就会下载新的插件&#xf…

消息队列简介

提高系统性能首先考虑的是数据库的优化,之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中,针对数据库需要注意的事项。但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库…

Unity可用 运行时语音合成(文本转语音)插件 RT-Voice PRO

Unity语音合成文本转语音插件 RT-Voice PRO前言一、导入RT-Voice PRO插件二、使用步骤1.先看自带例子(01-Speech)2.自行配置总结前言 提示:这个插件在Unity Asset Store 卖 78美刀,确实买不起啊。 😂 AssetStore下载链接 文章最后…