selenium中是如何做session管理的?

来源:1-1 为什么做这门课?该怎么学

你的转身

2021-12-23

import unittest
from pages.po_demo import SearchKW, Search

class A(unittest.TestCase, SearchKW):

url = 'https://www.jd.com'

@classmethod
def setUpClass(cls) -> None:
    cls.cls_get()

def test_jd(self):
    self.get()


@classmethod
def tearDownClass(cls) -> None:
    cls.driver.quit()

class B(unittest.TestCase, SearchKW):

url = 'www.tmall.com'

@classmethod
def setUpClass(cls) -> None:
    cls.cls_get()

def test_tmall(self):
    self.get()

@classmethod
def tearDownClass(cls) -> None:
    cls.driver.quit()

if name == ‘main’:
unittest.main()

执行报错:
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=‘127.0.0.1’, port=64610): Max retries exceeded with url: /session/349ca9b106a6b82895abddc88573c0f0/url (Caused by NewConnectionError(’<urllib3.connection.HTTPConnection object at 0x108de8bb0>: Failed to establish a new connection: [Errno 61] Connection refused’))

1.感觉像是测试类A执行完毕后,浏览器和webdriver之间的session就关闭了,但是测试类B的setUpClass还是拿同样的session id去和webdriver建立链接,导致session连接不成功失败

2.如果测试类A、B共享一个session,还能称A B是测试用例相互无影响的吗?

谢谢

写回答

1回答

你的转身

提问者

2021-12-23

这不相当于测试用例A和测试用例B,不是独立的吗? 谢谢

0
1
托尼老师
首先,由浏览器驱动服务和测试代码建立的会话与用例的独立性没有关联。 如果是相同项目的不同case,可以在一个浏览器实例中完成所有测试而互不影响,例如case1登录-业务操作-登出系统,case2登录-业务操作-登出系统,两个case之间只要不存在依赖和数据交互,那么我们就认为它们之间是独立的。这个时候我们有且仅有一个与浏览器驱动服务建立的会话,所有用例执行时都是通过这个会话完成和浏览器的交互,但这并不影响用例的独立性。 如果是涉及到不同项目的case,最好在不同的浏览器实例中进行操作,以免用例执行过程中的浏览器缓存对其他用例造成影响。那么,这种情况下就会存在执行过程中建立多个浏览器驱动服务会话,这是和上面那种情况不同的地方。
2021-12-29
共1条回复

Python自动化测试开发实战,能帮你就业的测试课

开发高扩展、高可用的自动化测试框架,利用好测试自动化技术。

450 学习 · 157 问题

查看课程