请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

selenium grid3 + HTMLTestRunner + unittest 分布式如何实现并发呢

托尼老师,你有解决方法吗,我试过很多方法都不行。
hub主节点启动:

java -jar C:\selenium-server-standalone-3.141.59.jar -role hub -host 0.0.0.0 -maxSession 10

虚拟机上注册了两个node节点:

java -jar C:\selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.15:4444/grid/register/

HTMLTestRunner好像没有支持多线程的方式执行案例,好像需要自己改写代码。但是我通过使用线程池的方式,是可以并发的,现在问题就是不知道如何改写HTMLTestRunner实现多线程运行,然后收集执行后的信息。

def case_run(thread_count=2):
	"""案例执行"""
	suite = unittest.TestSuite()
	loader = unittest.defaultTestLoader
	test_suite = loader.discover(CASE_PATH)
	suite.addTest(test_suite)

	res = unittest.TestResult()
	with ThreadPoolExecutor(max_workers=thread_count) as te:
		for case in suite:
			te.submit(case.run, result=res)
	print(res)

正在回答

1回答

由于GIL的顽疾,不建议使用多线程,可以将线程池改成进程池,不同的进程分别对应不同的测试流程,包括启动、运行、输出报告。

使用多进程时,要注意函数和方法的编写,特别是参数的传递不能出现混乱,另外,多进程下需要重写启动webdriver服务的方法。

0 回复 有任何疑惑可以回复我~
  • 提问者 紫陌翌晨 #1
    感谢老师的解答哈!线程池的方式,我已经跑起来了,稍微改了一下HTMLTestRunner中的run方法,可以收集到结果。进程池的方式到时候我再试试哈
    回复 有任何疑惑可以回复我~ 2021-04-22 16:09:45
  • 托尼老师 回复 提问者 紫陌翌晨 #2
    O(∩_∩)O
    回复 有任何疑惑可以回复我~ 2021-04-22 17:49:43
  • 我之前用的是grid  docker 分布式执行的,10台机器,但发现总不是很稳定,ui并发执行,目前还没想到什么方式最稳定…
    回复 有任何疑惑可以回复我~ 2021-11-11 07:48:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信