2026/1/3 7:44:17
网站建设
项目流程
做网站需要什么功能,陕西工程建设标准化信息网,WordPress极简博客主题,怎样做的网站内网外网都能用今天自己手动部署了jenkins和Docker#xff0c;实现CICD#xff0c;结果发现一个问题#xff0c;如果单个运行测试类是没有问题的#xff0c;但是批量运行就会失败。报错信息如下所示#xff0c;提示定位元素超时了。最后我发现是批量运行时#xff0c;保存的cookie失效了…今天自己手动部署了jenkins和Docker实现CICD结果发现一个问题如果单个运行测试类是没有问题的但是批量运行就会失败。报错信息如下所示提示定位元素超时了。最后我发现是批量运行时保存的cookie失效了导致只成功运行了第一个测试函数后续的测试函数全部失败了于是我添加了一个判断cookie是否生效的逻辑。先看看我刚开始的conftest配置文件中的代码。pytest.fixture(scopesession) def auth_state(browser) - Path: session 级别只登录一次生成 state.json 返回状态文件路径 if not STORAGE_STATE_PATH.exists(): STORAGE_STATE_PATH.parent.mkdir(parentsTrue, exist_okTrue) context browser.new_context(**DEVICE_CONFIG) page context.new_page() try: page.goto(http://xxxx.com/) page.locator(input[typetel]).fill(xxxxx) page.get_by_role(checkbox).click() page.get_by_text(下一步).click() captcha_input page.locator(input[placeholder请输入][maxlength6]) captcha_input.wait_for(statevisible, timeout10000) captcha_input.fill(123456) page.wait_for_url(http://xxxxx/#/workbench) context.storage_state(pathSTORAGE_STATE_PATH) finally: context.close() return STORAGE_STATE_PATH第一次我判断了保存cookie的文件是否存在但是没有判断是否生效导致运行失败下面我贴上我增加了判断逻辑失效的代码。def is_auth_valid(state_path: Path) - bool: if not state_path.exists(): return False try: context browser.new_context(storage_statestate_path, **DEVICE_CONFIG) page context.new_page() page.goto(http://xxxxxx.com/#/workbench, wait_untildomcontentloaded)# 关键判断如果登录失效通常会自动跳转到 /login 或首页登录框 # 所以我们检查 URL 是否仍然是 workbench且没有出现登录输入框 current_url page.url has_login_input page.locator(input[typetel]).count() 0 context.close() # 如果还在 workbench 且没出现登录输入框就认为有效 return /workbench in current_url and not has_login_inputexcept Exception: return False关键判断逻辑是红色的这块代码获取当前的current_url并判断当前获取的url中是否包含/workbench以及当前页面是否还存在登录输入框因为/workbench是我登录后首页的url路径。如果失效了那么整个函数就会返回False这样程序就会重新走一遍登录流程并重新保存一次登录cookie。下面是全部代码。pytest.fixture(scopesession) def auth_state(browser) - Path: session 级别只登录一次生成 state.json 返回状态文件路径 def is_auth_valid(state_path: Path) - bool: if not state_path.exists(): return False try: context browser.new_context(storage_statestate_path, **DEVICE_CONFIG) page context.new_page() page.goto(http://xxxx.com/#/workbench, wait_untildomcontentloaded) # 关键判断如果登录失效通常会自动跳转到 /login 或首页登录框 # 所以我们检查 URL 是否仍然是 workbench且没有出现手机号输入框 current_url page.url has_login_input page.locator(input[typetel]).count() 0 context.close() # 如果还在 workbench 且没出现登录输入框就认为有效 return /workbench in current_url and not has_login_input except Exception: return False # 如果状态文件不存在或已失效则重新登录 if not is_auth_valid(STORAGE_STATE_PATH): STORAGE_STATE_PATH.unlink(missing_okTrue) STORAGE_STATE_PATH.parent.mkdir(parentsTrue, exist_okTrue) context browser.new_context(**DEVICE_CONFIG) page context.new_page() try: page.goto(http://xxxxx.com/) page.locator(input[typetel]).fill(xxxxx) page.get_by_role(checkbox).click() page.get_by_text(下一步).click() captcha_input page.locator(input[placeholder请输入][maxlength6]) captcha_input.wait_for(statevisible, timeout10000) captcha_input.fill(123456) page.wait_for_url(http://xxxxx.com/#/workbench, timeout15000) context.storage_state(pathSTORAGE_STATE_PATH) finally: context.close() return STORAGE_STATE_PATH注单个运行测试类或者测试函数的命令为pytest test_login.py::TestDemo::test_login批量运行测试类或者测试函数的命令为python -m pytest tests/ --htmlreport.html --self-contained-html -vtest_login.py测试文件名TestDemo测试类名test_login测试函数名tests/目录名--htmlreport.html输出为一个 HTML 文件文件名为report.html--self-contained-html将 CSS、JavaScript、图片等资源内嵌到 HTML 文件中-v表示详细模式在控制台中显示每个测试用例的完整名称