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

news2024/11/16 7:25:47

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 用例执行,返回driver
    yield 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、teardown
    if 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 logging

import allure
import pytest
from selenium import webdriver


@pytest.fixture()
def browser():
    global driver
    # 01 用例的前置步骤,初始化浏览器对象
    driver = webdriver.Chrome()

    # 02 用例执行,返回driver
    yield 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、teardown
    if 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.coloradmin.cn/o/1698141.html

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

相关文章

安卓自定义控件(视图、改造控件、通知Notification、界面绘制)

视图的构建过程 此节介绍一个视图的构建过程&#xff0c;包括&#xff1a;如何编写视图的构造方法&#xff0c;4个构造方法之间有什么区别&#xff1b;如何测量实体的实际尺寸&#xff0c;包含文本、图像、线性视图的测量方法&#xff1b;如何利用画笔绘制视图的界面&#xff…

千帆【API接入】自定义组件简明教程

千帆【API接入】自定义组件简明教程 大家好&#xff0c;我是 JavaRoom&#xff0c;今天来给大家做一个自定义API接入来是心啊遣返组件创建案例简明教学。 1.准备工作 1.1 一个不欠费的千帆账号 财务总览地址&#xff1a;https://console.bce.baidu.com/billing/#/account/i…

ionic关于@angular版本报错解决方案(有效)

最近学校要求使用ionicangular学习&#xff0c;但是出现下面问题&#xff0c;这里我就分享一个我亲测有效的解决方案&#xff0c;提供学习&#xff08;在VScode中&#xff09; npm error code ERESOLVE npm error ERESOLVE could not resolve npm error npm error While resol…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤…

1107 老鼠爱大米

solution 记录每组的最大值&#xff0c;并比较组间的最大值胖胖鼠~ #include<iostream> using namespace std; int main(){int n, m, ans, fat -1, x;scanf("%d%d", &n, &m);for(int i 0; i < n; i){ans -1;for(int j 0; j < m; j){scanf(…

Spring:面向切面(AOP)

1. 代理模式 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类**间接**调用。让不属于目标方法核心逻辑的代码从目标方法中剥…

书生·浦语第二期-笔记2

课程链接&#xff1a;https://github.com/InternLM/Tutorial/tree/camp2 视频地址&#xff1a;轻松玩转书生浦语大模型趣味Demo_哔哩哔哩_bilibili 大模型及InternLM介绍 大模型&#xff1a;人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型 特点&#xff1a…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

【C++ —— 哈希】学习笔记 | 模拟实现封装unordered_map和unordered_set

文章目录 前言一、unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二、底层结构2.1哈希概念&#xff08;哈希是一种算法思想&#xff09;2.2哈希冲突2.3 解决哈希冲突方法&#xff1a;1.直接定址法&#xff08;值和位置关系是唯一关系&#xff0c;每个人都有唯一位…

站在ESG“20+”新起点上,看中国ESG先锋探索力量

全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉&#xff0c;自“双碳”目标提出以来&#xff0c;一股“可持续发展热潮”正覆盖各行各业&#xff0c;并且渗透到我们衣食住行的方方面面。在资本市场&#xff0c;ESG投资热潮更是席卷全…

VMware虚拟机-设置系统网络IP、快照、克隆

1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍&#xff1a; 通过快照可快速保存虚拟机当前的状态&#xff0c;后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 学生管理模块 教师管理模块 竞赛信息模块 竞赛报名模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的大学生竞赛管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、学生和教师角色使用&#xff0c;包括学…

基于双差分值和RR间隔处理的心电信号R峰检测算法(MATLAB R2018A)

心电信号中的R峰是确定心率和节律、以及检测其它波形特征点&#xff08;图1A&#xff09;的基础。R峰的准确检测是心率变异性分析、心拍分割和心律失常识别重要的处理步骤。 现有的心电信号R峰检测方法主要为基于规则的决策法和基于深度学习的检测方法。基于规则的决策法通常对…

Liunx学习随笔

Linux学习随笔 一.前期准备1.安装Vmware Workstation软件2.下载linux镜像3.安装操作系统 夕阳无限好&#xff0c;只是近黄昏&#xff0c;时隔一年&#xff0c;重新提笔 没有比脚更远的路&#xff0c;没有比人更高的山 一.前期准备 1.安装Vmware Workstation软件 下载地址&am…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 开发板&#xff0c;它是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;最早发布于2023年12月&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两…

vue数据持久化仓库

本文章是一篇记录实用性vue数据持久化仓的使用&#xff01; 首先在src中创建store文件夹&#xff0c;并创建一个根据本页面相关的名称&#xff0c; 在终端导入&#xff1a;npm i pinia 和 npm i pinia-plugin-persistedstate 接下来引入代码&#xff1a; import { defineSt…

Tensorflow 2.0 安装过程

第一步&#xff1a;进入国内清华软件网站 anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirroranaconda 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站&#xff0c;致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务&…

【数据库基础-mysql详解之索引的魅力(N叉树)】

索引的魅力目录 &#x1f308;索引的概念&#x1f308;使用场景&#x1f308;索引的使用&#x1f31e;&#x1f31e;&#x1f31e;查看MySQL中的默认索引&#x1f31e;&#x1f31e;&#x1f31e;创建索引&#x1f31e;&#x1f31e;&#x1f31e;删除索引 站在索引背后的那个男…

基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 反向传播网络&#xff08;BP&#xff0c;多层感知器MLP&#xff09; 4.2 径向基函数网络&#xff08;RBF&#xff09; 4.3 卷积神经网络&#xff08;CNN&#xff09; 4.4 长短期记忆网…