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()
输出:
多线程跑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()
输出:
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
注:
- 子节点中需要有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