diff --git a/config/case_template.txt b/config/case_template.txt
index 9f3bf28..f3bf4af 100644
--- a/config/case_template.txt
+++ b/config/case_template.txt
@@ -1,45 +1,41 @@
import pytest
from case_utils.assert_handle import assert_response, assert_sql
-from common_utils.base_request import BaseRequest
from loguru import logger
-from case_utils.request_data_handle import RequestPreDataHandle, after_extract, case_data_replace,eval_data_process
+from case_utils.request_data_handle import RequestPreDataHandle, RequestHandle
from pytest_html import extras # 往pytest-html报告中填写额外的内容
from common_utils.func_handle import add_docstring
+from case_utils.allure_handle import allure_title
+import allure
+# 用例数据
+cases = ${case_data}
-@pytest.fixture(params=${case_data})
-def case(request):
- """
- 收集用例数据
- """
- return request.param
-
+@allure.story(f'{cases["case_common"]["allure_story"]}')
@pytest.mark.${func_title}
@pytest.mark.auto
+@pytest.mark.parametrize("case", cases.get("case_info"))
def ${func_title}_auto(case, extra, request):
logger.info("-----------------------------START-开始执行用例-----------------------------")
logger.debug(f"当前执行的用例数据:{case}")
try:
- # 获取命令行参数,判断当前处于哪个环境
+ # 获取命令行参数,判断当前处于哪个环境
env = request.config.getoption("--env")
# 给当前测试方法添加文档注释
add_docstring(case.get("title", ""))(${func_title}_auto)
+ # 添加用例标题作为allure中显示的用例标题
+ allure_title(case.get("title", ""))
if case.get("run", None):
- # 处理请求前的用例数据
+ # 处理请求前的用例数据
case_data = RequestPreDataHandle(case).request_data_handle()
# 将用例数据显示在pytest-html报告中
extra.append(extras.text(str(case_data), name="用例数据"))
# 发送请求
- response = BaseRequest.send_request(case_data)
+ response = RequestHandle(case_data).send_request_extract()
# 将响应数据显示在pytest-html报告中
extra.append(extras.text(str(response.text), name="响应数据"))
- # 请求后,提取后置参数作为全局变量
- after_extract(response, case_data["extract"])
- # 从全局变量中获取最新值,替换数据库断言中的参数
- case_data["assert_sql"] = eval_data_process(case_data_replace(case_data["assert_sql"]))
# 进行响应断言
assert_response(response, case_data["assert_response"])
- # 进行数据库断言
+ # 进行数据库断言
assert_sql(env, case_data["assert_sql"])
else:
reason = f"标记了该用例为false,不执行\\n"
diff --git a/config/global_vars.py b/config/global_vars.py
index 05cbbc1..e60c1ee 100644
--- a/config/global_vars.py
+++ b/config/global_vars.py
@@ -6,7 +6,7 @@
# @Software: PyCharm
# @Desc: 全局变量
-from enum import Enum
+from enum import Enum, unique # python 3.x版本才能使用
# 定义一个全局变量,作用于接口关联数据存储
GLOBAL_VARS = {}
@@ -29,3 +29,32 @@ class NotificationType(Enum):
EMAIL = 3
ALL = 4
+
+@unique # 枚举类装饰器,确保只有一个名称绑定到任何一个值。
+class AllureAttachmentType(Enum):
+ """
+ allure 报告的文件类型枚举
+ """
+ TEXT = "txt"
+ CSV = "csv"
+ TSV = "tsv"
+ URI_LIST = "uri"
+
+ HTML = "html"
+ XML = "xml"
+ JSON = "json"
+ YAML = "yaml"
+ PCAP = "pcap"
+
+ PNG = "png"
+ JPG = "jpg"
+ SVG = "svg"
+ GIF = "gif"
+ BMP = "bmp"
+ TIFF = "tiff"
+
+ MP4 = "mp4"
+ OGG = "ogg"
+ WEBM = "webm"
+
+ PDF = "pdf"
diff --git a/config/logo.svg b/config/logo.svg
new file mode 100644
index 0000000..b864454
--- /dev/null
+++ b/config/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/config/project_path.py b/config/project_path.py
index 6419e0f..5417817 100644
--- a/config/project_path.py
+++ b/config/project_path.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-# @Version: Python 3.9
-# @Time : 2023/1/31 17:27
+# @Time : 2023/5/16 11:12
# @Author : chenyinhua
# @File : project_path.py
# @Software: PyCharm
-# @Desc: 项目相关路径
+# @Desc:
+
import os
# ------------------------------------ 项目路径 ----------------------------------------------------#
@@ -43,6 +43,17 @@ MANUAL_CASE_DIR = os.path.join(CASE_DIR, "test_manual_case")
if not os.path.exists(MANUAL_CASE_DIR):
os.mkdir(MANUAL_CASE_DIR)
+# 测试用例方法模板路径
+CASE_TEMPLATE_DIR = os.path.join(CONF_DIR, "case_template.txt")
+
# 自动生成测试用例模块
AUTO_CASE_DIR = os.path.join(CASE_DIR, "test_auto_case")
+# 第三方库目录
+LIB_DIR = os.path.join(BASE_DIR, "lib")
+
+# Allure报告,测试结果集目录
+ALLURE_RESULTS_DIR = os.path.join(REPORT_DIR, "allure_results")
+# Allure报告,HTML测试报告目录
+ALLURE_HTML_DIR = os.path.join(REPORT_DIR, "allure_html")
+
diff --git a/config/settings.py b/config/settings.py
index e0a6e12..09afb85 100644
--- a/config/settings.py
+++ b/config/settings.py
@@ -11,14 +11,17 @@
CASE_FILE_TYPE = 0
# 0表示默认不发送任何通知, 1代表钉钉通知,2代表企业微信通知, 3代表邮件通知, 4代表所有途径都发送通知
-SEND_RESULT_TYPE = 3
+SEND_RESULT_TYPE = 4
# 测试报告的定制化信息展示
-REPORT_TITLE = "自动化测试报告"
-REPORT_NAME = f"apiautotest-report-"
-PROJECT_NAME = "GitLink 确实开源"
-TESTER = "测试人员:陈银花"
-DEPARTMENT = "所属部门: 开源中心"
+# 这个需要写入到allure测试结果集的environment.properties(不支持中文)
+ENV_INFO = {
+ "report_title": "Auto Test Report",
+ "report_name": "autotestreport_",
+ "project_name": "GitLink",
+ "tester": "floraachy",
+ "department": "OpenSource"
+}
# 指定日志收集级别
LOG_LEVEL = "INFO"
@@ -58,18 +61,83 @@ email = {
"host": "smtp.qq.com",
"to": ["******", "******"] # 收件人邮箱
}
+# ------------------------------------ 邮件通知内容 ----------------------------------------------------#
+email_subject = f"{ENV_INFO.get('project_name', None)} 接口自动化报告"
+email_content = """
+ 各位同事, 大家好:
+ 自动化用例于 ${start_time} 开始运行,运行时长:${run_time} s, 目前已执行完成。
+ ---------------------------------------------------------------------------------------------------------------
+ 测试人: ${tester}
+ 所属部门: ${department}
+ 项目环境: ${project_env}
+ ---------------------------------------------------------------------------------------------------------------
+ 执行结果如下:
+ 用例运行总数: ${total} 个
+ 通过用例个数(passed): ${passed} 个
+ 失败用例个数(failed): ${failed} 个
+ 异常用例个数(error): ${broken} 个
+ 跳过用例个数(skipped): ${skipped} 个
+ 失败重试用例个数 * 次数之和(rerun): ${rerun} 个
+ 成 功 率: ${pass_rate} %
+
+ **********************************
+ 附件为具体的测试报告,详细情况可下载附件查看, 非相关负责人员可忽略此消息。谢谢。
+ """
# ------------------------------------ 钉钉相关配置 ----------------------------------------------------#
ding_talk = {
"webhook_url": "https://oapi.dingtalk.com/robot/send?access_token=***********",
"secret": "***********"
}
+# ------------------------------------ 钉钉通知内容 ----------------------------------------------------#
+ding_talk_title = f"{ENV_INFO.get('project_name', None)} 接口自动化报告"
+ding_talk_content = """
+ 各位同事, 大家好:
+ ### 自动化用例于 ${start_time} 开始运行,运行时长:${run_time} s, 目前已执行完成。
+ ---------------------------------------------------------------------------------------------------------------
+ #### 测试人: ${tester}
+ #### 所属部门: ${department}
+ #### 项目环境:${project_env}
+ ---------------------------------------------------------------------------------------------------------------
+ #### 执行结果如下:
+ - 用例运行总数: ${total} 个
+ - 通过用例个数(passed): ${passed} 个
+ - 失败用例个数(failed): ${failed} 个
+ - 异常用例个数(error): ${broken} 个
+ - 跳过用例个数(skipped): ${skipped} 个
+ - 失败重试用例个数 * 次数之和(rerun): ${rerun} 个
+ - 成 功 率: ${pass_rate} %
+
+ **********************************
+ 附件为具体的测试报告,详细情况可下载附件查看, 非相关负责人员可忽略此消息。谢谢。
+ """
# ------------------------------------ 企业微信相关配置 ----------------------------------------------------#
wechat = {
"webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=********",
}
+# ------------------------------------ 企业微信通知内容 ----------------------------------------------------#
+wechat_content = """
+ 各位同事, 大家好:
+ ### 自动化用例于 ${start_time} 开始运行,运行时长:${run_time} s, 目前已执行完成。
+ --------------------------------
+ #### 测试人: ${tester}
+ #### 所属部门: ${department}
+ #### 项目环境:${project_env}
+ --------------------------------
+ #### 执行结果如下:
+ - 用例运行总数: ${total} 个
+ - 通过用例个数(passed): ${passed} 个
+ - 失败用例个数(failed): ${failed} 个
+ - 异常用例个数(error): ${broken} 个
+ - 跳过用例个数(skipped): ${skipped} 个
+ - 失败重试用例个数 * 次数之和(rerun): ${rerun} 个
+ - 成 功 率: ${pass_rate} %
+
+ **********************************
+ 附件为具体的测试报告,详细情况可下载附件查看, 非相关负责人员可忽略此消息。谢谢。
+ """
# ------------------------------------ 数据库相关配置 ----------------------------------------------------#
db_info = {
"test": {
@@ -87,7 +155,6 @@ db_info = {
},
"live": {
-
}
-}
\ No newline at end of file
+}
diff --git a/conftest.py b/conftest.py
index eff8e6c..1e02eb7 100644
--- a/conftest.py
+++ b/conftest.py
@@ -5,15 +5,14 @@
# @File : conftest.py
# @Software: PyCharm
# @Desc: 这是文件的描述信息
-
+import os.path
from config.global_vars import GLOBAL_VARS
from loguru import logger
import pytest
from py._xmlgen import html # 安装pytest-html,版本最好是2.1.1
from time import strftime
-from config.settings import test, live, REPORT_TITLE, PROJECT_NAME, TESTER, DEPARTMENT
-from case_utils.send_result_handle import get_test_info_from_html_report, send_result
+from config.settings import test, live, ENV_INFO
# ------------------------------------- START: 配置运行环境 ---------------------------------------#
@@ -51,7 +50,7 @@ def get_config(request):
for k, v in item.items():
GLOBAL_VARS[k] = v
- logger.info(f"当前环境变量为:{GLOBAL_VARS}")
+ logger.debug(f"当前环境变量为:{GLOBAL_VARS}")
# ------------------------------------- END: 配置运行环境 ---------------------------------------#
@@ -80,7 +79,7 @@ def pytest_html_report_title(report):
"""
修改报告标题
"""
- report.title = REPORT_TITLE
+ report.title = ENV_INFO.get('report_title', "")
def pytest_configure(config):
@@ -88,7 +87,7 @@ def pytest_configure(config):
# 在测试运行前,修改Environment部分信息,配置测试报告环境信息
"""
# 给环境表 添加项目名称及开始时间
- config._metadata["项目名称"] = PROJECT_NAME
+ config._metadata["项目名称"] = ENV_INFO.get('project_name', "")
config._metadata['开始时间'] = strftime('%Y-%m-%d %H:%M:%S')
# 给环境表 移除packages 及plugins
config._metadata.pop("Packages")
@@ -101,25 +100,16 @@ def pytest_sessionfinish(session, exitstatus):
在测试运行后,修改Environment部分信息
"""
# 给环境表 添加 项目环境
- env = session.config.getoption("--env") # 可以获取到命令行参数指定的环境
+ env = session.config.getoption("--env") # 可以获取到命令行参数指定的环境
session.config._metadata['项目环境'] = {GLOBAL_VARS.get("host", env)}
-@pytest.hookimpl(hookwrapper=True)
-def pytest_terminal_summary(terminalreporter, exitstatus, config):
- yield
- # 获取测试报告路径,并发送测试结果
- report_path = config.getoption('--html')
- results = get_test_info_from_html_report(report_path)
- send_result(results, report_path)
-
-
def pytest_html_results_summary(prefix, summary, postfix):
"""
修改Summary部分的信息
"""
- prefix.extend([html.p(TESTER)])
- prefix.extend([html.p(DEPARTMENT)])
+ prefix.extend([html.p(f'测试人员:{ENV_INFO.get("tester", "")}')])
+ prefix.extend([html.p(f'所属部门: :{ENV_INFO.get("department", "")}')])
def pytest_html_results_table_header(cells):
diff --git a/lib/allure-2.22.0/bin/allure b/lib/allure-2.22.0/bin/allure
new file mode 100644
index 0000000..e49e8d5
--- /dev/null
+++ b/lib/allure-2.22.0/bin/allure
@@ -0,0 +1,239 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# allure start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh allure
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and ALLURE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+export APP_HOME=$( cd "${APP_HOME:-./}.." && pwd -P ) || exit
+
+APP_NAME="allure"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and ALLURE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/lib/*:$APP_HOME/lib/config
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and ALLURE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $ALLURE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ -classpath "$CLASSPATH" \
+ io.qameta.allure.CommandLine \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $ALLURE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/lib/allure-2.22.0/bin/allure.bat b/lib/allure-2.22.0/bin/allure.bat
new file mode 100644
index 0000000..abab63a
--- /dev/null
+++ b/lib/allure-2.22.0/bin/allure.bat
@@ -0,0 +1,91 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem allure startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%..
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and ALLURE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\lib\*;%APP_HOME%\lib\config
+
+
+@rem Execute allure
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %ALLURE_OPTS% -classpath "%CLASSPATH%" io.qameta.allure.CommandLine %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable ALLURE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%ALLURE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/lib/allure-2.22.0/config/allure-cucumber.yml b/lib/allure-2.22.0/config/allure-cucumber.yml
new file mode 100644
index 0000000..e69de29
diff --git a/lib/allure-2.22.0/config/allure-junit.yml b/lib/allure-2.22.0/config/allure-junit.yml
new file mode 100644
index 0000000..c40f11b
--- /dev/null
+++ b/lib/allure-2.22.0/config/allure-junit.yml
@@ -0,0 +1,3 @@
+plugins:
+ - junit-plugin
+ - packages-plugin
diff --git a/lib/allure-2.22.0/config/allure.yml b/lib/allure-2.22.0/config/allure.yml
new file mode 100644
index 0000000..f42f86e
--- /dev/null
+++ b/lib/allure-2.22.0/config/allure.yml
@@ -0,0 +1,11 @@
+plugins:
+ - junit-xml-plugin
+ - xunit-xml-plugin
+ - trx-plugin
+ - behaviors-plugin
+ - packages-plugin
+ - screen-diff-plugin
+ - xctest-plugin
+ - jira-plugin
+ - xray-plugin
+ - custom-logo-plugin
diff --git a/lib/allure-2.22.0/lib/allure-commandline-2.22.0.jar b/lib/allure-2.22.0/lib/allure-commandline-2.22.0.jar
new file mode 100644
index 0000000..c8c7026
Binary files /dev/null and b/lib/allure-2.22.0/lib/allure-commandline-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/lib/allure-generator-2.22.0.jar b/lib/allure-2.22.0/lib/allure-generator-2.22.0.jar
new file mode 100644
index 0000000..0007411
Binary files /dev/null and b/lib/allure-2.22.0/lib/allure-generator-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/lib/allure-model-2.20.1.jar b/lib/allure-2.22.0/lib/allure-model-2.20.1.jar
new file mode 100644
index 0000000..872cc87
Binary files /dev/null and b/lib/allure-2.22.0/lib/allure-model-2.20.1.jar differ
diff --git a/lib/allure-2.22.0/lib/allure-plugin-api-2.22.0.jar b/lib/allure-2.22.0/lib/allure-plugin-api-2.22.0.jar
new file mode 100644
index 0000000..498daea
Binary files /dev/null and b/lib/allure-2.22.0/lib/allure-plugin-api-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/lib/allure1-model-1.0.jar b/lib/allure-2.22.0/lib/allure1-model-1.0.jar
new file mode 100644
index 0000000..b3d6d60
Binary files /dev/null and b/lib/allure-2.22.0/lib/allure1-model-1.0.jar differ
diff --git a/lib/allure-2.22.0/lib/annotations-15.0.jar b/lib/allure-2.22.0/lib/annotations-15.0.jar
new file mode 100644
index 0000000..3f83832
Binary files /dev/null and b/lib/allure-2.22.0/lib/annotations-15.0.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-beanutils-1.9.4.jar b/lib/allure-2.22.0/lib/commons-beanutils-1.9.4.jar
new file mode 100644
index 0000000..b73543c
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-beanutils-1.9.4.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-codec-1.11.jar b/lib/allure-2.22.0/lib/commons-codec-1.11.jar
new file mode 100644
index 0000000..2245120
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-codec-1.11.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-collections-3.2.2.jar b/lib/allure-2.22.0/lib/commons-collections-3.2.2.jar
new file mode 100644
index 0000000..fa5df82
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-collections-3.2.2.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-collections4-4.2.jar b/lib/allure-2.22.0/lib/commons-collections4-4.2.jar
new file mode 100644
index 0000000..73a4f3f
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-collections4-4.2.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-io-2.11.0.jar b/lib/allure-2.22.0/lib/commons-io-2.11.0.jar
new file mode 100644
index 0000000..be507d9
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-io-2.11.0.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-lang3-3.12.0.jar b/lib/allure-2.22.0/lib/commons-lang3-3.12.0.jar
new file mode 100644
index 0000000..4d434a2
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-lang3-3.12.0.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-logging-1.2.jar b/lib/allure-2.22.0/lib/commons-logging-1.2.jar
new file mode 100644
index 0000000..93a3b9f
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-logging-1.2.jar differ
diff --git a/lib/allure-2.22.0/lib/commons-text-1.3.jar b/lib/allure-2.22.0/lib/commons-text-1.3.jar
new file mode 100644
index 0000000..0ec9e48
Binary files /dev/null and b/lib/allure-2.22.0/lib/commons-text-1.3.jar differ
diff --git a/lib/allure-2.22.0/lib/config/jetty-logging.properties b/lib/allure-2.22.0/lib/config/jetty-logging.properties
new file mode 100644
index 0000000..7996ad2
--- /dev/null
+++ b/lib/allure-2.22.0/lib/config/jetty-logging.properties
@@ -0,0 +1,2 @@
+org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.LoggerLog
+org.eclipse.jetty.LEVEL=WARN
\ No newline at end of file
diff --git a/lib/allure-2.22.0/lib/config/logback.xml b/lib/allure-2.22.0/lib/config/logback.xml
new file mode 100644
index 0000000..09b68b0
--- /dev/null
+++ b/lib/allure-2.22.0/lib/config/logback.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ %msg%n
+
+
+
+
+
+
+
diff --git a/lib/allure-2.22.0/lib/flexmark-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-0.62.2.jar
new file mode 100644
index 0000000..948349a
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-ext-tables-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-ext-tables-0.62.2.jar
new file mode 100644
index 0000000..07193be
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-ext-tables-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-0.62.2.jar
new file mode 100644
index 0000000..43e0c2f
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-ast-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-ast-0.62.2.jar
new file mode 100644
index 0000000..f0e1d44
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-ast-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-builder-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-builder-0.62.2.jar
new file mode 100644
index 0000000..d1409f8
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-builder-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-collection-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-collection-0.62.2.jar
new file mode 100644
index 0000000..34860df
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-collection-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-data-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-data-0.62.2.jar
new file mode 100644
index 0000000..78fc503
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-data-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-dependency-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-dependency-0.62.2.jar
new file mode 100644
index 0000000..559ca26
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-dependency-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-format-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-format-0.62.2.jar
new file mode 100644
index 0000000..325df93
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-format-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-html-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-html-0.62.2.jar
new file mode 100644
index 0000000..d09c241
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-html-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-misc-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-misc-0.62.2.jar
new file mode 100644
index 0000000..eece2d7
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-misc-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-options-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-options-0.62.2.jar
new file mode 100644
index 0000000..d79534b
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-options-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-sequence-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-sequence-0.62.2.jar
new file mode 100644
index 0000000..590be16
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-sequence-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/flexmark-util-visitor-0.62.2.jar b/lib/allure-2.22.0/lib/flexmark-util-visitor-0.62.2.jar
new file mode 100644
index 0000000..efc2552
Binary files /dev/null and b/lib/allure-2.22.0/lib/flexmark-util-visitor-0.62.2.jar differ
diff --git a/lib/allure-2.22.0/lib/freemarker-2.3.32.jar b/lib/allure-2.22.0/lib/freemarker-2.3.32.jar
new file mode 100644
index 0000000..3a073d4
Binary files /dev/null and b/lib/allure-2.22.0/lib/freemarker-2.3.32.jar differ
diff --git a/lib/allure-2.22.0/lib/httpclient-4.5.14.jar b/lib/allure-2.22.0/lib/httpclient-4.5.14.jar
new file mode 100644
index 0000000..2bb7c07
Binary files /dev/null and b/lib/allure-2.22.0/lib/httpclient-4.5.14.jar differ
diff --git a/lib/allure-2.22.0/lib/httpcore-4.4.16.jar b/lib/allure-2.22.0/lib/httpcore-4.4.16.jar
new file mode 100644
index 0000000..f0bdebe
Binary files /dev/null and b/lib/allure-2.22.0/lib/httpcore-4.4.16.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-annotations-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-annotations-2.14.1.jar
new file mode 100644
index 0000000..e908bd3
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-annotations-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-core-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-core-2.14.1.jar
new file mode 100644
index 0000000..cc02583
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-core-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-databind-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-databind-2.14.1.jar
new file mode 100644
index 0000000..1ac8096
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-databind-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-dataformat-xml-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-dataformat-xml-2.14.1.jar
new file mode 100644
index 0000000..22266e3
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-dataformat-xml-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-dataformat-yaml-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-dataformat-yaml-2.14.1.jar
new file mode 100644
index 0000000..9ccddcb
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-dataformat-yaml-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jackson-module-jaxb-annotations-2.14.1.jar b/lib/allure-2.22.0/lib/jackson-module-jaxb-annotations-2.14.1.jar
new file mode 100644
index 0000000..23f72d2
Binary files /dev/null and b/lib/allure-2.22.0/lib/jackson-module-jaxb-annotations-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jakarta.activation-api-1.2.2.jar b/lib/allure-2.22.0/lib/jakarta.activation-api-1.2.2.jar
new file mode 100644
index 0000000..3cc969d
Binary files /dev/null and b/lib/allure-2.22.0/lib/jakarta.activation-api-1.2.2.jar differ
diff --git a/lib/allure-2.22.0/lib/jakarta.xml.bind-api-2.3.3.jar b/lib/allure-2.22.0/lib/jakarta.xml.bind-api-2.3.3.jar
new file mode 100644
index 0000000..b8c7dc1
Binary files /dev/null and b/lib/allure-2.22.0/lib/jakarta.xml.bind-api-2.3.3.jar differ
diff --git a/lib/allure-2.22.0/lib/javax.activation-api-1.2.0.jar b/lib/allure-2.22.0/lib/javax.activation-api-1.2.0.jar
new file mode 100644
index 0000000..986c365
Binary files /dev/null and b/lib/allure-2.22.0/lib/javax.activation-api-1.2.0.jar differ
diff --git a/lib/allure-2.22.0/lib/javax.servlet-api-3.1.0.jar b/lib/allure-2.22.0/lib/javax.servlet-api-3.1.0.jar
new file mode 100644
index 0000000..6b14c3d
Binary files /dev/null and b/lib/allure-2.22.0/lib/javax.servlet-api-3.1.0.jar differ
diff --git a/lib/allure-2.22.0/lib/jaxb-api-2.3.1.jar b/lib/allure-2.22.0/lib/jaxb-api-2.3.1.jar
new file mode 100644
index 0000000..4565865
Binary files /dev/null and b/lib/allure-2.22.0/lib/jaxb-api-2.3.1.jar differ
diff --git a/lib/allure-2.22.0/lib/jaxb-utils-1.0.jar b/lib/allure-2.22.0/lib/jaxb-utils-1.0.jar
new file mode 100644
index 0000000..2c54fb1
Binary files /dev/null and b/lib/allure-2.22.0/lib/jaxb-utils-1.0.jar differ
diff --git a/lib/allure-2.22.0/lib/jcommander-1.82.jar b/lib/allure-2.22.0/lib/jcommander-1.82.jar
new file mode 100644
index 0000000..90f4424
Binary files /dev/null and b/lib/allure-2.22.0/lib/jcommander-1.82.jar differ
diff --git a/lib/allure-2.22.0/lib/jetty-http-9.4.49.v20220914.jar b/lib/allure-2.22.0/lib/jetty-http-9.4.49.v20220914.jar
new file mode 100644
index 0000000..995b28d
Binary files /dev/null and b/lib/allure-2.22.0/lib/jetty-http-9.4.49.v20220914.jar differ
diff --git a/lib/allure-2.22.0/lib/jetty-io-9.4.49.v20220914.jar b/lib/allure-2.22.0/lib/jetty-io-9.4.49.v20220914.jar
new file mode 100644
index 0000000..00892ed
Binary files /dev/null and b/lib/allure-2.22.0/lib/jetty-io-9.4.49.v20220914.jar differ
diff --git a/lib/allure-2.22.0/lib/jetty-server-9.4.49.v20220914.jar b/lib/allure-2.22.0/lib/jetty-server-9.4.49.v20220914.jar
new file mode 100644
index 0000000..cdc00cc
Binary files /dev/null and b/lib/allure-2.22.0/lib/jetty-server-9.4.49.v20220914.jar differ
diff --git a/lib/allure-2.22.0/lib/jetty-util-9.4.49.v20220914.jar b/lib/allure-2.22.0/lib/jetty-util-9.4.49.v20220914.jar
new file mode 100644
index 0000000..1565e1e
Binary files /dev/null and b/lib/allure-2.22.0/lib/jetty-util-9.4.49.v20220914.jar differ
diff --git a/lib/allure-2.22.0/lib/logback-classic-1.3.5.jar b/lib/allure-2.22.0/lib/logback-classic-1.3.5.jar
new file mode 100644
index 0000000..3bd86d3
Binary files /dev/null and b/lib/allure-2.22.0/lib/logback-classic-1.3.5.jar differ
diff --git a/lib/allure-2.22.0/lib/logback-core-1.3.5.jar b/lib/allure-2.22.0/lib/logback-core-1.3.5.jar
new file mode 100644
index 0000000..98d3be5
Binary files /dev/null and b/lib/allure-2.22.0/lib/logback-core-1.3.5.jar differ
diff --git a/lib/allure-2.22.0/lib/opencsv-4.6.jar b/lib/allure-2.22.0/lib/opencsv-4.6.jar
new file mode 100644
index 0000000..a2d5d57
Binary files /dev/null and b/lib/allure-2.22.0/lib/opencsv-4.6.jar differ
diff --git a/lib/allure-2.22.0/lib/properties-2.0.RC5.jar b/lib/allure-2.22.0/lib/properties-2.0.RC5.jar
new file mode 100644
index 0000000..da41c55
Binary files /dev/null and b/lib/allure-2.22.0/lib/properties-2.0.RC5.jar differ
diff --git a/lib/allure-2.22.0/lib/slf4j-api-2.0.3.jar b/lib/allure-2.22.0/lib/slf4j-api-2.0.3.jar
new file mode 100644
index 0000000..c0b0066
Binary files /dev/null and b/lib/allure-2.22.0/lib/slf4j-api-2.0.3.jar differ
diff --git a/lib/allure-2.22.0/lib/snakeyaml-1.33.jar b/lib/allure-2.22.0/lib/snakeyaml-1.33.jar
new file mode 100644
index 0000000..5a95195
Binary files /dev/null and b/lib/allure-2.22.0/lib/snakeyaml-1.33.jar differ
diff --git a/lib/allure-2.22.0/lib/stax2-api-4.2.1.jar b/lib/allure-2.22.0/lib/stax2-api-4.2.1.jar
new file mode 100644
index 0000000..28c6a08
Binary files /dev/null and b/lib/allure-2.22.0/lib/stax2-api-4.2.1.jar differ
diff --git a/lib/allure-2.22.0/lib/tika-core-2.6.0.jar b/lib/allure-2.22.0/lib/tika-core-2.6.0.jar
new file mode 100644
index 0000000..b97ad1a
Binary files /dev/null and b/lib/allure-2.22.0/lib/tika-core-2.6.0.jar differ
diff --git a/lib/allure-2.22.0/lib/woodstox-core-6.4.0.jar b/lib/allure-2.22.0/lib/woodstox-core-6.4.0.jar
new file mode 100644
index 0000000..6cdf94c
Binary files /dev/null and b/lib/allure-2.22.0/lib/woodstox-core-6.4.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/README.txt b/lib/allure-2.22.0/plugins/README.txt
new file mode 100644
index 0000000..30feb4d
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/README.txt
@@ -0,0 +1 @@
+The directory with Allure plugins. To add the plugin simply unpack it to this folder.
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/behaviors-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/behaviors-plugin/allure-plugin.yml
new file mode 100644
index 0000000..90f7647
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/behaviors-plugin/allure-plugin.yml
@@ -0,0 +1,7 @@
+id: behaviors
+name: Behaviors aggregator
+description: The aggregator adds behaviors tab to the report
+extensions:
+ - io.qameta.allure.behaviors.BehaviorsPlugin
+jsFiles:
+ - index.js
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/behaviors-plugin/behaviors-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/behaviors-plugin/behaviors-plugin-2.22.0.jar
new file mode 100644
index 0000000..db82929
Binary files /dev/null and b/lib/allure-2.22.0/plugins/behaviors-plugin/behaviors-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/behaviors-plugin/static/index.js b/lib/allure-2.22.0/plugins/behaviors-plugin/static/index.js
new file mode 100644
index 0000000..afa463b
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/behaviors-plugin/static/index.js
@@ -0,0 +1,206 @@
+'use strict';
+
+allure.api.addTranslation('en', {
+ tab: {
+ behaviors: {
+ name: 'Behaviors'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Features by stories',
+ showAll: 'show all'
+ }
+ }
+});
+
+allure.api.addTranslation('ru', {
+ tab: {
+ behaviors: {
+ name: 'Функциональность'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Функциональность',
+ showAll: 'показать все'
+ }
+ }
+});
+
+allure.api.addTranslation('zh', {
+ tab: {
+ behaviors: {
+ name: '功能'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: '特性场景',
+ showAll: '显示所有'
+ }
+ }
+});
+
+allure.api.addTranslation('de', {
+ tab: {
+ behaviors: {
+ name: 'Verhalten'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Features nach Stories',
+ showAll: 'Zeige alle'
+ }
+ }
+});
+
+allure.api.addTranslation('nl', {
+ tab: {
+ behaviors: {
+ name: 'Functionaliteit'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Features en story’s',
+ showAll: 'Toon alle'
+ }
+ }
+});
+
+allure.api.addTranslation('he', {
+ tab: {
+ behaviors: {
+ name: 'התנהגויות'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'תכונות לפי סיפורי משתמש',
+ showAll: 'הצג הכול'
+ }
+ }
+});
+
+allure.api.addTranslation('br', {
+ tab: {
+ behaviors: {
+ name: 'Comportamentos'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Funcionalidades por história',
+ showAll: 'Mostrar tudo'
+ }
+ }
+});
+
+allure.api.addTranslation('ja', {
+ tab: {
+ behaviors: {
+ name: '振る舞い'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'ストーリー別の機能',
+ showAll: '全て表示'
+ }
+ }
+});
+
+allure.api.addTranslation('es', {
+ tab: {
+ behaviors: {
+ name: 'Funcionalidades'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Funcionalidades por Historias de Usuario',
+ showAll: 'mostrar todo'
+ }
+ }
+});
+
+allure.api.addTranslation('kr', {
+ tab: {
+ behaviors: {
+ name: '동작'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: '스토리별 기능',
+ showAll: '전체 보기'
+ }
+ }
+});
+
+allure.api.addTranslation('fr', {
+ tab: {
+ behaviors: {
+ name: 'Comportements'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Thèmes par histoires',
+ showAll: 'Montrer tout'
+ }
+ }
+});
+
+allure.api.addTranslation('pl', {
+ tab: {
+ behaviors: {
+ name: 'Zachowania'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Funkcje według historii',
+ showAll: 'pokaż wszystko'
+ }
+ }
+});
+
+allure.api.addTranslation('az', {
+ tab: {
+ behaviors: {
+ name: 'Davranışlar'
+ }
+ },
+ widget: {
+ behaviors: {
+ name: 'Hekayələr üzrə xüsusiyyətlər',
+ showAll: 'hamısını göstər'
+ }
+ }
+});
+
+allure.api.addTab('behaviors', {
+ title: 'tab.behaviors.name', icon: 'fa fa-list',
+ route: 'behaviors(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
+ onEnter: (function (testGroup, testResult, testResultTab) {
+ return new allure.components.TreeLayout({
+ testGroup: testGroup,
+ testResult: testResult,
+ testResultTab: testResultTab,
+ tabName: 'tab.behaviors.name',
+ baseUrl: 'behaviors',
+ url: 'data/behaviors.json',
+ csvUrl: 'data/behaviors.csv'
+ });
+ })
+});
+
+allure.api.addWidget('widgets', 'behaviors', allure.components.WidgetStatusView.extend({
+ rowTag: 'a',
+ title: 'widget.behaviors.name',
+ baseUrl: 'behaviors',
+ showLinks: true
+}));
diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/custom-logo-plugin/allure-plugin.yml
new file mode 100644
index 0000000..401e94c
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/custom-logo-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: custom-logo
+name: Custom logo aggregator
+description: The aggregator replaces default Allure logo with a custom one
+cssFiles:
+ - styles.css
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/custom-logo-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/custom-logo-plugin/custom-logo-plugin-2.22.0.jar
new file mode 100644
index 0000000..b101103
Binary files /dev/null and b/lib/allure-2.22.0/plugins/custom-logo-plugin/custom-logo-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/static/custom-logo.svg b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/custom-logo.svg
new file mode 100644
index 0000000..ca3d1d7
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/custom-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg
new file mode 100644
index 0000000..b864454
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/custom-logo-plugin/static/styles.css b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/styles.css
new file mode 100644
index 0000000..85d5c5c
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/custom-logo-plugin/static/styles.css
@@ -0,0 +1,11 @@
+.side-nav__brand {
+ background: url('logo.svg') no-repeat left center !important;
+ margin-left: 10px;
+ height: 65px;
+ width: 150px;
+ background-size: contain !important;
+}
+.side-nav__brand span{
+ display: none;
+}
+
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/jira-plugin/allure-plugin.yml
new file mode 100644
index 0000000..c36b0bb
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/jira-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: jira
+name: Jira Plugin
+description: The plugin that adds support for Jira integration.
+extensions:
+ - io.qameta.allure.jira.JiraExportPlugin
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/jira-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/jira-plugin/jira-plugin-2.22.0.jar
new file mode 100644
index 0000000..ba96d3c
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/jira-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/allure-jira-commons-2.22.0.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/allure-jira-commons-2.22.0.jar
new file mode 100644
index 0000000..2588599
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/allure-jira-commons-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/converter-jackson-2.6.1.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/converter-jackson-2.6.1.jar
new file mode 100644
index 0000000..94a3747
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/converter-jackson-2.6.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-annotations-2.14.1.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-annotations-2.14.1.jar
new file mode 100644
index 0000000..e908bd3
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-annotations-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-core-2.14.1.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-core-2.14.1.jar
new file mode 100644
index 0000000..cc02583
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-core-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-databind-2.14.1.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-databind-2.14.1.jar
new file mode 100644
index 0000000..1ac8096
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/jackson-databind-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/okhttp-3.12.0.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/okhttp-3.12.0.jar
new file mode 100644
index 0000000..85fe711
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/okhttp-3.12.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/okio-1.15.0.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/okio-1.15.0.jar
new file mode 100644
index 0000000..ab8ab73
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/okio-1.15.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/jira-plugin/lib/retrofit-2.6.1.jar b/lib/allure-2.22.0/plugins/jira-plugin/lib/retrofit-2.6.1.jar
new file mode 100644
index 0000000..211539a
Binary files /dev/null and b/lib/allure-2.22.0/plugins/jira-plugin/lib/retrofit-2.6.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/junit-xml-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/junit-xml-plugin/allure-plugin.yml
new file mode 100644
index 0000000..6d3d1c4
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/junit-xml-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: junit
+name: JUnit Plugin
+description: The plugin that adds support for results in JUnit.xml data format.
+extensions:
+ - io.qameta.allure.junitxml.JunitXmlPlugin
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/junit-xml-plugin/junit-xml-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/junit-xml-plugin/junit-xml-plugin-2.22.0.jar
new file mode 100644
index 0000000..352babb
Binary files /dev/null and b/lib/allure-2.22.0/plugins/junit-xml-plugin/junit-xml-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/packages-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/packages-plugin/allure-plugin.yml
new file mode 100644
index 0000000..6c12456
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/packages-plugin/allure-plugin.yml
@@ -0,0 +1,7 @@
+id: packages
+name: Packages aggregator
+description: The aggregator adds packages tab to the report
+extensions:
+ - io.qameta.allure.packages.PackagesPlugin
+jsFiles:
+ - index.js
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/packages-plugin/packages-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/packages-plugin/packages-plugin-2.22.0.jar
new file mode 100644
index 0000000..648f637
Binary files /dev/null and b/lib/allure-2.22.0/plugins/packages-plugin/packages-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/packages-plugin/static/index.js b/lib/allure-2.22.0/plugins/packages-plugin/static/index.js
new file mode 100644
index 0000000..cbc55c0
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/packages-plugin/static/index.js
@@ -0,0 +1,120 @@
+'use strict';
+
+allure.api.addTranslation('en', {
+ tab: {
+ packages: {
+ name: 'Packages'
+ }
+ }
+});
+
+allure.api.addTranslation('ru', {
+ tab: {
+ packages: {
+ name: 'Пакеты'
+ }
+ }
+});
+
+allure.api.addTranslation('zh', {
+ tab: {
+ packages: {
+ name: '包'
+ }
+ }
+});
+
+allure.api.addTranslation('de', {
+ tab: {
+ packages: {
+ name: 'Pakete'
+ }
+ }
+});
+
+allure.api.addTranslation('nl', {
+ tab: {
+ packages: {
+ name: 'Packages'
+ }
+ }
+});
+
+allure.api.addTranslation('he', {
+ tab: {
+ packages: {
+ name: 'חבילות'
+ }
+ }
+});
+
+allure.api.addTranslation('br', {
+ tab: {
+ packages: {
+ name: 'Pacotes'
+ }
+ }
+});
+
+allure.api.addTranslation('ja', {
+ tab: {
+ packages: {
+ name: 'パッケージ'
+ }
+ }
+});
+
+allure.api.addTranslation('es', {
+ tab: {
+ packages: {
+ name: 'Paquetes'
+ }
+ }
+});
+
+allure.api.addTranslation('kr', {
+ tab: {
+ packages: {
+ name: '패키지'
+ }
+ }
+});
+
+allure.api.addTranslation('fr', {
+ tab: {
+ packages: {
+ name: 'Paquets'
+ }
+ }
+});
+
+allure.api.addTranslation('pl', {
+ tab: {
+ packages: {
+ name: 'Pakiety'
+ }
+ }
+});
+
+allure.api.addTranslation('az', {
+ tab: {
+ packages: {
+ name: 'Paketlər'
+ }
+ }
+});
+
+allure.api.addTab('packages', {
+ title: 'tab.packages.name', icon: 'fa fa-align-left',
+ route: 'packages(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)',
+ onEnter: (function (testGroup, testResult, testResultTab) {
+ return new allure.components.TreeLayout({
+ testGroup: testGroup,
+ testResult: testResult,
+ testResultTab: testResultTab,
+ tabName: 'tab.packages.name',
+ baseUrl: 'packages',
+ url: 'data/packages.json'
+ });
+ })
+});
diff --git a/lib/allure-2.22.0/plugins/screen-diff-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/screen-diff-plugin/allure-plugin.yml
new file mode 100644
index 0000000..0483674
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/screen-diff-plugin/allure-plugin.yml
@@ -0,0 +1,7 @@
+id: screen-diff
+name: Screen diff
+description: Who cares about description by just-boris
+jsFiles:
+ - index.js
+cssFiles:
+ - styles.css
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/screen-diff-plugin/screen-diff-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/screen-diff-plugin/screen-diff-plugin-2.22.0.jar
new file mode 100644
index 0000000..aeb7fd8
Binary files /dev/null and b/lib/allure-2.22.0/plugins/screen-diff-plugin/screen-diff-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/screen-diff-plugin/static/index.js b/lib/allure-2.22.0/plugins/screen-diff-plugin/static/index.js
new file mode 100644
index 0000000..3774f88
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/screen-diff-plugin/static/index.js
@@ -0,0 +1,200 @@
+(function () {
+ var settings = allure.getPluginSettings('screen-diff', { diffType: 'diff' });
+
+ function renderImage(src) {
+ return (
+ '
' +
+ '

' +
+ '
'
+ );
+ }
+
+ function findImage(data, name) {
+ if (data.testStage && data.testStage.attachments) {
+ var matchedImage = data.testStage.attachments.filter(function (attachment) {
+ return attachment.name === name;
+ })[0];
+ if (matchedImage) {
+ return 'data/attachments/' + matchedImage.source;
+ }
+ }
+ return null;
+ }
+
+ function renderDiffContent(type, diffImage, actualImage, expectedImage) {
+ if (type === 'diff') {
+ if (diffImage) {
+ return renderImage(diffImage);
+ }
+ }
+ if (type === 'overlay' && expectedImage) {
+ return (
+ '' +
+ '

' +
+ '
' +
+ '

' +
+ '
' +
+ '
'
+ );
+ }
+ if (actualImage) {
+ return renderImage(actualImage);
+ }
+ return 'No diff data provided';
+ }
+
+ var TestResultView = Backbone.Marionette.View.extend({
+ regions: {
+ subView: '.screen-diff-view',
+ },
+ template: function () {
+ return '';
+ },
+ onRender: function () {
+ var data = this.model.toJSON();
+ var testType = data.labels.filter(function (label) {
+ return label.name === 'testType';
+ })[0];
+ var diffImage = findImage(data, 'diff');
+ var actualImage = findImage(data, 'actual');
+ var expectedImage = findImage(data, 'expected');
+ if (!testType || testType.value !== 'screenshotDiff') {
+ return;
+ }
+ this.showChildView(
+ 'subView',
+ new ScreenDiffView({
+ diffImage: diffImage,
+ actualImage: actualImage,
+ expectedImage: expectedImage,
+ }),
+ );
+ },
+ });
+ var ErrorView = Backbone.Marionette.View.extend({
+ templateContext: function () {
+ return this.options;
+ },
+ template: function (data) {
+ return '' + data.error + '
';
+ },
+ });
+ var AttachmentView = Backbone.Marionette.View.extend({
+ regions: {
+ subView: '.screen-diff-view',
+ },
+ template: function () {
+ return '';
+ },
+ onRender: function () {
+ jQuery
+ .getJSON(this.options.sourceUrl)
+ .then(this.renderScreenDiffView.bind(this), this.renderErrorView.bind(this));
+ },
+ renderErrorView: function (error) {
+ console.log(error);
+ this.showChildView(
+ 'subView',
+ new ErrorView({
+ error: error.statusText,
+ }),
+ );
+ },
+ renderScreenDiffView: function (data) {
+ this.showChildView(
+ 'subView',
+ new ScreenDiffView({
+ diffImage: data.diff,
+ actualImage: data.actual,
+ expectedImage: data.expected,
+ }),
+ );
+ },
+ });
+
+ var ScreenDiffView = Backbone.Marionette.View.extend({
+ className: 'pane__section',
+ events: function () {
+ return {
+ ['click [name="screen-diff-type-' + this.cid + '"]']: 'onDiffTypeChange',
+ 'mousemove .screen-diff__overlay': 'onOverlayMove',
+ };
+ },
+ initialize: function (options) {
+ this.diffImage = options.diffImage;
+ this.actualImage = options.actualImage;
+ this.expectedImage = options.expectedImage;
+ this.radioName = 'screen-diff-type-' + this.cid;
+ },
+ templateContext: function () {
+ return {
+ diffType: settings.get('diffType'),
+ diffImage: this.diffImage,
+ actualImage: this.actualImage,
+ expectedImage: this.expectedImage,
+ radioName: this.radioName,
+ };
+ },
+ template: function (data) {
+ if (!data.diffImage && !data.actualImage && !data.expectedImage) {
+ return '';
+ }
+
+ return (
+ 'Screen Diff
' +
+ ''
+ );
+ },
+ adjustImageSize: function (event) {
+ var overImage = this.$(event.target);
+ overImage.width(overImage.width());
+ },
+ onRender: function () {
+ const diffType = settings.get('diffType');
+ this.$('[name="' + this.radioName + '"][value="' + diffType + '"]').prop(
+ 'checked',
+ true,
+ );
+ if (diffType === 'overlay') {
+ this.$('.screen-diff__image-over img').on('load', this.adjustImageSize.bind(this));
+ }
+ },
+ onOverlayMove: function (event) {
+ var pageX = event.pageX;
+ var containerScroll = this.$('.screen-diff__container').scrollLeft();
+ var elementX = event.currentTarget.getBoundingClientRect().left;
+ var delta = pageX - elementX + containerScroll;
+ this.$('.screen-diff__image-over').width(delta);
+ },
+ onDiffTypeChange: function (event) {
+ settings.save('diffType', event.target.value);
+ this.render();
+ },
+ });
+ allure.api.addTestResultBlock(TestResultView, { position: 'before' });
+ allure.api.addAttachmentViewer('application/vnd.allure.image.diff', {
+ View: AttachmentView,
+ icon: 'fa fa-exchange',
+ });
+})();
diff --git a/lib/allure-2.22.0/plugins/screen-diff-plugin/static/styles.css b/lib/allure-2.22.0/plugins/screen-diff-plugin/static/styles.css
new file mode 100644
index 0000000..6cf2219
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/screen-diff-plugin/static/styles.css
@@ -0,0 +1,30 @@
+.screen-diff__switchers {
+ margin-bottom: 1em;
+}
+
+.screen-diff__switchers label + label {
+ margin-left: 1em;
+}
+
+.screen-diff__overlay {
+ position: relative;
+ cursor: col-resize;
+}
+
+.screen-diff__container {
+ overflow-x: auto;
+}
+
+.screen-diff__image-over {
+ top: 0;
+ left: 0;
+ bottom: 0;
+ background: #fff;
+ position: absolute;
+ overflow: hidden;
+ box-shadow: 2px 0 1px -1px #aaa;
+}
+
+.screen-diff-error {
+ color: #fd5a3e;
+}
diff --git a/lib/allure-2.22.0/plugins/trx-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/trx-plugin/allure-plugin.yml
new file mode 100644
index 0000000..b0b2657
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/trx-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: trx
+name: XUnit TRX Plugin
+description: The plugin that adds support for results TRX data format.
+extensions:
+ - io.qameta.allure.trx.TrxPlugin
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/trx-plugin/trx-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/trx-plugin/trx-plugin-2.22.0.jar
new file mode 100644
index 0000000..68a27a2
Binary files /dev/null and b/lib/allure-2.22.0/plugins/trx-plugin/trx-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xctest-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/xctest-plugin/allure-plugin.yml
new file mode 100644
index 0000000..be6b7f4
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/xctest-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: xctest
+name: XCTest Plugin
+description: The plugin that adds support for results XCTest data format.
+extensions:
+ - io.qameta.allure.xctest.XcTestPlugin
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/xctest-plugin/lib/xmlwise-1.2.11.jar b/lib/allure-2.22.0/plugins/xctest-plugin/lib/xmlwise-1.2.11.jar
new file mode 100644
index 0000000..a2b5f0d
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xctest-plugin/lib/xmlwise-1.2.11.jar differ
diff --git a/lib/allure-2.22.0/plugins/xctest-plugin/xctest-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/xctest-plugin/xctest-plugin-2.22.0.jar
new file mode 100644
index 0000000..0aa8dec
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xctest-plugin/xctest-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/xray-plugin/allure-plugin.yml
new file mode 100644
index 0000000..231ce80
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/xray-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: xray
+name: Xray Plugin
+description: The plugin that adds support for Xray integration.
+extensions:
+ - io.qameta.allure.xray.XrayTestRunExportPlugin
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/allure-jira-commons-2.22.0.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/allure-jira-commons-2.22.0.jar
new file mode 100644
index 0000000..2588599
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/allure-jira-commons-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/converter-jackson-2.6.1.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/converter-jackson-2.6.1.jar
new file mode 100644
index 0000000..94a3747
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/converter-jackson-2.6.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-annotations-2.14.1.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-annotations-2.14.1.jar
new file mode 100644
index 0000000..e908bd3
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-annotations-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-core-2.14.1.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-core-2.14.1.jar
new file mode 100644
index 0000000..cc02583
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-core-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-databind-2.14.1.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-databind-2.14.1.jar
new file mode 100644
index 0000000..1ac8096
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/jackson-databind-2.14.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/okhttp-3.12.0.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/okhttp-3.12.0.jar
new file mode 100644
index 0000000..85fe711
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/okhttp-3.12.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/okio-1.15.0.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/okio-1.15.0.jar
new file mode 100644
index 0000000..ab8ab73
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/okio-1.15.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/lib/retrofit-2.6.1.jar b/lib/allure-2.22.0/plugins/xray-plugin/lib/retrofit-2.6.1.jar
new file mode 100644
index 0000000..211539a
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/lib/retrofit-2.6.1.jar differ
diff --git a/lib/allure-2.22.0/plugins/xray-plugin/xray-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/xray-plugin/xray-plugin-2.22.0.jar
new file mode 100644
index 0000000..9723d5f
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xray-plugin/xray-plugin-2.22.0.jar differ
diff --git a/lib/allure-2.22.0/plugins/xunit-xml-plugin/allure-plugin.yml b/lib/allure-2.22.0/plugins/xunit-xml-plugin/allure-plugin.yml
new file mode 100644
index 0000000..ca50c51
--- /dev/null
+++ b/lib/allure-2.22.0/plugins/xunit-xml-plugin/allure-plugin.yml
@@ -0,0 +1,5 @@
+id: xunit-xml
+name: XUnit XML v2 Plugin
+description: The plugin that adds support for results in Xunit.net xml data format.
+extensions:
+ - io.qameta.allure.xunitxml.XunitXmlPlugin
\ No newline at end of file
diff --git a/lib/allure-2.22.0/plugins/xunit-xml-plugin/xunit-xml-plugin-2.22.0.jar b/lib/allure-2.22.0/plugins/xunit-xml-plugin/xunit-xml-plugin-2.22.0.jar
new file mode 100644
index 0000000..06fee88
Binary files /dev/null and b/lib/allure-2.22.0/plugins/xunit-xml-plugin/xunit-xml-plugin-2.22.0.jar differ
diff --git a/pytest.ini b/pytest.ini
index 5793c0c..ba1d623 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -1,10 +1,10 @@
[pytest]
# cmd params
-addopts = -s --capture=sys --self-contained-html --reruns=0 --reruns-delay=5
+addopts = -s --cache-clear --capture=sys --self-contained-html --reruns=2 --reruns-delay=5
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
markers =
- test_login: login
- test_login_excel: login excel
- test_new_project: new_project
+ test_login_demo: login
+ test_login_excel_demo: login excel
+ test_new_project_demo: new_project
test_softbot: softbot
auto: auto generate case
\ No newline at end of file
diff --git a/run.py b/run.py
index 74f2310..2676e20 100644
--- a/run.py
+++ b/run.py
@@ -17,55 +17,116 @@
import os
import shutil
import pytest
-from config.project_path import REPORT_DIR, LOG_DIR, AUTO_CASE_DIR, CONF_DIR
+from config.project_path import REPORT_DIR, LOG_DIR, AUTO_CASE_DIR, CONF_DIR, LIB_DIR, ALLURE_RESULTS_DIR, \
+ ALLURE_HTML_DIR
from case_utils.case_handle import get_case_data
from loguru import logger
import click
-from config.settings import REPORT_NAME, LOG_LEVEL
+from config.settings import LOG_LEVEL, ENV_INFO
from datetime import datetime
+from case_utils.platform_handle import PlatformHandle
+from case_utils.get_results_handle import get_test_results_from_pytest_html_report, \
+ get_test_results_from_from_allure_report
+from case_utils.send_result_handle import send_result
+from case_utils.allure_handle import AllureReportBeautiful
+from common_utils.files_handle import zip_file
@click.command()
-@click.option("-env", default=None, help="输入运行环境:test 或 live")
+@click.option("-report", default="allure", help="选择需要生成的测试报告:pytest-html, allure")
+@click.option("-env", default="test", help="输入运行环境:test 或 live")
@click.option("-m", default=None, help="选择需要运行的用例:python.ini配置的名称")
-def run(env, m):
- # 捕获所有日志
- logger.add(os.path.join(LOG_DIR, "runtime_{time}_all.log"), enqueue=True, encoding="utf-8", rotation="00:00",
- format="{time:YYYY-MM-DD HH:mm:ss} {level} From {module}.{function} : {message}")
- # 仅捕获指定级别日志
- logger.add(os.path.join(LOG_DIR, "runtime_{time}_all.log"), enqueue=True, encoding="utf-8", rotation="00:00",
- level=LOG_LEVEL.upper(),
- format="{time:YYYY-MM-DD HH:mm:ss} {level} From {module}.{function} : {message}")
- logger.info("""
- _ _ _ _____ _
- __ _ _ __ (_) / \\ _ _| |_ __|_ _|__ ___| |_
- / _` | "_ \\| | / _ \\| | | | __/ _ \\| |/ _ \\/ __| __|
- | (_| | |_) | |/ ___ \\ |_| | || (_) | | __/\\__ \\ |_
- \\__,_| .__/|_/_/ \\_\\__,_|\\__\\___/|_|\\___||___/\\__|
- |_|
- Starting ... ... ...
- """)
- # 生成case在执行
- if os.path.exists(AUTO_CASE_DIR):
- # 删除文件夹
- shutil.rmtree(AUTO_CASE_DIR)
+def run(env, m, report):
+ try:
+ # ------------------------ 捕获日志 ------------------------
+ # 捕获所有日志
+ logger.add(os.path.join(LOG_DIR, "runtime_{time}_all.log"), enqueue=True, encoding="utf-8", rotation="00:00",
+ format="{time:YYYY-MM-DD HH:mm:ss} {level} From {module}.{function} : {message}")
+ # 仅捕获指定级别日志
+ logger.add(os.path.join(LOG_DIR, "runtime_{time}.log"), enqueue=True, encoding="utf-8", rotation="00:00",
+ level=LOG_LEVEL.upper(),
+ format="{time:YYYY-MM-DD HH:mm:ss} {level} From {module}.{function} : {message}")
+ logger.info("""
+ _ _ _ _____ _
+ __ _ _ __ (_) / \\ _ _| |_ __|_ _|__ ___| |_
+ / _` | "_ \\| | / _ \\| | | | __/ _ \\| |/ _ \\/ __| __|
+ | (_| | |_) | |/ ___ \\ |_| | || (_) | | __/\\__ \\ |_
+ \\__,_| .__/|_/_/ \\_\\__,_|\\__\\___/|_|\\___||___/\\__|
+ |_|
+ Starting ... ... ...
+ """)
+ # ------------------------ 自动生成测试用例 ------------------------
+ # 删除原有的测试用例,以便生成新的测试用例
+ if os.path.exists(AUTO_CASE_DIR):
+ # 删除文件夹
+ shutil.rmtree(AUTO_CASE_DIR)
- if os.path.exists('outputs/report/'):
- shutil.rmtree(path='outputs/report/')
+ # 根据data里面的yaml/excel文件,自动生成测试用例
+ get_case_data()
- # 获取用例
- get_case_data()
- # 执行用例
- current_time = datetime.now().strftime("%Y-%m-%d %H_%M_%S")
- report_name = os.path.join(REPORT_DIR, REPORT_NAME + str(current_time) + ".html")
- report_css = os.path.join(CONF_DIR, "report.css")
- arg_list = [f'--html={report_name}', f"--css={report_css}"]
- if env == "live":
- arg_list.append("--env=live")
- # 执行指定测试用例
- if m is not None:
- arg_list.append(f"-m {m}")
- pytest.main(args=arg_list)
+ # ------------------------ pytest执行测试用例 ------------------------
+ """
+ pytest相关参数:以下也可通过pytest.ini配置
+ --reruns: 失败重跑次数
+ --reruns-delay 失败重跑间隔时间
+ --count: 重复执行次数
+ -v: 显示错误位置以及错误的详细信息
+ -s: 等价于 pytest --capture=no 可以捕获print函数的输出
+ -q: 简化输出信息
+ -m: 运行指定标签的测试用例
+ -x: 一旦错误,则停止运行
+ --cache-clear 清除pytest的缓存,包括测试结果缓存、抓取的fixture实例缓存和收集器信息缓存等
+ --maxfail: 设置最大失败次数,当超出这个阈值时,则不会在执行测试用例
+ "--reruns=3", "--reruns-delay=2"
+ """
+ arg_list = []
+ if env.lower() == "live":
+ arg_list.append("--env=live")
+ # 执行指定测试用例
+ if m is not None:
+ arg_list.append(f"-m {m}")
+ if report.lower() == "allure":
+ arg_list.extend(['-q', '--cache-clear', f'--alluredir={ALLURE_RESULTS_DIR}', '--clean-alluredir'])
+ """
+ allure相关参数:
+ –-alluredir这个选项用于指定存储测试结果的路径
+ """
+ pytest.main(args=arg_list)
+ # ------------------------ 使用allure生成测试报告 ------------------------
+ # 往allure测试结果集目录写入环境配置相关信息
+ ENV_INFO["project_env"] = env
+ AllureReportBeautiful(allure_results_path=ALLURE_RESULTS_DIR).set_report_env(env_info=ENV_INFO)
+ logger.debug("-------开始生成allure测试报告-------")
+ plat = PlatformHandle()
+ # 从LIB_DIR目录中寻找以allure开头的目录作为allure模块的目录,并进入bin目录下
+ allure_path = os.path.join(LIB_DIR, [i for i in os.listdir(LIB_DIR) if i.startswith("allure")][0], "bin")
+ # 根据windows或linux环境判断, 执行指定的命令。plat.allure[0]=cmd, plat.allure[1]=cmd2
+ cmd = plat.allure[1].format(os.path.join(allure_path, plat.allure[0]), ALLURE_RESULTS_DIR, ALLURE_HTML_DIR)
+ # 执行命令行命令,并通过read()方法将命令的结果返回;os.popen() 方法用于从一个命令打开一个管道。在Unix,Windows中有效
+ os.popen(cmd).read()
+ logger.debug("-------美化allure测试报告-------")
+ AllureReportBeautiful(allure_html_path=ALLURE_HTML_DIR).set_windows_title(
+ new_title=ENV_INFO["project_name"])
+ AllureReportBeautiful(allure_html_path=ALLURE_HTML_DIR).set_report_name(new_name=ENV_INFO["report_title"])
+ logger.debug("-------allure测试报告生成完毕,开始发送测试报告-------")
+ # 发送从allure-html获取的测试报告
+ results = get_test_results_from_from_allure_report(ALLURE_HTML_DIR)
+ # 压缩allure-html报告为一个压缩文件zip
+ allure_zip_path = os.path.join(REPORT_DIR, f'{ENV_INFO["report_name"]}.zip')
+ zip_file(in_path=ALLURE_HTML_DIR, out_path=allure_zip_path)
+ send_result(results=results, attachment_path=allure_zip_path)
+ else:
+ current_time = datetime.now().strftime("%Y-%m-%d %H_%M_%S")
+ report_path = os.path.join(REPORT_DIR, ENV_INFO["report_name"] + str(current_time) + ".html")
+ report_css = os.path.join(CONF_DIR, "pytest_html_report.css")
+ arg_list.extend([f'--html={report_path}', f"--css={report_css}"])
+ pytest.main(args=arg_list)
+ logger.debug("-------测试完成,发送测试报告-------")
+ # 发送从pytest-html获取的测试报告
+ results = get_test_results_from_pytest_html_report(report_path)
+ send_result(results=results, attachment_path=report_path)
+ except Exception as e:
+ raise e
if __name__ == '__main__':
diff --git a/test_case/test_manual_case/test_demo.py b/test_case/test_manual_case/test_demo.py
index bbb46a5..0885aaf 100644
--- a/test_case/test_manual_case/test_demo.py
+++ b/test_case/test_manual_case/test_demo.py
@@ -11,11 +11,15 @@ import pytest
from loguru import logger
from pytest_html import extras # 往pytest-html报告中填写额外的内容
from common_utils.func_handle import add_docstring
+import allure
+from case_utils.allure_handle import allure_title, allure_step
# 读取用例数据
-cases = [{"title": "demo cese_01", "user": "flora", "age": 17, "run": False}]
+cases = [{"title": "demo case 01", "user": "flora1", "age": 17, "run": True},
+ {"title": "demo case 02", "user": "lucy", "age": 17, "run": True}]
+@allure.story("demo模块")
@pytest.mark.test_login_demo
@pytest.mark.parametrize("case", cases)
def test_demo(case, extra):
@@ -23,10 +27,14 @@ def test_demo(case, extra):
logger.debug(f"当前执行的用例数据:{case}")
# 给当前测试方法添加文档注释
add_docstring(case.get("title", ""))(test_demo)
+ # 添加用例标题作为allure中显示的用例标题
+ allure_title(case.get("title", ""))
if case.get("run", None):
- assert case["user"] == "flora"
# 将用例数据显示在pytest-html报告中
extra.append(extras.json(case, name="用例数据"))
+ # 在allure报告中显示请求的用例数据
+ allure_step(step_title="用例数据", content=f"{case}")
+ assert case["user"] == "flora"
else:
reason = f"标记了该用例为false,不执行\\n"
logger.warning(f"{reason}")
diff --git a/test_case/test_manual_case/test_login_demo.py b/test_case/test_manual_case/test_login_demo.py
index af76b86..9d628bc 100644
--- a/test_case/test_manual_case/test_login_demo.py
+++ b/test_case/test_manual_case/test_login_demo.py
@@ -9,21 +9,23 @@
import pytest
import os
-from common_utils.yaml_handle import HandleYaml
+from common_utils.yaml_handle import YamlHandle
from config.project_path import DATA_DIR
-from common_utils.base_request import BaseRequest
from case_utils.assert_handle import assert_response, assert_sql
from loguru import logger
-from case_utils.request_data_handle import RequestPreDataHandle, after_extract, case_data_replace, eval_data_process
+from case_utils.request_data_handle import RequestPreDataHandle, RequestHandle
from pytest_html import extras # 往pytest-html报告中填写额外的内容
from common_utils.func_handle import add_docstring
+from case_utils.allure_handle import allure_title
+import allure
# 读取用例数据
-cases = HandleYaml(filename=os.path.join(DATA_DIR, "test_login_demo.yaml")).read_yaml
+cases = YamlHandle(filename=os.path.join(DATA_DIR, "test_login_demo.yaml")).read_yaml
+@allure.story(f'{cases["case_common"]["allure_story"]}')
@pytest.mark.test_login_demo
-@pytest.mark.parametrize("case", cases)
+@pytest.mark.parametrize("case", cases.get("case_info"))
def test_login_demo(case, extra, request):
logger.info("-----------------------------START-开始执行用例-----------------------------")
logger.debug(f"当前执行的用例数据:{case}")
@@ -32,19 +34,17 @@ def test_login_demo(case, extra, request):
env = request.config.getoption("--env")
# 给当前测试方法添加文档注释
add_docstring(case.get("title", ""))(test_login_demo)
+ # 添加用例标题作为allure中显示的用例标题
+ allure_title(case.get("title", ""))
if case.get("run", None):
# 处理请求前的用例数据
case_data = RequestPreDataHandle(case).request_data_handle()
# 将用例数据显示在pytest-html报告中
extra.append(extras.text(str(case_data), name="用例数据"))
# 发送请求
- response = BaseRequest.send_request(case_data)
+ response = RequestHandle(case_data).send_request_extract()
# 将响应数据显示在pytest-html报告中
extra.append(extras.text(str(response.text), name="响应数据"))
- # 请求后,提取后置参数作为全局变量
- after_extract(response, case_data["extract"])
- # 从全局变量中获取最新值,替换数据库断言中的参数
- case_data["assert_sql"] = eval_data_process(case_data_replace(case_data["assert_sql"]))
# 进行响应断言
assert_response(response, case_data["assert_response"])
# 进行数据库断言