fix: 1、修复env_dev.sh获取不到配置密码的问题;2、update docs
Description: Log:
This commit is contained in:
parent
d27742e05e
commit
42b5508f14
49
conftest.py
49
conftest.py
|
@ -73,8 +73,6 @@ LN = "\n"
|
||||||
|
|
||||||
|
|
||||||
class LabelType(Enum):
|
class LabelType(Enum):
|
||||||
"""用例级别对应报告级别"""
|
|
||||||
|
|
||||||
L1 = allure.severity_level.BLOCKER
|
L1 = allure.severity_level.BLOCKER
|
||||||
L2 = allure.severity_level.CRITICAL
|
L2 = allure.severity_level.CRITICAL
|
||||||
L3 = allure.severity_level.NORMAL
|
L3 = allure.severity_level.NORMAL
|
||||||
|
@ -82,12 +80,10 @@ class LabelType(Enum):
|
||||||
|
|
||||||
|
|
||||||
def add_mark(item, name: str = "", args: tuple = (), kwargs: dict = None):
|
def add_mark(item, name: str = "", args: tuple = (), kwargs: dict = None):
|
||||||
"""add mark"""
|
|
||||||
item.own_markers.append(Mark(name=name, args=args, kwargs=kwargs))
|
item.own_markers.append(Mark(name=name, args=args, kwargs=kwargs))
|
||||||
|
|
||||||
|
|
||||||
def write_json(session):
|
def write_json(session):
|
||||||
"""write json"""
|
|
||||||
return bool(
|
return bool(
|
||||||
session.config.option.send_pms
|
session.config.option.send_pms
|
||||||
and (session.config.option.task_id or session.config.option.suite_id)
|
and (session.config.option.task_id or session.config.option.suite_id)
|
||||||
|
@ -95,12 +91,10 @@ def write_json(session):
|
||||||
|
|
||||||
|
|
||||||
def auto_send(session):
|
def auto_send(session):
|
||||||
"""auto send"""
|
|
||||||
return bool(session.config.option.send_pms and session.config.option.trigger)
|
return bool(session.config.option.send_pms and session.config.option.trigger)
|
||||||
|
|
||||||
|
|
||||||
def async_send(session):
|
def async_send(session):
|
||||||
"""async send"""
|
|
||||||
return bool(
|
return bool(
|
||||||
session.config.option.send_pms == ConfStr.ASYNC.value
|
session.config.option.send_pms == ConfStr.ASYNC.value
|
||||||
and session.config.option.trigger == ConfStr.AUTO.value
|
and session.config.option.trigger == ConfStr.AUTO.value
|
||||||
|
@ -108,7 +102,6 @@ def async_send(session):
|
||||||
|
|
||||||
|
|
||||||
def finish_send(session):
|
def finish_send(session):
|
||||||
"""finish send"""
|
|
||||||
return bool(
|
return bool(
|
||||||
session.config.option.send_pms == ConfStr.FINISH.value
|
session.config.option.send_pms == ConfStr.FINISH.value
|
||||||
and session.config.option.trigger == ConfStr.AUTO.value
|
and session.config.option.trigger == ConfStr.AUTO.value
|
||||||
|
@ -152,7 +145,6 @@ def pytest_addoption(parser):
|
||||||
|
|
||||||
|
|
||||||
def pytest_cmdline_main(config):
|
def pytest_cmdline_main(config):
|
||||||
"""pytest_cmdline_main"""
|
|
||||||
# 初始化log配置,以解决allure报告日志格式问题
|
# 初始化log配置,以解决allure报告日志格式问题
|
||||||
log_info = logger(config.option.log_level)
|
log_info = logger(config.option.log_level)
|
||||||
config.option.log_level = config.option.log_level
|
config.option.log_level = config.option.log_level
|
||||||
|
@ -167,7 +159,6 @@ def pytest_addhooks(pluginmanager):
|
||||||
|
|
||||||
@pytest.mark.trylast
|
@pytest.mark.trylast
|
||||||
def pytest_configure(config):
|
def pytest_configure(config):
|
||||||
"""pytest_configure"""
|
|
||||||
if hasattr(config, "workerinput"):
|
if hasattr(config, "workerinput"):
|
||||||
return # xdist worker
|
return # xdist worker
|
||||||
reporter = config.pluginmanager.getplugin("terminalreporter")
|
reporter = config.pluginmanager.getplugin("terminalreporter")
|
||||||
|
@ -178,29 +169,12 @@ def pytest_configure(config):
|
||||||
|
|
||||||
|
|
||||||
def pytest_sessionstart(session):
|
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,
|
|
||||||
# )
|
|
||||||
_display = (
|
_display = (
|
||||||
GlobalConfig.DisplayServer.wayland
|
GlobalConfig.DisplayServer.wayland
|
||||||
if GlobalConfig.IS_WAYLAND
|
if GlobalConfig.IS_WAYLAND
|
||||||
else GlobalConfig.DisplayServer.x11
|
else GlobalConfig.DisplayServer.x11
|
||||||
)
|
)
|
||||||
logger.info(f"当前系统显示协议为 {_display.title()}")
|
logger.info(f"当前系统显示协议为 {_display.title()}")
|
||||||
# popen("gsettings set com.deepin.dde.dock position bottom")
|
|
||||||
session.config.option.start_time = datetime.now()
|
session.config.option.start_time = datetime.now()
|
||||||
|
|
||||||
user = session.config.option.pms_user
|
user = session.config.option.pms_user
|
||||||
|
@ -232,7 +206,6 @@ def pytest_sessionstart(session):
|
||||||
|
|
||||||
@pytest.hookimpl(trylast=True)
|
@pytest.hookimpl(trylast=True)
|
||||||
def pytest_generate_tests(metafunc):
|
def pytest_generate_tests(metafunc):
|
||||||
"""pytest generate tests"""
|
|
||||||
repeat = metafunc.config.option.repeat
|
repeat = metafunc.config.option.repeat
|
||||||
marks = metafunc.definition.get_closest_marker("repeat")
|
marks = metafunc.definition.get_closest_marker("repeat")
|
||||||
if marks is not None:
|
if marks is not None:
|
||||||
|
@ -252,8 +225,6 @@ def pytest_generate_tests(metafunc):
|
||||||
|
|
||||||
|
|
||||||
def pytest_collection_modifyitems(session):
|
def pytest_collection_modifyitems(session):
|
||||||
"""pytest collection modifyitems"""
|
|
||||||
|
|
||||||
walk_dir = (
|
walk_dir = (
|
||||||
f"{GlobalConfig.APPS_PATH}/{session.config.option.app_name}"
|
f"{GlobalConfig.APPS_PATH}/{session.config.option.app_name}"
|
||||||
if session.config.option.app_name
|
if session.config.option.app_name
|
||||||
|
@ -477,7 +448,6 @@ def pytest_collection_modifyitems(session):
|
||||||
|
|
||||||
|
|
||||||
def pytest_collection_finish(session):
|
def pytest_collection_finish(session):
|
||||||
"""pytest collection finish"""
|
|
||||||
session.item_count = len(session.items)
|
session.item_count = len(session.items)
|
||||||
|
|
||||||
pop_skip_case_from_items = session.items[:]
|
pop_skip_case_from_items = session.items[:]
|
||||||
|
@ -568,7 +538,6 @@ def pytest_collection_finish(session):
|
||||||
|
|
||||||
|
|
||||||
def pytest_runtest_setup(item):
|
def pytest_runtest_setup(item):
|
||||||
"""pytest runtest setup"""
|
|
||||||
if hasattr(item, "execution_count"):
|
if hasattr(item, "execution_count"):
|
||||||
letmego.conf.setting.EXECUTION_COUNT = item.execution_count
|
letmego.conf.setting.EXECUTION_COUNT = item.execution_count
|
||||||
|
|
||||||
|
@ -618,12 +587,10 @@ def pytest_runtest_setup(item):
|
||||||
|
|
||||||
# pylint: disable=unused-argument
|
# pylint: disable=unused-argument
|
||||||
def pytest_runtest_call(item):
|
def pytest_runtest_call(item):
|
||||||
"""pytest runtest call"""
|
|
||||||
logger.info(f"{FLAG_FEEL} case body {FLAG_FEEL}")
|
logger.info(f"{FLAG_FEEL} case body {FLAG_FEEL}")
|
||||||
|
|
||||||
|
|
||||||
def pytest_runtest_teardown(item):
|
def pytest_runtest_teardown(item):
|
||||||
"""pytest runtest teardown"""
|
|
||||||
logger.info(f"{FLAG_FEEL} teardown {FLAG_FEEL}")
|
logger.info(f"{FLAG_FEEL} teardown {FLAG_FEEL}")
|
||||||
sessiontimeout = item.session.sessiontimeout
|
sessiontimeout = item.session.sessiontimeout
|
||||||
if sessiontimeout:
|
if sessiontimeout:
|
||||||
|
@ -638,7 +605,6 @@ def pytest_runtest_teardown(item):
|
||||||
|
|
||||||
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
|
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
|
||||||
def pytest_runtest_makereport(item, call):
|
def pytest_runtest_makereport(item, call):
|
||||||
"""pytest_runtest_makereport"""
|
|
||||||
out = yield
|
out = yield
|
||||||
report = out.get_result()
|
report = out.get_result()
|
||||||
if report.when == "setup":
|
if report.when == "setup":
|
||||||
|
@ -740,7 +706,6 @@ def pytest_runtest_makereport(item, call):
|
||||||
|
|
||||||
|
|
||||||
def pytest_report_teststatus(report, config):
|
def pytest_report_teststatus(report, config):
|
||||||
"""pytest report teststatus"""
|
|
||||||
# 在 setup 和 teardown 阶段处理 error 和 skip
|
# 在 setup 和 teardown 阶段处理 error 和 skip
|
||||||
if report.when in ("setup", "teardown"):
|
if report.when in ("setup", "teardown"):
|
||||||
if report.failed:
|
if report.failed:
|
||||||
|
@ -773,15 +738,14 @@ def pytest_report_teststatus(report, config):
|
||||||
|
|
||||||
|
|
||||||
def pytest_sessionfinish(session):
|
def pytest_sessionfinish(session):
|
||||||
"""pytest session finish"""
|
|
||||||
if session.config.option.allure_report_dir:
|
if session.config.option.allure_report_dir:
|
||||||
AllureReportExtend.environment_info(session)
|
AllureReportExtend.environment_info(session)
|
||||||
terminalreporter = session.config.pluginmanager.get_plugin("terminalreporter")
|
tr = session.config.pluginmanager.get_plugin("terminalreporter")
|
||||||
execute = {}
|
execute = {}
|
||||||
for _, items in terminalreporter.stats.items():
|
for _, items in tr.stats.items():
|
||||||
for item in items:
|
for item in items:
|
||||||
default_result = {"result": "blocked", "longrepr": "None"}
|
if hasattr(item, "outcome"):
|
||||||
try:
|
default_result = {"result": "blocked", "longrepr": "None"}
|
||||||
if item.outcome == ConfStr.PASSED.value:
|
if item.outcome == ConfStr.PASSED.value:
|
||||||
default_result["result"] = "pass"
|
default_result["result"] = "pass"
|
||||||
elif item.outcome == ConfStr.SKIPPED.value:
|
elif item.outcome == ConfStr.SKIPPED.value:
|
||||||
|
@ -790,14 +754,13 @@ def pytest_sessionfinish(session):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
default_result["result"] = "fail"
|
default_result["result"] = "fail"
|
||||||
item_name = item.nodeid.split("::")[0]
|
default_result["longrepr"] = item.longreprtext
|
||||||
|
item_name = item.fspath
|
||||||
if not execute.get(item_name) or (
|
if not execute.get(item_name) or (
|
||||||
item.outcome != ConfStr.PASSED.value
|
item.outcome != ConfStr.PASSED.value
|
||||||
and execute.get(item_name).get("result") == "pass"
|
and execute.get(item_name).get("result") == "pass"
|
||||||
):
|
):
|
||||||
execute[item_name] = default_result
|
execute[item_name] = default_result
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
if execute:
|
if execute:
|
||||||
with open(f"{GlobalConfig.ROOT_DIR}/ci_result.json", "w", encoding="utf-8") as _f:
|
with open(f"{GlobalConfig.ROOT_DIR}/ci_result.json", "w", encoding="utf-8") as _f:
|
||||||
_f.write(dumps(execute, indent=2, ensure_ascii=False))
|
_f.write(dumps(execute, indent=2, ensure_ascii=False))
|
||||||
|
|
|
@ -24,7 +24,7 @@ export default withMermaid(
|
||||||
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// https://vitepress.dev/reference/default-theme-config
|
// https://vitepress.dev/reference/default-theme-config
|
||||||
siteTitle: "",
|
siteTitle: false,
|
||||||
nav: [
|
nav: [
|
||||||
{text: '指南', link: '/指南/简介/YouQu是什么'},
|
{text: '指南', link: '/指南/简介/YouQu是什么'},
|
||||||
{text: '规划', link: '/规划/框架设计/AT基础框架设计方案'},
|
{text: '规划', link: '/规划/框架设计/AT基础框架设计方案'},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# 未来规划
|
# 未来规划
|
||||||
|
|
||||||
## 桌面应用性能自动化测试
|
## 🏌️♂️ 桌面应用性能自动化测试
|
||||||
|
|
||||||
### 需优化解决的性能自动化问题
|
### 需优化解决的性能自动化问题
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ env(){
|
||||||
deb_array[${#deb_array[@]}]=java-11-openjdk-headless
|
deb_array[${#deb_array[@]}]=java-11-openjdk-headless
|
||||||
deb_array[${#deb_array[@]}]=python3-tkinter
|
deb_array[${#deb_array[@]}]=python3-tkinter
|
||||||
deb_array[${#deb_array[@]}]=xdotool
|
deb_array[${#deb_array[@]}]=xdotool
|
||||||
|
deb_array[${#deb_array[@]}]=opencv
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for deb in ${deb_array[*]}
|
for deb in ${deb_array[*]}
|
||||||
|
@ -87,6 +88,10 @@ if [ "${ENV_CUT_FLAG}" = "cut" ]; then
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ ${debian_platform} == false ]; then
|
||||||
|
pip_array[${#pip_array[@]}]=numpy
|
||||||
|
fi
|
||||||
|
|
||||||
for p in ${pip_array[*]}
|
for p in ${pip_array[*]}
|
||||||
do
|
do
|
||||||
sudo pip3 install ${p} > /tmp/env.log 2>&1
|
sudo pip3 install ${p} > /tmp/env.log 2>&1
|
||||||
|
|
|
@ -2,11 +2,10 @@
|
||||||
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
|
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
tag=$(echo "$(cat ./CURRENT | grep "tag = ")" | cut -d "=" -f2 | python3 -c "s=input();print(s.strip())")
|
SETTING_DIR=$(dirname $(realpath "${BASH_SOURCE[0]}"))
|
||||||
SETTING_DIR=`pwd`
|
|
||||||
ROOT_DIR=$(dirname ${SETTING_DIR})
|
ROOT_DIR=$(dirname ${SETTING_DIR})
|
||||||
|
tag=$(echo "$(cat ${ROOT_DIR}/CURRENT | grep "tag = ")" | cut -d "=" -f2 | python3 -c "s=input();print(s.strip())")
|
||||||
config_pwd=$(cat ${ROOT_DIR}/setting/globalconfig.ini | grep "PASSWORD = ")
|
config_pwd=$(cat ${ROOT_DIR}/setting/globalconfig.ini | grep -v "CLIENT_PASSWORD" | grep "PASSWORD = ")
|
||||||
PASSWORD=$(echo "${config_pwd}" | cut -d "=" -f2 | python3 -c "s=input();print(s.strip())")
|
PASSWORD=$(echo "${config_pwd}" | cut -d "=" -f2 | python3 -c "s=input();print(s.strip())")
|
||||||
while getopts ":p:" opt
|
while getopts ":p:" opt
|
||||||
do
|
do
|
||||||
|
|
|
@ -8,10 +8,10 @@ from enum import Enum
|
||||||
from enum import unique
|
from enum import unique
|
||||||
from getpass import getuser
|
from getpass import getuser
|
||||||
from os import popen
|
from os import popen
|
||||||
from os import getenv
|
|
||||||
from os.path import abspath
|
from os.path import abspath
|
||||||
from os.path import dirname
|
from os.path import dirname
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
from os.path import exists
|
||||||
from platform import machine
|
from platform import machine
|
||||||
from time import strftime
|
from time import strftime
|
||||||
import pathlib
|
import pathlib
|
||||||
|
@ -201,13 +201,17 @@ class _GlobalConfig:
|
||||||
END_DATE = log_cli.get("END_DATE", default="")
|
END_DATE = log_cli.get("END_DATE", default="")
|
||||||
|
|
||||||
# ====================== 动态获取变量 ======================
|
# ====================== 动态获取变量 ======================
|
||||||
version_cfg = GetCfg("/etc/os-version", "Version")
|
VERSION = ""
|
||||||
VERSION = (version_cfg.get("EditionName[zh_CN]") or "") + (
|
if exists("/etc/os-version"):
|
||||||
version_cfg.get("MinorVersion") or ""
|
version_cfg = GetCfg("/etc/os-version", "Version")
|
||||||
)
|
VERSION = (version_cfg.get("EditionName[zh_CN]") or "") + (
|
||||||
|
version_cfg.get("MinorVersion") or ""
|
||||||
|
)
|
||||||
# IP
|
# IP
|
||||||
HOST_IP = str(popen("hostname -I |awk '{print $1}'").read()).strip("\n").strip()
|
HOST_IP = str(popen("hostname -I |awk '{print $1}'").read()).strip("\n").strip()
|
||||||
PRODUCT_INFO = popen("cat /etc/product-info").read()
|
PRODUCT_INFO = ""
|
||||||
|
if exists("cat /etc/product-info"):
|
||||||
|
PRODUCT_INFO = popen("cat /etc/product-info").read()
|
||||||
# machine type
|
# machine type
|
||||||
# e.g. x86_64
|
# e.g. x86_64
|
||||||
SYS_ARCH = machine()
|
SYS_ARCH = machine()
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
"line": "",
|
"line": "",
|
||||||
"total": 0,
|
"total": 0,
|
||||||
"fail": 0,
|
"fail": 0,
|
||||||
|
"skip": 0,
|
||||||
"block": 0,
|
"block": 0,
|
||||||
"pass": 0,
|
"pass": 0,
|
||||||
"pass_rate": ""
|
"pass_rate": ""
|
||||||
|
|
|
@ -275,7 +275,7 @@ class Pms2Csv(_Base):
|
||||||
new_csv_tags = new_csv_file_tags.get(csv_file)
|
new_csv_tags = new_csv_file_tags.get(csv_file)
|
||||||
with open(csv_file, "w+", encoding="utf-8") as f:
|
with open(csv_file, "w+", encoding="utf-8") as f:
|
||||||
for tags in new_csv_tags:
|
for tags in new_csv_tags:
|
||||||
f.write(",".join(tags) + "\n")
|
f.write(",".join(["" if i is None else i for i in tags]) + "\n")
|
||||||
logger.info(f"同步完成: {csv_file}")
|
logger.info(f"同步完成: {csv_file}")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -439,23 +439,10 @@ class LocalRunner:
|
||||||
passed = res.get("pass", 0)
|
passed = res.get("pass", 0)
|
||||||
failed = total - passed
|
failed = total - passed
|
||||||
pass_rate = f"{round((passed / total) * 100, 1)}%" if passed else "0%"
|
pass_rate = f"{round((passed / total) * 100, 1)}%" if passed else "0%"
|
||||||
return total, failed, passed, pass_rate
|
return total, failed, passed, skiped, pass_rate
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def write_json(cls, project_name=None, build_location=None, line=None):
|
def write_json(cls, project_name=None, build_location=None, line=None):
|
||||||
"""
|
|
||||||
写json报告
|
|
||||||
{
|
|
||||||
"project_name": "",
|
|
||||||
"build_location": "",
|
|
||||||
"line": "",
|
|
||||||
"total": "",
|
|
||||||
"fail": "",
|
|
||||||
"block": "",
|
|
||||||
"pass": "",
|
|
||||||
"pass_rate": ""
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
json_tpl_path = f"{GlobalConfig.SETTING_PATH}/template/ci.json"
|
json_tpl_path = f"{GlobalConfig.SETTING_PATH}/template/ci.json"
|
||||||
if not exists(json_tpl_path):
|
if not exists(json_tpl_path):
|
||||||
raise FileNotFoundError
|
raise FileNotFoundError
|
||||||
|
@ -473,6 +460,7 @@ class LocalRunner:
|
||||||
results["total"],
|
results["total"],
|
||||||
results["fail"],
|
results["fail"],
|
||||||
results["pass"],
|
results["pass"],
|
||||||
|
results["skip"],
|
||||||
results["pass_rate"],
|
results["pass_rate"],
|
||||||
) = cls.get_result(ci_result_path)
|
) = cls.get_result(ci_result_path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue