python多线程
threading模块
多线程实例
# -*- 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
的运行器进行用例执行,然后为运行器添加多线程:
# -*- 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查看管理页面
代码:
'''
访问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
注:文章来源:https://www.toymoban.com/news/detail-831673.html
- 子节点中需要有java环境,且需要安装java11或更高版本
- 需要安装浏览器以及对应的浏览器驱动程序driver
- 在环境变量中的PATH需要声明driver的路径
总结:文章来源地址https://www.toymoban.com/news/detail-831673.html
- 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
到了这里,关于多线程、分布式运行用例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!