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:PythonTestStudyselenium_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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
文章目录 题目链接 解题思路 解题代码 题目链接 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组…