fix: 1、优化远程控制方案page对象的调用方式;2、修复域管场景下一些报错;3、release for 2.5.2

Description:

Log:
This commit is contained in:
mikigo 2024-03-27 17:32:37 +08:00
parent 301357d07a
commit d5d74bfb05
11 changed files with 167 additions and 107 deletions

View File

@ -1,2 +1,2 @@
[current]
tag = 2.5.2-dev
tag = 2.5.2

View File

@ -1,16 +1,17 @@
# 版本更新记录
## 2.5.2dev
## 2.5.22024/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.12024/03/14

View File

@ -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
View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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}"'
)

15
src/utils/sub_webui.py Normal file
View File

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