fix: 1、修复env_dev.sh获取不到配置密码的问题;2、update docs

Description:

Log:
This commit is contained in:
mikigo 2024-04-26 17:56:24 +08:00
parent d27742e05e
commit 42b5508f14
9 changed files with 30 additions and 70 deletions

View File

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

View File

@ -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基础框架设计方案'},

View File

@ -1,6 +1,6 @@
# 未来规划 # 未来规划
## 桌面应用性能自动化测试 ## 🏌️‍♂️ 桌面应用性能自动化测试
### 需优化解决的性能自动化问题 ### 需优化解决的性能自动化问题

View File

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

View File

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

View File

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

View File

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

View File

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

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