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

news/发布时间2024/5/15 6:31:32

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 timedef 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").textself.assertIn("立即登录", text, '登陆失败断言')elif assert_type == "3":text = self.driver.find_element_by_id("submit").textself.assertIn("立即登录", text, '登陆失败断言')elif assert_type == "4":text = self.driver.find_element_by_id("submit").textself.assertIn("立即登录", text, '登陆失败断言')else:logger().info(f"未知断言类型{assert_type}")self.assertTrue(False, "未知断言类型")

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

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

---loginsuite.py

import unittestfrom TestCase.LoginCase import login_casedef 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_suiteimport HTMLReportsuite = 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.bcls.cn/BEGY/304.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

npm ERR! network This is a problem related to network connectivity.

遇到 ETIMEDOUT 错误时,这表明npm尝试连接到npm仓库时超时了,这通常是由网络连接问题引起的。这可能是因为网络不稳定、连接速度慢、或者你的网络配置阻止了对npm仓库的访问。以下是一些解决这个问题的步骤: 1. 检查网络连接 首先&#xff…

K8s进阶之路-核心概念/架构:

架构:Master/Node Master组件--主控节点{ 负责集群管理(接收用户事件转化成任务分散到node节点上)} Apiserver: 资源操作的唯一入口,提供认证、授权、API注册和发现等机制 Scheduler : 负责集群资源调度&am…

linux登录后提示语

linux登录后的提示一般是这样的: Last failed login: Wed Feb 14 19:18:07 CST 2024 from xx.xx.xx.xx on ssh:notty There were 138 failed login attempts since the last successful login. Last login: Tue Feb 13 09:08:11 2024 from xx.xx.xx.xxWelcome to H…

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …

MySQL篇之覆盖索引

一、定义 覆盖索引是指查询使用了索引&#xff0c;并且需要返回的列&#xff0c;在该索引中已经全部能够找到。 二、例子 1. id为主键&#xff0c;默认是主键索引。 2. name字段为普通索引。 select * from tb_user where id 1 覆盖索引 select id&#xff0c;na…

渗透测试练习题解析 3(CTF web)

1、[网鼎杯 2020 朱雀组]phpweb 1 考点&#xff1a;反序列化漏洞利用 进入靶场&#xff0c;查看检查信息&#xff0c;发现存在两个参数 func 和 p 查看页面源代码 payload&#xff1a;funcfile_get_contents&pphp://filter/resourceindex.php 整理后&#xff0c;就是 PHP 代…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

【HTML】交友软件上照片的遮罩是如何做的

笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐&#xff0c;&#x1f436;。于是就去下了一些交友软件来排遣寂寞。可惜的是&#xff0c;有些交友软件真不够意思&#xff0c;连一些漂亮小姐姐的图片都要进行遮罩&#xff0c;完全不考虑兄弟们的感受,&#x1f620;。所…

Mysql Day05

sql性能分析 sql执行频率 show global status like Com_______ 慢查询日志 执行时间超过10秒的sql语句 profile详情 show profiles帮助我们了解时间都耗费到哪里了 #查看每一条sql的耗时情况 show profiles#查看指定query_id的sql语句各个阶段的耗时情况 show profile fo…

K8s进阶之路-Pod(创建过程)/Pause/Replicas

Pod&#xff1a; 是一个容器组&#xff0c;基于容器组管理容器&#xff08;建议一个pod创建一个应用程序容器必须是紧耦合实例放在一起&#xff09; pause容器&#xff1a; 实现容器与容器之间的共享 &#xff08;在容器创建之前&#xff0c;底层都要先创建一个容器叫pause&…

Linux:信号的处理

文章目录 信号处理 本篇总结的是关于信号的处理 信号处理 在之前有这样的观点&#xff1a;信号在合适的时候被处理好&#xff0c;当进程收到信号后&#xff0c;当前进程可能在做优先级更高的事&#xff0c;所以它来不及处理这个信号&#xff0c;那么就会把这个信号暂时保存起…

解读OpenAI视频生成模型Sora背后的原理:Diffusion Transformer

Diffusion Models视频生成-博客汇总 前言&#xff1a;OpenAI最近推出的视频生成模型Sora在效果上实现了真正的遥遥领先&#xff0c;很多博主都介绍过Sora&#xff0c;但是深入解读背后原理的博客却非常少。Sora的原理最主要的是核心模型主干《Scalable Diffusion Models with T…

2024.2.10 HCIA - Big Data笔记

1. 大数据发展趋势与鲲鹏大数据大数据时代大数据的应用领域企业所面临的挑战和机遇华为鲲鹏解决方案2. HDFS分布式文件系统和ZooKeeperHDFS分布式文件系统HDFS概述HDFS相关概念HDFS体系架构HDFS关键特性HDFS数据读写流程ZooKeeper分布式协调服务ZooKeeper概述ZooKeeper体系结构…

【精品】关于枚举的高级用法

枚举父接口 public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** param code* param clazz* return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonN…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充&#xff1a;MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

外包干了10个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【漏洞复现-通达OA】通达OA video_file.php 任意文件下载漏洞

一、漏洞简介 通达OA video_file.php文件存在任意文件下载漏洞&#xff0c;攻击者通过漏洞可以读取服务器敏感文件。 二、影响版本 ● 通达OA2011 三、资产测绘 ● hunterapp.name"通达 OA" ● 特征 四、漏洞复现 GET /general/mytable/intel_view/video_file.…

vmware workstation群晖虚拟机vmdk文件导出

为了防止群晖虚拟机中整个挂掉&#xff0c;里面的文件导不出来&#xff0c;尝试直接从vmdk中获取内容。 1、想采用diskgenius去读取文件&#xff0c;发现volume1是空的。只能读取群晖的系统文件。 2、选择另一个linux系统的虚拟机&#xff0c;选择对应的vmdk 3、如果有文件管理…

ElasticSearch之Mapping

写在前面 本文看下es的mapping的设置。es支持两种mapping&#xff0c;一种式dynamic mapping&#xff0c;另外一种是显式的mapping设置。分别来看下。 在正式开始之前我们需要先看下es提供的字段数据类型: 1&#xff1a;dynamic mapping 我们在使用关系型数据库的时候必须…

选择大语言模型:2024 年开源 LLM 入门指南

作者&#xff1a;来自 Elastic Aditya Tripathi 如果说人工智能在 2023 年起飞&#xff0c;这绝对是轻描淡写的说法。数千种新的人工智能工具被推出&#xff0c;人工智能功能被添加到现有的应用程序中&#xff0c;好莱坞因对这项技术的担忧而戛然而止。 甚至还有一个人工智能工…
推荐文章