python web自动化(分布式测试Grid)

Grid介绍

        Selenium Grid 是 Selenium 提供的⼀个⼯具,⽤于⽀持在多台计算机上并⾏运⾏测试。

        它允许将测试分发到不同的机器和浏览器组合上,同时收集结果。

  1.并⾏执⾏测试⽤例:在不同的机器上并⾏执⾏测试⽤例,从⽽加速整个测试过程。每个

          节点可以并⾏地运⾏测试,⼀般⽤于⼤型测试套件和⼤规模的项⽬

        2.多浏览器和多平台测试:在不同的机器上同时运⾏测试,可以同时在不同的浏览器和操作系统上执⾏测试。确保应⽤程序的跨浏览器和跨平台兼容性⾮常重要\

        3. 资源最⼤化利⽤: 可以利⽤⽹络上多台机器的资源,⽽不是仅仅依赖于本地机器的资源。可以更有效地使⽤硬件资源,尤其是在⼤规模测试或者需要⼤量浏览器并⾏执⾏的情况下
        4.分布式测试环境: 可以设置为在不同的物理位置、不同的⽹络环境或不同的云服务上运⾏测试。这允许你创建 ⼀个分布式的测试环境,以模拟真实的不同使⽤情境

        5.提⾼可靠性: 在分布式环境下执⾏测试可以提⾼测试的可靠性。如果⼀个节点失败,其他节点仍然可以继续执⾏测 试,从⽽减⼩了整个测试过程受到⼀个节点失败的影响

Grid快速⼊⻔

            1.首先我们要配置jdk的运行环境

             2.安装google浏览器,并且配置chromedriver驱动

              3.下载selenium-server-4.5.0.jar插件

                https://github.c om/SeleniumHQ/selenium/releases/tag/selenium-4.5.0

环境都配置好后,在下载的selenium-server-4.5.0.jar所在的⽬录层级打开cmd,并且输⼊命令启动grid:
                

⽂件名(selenium-server-<version>.jar)尽可能的⽤tab⾃动补全,
防⽌⼿动输⼊有误
示例:
java -jar selenium-server-4.5.0.jar standalone
注:启动服务之后,切记不要关闭cmd窗⼝,否则服务就会被终⽌,
⽆法访问

启动之后,⽤google浏览器打开: http://127.0.0.1:4444,出现如下⻚⾯及成功
                

 将执⾏⽤例的机器添加到监控端,在代码中进⾏如下配置

                

import allure
import pytest
from selenium import webdriver@pytest.fixture()
def browser():global driver# 01 用例的前置步骤,初始化浏览器对象chrome_options = webdriver.ChromeOptions()driver = webdriver.Remote(command_executor="http://127.0.0.1:4444",options=chrome_options)# 02 用例执行,返回driveryield driver# 03 用例的后置步骤,关闭浏览器driver.quit()@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport():# 获取测试用例的执行结果,yield,返回给out对象,然后再去转化为result对象out = yield"""从result对象out获取调用结果的测试报告,返回一个report对象report对象的属性:包括when(setup,call,teardown等三个值)、nodeid(测试用例的名称)、outcome(用例的执行结果, passed, failed)"""report = out.get_result()  # 返回一个report对象# 仅仅获取用例call阶段的执行结果,不包含setup、teardownif report.when == "call":# 获取用例call执行结果为失败的情况xfail = hasattr(report, "wasxfail")  # hasattr方法会:返回对象是否具有给定名称的属性# 如果测试用例被跳过且标记为预期失败,或者测试用例执行失败且不是预期失败if (report.skipped and xfail) or (report.failed and not xfail):# 添加allure报告截图with allure.step("添加失败的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "失败的截图",allure.attachment_type.PNG)elif report.passed:# 如果测试用例执行通过,添加allure报告截图with allure.step("添加成功的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "成功的截图",allure.attachment_type.PNG)

Grid模式详解

        1.Standalone(独⽴模式)

                Standalone将所有Grid组件⽆缝地组合为⼀个。以独⽴模式运⾏Grid可以在单个进程中                 使⽤单个命令获得功能完整的Grid。单机只能在⼀台机器上运⾏

                Standalone也是运转Selenium Grid最简单的模式。默认情况下,服务器将监听                              http://localho st:4444上的RemoteWebDriver请求。默认情况下,服务器将从System                      PATH(环境变量)中检测可⽤的驱动程序

        2.Hub and Node (中⼼和节点模式)

                中⼼和节点是使⽤最多的模式,因为它允许:
                将不同的机器组合在⼀个Grid中

                例如,使⽤不同操作系统和/或浏览器版本的机器

                使⽤统⼀⼊⼝点来在不同的环境中运⾏WebDriver测试在不破坏Grid的情况下,增加或                   减少组件

           3.Hub(主控制节点)

                Hub 是 Selenium Grid 的中⼼控制节点,负责管理和分发测试请求。

              Hub 接收来⾃测试脚本的请求,然后将这些请求分发给连接到 Grid 的各个 Node 上执                   ⾏。

                功能:
        4.Node(执⾏测试的节点)

                Node 是 Selenium Grid 中的⼯作节点,负责实际执⾏测试⽤例。

                 ⼀个 Grid 中可以有多个 Node,每个 Node 都可以运⾏在不同的机器上,甚⾄可以具有                 不同的操作系统和浏览器组合。

                同⼀机器上的多个节点
                 设置不同的端⼝
                

java -jar selenium-server-4.5.0.jar node --port 6666

               

运⾏的main.py⽂件采⽤多线程的运⾏⽅式
        

import pytest
if __name__ == '__main__':
pytest.main(['-vs', '-n', '3'])

什么时候应该使⽤Grid

        多浏览器和多平台测试
     1.   当你需要在不同的浏览器类型、版本和操作系统上同时运⾏测试时,Selenium

        Grid 是⼀个理想的选择。它允许在多个节点上并⾏运⾏测试,每个节点可以代表不同的浏览          器和操作系统组合

        2.减少测试执⾏时间

            对于⼤型测试套件,Selenium Grid 可以显著减少测试执⾏时间。通过并⾏执⾏测试,你可以在相同的时间内完成更多的测试任务,提⾼测试效率

        3.提⾼测试覆盖率
        通过在不同浏览器和平台上并⾏运⾏测试,你可以更全⾯地测试应⽤程序,确保其在各种环境下的稳定性和⼀致性
        4.快速反馈
        缩短测试套件执⾏的时间,可以更快地获得测试结果。这对于在持续集成和持续交付环境中迅速反馈开发⼈员和团队⾮常重要
        5. 资源最⼤化
        利⽤多台计算机(节点)上的浏览器实例,充分利⽤可⽤资源,提⾼测试并⾏性,避免资源浪费
        6. ⾃动化平台兼容性测试
                当你需要测试应⽤程序在不同浏览器和平台上的兼容性时,Selenium Grid 是⼀个强⼤的⼯具。它使你能够同时在多个环境中验证应⽤程序的性能和功能
 

服务Grid的组件(了解)        

    主要包括路由器(Router)、分发器(Distributor)、会话映射(Session Map)、新会               话队列(New Session Queue)、节点(Node)和事件总线(Event Bus)

        

封装日志

               我们新建一个pytest.ini的文件

                

[pytest]
log_cli = true
log_cli_level = INFO
log_cli_fromat = %(asctimes)s [%(levelname)s] %(message)s
log_cli_date_fromat = %Y-%m-%d %H:%M:%S
log_file = pytest.log

各个名词的解释

        

[pytest]
; 这个里面的变量名都是固定的,不能随意修改
; 启用在命令行界面(CLI)上输出日志。
log_cli = true; 设置输出日志级别
log_cli_level = INFO; 指定命令行页面(CLI)上日志输出的格式
; 日志记录的时间(年月日时分秒,代码格式: %Y-%m-%d %H:%M:%S)
; 日志级别
; 日志消息
log_cli_fromat = %(asctimes)s [%(levelname)s] %(message)s; 设置时间格式
log_cli_date_fromat = %Y-%m-%d %H:%M:%S; 设置日志保存文件
log_file = pytest.log

应用到conftest中

        

import loggingimport allure
import pytest
from selenium import webdriver@pytest.fixture()
def browser():global driver# 01 用例的前置步骤,初始化浏览器对象driver = webdriver.Chrome()# 02 用例执行,返回driveryield driver# 03 用例的后置步骤,关闭浏览器driver.quit()@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):# 获取测试用例的执行结果,yield,返回给out对象,然后再去转化为result对象out = yield"""从result对象out获取调用结果的测试报告,返回一个report对象report对象的属性:包括when(setup,call,teardown等三个值)、nodeid(测试用例的名称)、outcome(用例的执行结果, passed, failed)"""report = out.get_result()  # 返回一个report对象# 仅仅获取用例call阶段的执行结果,不包含setup、teardownif report.when == "call":# 修改之前的版本:# logging.info("--------->日志的头部<---------")# logging.info(f"用例ID:{report.nodeid}")# logging.info(f"测试结果:{report.outcome}")# logging.info(f"故障标识:{report.longrepr}")# logging.info(f"异常信息:{call.excinfo}")# logging.info(f"用例耗时:{report.duration}")# logging.info("--------->日志的尾部<---------")# 修改之后的版本:allure.attach("--------->日志的头部<---------")allure.attach(f"用例ID:{report.nodeid}", name="用例ID")allure.attach(f"测试结果:{report.outcome}", name="测试结果")allure.attach(f"故障标识:{report.longrepr}", name="故障标识")allure.attach(f"异常信息:{call.excinfo}", name="异常信息")allure.attach(f"用例耗时:{report.duration}", name="用例耗时")allure.attach("--------->日志的尾部<---------")# 获取用例call执行结果为失败的情况xfail = hasattr(report, "wasxfail")  # hasattr方法会:返回对象是否具有给定名称的属性# 如果测试用例被跳过且标记为预期失败,或者测试用例执行失败且不是预期失败if (report.skipped and xfail) or (report.failed and not xfail):# 添加allure报告截图with allure.step("添加失败的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "失败的截图",allure.attachment_type.PNG)elif report.passed:# 如果测试用例执行通过,添加allure报告截图with allure.step("添加成功的截图 ---> "):allure.attach(driver.get_screenshot_as_png(), "成功的截图",allure.attachment_type.PNG)


 

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

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

相关文章

Vulhub——adminer

文章目录 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;远程文件读取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

基于SpringBoot+Vue的人事管理系统

引言 目前,人事管理的系统大都是CS架构的大型系统,很少有面向机关,事业单位内部的基于BS架构的微型人事系统,因此.开发一个基于BS架构的人事信息管理系统是非常必要的.但是基于BS架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全…

第六节:带你全面理解vue3 浅层响应式API: shallowRef, shallowReactive, shallowReadonly

前言 前面两章,给大家讲解了vue3中ref, reactive,readonly创建响应式数据的API, 以及常用的计算属性computed, 侦听器watch,watchEffect的使用 其中reactive, ref, readonly创建的响应式数据都是深层响应. 而本章主要给大家讲解以上三个API 对应的创建浅层响应式数据的 API,…

【STM32单片机】----实现LED灯闪烁实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现

在现代数据分析中&#xff0c;经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术&#xff0c;可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘&#xff0c;以帮助您发现数据中的有趣模式。 一、引言 1. 简要介绍关联规则学习…

动态路由实验—OSPF

动态路由协议实验-------OSPF 链路状态路由选择协议又被称为最短路径优先协议&#xff0c;它基SPF&#xff08;shortest path first &#xff09;算法 实验要求&#xff1a;各个PC之间能够互通 1.四台PC配置如下 PC1 PC2 PC3 PC4 2.配置各个交换机的口子的IP R1 <HUAWE…

spiderfoot一键扫描IP信息(KALI工具系列九)

目录 1、KALI LINUX简介 2、spiderfoot工具简介 3、在KALI中使用spiderfoot 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 web访问 4.2 扫描并进行DNS解析 4.3 全面扫描 5、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多…

基于docxtpl的模板生成Word

docxtpl是一个用于生成Microsoft Word文档的模板引擎库。它结合了docx模块和Jinja2模板引擎&#xff0c;使用户能够使用Microsoft Word模板文件并在其中填充动态数据。这个库提供了一种方便的方式来生成个性化的Word文档&#xff0c;并支持条件语句、循环语句和变量等控制结构&…

如何在 Elasticsearch 中选择精确 kNN 搜索和近似 kNN 搜索

作者&#xff1a;来自 Elastic Carlos Delgado kNN 是什么&#xff1f; 语义搜索&#xff08;semantic search&#xff09;是相关性排名的强大工具。 它使你不仅可以使用关键字&#xff0c;还可以考虑文档和查询的实际含义。 语义搜索基于向量搜索&#xff08;vector search&…

大数据工具之HIVE-参数调优,调度乱码(二)

一、调度乱码 在利用HUE工具,搭建WORKFLOW流程的过程中,如果直接执行hivesql数据正常,不会出现乱码现象,如果利用WORKFLOW搭建的流程,进行数据的拉取,会出现数据中文乱码现象,这些乱码主要是由于select 中的硬编码中文导致出现的现象 具体现象如下: select case when …

TG5032CGN TCXO 超高稳定10pin端子型适用于汽车动力转向控制器

TG5032CGN TCXO / VC-TCXO是一款应用广泛的晶振&#xff0c;具有超高稳定性&#xff0c;CMOS输出和使用晶体基振的削波正弦波输出形式。且有低相位噪声优势&#xff0c;是温补晶体振荡器(TCXO)和压控晶体振荡器(VCXO)结合的产物&#xff0c;具有TCXO和VCXO的共同优点&#xff0…

微信小程序上线必备:SSL证书申请以及安装

一、认识ssl证书 1、ssl证书是什么&#xff1f; SSL证书&#xff0c;全称Secure Socket Layer Certificate&#xff0c;是一种数字证书&#xff0c;它遵循SSL&#xff08;现在通常指TLS&#xff0c;Transport Layer Security&#xff09;协议标准&#xff0c;用于在客户端&…

SpringCloud系列(26)--OpenFeign超时控制

前言&#xff1a;在上一章节中我们简单的介绍了如何使用OprnFeign去调用微服务&#xff0c;因为消费侧和服务侧是两个不同的微服务&#xff0c;这样可能会出现超时的现象&#xff0c;例如服务侧需要3秒处理任何才能返回结果&#xff0c;但消费侧可能2秒就断开连接了&#xff0c…

【深度学习】2.单层感知机

目标&#xff1a; 实现一个简单的二分类模型的训练过程&#xff0c;通过模拟数据集进行训练和优化&#xff0c;训练目标是使模型能够根据输入特征正确分类数据。 演示: 1.通过PyTorch生成了一个模拟的二分类数据集&#xff0c;包括特征矩阵data_x和对应的标签数据data_y。标签…

加密与安全_AES RSA 密钥对生成及PEM格式的代码实现

文章目录 RSA&#xff08;非对称&#xff09;和AES&#xff08;对称&#xff09;加密算法一、RSA&#xff08;Rivest-Shamir-Adleman&#xff09;二、AES&#xff08;Advanced Encryption Standard&#xff09; RSA加密三种填充模式一、RSA填充模式二、常见的RSA填充模式组合三…

新业务 新市场 | 灵途科技新品亮相马来西亚亚洲防务展

5月6日&#xff0c;灵途科技携新品模组与武汉长盈通光电&#xff08;股票代码&#xff1a;688143&#xff09;携手参加第18届马来西亚亚洲防务展。首次亮相海外&#xff0c;灵途科技便收获全球客户的广泛关注&#xff0c;为公司海外市场开拓打下坚实基础。 灵途科技与长盈通共同…

Dbs封装_连接池

1.Dbs封装 每一个数据库都对应着一个dao 每个dao势必存在公共部分 我们需要将公共部分抽取出来 封装成一个工具类 保留个性化代码即可 我们的工具类一般命名为xxxs 比如Strings 就是字符串相关的工具类 而工具类 我们将其放置于util包中我们以是否有<T>区分泛型方法和非泛…

Python并发编程学习记录

1、初识并发编程 1.1、串行&#xff0c;并行&#xff0c;并发 串行(serial)&#xff1a;一个cpu上按顺序完成多个任务&#xff1b; 并行(parallelism)&#xff1a;任务数小于或等于cup核数&#xff0c;多个任务是同时执行的&#xff1b; 并发(concurrency)&#xff1a;一个…

计算机SCI期刊,IF=8+,专业性强,潜力新刊!

一、期刊名称 Journal of Big data 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;8.1 中科院分区&#xff1a;2区 出版方式&#xff1a;开放出版 版面费&#xff1a;$1990 三、期刊征稿范围 《大数据杂志》发表了关于…

2024年【T电梯修理】考试内容及T电梯修理新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】考试内容及T电梯修理新版试题&#xff0c;包含T电梯修理考试内容答案和解析及T电梯修理新版试题练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总&#xff0c;…