多线程、分布式运行用例

python多线程

threading模块

多线程实例

# -*- coding: utf-8 -*-
# @Time    : 2024/2/7 15:50
# @Author  : 居里夫人吃橘子
# @File    : class01.py
# @Software: PyCharm
import threading
from time import sleepdef run(name):print(name + '该起床了')sleep(2)print(name + '该吃饭了')sleep(2)print(name + '该睡觉了')th = []# threading.Thread()创建线程,target代表要运行的方法,args代表方法中需要传参的值
th.append(threading.Thread(target=run, args=['小王']))
th.append(threading.Thread(target=run, args=['小李']))
th.append(threading.Thread(target=run, args=['小张']))for t in th:# 使用start()启动线程t.start()

输出:

image-20240207161207993

多线程跑unittest框架中的用例:基于一个原则先将需要处理的内容保存在list中,基于list的元素来进行线程的添加,在unittest中可以通过discover = unittest.defaultTestLoader.discover(start_dir=path, pattern='test*.py')发现所有的测试套件,然后使用unittest.TextTestRunner().run(suite)运行器或者BeautifulReport的运行器进行用例执行,然后为运行器添加多线程:

# -*- coding: utf-8 -*-
# @Time    : 2024/2/7 16:48
# @Author  : 居里夫人吃橘子
# @File    : suite_test.py
# @Software: PyCharm
import threading
import time
import unittestfrom BeautifulReport import BeautifulReportdef get_suite():path = './'discover = unittest.defaultTestLoader.discover(start_dir=path, pattern='test*.py')return discoverdef runner(suite):unittest.TextTestRunner().run(suite)def beautiful_runner(suite):# 约定时间戳的格式,注意在Windows中文件的路径不能存在 < > : " / \ | ? *strf_time_str = time.strftime("%Y-%m-%d %H-%M-%S")file_name = f'测试报告_{strf_time_str}'# 测试报告存放路径paths = r'D:\PythonTest\Study\selenium_class03'result = BeautifulReport(suite)result.report(filename=file_name, description='测试报告', log_path=paths)if __name__ == '__main__':suites = get_suite()th = []for suite in suites:print(suite)# 使用runner执行多线程th.append(threading.Thread(target=runner, args=[suite]))# 使用beautiful_runner执行多线程# th.append(threading.Thread(target=beautiful_runner, args=[suite]))for t in th:# 启动多线程t.start()# 可以防止多线程对一个文件进行同时的读写;# t.join()

输出:

image-20240207173019323

Selenium Grid 4

专用于做Selenium分布式部署的模块。最初都是基于简单的主从节点的模式来进行分布式部署的。

环境部署:

  • 需要安装jdk环境;
  • 下载Selenium Server (Grid),下载官网:Selenium Server

image-20240207174538652

启动模式:

  • 单体模式:standalone

注:单体模式下无法添加任何node子节点;

在jar包的路径命令窗中执行java -jar .\selenium-server-4.17.0.jar standalone

image-20240207175022434

访问http://2.0.0.1:4444查看管理页面

image-20240219172037037

代码:

'''访问selenium grid体系
'''from time import sleep
from selenium import webdriver# 配置浏览器
options = webdriver.ChromeOptions()
# 需要传入options浏览器配置参数,不然启动不了,目前还不知道为啥
driver = webdriver.Remote(command_executor='http://2.0.0.1:4444', options=options)
driver.get('http://www.baidu.com')
sleep(5)
# driver.quit()

image-20240208100537334

  • 分布式启动:

在主节点下:输入java -jar .\selenium-server-4.17.0.jar hub部署主节点,这只是启动主节点的命令,启动完成后需要再添加node子节点;

image-20240219110854894

添加子节点:在子节点电脑中输入java -jar .\selenium-server-4.17.0.jar node --hub http://192.168.2.107:4444

image-20240219110957249

注:

  • 子节点中需要有java环境,且需要安装java11或更高版本
  • 需要安装浏览器以及对应的浏览器驱动程序driver
  • 在环境变量中的PATH需要声明driver的路径

总结:

  • java -jar .\selenium-server-4.17.0.jar hub #部署主节点
  • java -jar .\selenium-server-4.17.0.jar hub --config ./node_1.toml #部署主节点并以配置文件名为node_1.toml的配置启动
  • java -jar .\selenium-server-4.17.0.jar node --hub http://192.168.2.107:4444 #添加子节点 --hub表示连接的主节点url

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

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

相关文章

OpenAI文生视频大模型Sora概述

Sora&#xff0c;美国人工智能研究公司OpenAI发布的人工智能文生视频大模型&#xff08;但OpenAI并未单纯将其视为视频模型&#xff0c;而是作为“世界模拟器” &#xff09;&#xff0c;于2024年2月15日&#xff08;美国当地时间&#xff09;正式对外发布。 Sora可以根据用户…

jenkins配置ssh的时候测试连接出现Algorithm negotiation fail

背景&#xff1a;当jenkins升级后&#xff0c;同时ssh插件也升级&#xff0c;测试ssh连接的时候 出现的问题&#xff1a; com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName"server_host_key" jschProposal"ecdsa-sha2-n…

解决SpringAMQP工作队列模型程序报错:WARN 48068:Failed to declare queue: simple.queue

这里写目录标题 1.运行环境2.报错信息3.解决方案4.查看解决之后的效果 1.运行环境 使用docker运行了RabbitMQ的服务器&#xff1a; 在idea中导入springAMQP的jar包&#xff0c;分别编写了子模块生产者publisher&#xff0c;消费者consumer&#xff1a; 1.在publisher中运行测试…

git 使用总结

文章目录 git merge 和 git rebasegit mergegit rebase总结 git merge 和 git rebase git merge git merge 最终效果说明&#xff1a; 假设有一个仓库情况如下&#xff0c;现需要进行 merge&#xff1a; merge 操作流程&#xff1a; merge 的回退操作&#xff1a; git reba…

【区块链】智能交易模式下的数据安全流通模型

【区块链】智能交易模式下的数据安全流通模型 写在最前面**区块链智能交易模式概述****数据安全流通的挑战****数据安全流通模型的核心要素****实现数据安全流通的区块链技术****区块链智能交易模式下数据安全流通模型的设计原则****数据安全流通模型的应用案例分析****面临的挑…

burpsuite插件编写之如何隐秘的划水

老板以为你在认真挖洞,没想到你居然在摸鱼哈哈哈哈。 一、开发环境准备 idea、jdk、maven 安装好即可 二、开发知识准备 有空可以看看下面的示例和api 官方各种示例代码:Burp extensions - PortSwigger 官方API文档:Generated Documentation (Untitled) 在burp的扩展那…

《图解密码技术》总结

一&#xff1a;首先在此介绍一些密码的常识&#xff1a; 1>不要使用保密的密码算法 2>使用低强度的密码比不进行任何加密更加危险 3>任何密码总有一天都会被破译 4>密码只是信息安全的一部分 二&#xff1a;逐章总结&#xff1a; 第一章&#xff1a;环游密码世…

黄海北部泥质沉积体地层界面如何划分?

黄海沉积物中存在北黄海泥M1、海阳东泥M2、老黄河口泥M3、南黄海中部泥M4和南黄海东部泥M5等泥质沉积&#xff0c;见下图。其中北黄海泥M1、海阳东泥M2和南黄海中部泥M4在空间上是连在一起的沉积体&#xff0c;从庙岛群岛起沿山东半岛北部向东绕过山东半岛东端向南延伸&#xf…

基于JAVA的公司货物订单管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

华为OD机试真题-CPU算力分配-2023年OD统一考试(C卷)--Python--开源

题目&#xff1a; ** ** 考察内容&#xff1a; 排序(sort)求和&#xff08;sum) 数学转化 循环&#xff08;从小开始&#xff09;break 代码&#xff1a; """ 题目分析&#xff1a; a和b初始总算力不同 从A组中选出的算力尽可能小 交换以后&#xff0c;a和b的…

【C++精简版回顾】5.字符串

1.字符串的四种初始化方式 string str "ilove"; string str1("ilove"); string str2(str1); string str3 str1; 2.针对字符串的一些函数 &#xff08;1&#xff09;字符串长度 cout<<str.length()<<endl;&#xff08;2&#xff09;查找字…

SpringCloud-Gateway解决跨域问题

Spring Cloud Gateway是一个基于Spring Framework的微服务网关&#xff0c;用于构建可扩展的分布式系统。在处理跨域问题时&#xff0c;可以通过配置网关来实现跨域资源共享&#xff08;CORS&#xff09;。要解决跨域问题&#xff0c;首先需要在网关的配置文件中添加相关的跨域…