summaryrefslogtreecommitdiff
path: root/cases/conftest.py
blob: 567aee1d0688b6cbf47bbf50884ef94287c2b8de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import time
import pytest
from common.ui_common.login_logout.loginout import LogInOut
import time
import atexit
import sys
import os
import signal
import configparser
from config.workpath import workdir
from selenium import webdriver
from common.driver_common.mywebdriver import MyWebDriver
driver = None  #全局变量用户保存webdirver实例

def my_driver():
    print("\n用例开始时执行。。。")
    global driver
    # 初始化,负责远程用户登录
    loginout_parse = configparser.ConfigParser()
    loginout_parse_dir = os.path.join(workdir, "config", "ui_conf", "loginout.ini")
    loginout_parse.read(loginout_parse_dir, encoding="utf-8")
    remote_url = loginout_parse.get("remote_url", "url")
    chrome_option = webdriver.ChromeOptions()
    driver = MyWebDriver(
        command_executor=remote_url,
        options=chrome_option
    )
    #driver.implicitly_wait(2)
    driver.maximize_window()
    return driver

def setup():
    global driver
    driver = my_driver()
    loginout = LogInOut(driver)
    loginout.login()

def teardown():
    global driver
    if driver:
        print("\n用例结束时执行。。。")
        driver.quit()
        time.sleep(1)

@pytest.fixture()
def demo_fixture():
    global driver
    setup()
    yield driver
    teardown()

def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时,将收集到的name和nodeid的中文显示在控制台上,中文转换
    https://www.cnblogs.com/canglongdao/p/13418305.html
    """
    for i in items:
        i.name = i.name.encode("utf-8").decode("unicode_escape")
        i._nodeid = i.nodeid.encode("utf-8").decode("unicode_escape")

#处理ctrl+c中断
def handle_interrupt(sinnum, frame):
    global driver
    print(driver,  "主动中断")
    if driver:
        driver.close()
    exit(1)

#注册 Ctrl+C中断处理函数
signal.signal(signal.SIGINT, handle_interrupt)


"""
# 自定义插件
class CtrlCPlugin:
    def __init__(self):
        self.interrupted = False

    def pytest_runtest_protocol(self, item, nextitem):
        if self.interrupted:
            pytest.skip("Ctrl+C 中断")

ctrl_c_plugin = CtrlCPlugin()

# 注册插件
def pytest_configure(config):
    config.pluginmanager.register(ctrl_c_plugin)

# 注册 Ctrl+C 中断处理函数
def handle_interrupt(signum, frame):
    ctrl_c_plugin.interrupted = True
    signal.signal(signal.SIGINT, signal.SIG_DFL)  # 恢复默认 Ctrl+C 处理

# 注册 Ctrl+C 中断处理函数
signal.signal(signal.SIGINT, handle_interrupt)
"""