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)
"""
|