fix: 1、优化远程控制方案page对象的调用方式;2、修复域管场景下一些报错;3、release for 2.5.2
Description: Log:
This commit is contained in:
parent
301357d07a
commit
d5d74bfb05
|
@ -1,16 +1,17 @@
|
|||
# 版本更新记录
|
||||
|
||||
## 2.5.2(dev)
|
||||
## 2.5.2(2024/03/27)
|
||||
|
||||
**New**
|
||||
|
||||
- `env.sh` 增加 `-p` 选项用于传递系统密码;[@mikigo](https://github.com/mikigo)
|
||||
- 自动输入 `log` 增加以 `Page` 结尾的 `class` 名称;[@mikigo](https://github.com/mikigo)
|
||||
- 自动输入日志增加以 `Page` 结尾的 `class` 名称,以适应 `Web UI` 类自动化;[@mikigo](https://github.com/mikigo)
|
||||
|
||||
**Fix**
|
||||
|
||||
- 修复统计用例和方法数量功能在子项目为 `gitlab` 时,无法获取到 `commit` 详细记录的问题;[@mikigo](https://github.com/mikigo)
|
||||
- 修复基于 `Python` 标准库`difflib` 做 `commit` 文件对比时,输出原始数据错误的问题;[@mikigo](https://github.com/mikigo)
|
||||
- 修复域管环境下,写日志文件报权限不够的问题;[@mikigo](https://github.com/mikigo)
|
||||
|
||||
## 2.5.1(2024/03/14)
|
||||
|
||||
|
|
85
conftest.py
85
conftest.py
|
@ -177,21 +177,21 @@ def pytest_configure(config):
|
|||
|
||||
def pytest_sessionstart(session):
|
||||
"""pytest_sessionstart"""
|
||||
if (
|
||||
CmdCtl.run_cmd(
|
||||
"gsettings get com.deepin.dde.appearance gtk-theme",
|
||||
interrupt=False,
|
||||
out_debug_flag=False,
|
||||
command_log=False,
|
||||
).strip("'")
|
||||
!= GlobalConfig.SYS_THEME
|
||||
):
|
||||
CmdCtl.run_cmd(
|
||||
f"gsettings set com.deepin.dde.appearance gtk-theme {GlobalConfig.SYS_THEME}",
|
||||
interrupt=False,
|
||||
out_debug_flag=False,
|
||||
command_log=False,
|
||||
)
|
||||
# if (
|
||||
# CmdCtl.run_cmd(
|
||||
# "gsettings get com.deepin.dde.appearance gtk-theme",
|
||||
# interrupt=False,
|
||||
# out_debug_flag=False,
|
||||
# command_log=False,
|
||||
# ).strip("'")
|
||||
# != GlobalConfig.SYS_THEME
|
||||
# ):
|
||||
# CmdCtl.run_cmd(
|
||||
# f"gsettings set com.deepin.dde.appearance gtk-theme {GlobalConfig.SYS_THEME}",
|
||||
# interrupt=False,
|
||||
# out_debug_flag=False,
|
||||
# command_log=False,
|
||||
# )
|
||||
_display = (
|
||||
GlobalConfig.DisplayServer.wayland
|
||||
if GlobalConfig.IS_WAYLAND
|
||||
|
@ -255,7 +255,7 @@ def pytest_collection_modifyitems(session):
|
|||
walk_dir = (
|
||||
f"{GlobalConfig.APPS_PATH}/{session.config.option.app_name}"
|
||||
if session.config.option.app_name
|
||||
and exists(f"{GlobalConfig.APPS_PATH}/{session.config.option.app_name}")
|
||||
and exists(f"{GlobalConfig.APPS_PATH}/{session.config.option.app_name}")
|
||||
else GlobalConfig.APPS_PATH
|
||||
)
|
||||
csv_path_dict, no_youqu_mark = walk_apps(walk_dir)
|
||||
|
@ -378,19 +378,19 @@ def pytest_collection_modifyitems(session):
|
|||
if index == containers[csv_path][ConfStr.SKIP_INDEX.value]:
|
||||
# 标签是以 “skip-” 开头, noskip 用于解除所有的skip
|
||||
if not session.config.option.noskip and tag.startswith(
|
||||
f"{ConfStr.SKIP.value}-"
|
||||
f"{ConfStr.SKIP.value}-"
|
||||
):
|
||||
# 标签以 “fixed-” 开头, ifixed表示ignore fixed, 用于忽略所有的fixed
|
||||
# 1. 不给ifixed参数时,只要标记了fixed的用例,即使标记了skip-,也会执行;
|
||||
# 2. 给ifixed 参数时(--ifixed yes),fixed不生效,仅通过skip跳过用例;
|
||||
try:
|
||||
if (
|
||||
not session.config.option.ifixed
|
||||
and containers[csv_path][ConfStr.FIXED_INDEX.value]
|
||||
is not None
|
||||
and tags[containers[csv_path][ConfStr.FIXED_INDEX.value]]
|
||||
.strip('"')
|
||||
.startswith(f"{ConfStr.FIXED.value}-")
|
||||
not session.config.option.ifixed
|
||||
and containers[csv_path][ConfStr.FIXED_INDEX.value]
|
||||
is not None
|
||||
and tags[containers[csv_path][ConfStr.FIXED_INDEX.value]]
|
||||
.strip('"')
|
||||
.startswith(f"{ConfStr.FIXED.value}-")
|
||||
):
|
||||
continue
|
||||
except IndexError:
|
||||
|
@ -398,8 +398,8 @@ def pytest_collection_modifyitems(session):
|
|||
pass
|
||||
add_mark(item, ConfStr.SKIP.value, (tag,), {})
|
||||
elif (
|
||||
not session.config.option.noskip
|
||||
and f"{ConfStr.SKIPIF.value}_" in tag
|
||||
not session.config.option.noskip
|
||||
and f"{ConfStr.SKIPIF.value}_" in tag
|
||||
):
|
||||
tag_list = tag.split("&&")
|
||||
for _tag in tag_list:
|
||||
|
@ -530,8 +530,8 @@ def pytest_collection_finish(session):
|
|||
items_timeout += item_timeout
|
||||
break
|
||||
session.sessiontimeout = (
|
||||
(session.item_count - _n) * session.config.option.timeout
|
||||
) + items_timeout
|
||||
(session.item_count - _n) * session.config.option.timeout
|
||||
) + items_timeout
|
||||
_min, sec = divmod(int(session.sessiontimeout), 60)
|
||||
hour, _min = divmod(_min, 60)
|
||||
print(
|
||||
|
@ -558,9 +558,9 @@ def pytest_collection_finish(session):
|
|||
if not exists(GlobalConfig.REPORT_PATH):
|
||||
makedirs(GlobalConfig.REPORT_PATH)
|
||||
with open(
|
||||
f"{GlobalConfig.REPORT_PATH}/{session.config.option.export_csv_file}",
|
||||
"w+",
|
||||
encoding="utf-8",
|
||||
f"{GlobalConfig.REPORT_PATH}/{session.config.option.export_csv_file}",
|
||||
"w+",
|
||||
encoding="utf-8",
|
||||
) as _f:
|
||||
_f.writelines(execute2)
|
||||
|
||||
|
@ -789,8 +789,8 @@ def pytest_sessionfinish(session):
|
|||
default_result["result"] = "fail"
|
||||
item_name = item.nodeid.split("[")[0]
|
||||
if not execute.get(item_name) or (
|
||||
item.outcome != ConfStr.PASSED.value
|
||||
and execute.get(item_name).get("result") == "pass"
|
||||
item.outcome != ConfStr.PASSED.value
|
||||
and execute.get(item_name).get("result") == "pass"
|
||||
):
|
||||
execute[item_name] = default_result
|
||||
except AttributeError:
|
||||
|
@ -970,3 +970,24 @@ def walk_apps(walk_dir):
|
|||
if file.endswith(".csv") and file != "case_list.csv":
|
||||
csv_path_dict[splitext(file)[0]] = f"{root}/{file}"
|
||||
return csv_path_dict, no_youqu_mark
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def page():
|
||||
from playwright.sync_api import sync_playwright
|
||||
driver = sync_playwright().start()
|
||||
browser = driver.chromium.launch(headless=False)
|
||||
context = browser.new_context(
|
||||
ignore_https_errors=True,
|
||||
viewport={
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
},
|
||||
)
|
||||
_page = context.new_page()
|
||||
|
||||
yield _page
|
||||
|
||||
context.close()
|
||||
browser.close()
|
||||
driver.stop()
|
||||
|
|
7
env.sh
7
env.sh
|
@ -149,6 +149,13 @@ if [ "${requirements}" != "" ]; then
|
|||
done
|
||||
fi
|
||||
|
||||
cd ${ROOT_DIR}/src/utils/
|
||||
webui=$(python3 sub_webui.py)
|
||||
if [ "${webui}" != "" ]; then
|
||||
pipenv run pip install playwright -i ${pypi_mirror}
|
||||
pipenv run playwright install chromium
|
||||
fi
|
||||
|
||||
pipenv run pip install -U auto_uos --extra-index-url ${pypi_mirror} -i http://10.20.52.221:8081 --trusted-host=10.20.52.221 \
|
||||
> /tmp/env.log 2>&1
|
||||
check_status auto_uos
|
||||
|
|
|
@ -96,6 +96,13 @@ if [ "${requirements}" != "" ]; then
|
|||
done
|
||||
fi
|
||||
|
||||
cd ${ROOT_DIR}/src/utils/
|
||||
webui=$(python3 sub_webui.py)
|
||||
if [ "${webui}" != "" ]; then
|
||||
sudo pip3 install playwright -i ${pypi_mirror}
|
||||
playwright install chromium
|
||||
fi
|
||||
|
||||
sudo pip3 install -U auto_uos --extra-index-url ${pypi_mirror} -i http://10.20.52.221:8081 --trusted-host=10.20.52.221 \
|
||||
> /tmp/env.log 2>&1
|
||||
check_status auto_uos
|
||||
|
|
136
manage.py
136
manage.py
|
@ -12,19 +12,21 @@ import traceback
|
|||
from argparse import ArgumentParser
|
||||
|
||||
from setting.globalconfig import GlobalConfig
|
||||
from setting.globalconfig import SystemPath
|
||||
|
||||
os.environ["DISPLAY"] = ":0"
|
||||
os.environ["PIPENV_VERBOSITY"] = "-1"
|
||||
os.environ["XAUTHORITY"] = f"/home/{GlobalConfig.USERNAME}/.Xauthority"
|
||||
|
||||
from setting.globalconfig import SystemPath
|
||||
|
||||
for i in SystemPath:
|
||||
if i.value in sys.path:
|
||||
continue
|
||||
sys.path.append(i.value)
|
||||
|
||||
from funnylog import logger
|
||||
from funnylog.conf import setting as log_setting
|
||||
|
||||
log_setting.LOG_FILE_PATH = GlobalConfig.REPORT_PATH
|
||||
|
||||
|
||||
# pylint: disable=too-many-instance-attributes,broad-except
|
||||
|
@ -35,57 +37,57 @@ class Manage:
|
|||
|
||||
# pylint: disable=too-many-arguments,too-many-locals,too-many-statements
|
||||
def __init__(
|
||||
self,
|
||||
app=None,
|
||||
keywords=None,
|
||||
tags=None,
|
||||
rerun=None,
|
||||
record_failed_case=None,
|
||||
clean=None,
|
||||
report_formats=None,
|
||||
max_fail=None,
|
||||
log_level=None,
|
||||
timeout=None,
|
||||
resolution=None,
|
||||
debug=None,
|
||||
noskip=None,
|
||||
ifixed=None,
|
||||
send_pms=None,
|
||||
task_id=None,
|
||||
trigger=None,
|
||||
case_file=None,
|
||||
branch=None,
|
||||
deb_path=None,
|
||||
pms_user=None,
|
||||
pms_password=None,
|
||||
suite_id=None,
|
||||
pms_info_file=None,
|
||||
top=None,
|
||||
lastfailed=None,
|
||||
duringfail=None,
|
||||
repeat=None,
|
||||
project_name=None,
|
||||
build_location=None,
|
||||
line=None,
|
||||
client=None,
|
||||
send_code=None,
|
||||
build_env=None,
|
||||
client_password=None,
|
||||
parallel=None,
|
||||
autostart=None,
|
||||
pyid2csv=None,
|
||||
export_csv_file=None,
|
||||
pms2csv=None,
|
||||
csv2pms=None,
|
||||
csv_name=None,
|
||||
pms_link_csv=None,
|
||||
send2task=None,
|
||||
url=None,
|
||||
startdate=None,
|
||||
enddate=None,
|
||||
git_user=None,
|
||||
git_password=None,
|
||||
depth=None,
|
||||
self,
|
||||
app=None,
|
||||
keywords=None,
|
||||
tags=None,
|
||||
rerun=None,
|
||||
record_failed_case=None,
|
||||
clean=None,
|
||||
report_formats=None,
|
||||
max_fail=None,
|
||||
log_level=None,
|
||||
timeout=None,
|
||||
resolution=None,
|
||||
debug=None,
|
||||
noskip=None,
|
||||
ifixed=None,
|
||||
send_pms=None,
|
||||
task_id=None,
|
||||
trigger=None,
|
||||
case_file=None,
|
||||
branch=None,
|
||||
deb_path=None,
|
||||
pms_user=None,
|
||||
pms_password=None,
|
||||
suite_id=None,
|
||||
pms_info_file=None,
|
||||
top=None,
|
||||
lastfailed=None,
|
||||
duringfail=None,
|
||||
repeat=None,
|
||||
project_name=None,
|
||||
build_location=None,
|
||||
line=None,
|
||||
client=None,
|
||||
send_code=None,
|
||||
build_env=None,
|
||||
client_password=None,
|
||||
parallel=None,
|
||||
autostart=None,
|
||||
pyid2csv=None,
|
||||
export_csv_file=None,
|
||||
pms2csv=None,
|
||||
csv2pms=None,
|
||||
csv_name=None,
|
||||
pms_link_csv=None,
|
||||
send2task=None,
|
||||
url=None,
|
||||
startdate=None,
|
||||
enddate=None,
|
||||
git_user=None,
|
||||
git_password=None,
|
||||
depth=None,
|
||||
):
|
||||
self.default_app = app
|
||||
self.default_keywords = keywords
|
||||
|
@ -329,7 +331,7 @@ class Manage:
|
|||
Args.tags.value: args.tags or self.default_tags,
|
||||
Args.reruns.value: args.rerun or self.default_rerun,
|
||||
Args.record_failed_case.value: args.record_failed_case
|
||||
or self.default_record_failed_case,
|
||||
or self.default_record_failed_case,
|
||||
Args.clean.value: args.clean or self.default_clean,
|
||||
Args.report_formats.value: args.report_formats or self.default_report_formats,
|
||||
Args.max_fail.value: args.max_fail or self.default_max_fail,
|
||||
|
@ -422,9 +424,9 @@ class Manage:
|
|||
pms_link_csv=pms_kwargs.get(Args.pms_link_csv.value),
|
||||
).write_new_csv()
|
||||
elif (
|
||||
pms_kwargs.get(Args.send2task.value)
|
||||
and pms_kwargs.get(Args.task_id.value)
|
||||
and pms_kwargs.get(Args.trigger.value) == "hand"
|
||||
pms_kwargs.get(Args.send2task.value)
|
||||
and pms_kwargs.get(Args.task_id.value)
|
||||
and pms_kwargs.get(Args.trigger.value) == "hand"
|
||||
):
|
||||
from src.pms.send2pms import Send2Pms
|
||||
|
||||
|
@ -474,8 +476,8 @@ class Manage:
|
|||
Args.keywords.value: args.keywords or self.default_keywords,
|
||||
Args.tags.value: args.tags or self.default_tags,
|
||||
Args.pyid2csv.value: args.pyid2csv
|
||||
or self.default_pyid2csv
|
||||
or GlobalConfig.PY_ID_TO_CSV,
|
||||
or self.default_pyid2csv
|
||||
or GlobalConfig.PY_ID_TO_CSV,
|
||||
Args.export_csv_file.value: args.export_csv_file or self.default_export_csv_file,
|
||||
"collection_only": True,
|
||||
}
|
||||
|
@ -528,10 +530,10 @@ class Manage:
|
|||
|
||||
if git_kwargs.get(Args.url.value):
|
||||
if all(
|
||||
[
|
||||
git_kwargs.get(Args.user.value),
|
||||
git_kwargs.get(Args.password.value),
|
||||
]
|
||||
[
|
||||
git_kwargs.get(Args.user.value),
|
||||
git_kwargs.get(Args.password.value),
|
||||
]
|
||||
):
|
||||
from src.git.clone import sslclone as git_clone
|
||||
else:
|
||||
|
@ -540,10 +542,10 @@ class Manage:
|
|||
git_clone(**git_kwargs)
|
||||
|
||||
if all(
|
||||
[
|
||||
git_kwargs.get(Args.app_name.value),
|
||||
git_kwargs.get(Args.startdate.value),
|
||||
]
|
||||
[
|
||||
git_kwargs.get(Args.app_name.value),
|
||||
git_kwargs.get(Args.startdate.value),
|
||||
]
|
||||
):
|
||||
from src.git.code_statistics import CodeStatistics
|
||||
|
||||
|
|
|
@ -10,6 +10,10 @@ import sys
|
|||
|
||||
from funnylog import log as log
|
||||
from funnylog import logger as logger
|
||||
from funnylog.conf import setting as log_setting
|
||||
from setting.globalconfig import GlobalConfig
|
||||
|
||||
log_setting.LOG_FILE_PATH = GlobalConfig.REPORT_PATH
|
||||
|
||||
from setting.globalconfig import SystemPath
|
||||
|
||||
|
|
|
@ -344,9 +344,13 @@ def position(x=None, y=None):
|
|||
result = popen(
|
||||
"dbus-send --session --dest=com.deepin.Autotool --print-reply /com/deepin/Autotool com.deepin.Autotool.getPos | grep double | awk \'{printf \"%d\\n\",$2}\'"
|
||||
).split("\n")
|
||||
posx = int(result[0].strip())
|
||||
posy = int(result[1].strip())
|
||||
|
||||
try:
|
||||
posx = int(result[0].strip())
|
||||
posy = int(result[1].strip())
|
||||
except ValueError as e:
|
||||
print(e)
|
||||
print(result)
|
||||
raise ValueError
|
||||
if x is not None: # If set, the x parameter overrides the return value.
|
||||
posx = int(x)
|
||||
if y is not None: # If set, the y parameter overrides the return value.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# wayland_autotool
|
||||
> 南研提供的wayland下键鼠操作的服务端,使用时需要提前在测试机上进行安装
|
||||
## 安装依赖
|
||||
```shell
|
||||
sudo apt-get install -y g++ build-essential cmake qt5-default qt5-qmake libkf5wayland-dev libqt5gui5 libqt5core5a
|
||||
|
|
|
@ -77,7 +77,7 @@ def _transfer_to_client(ip, password, user, filename, transfer_appname=None):
|
|||
os.system(
|
||||
f"sshpass -p '{password}' ssh {user}@{ip} "
|
||||
f'"cd ~/{client_project_path}/ && '
|
||||
f'bash env.sh && touch env_ok_{filename}"'
|
||||
f'bash env.sh -p {password} && touch env_ok_{filename}"'
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env python3
|
||||
# _*_ coding:utf-8 _*_
|
||||
|
||||
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
# pylint: disable=C0114
|
||||
import os
|
||||
import sys
|
||||
|
||||
for root, dirs, files in os.walk(os.path.abspath("../../apps")):
|
||||
for file in files:
|
||||
if file == "WEBUI":
|
||||
print(f"{root}/{file}", end="")
|
||||
sys.exit(0)
|
Loading…
Reference in New Issue