多线程、分布式运行用例

python多线程

threading模块

多线程实例

python 复制代码
# -*- coding: utf-8 -*-
# @Time    : 2024/2/7 15:50
# @Author  : 居里夫人吃橘子
# @File    : class01.py
# @Software: PyCharm
import threading
from time import sleep


def 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()

输出:

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

python 复制代码
# -*- coding: utf-8 -*-
# @Time    : 2024/2/7 16:48
# @Author  : 居里夫人吃橘子
# @File    : suite_test.py
# @Software: PyCharm
import threading
import time
import unittest

from BeautifulReport import BeautifulReport


def get_suite():
    path = './'
    discover = unittest.defaultTestLoader.discover(start_dir=path, pattern='test*.py')
    return discover


def 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()

输出:

Selenium Grid 4

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

环境部署:

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

启动模式:

  • 单体模式:standalone

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

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

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

代码:

python 复制代码
'''
    访问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()
  • 分布式启动:

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

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

注:

  • 子节点中需要有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
相关推荐
睡不醒男孩03082329 分钟前
第三篇:打破云厂商锁定:基于CLup构建私有化PolarDB分布式集群高可用方案
分布式·clup·中启乘数
前端不太难1 小时前
鸿蒙 App 分布式数据同步:架构设计 + Demo 实现
分布式·状态模式·harmonyos
水木流年追梦2 小时前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt
Francek Chen3 小时前
【大数据处理与分析】MapReduce:05 MapReduce的具体应用
大数据·hadoop·分布式·mapreduce
我是一颗柠檬4 小时前
【Java项目技术亮点】分布式锁实现与优化:从Redisson到ZooKeeper,彻底搞懂分布式锁的底层原理
java·redis·分布式·中间件·java-zookeeper
moonsims6 小时前
基于Lattice Mesh的AI 的分布式共识与动态任务分配架构的无人机群“去中心化无声协同”技术和极低带宽下的韧性通信技术
人工智能·分布式·架构
一个骇客6 小时前
批处理模型详解:从 MapReduce 到数据流引擎
分布式·架构
todoitbo7 小时前
Agent_Swarm_分布式协作的通信编排与节点发现机制分析
人工智能·分布式·ai·jiuwenswarm
Ze3G90nYt8 小时前
Redis 分布式锁进阶第一百二十篇
数据库·redis·分布式
段一凡-华北理工大学8 小时前
工业领域的Hadoop架构学习~系列文章19:能源行业Hadoop应用实践
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁