diff --git a/apiAutoTest_v3/__init__.py b/apiAutoTest_v3/__init__.py new file mode 100644 index 0000000..aeff68b --- /dev/null +++ b/apiAutoTest_v3/__init__.py @@ -0,0 +1,37 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:01 +# Description: +# +# --------------------------------------------------------------------------- +import logging +import os +import time + + +def log(name="张三"): + # 创建Logger对象 + logger = logging.getLogger(name) + # 设置日志的级别 + logger.level = logging.INFO + # 2024-09-04-14-09-10.log + log_name = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())+".log" + log_dir = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log") + log_path = os.path.join(log_dir, log_name) + # 设置写入日志的文件 + handle = logging.FileHandler(log_path, mode="a", encoding="utf-8") + # 设置日志的显示格式 + formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s -- %(name)s') + # 设置日志文件中的日志格式 + handle.setFormatter(formatter) + # 给Logger对象添加文件 + logger.addHandler(handle) + # 将Logger对象返回 + return logger + + +# 先执行函数,获取函数的返回值,以后之间使用函数的返回值写入日志 +log = log() \ No newline at end of file diff --git a/apiAutoTest_v3/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..8cee2f5 Binary files /dev/null and b/apiAutoTest_v3/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..0f5a6d9 Binary files /dev/null and b/apiAutoTest_v3/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__init__.py b/apiAutoTest_v3/common/__init__.py new file mode 100644 index 0000000..7752c56 --- /dev/null +++ b/apiAutoTest_v3/common/__init__.py @@ -0,0 +1,9 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:01 +# Description: +# +# --------------------------------------------------------------------------- diff --git a/apiAutoTest_v3/common/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..bd16366 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..300ed29 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-312.pyc new file mode 100644 index 0000000..731c851 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-39.pyc new file mode 100644 index 0000000..d2e1546 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/basic_read_ini.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/db.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/db.cpython-312.pyc new file mode 100644 index 0000000..fec2c51 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/db.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/db.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/db.cpython-39.pyc new file mode 100644 index 0000000..9c9bac0 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/db.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/read_excel.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/read_excel.cpython-312.pyc new file mode 100644 index 0000000..a1e2d2e Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/read_excel.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/read_excel.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/read_excel.cpython-39.pyc new file mode 100644 index 0000000..097e0f6 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/read_excel.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/read_json.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/read_json.cpython-312.pyc new file mode 100644 index 0000000..ce7fdb1 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/read_json.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/read_json.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/read_json.cpython-39.pyc new file mode 100644 index 0000000..fb55364 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/read_json.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-312.pyc b/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-312.pyc new file mode 100644 index 0000000..6dc1e08 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-312.pyc differ diff --git a/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-39.pyc b/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-39.pyc new file mode 100644 index 0000000..62a0ff3 Binary files /dev/null and b/apiAutoTest_v3/common/__pycache__/user_read_ini.cpython-39.pyc differ diff --git a/apiAutoTest_v3/common/basic_read_ini.py b/apiAutoTest_v3/common/basic_read_ini.py new file mode 100644 index 0000000..a29c48f --- /dev/null +++ b/apiAutoTest_v3/common/basic_read_ini.py @@ -0,0 +1,42 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: read_ini.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:17 +# Description: +# +# --------------------------------------------------------------------------- +import configparser +import os + +from apiAutoTest_v3 import log + + +class ReadIni: + def __init__(self): + """获取ini文件的路径,并读取ini""" + self.data_config = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config") + ini_path = os.path.join(self.data_config, "basic_config.ini") + self.conf = configparser.ConfigParser() + self.conf.read(ini_path, encoding="utf-8") + + def get_host(self, key): + """根据key获取host节点下key对应被测系统的域名""" + try: + return self.conf.get("host", key) + except Exception as e: + log.error(f"方法get_host执行失败,形参key传参为:{key},错误为:{e}") + raise e + + def get_sql_connect_msg(self, key): + """根据key获取sql节点下key对应的数据库链接信息""" + try: + return self.conf.get("sql", key) + except Exception as e: + log.error(f"方法get_sql_connect_msg执行失败,形参key传参为:{key},错误为:{e}") + raise e + + +if __name__ == '__main__': + ini = ReadIni() \ No newline at end of file diff --git a/apiAutoTest_v3/common/db.py b/apiAutoTest_v3/common/db.py new file mode 100644 index 0000000..78065d1 --- /dev/null +++ b/apiAutoTest_v3/common/db.py @@ -0,0 +1,73 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: db.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:35 +# Description: +# +# --------------------------------------------------------------------------- +import pymysql +from apiAutoTest_v3 import log +from apiAutoTest_v3.common.basic_read_ini import ReadIni + + +class DB: + def __init__(self): + """链接数据库,获取链接对象和游标对象""" + ini = ReadIni() + self.conn = pymysql.connect( + host=ini.get_sql_connect_msg("host"), + port=int(ini.get_sql_connect_msg("port")), + user=ini.get_sql_connect_msg("user"), + password=ini.get_sql_connect_msg("password"), + database=ini.get_sql_connect_msg("database"), + charset="utf8" + ) + self.cursor = self.conn.cursor() + + def close(self): + self.cursor.close() + self.conn.close() + + def select(self, sql, n=0): + """执行查询的sql语句,并返回查询的结果""" + if isinstance(sql, str): + if sql.strip().lower().startswith("select"): + try: + self.cursor.execute(sql) + except Exception as e: + log.error(f"执行select方法时,产生错误,错误为:{e},sql语句为:{sql}") + raise e + else: + select_result = self.cursor.fetchall() + + if isinstance(n, int) and select_result: + try: + return select_result[n][0] + except Exception as e: + log.error(f"执行select方法时,获取查询结果失败,传入的n为:{n}") + raise e + else: + log.error(f"执行select方法时,sql语句不是查询的sql语句,sql语句为:{sql}") + raise ValueError("sql语句错误") + else: + log.error(f"执行select方法时,sql语句错误,sql语句为:{sql}") + raise ValueError("sql语句错误") + + def delete(self, sql): + """执行删除的SQL语句""" + if isinstance(sql, str): + if sql.strip().lower().startswith("delete"): + try: + self.cursor.execute(sql) + self.conn.commit() + except Exception as e: + log.error(f"执行delete方法时,产生错误,sql语句为:{sql}, 错误为:{e}") + raise e + else: + log.error(f"执行delete方法时,sql语句错误,sql语句为:{sql}") + raise ValueError("sql语句错误") + else: + log.error(f"执行delete方法时,sql语句错误,sql语句为:{sql}") + raise ValueError("sql语句错误") \ No newline at end of file diff --git a/apiAutoTest_v3/common/read_excel.py b/apiAutoTest_v3/common/read_excel.py new file mode 100644 index 0000000..9f3a62a --- /dev/null +++ b/apiAutoTest_v3/common/read_excel.py @@ -0,0 +1,132 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: read_excel.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:53 +# Description: +# +# --------------------------------------------------------------------------- +import openpyxl + +from apiAutoTest_v3 import log +from apiAutoTest_v3.common.read_json import read_json +from apiAutoTest_v3.common.user_read_ini import ReadIni +from apiAutoTest_v3.common.basic_read_ini import ReadIni as BasicIni +from apiAutoTest_v3.data_config.settings import * + + +class ReadExcel: + def __init__(self, username): + """获取所有json文件的路径,并读取json文件,再获取excel文件的路径,加载excel的工作簿,并获取工作表的名称,再获取工作表""" + self.ini = ReadIni(username) + case_data_path = self.ini.get_file_path(FILE_CASE) + expect_data_path = self.ini.get_file_path(FILE_EXPECT) + sql_data_path = self.ini.get_file_path(FILE_SQL) + + excel_path = self.ini.get_file_path(FILE_EXCEL) + table_name = self.ini.get_table_name(TABLE_kEY) + + self.case_data_dict = read_json(case_data_path) + self.expect_data_dict = read_json(expect_data_path) + self.sql_data_dict = read_json(sql_data_path) + + try: + wb = openpyxl.load_workbook(excel_path) + self.ws = wb[table_name] + except Exception as e: + log.error(f"加载excel的工作簿或获取excel的工作表时产生错误,错误为:{e}, excel的路径为:{excel_path}, 工作表的名称为:{table_name}") + raise e + + def __get_cell_value(self, column, row): + """根据列号和行号获取指定单元格数据""" + try: + cell_value = self.ws[column+str(row)].value + except Exception as e: + log.error(f"获取指定单元格数据,出错,错误为:{e}, 传入的列号:{column}和行号:{row}") + raise e + else: + if cell_value is None: + return None + elif cell_value.strip(): + return cell_value.strip() + + def module_name(self, row): + """根据行号,获取模块名称""" + return self.__get_cell_value(MODULE, row) + + def api_name(self, row): + """根据行号,获取接口名称""" + return self.__get_cell_value(API, row) + + def case_url(self, row): + """根据行号,获取用例的url""" + path = self.__get_cell_value(URL, row) + if path: + return BasicIni().get_host(HOST_KEY) + path + + def case_req_method(self, row): + """根据行号,获取用例的请求方法""" + return self.__get_cell_value(REQ_METHOD, row) + + def case_mime(self, row): + """根据行号,获取用例请求的媒体类型""" + mime = self.__get_cell_value(MIME, row) + if mime: + return mime.lower() + + def case_data(self, row): + """根据行号,获取用例数据""" + case_data_key = self.__get_cell_value(CASE_DATA, row) + if case_data_key: + module_name = self.module_name(row) + api_name = self.api_name(row) + return self.case_data_dict[module_name][api_name][case_data_key] + + def expect_data(self, row): + """根据行号,获取期望数据""" + expect_data_key = self.__get_cell_value(EXPECT_DATA, row) + if expect_data_key: + module_name = self.module_name(row) + api_name = self.api_name(row) + return self.expect_data_dict[module_name][api_name][expect_data_key] + + def sql_data(self, row): + """根据行号,获取sql语句""" + sql_data_key = self.__get_cell_value(SQL_DATA, row) + if sql_data_key: + module_name = self.module_name(row) + api_name = self.api_name(row) + return self.sql_data_dict[module_name][api_name][sql_data_key] + + def sql_type(self, row): + """根据行号,获取sql语句的类型""" + value = self.__get_cell_value(SQL_TYPE, row) + if value: + return value.lower() + + def update_key(self, row): + """根号行号,获取更新的key""" + return self.__get_cell_value(UPDATE_KEY, row) + + def get_data(self): + """获取所有的测试数据,并存放在一个二维列表中""" + list_data = [] + for row in range(2, self.ws.max_row+1): + url = self.case_url(row) + method = self.case_req_method(row) + mime = self.case_mime(row) + case_data = self.case_data(row) + expect_data = self.expect_data(row) + sql_type = self.sql_type(row) + sql_data = self.sql_data(row) + update_key = self.update_key(row) + if url is not None and method is not None and expect_data is not None: + list_data.append([url, method, mime, case_data, expect_data, sql_type, sql_data, update_key]) + else: + return list_data + + +if __name__ == '__main__': + excel = ReadExcel("lao_zhang") + print(excel.get_data()) \ No newline at end of file diff --git a/apiAutoTest_v3/common/read_json.py b/apiAutoTest_v3/common/read_json.py new file mode 100644 index 0000000..c61c800 --- /dev/null +++ b/apiAutoTest_v3/common/read_json.py @@ -0,0 +1,25 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: read_json.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:31 +# Description: +# +# --------------------------------------------------------------------------- +import json +from apiAutoTest_v3 import log + + +def read_json(file_path): + """读取json文件,将json文件的数据序列化为python对象再返回""" + if isinstance(file_path, str): + try: + with open(file_path, mode="r", encoding="utf-8") as f: + return json.load(f) + except Exception as e: + log.error(f"读取json文件失败,传入的文件路径:{file_path}-可能文件路径不存在,也有可能文件的数据格式有错误,错误为:{e}") + raise e + else: + log.error(f"执行read_json失败,传入的文件路径:{file_path}-不为字符串") + raise ValueError("传入的文件路径必须为字符串") \ No newline at end of file diff --git a/apiAutoTest_v3/common/user_read_ini.py b/apiAutoTest_v3/common/user_read_ini.py new file mode 100644 index 0000000..14a0ebd --- /dev/null +++ b/apiAutoTest_v3/common/user_read_ini.py @@ -0,0 +1,47 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: read_ini.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:17 +# Description: +# +# --------------------------------------------------------------------------- +import configparser +import os + +from apiAutoTest_v3 import log + + +class ReadIni: + def __init__(self, username): + """获取ini文件的路径,并读取ini""" + data_config = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config") + self.user_dir = os.path.join(data_config, username) + ini_path = os.path.join(self.user_dir, "config.ini") + self.conf = configparser.ConfigParser() + self.conf.read(ini_path, encoding="utf-8") + + def get_file_path(self, key): + """根据key获取file节点下key对应文件的路径""" + try: + log.info(f"执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为{key},") + file_name = self.conf.get("file", key) + except Exception as e: + log.error(f"方法get_file_path执行失败,形参key传参为:{key},错误为:{e}") + raise e + else: + return os.path.join(self.user_dir, file_name) + + def get_table_name(self, key): + """根据key获取table节点下key对应的工作表名""" + try: + return self.conf.get("table", key) + except Exception as e: + log.error(f"方法get_table_name执行失败,形参key传参为:{key},错误为:{e}") + raise e + + +if __name__ == '__main__': + ini = ReadIni() + print(ini.get_file_path("excel")) \ No newline at end of file diff --git a/apiAutoTest_v3/data_config/__pycache__/settings.cpython-312.pyc b/apiAutoTest_v3/data_config/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000..8f4034d Binary files /dev/null and b/apiAutoTest_v3/data_config/__pycache__/settings.cpython-312.pyc differ diff --git a/apiAutoTest_v3/data_config/__pycache__/settings.cpython-39.pyc b/apiAutoTest_v3/data_config/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000..a0d304e Binary files /dev/null and b/apiAutoTest_v3/data_config/__pycache__/settings.cpython-39.pyc differ diff --git a/apiAutoTest_v3/data_config/basic_config.ini b/apiAutoTest_v3/data_config/basic_config.ini new file mode 100644 index 0000000..684ecf1 --- /dev/null +++ b/apiAutoTest_v3/data_config/basic_config.ini @@ -0,0 +1,17 @@ + + + +[host] +# 配置被测系统的域名 +bpm_host=http://36.139.193.99:8088 + + +[sql] +host=36.139.193.99 +port=3306 +user=root +password=Rhrc@2024 +database=eip8 + +[report] +log=log \ No newline at end of file diff --git a/apiAutoTest_v3/data_config/demo/apiAutoTest.xlsx b/apiAutoTest_v3/data_config/demo/apiAutoTest.xlsx new file mode 100644 index 0000000..e9a85f4 Binary files /dev/null and b/apiAutoTest_v3/data_config/demo/apiAutoTest.xlsx differ diff --git a/apiAutoTest_v3/data_config/demo/case_data.json b/apiAutoTest_v3/data_config/demo/case_data.json new file mode 100644 index 0000000..1b595a4 --- /dev/null +++ b/apiAutoTest_v3/data_config/demo/case_data.json @@ -0,0 +1,63 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsNone": {"username": "","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsSpecialChar": {"username": "#!$!@#!@#","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsLong": {"username": "adminadminadminadminadminadminadminadminadmin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsShort": {"username": "a","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsError": {"username": "adminxyz","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorPasswordIsNone": {"username": "admin","password": ""}, + "LoginErrorPasswordIsSpecialChar": {"username": "admin","password": "#!$!@#!@#"}, + "LoginErrorPasswordIsLong": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn"}, + "LoginErrorPasswordIsShort": {"username": "admin","password": "123456"}, + "LoginErrorPasswordIsError": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"code": "requestsAddDem","description": "requestsAddDem","isDefault": 1,"name": "requests添加的维度"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"code": "requestsAddDem"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"ids": "需要更新"} + }, + "更新维度": { + "UpdateDemSuccess": { + "code": "requestsAddDem", + "description": "requestsAddDem", + "isDefault": 0, + "name": "requestsAddDem" + } + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "code": "testAddOrg", + "demId": "需要更新", + "exceedLimitNum": 0, + "grade": "", + "limitNum": 0, + "name": "测试添加的组织", + "nowNum": 0, + "orderNo": 0, + "parentId": "0" + } + }, + "用户加入组织": { + "OrgAddUserSuccess": {"orgCode": "testAddOrg", "accounts": "admin,guest"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": { + "query": {"orgCode": "testAddOrg"}, + "body": [{"alias": "hxxmts", "value": "项目中没有关系户"}] + } + }, + "删除组织": { + "DeleteOrgSuccess": "testAddOrg" + } + } +} diff --git a/apiAutoTest_v3/data_config/demo/config.ini b/apiAutoTest_v3/data_config/demo/config.ini new file mode 100644 index 0000000..25e0df9 --- /dev/null +++ b/apiAutoTest_v3/data_config/demo/config.ini @@ -0,0 +1,12 @@ + + +[file] +# 配置数据配置层中文件的名称 +excel=apiAutoTest.xlsx +case=case_data.json +expect=expect_data.json +sql=sql_data.json + +[table] +# 配置工作表名称 +table_name=BPM diff --git a/apiAutoTest_v3/data_config/demo/expect_data.json b/apiAutoTest_v3/data_config/demo/expect_data.json new file mode 100644 index 0000000..f5396bb --- /dev/null +++ b/apiAutoTest_v3/data_config/demo/expect_data.json @@ -0,0 +1,48 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true}, + "LoginErrorUsernameIsNone": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsLong": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsShort": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsError": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsNone":{"message":"账号或密码错误"}, + "LoginErrorPasswordIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsLong": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsShort": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsError":{"message":"账号或密码错误"} + }, + "刷新token": { + "RefreshSuccess": {"message": "刷新token成功"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"message": "添加维度成功"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"isDelete": "0"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"message": "删除维度成功!"} + }, + "更新维度": { + "UpdateDemSuccess": {"message": "更新维度成功"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": {"message": "添加组织成功"} + }, + "用户加入组织": { + "OrgAddUserSuccess": {"message":"加入成功"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": {"message":"保存组织参数成功!"} + }, + "删除组织": { + "DeleteOrgSuccess": {"message":"删除组织成功!"} + } + } +} diff --git a/apiAutoTest_v3/data_config/demo/sql_data.json b/apiAutoTest_v3/data_config/demo/sql_data.json new file mode 100644 index 0000000..32844b8 --- /dev/null +++ b/apiAutoTest_v3/data_config/demo/sql_data.json @@ -0,0 +1,18 @@ +{ + "维度管理": { + "添加维度": { + "AddDemSuccess": {"delete": "dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\";"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ", + "delete": "delete from uc_org where CODE_=\"testAddOrg\";" + } + } + } +} diff --git a/apiAutoTest_v3/data_config/lao_zhang/apiAutoTest.xlsx b/apiAutoTest_v3/data_config/lao_zhang/apiAutoTest.xlsx new file mode 100644 index 0000000..f1f6442 Binary files /dev/null and b/apiAutoTest_v3/data_config/lao_zhang/apiAutoTest.xlsx differ diff --git a/apiAutoTest_v3/data_config/lao_zhang/case_data.json b/apiAutoTest_v3/data_config/lao_zhang/case_data.json new file mode 100644 index 0000000..1b595a4 --- /dev/null +++ b/apiAutoTest_v3/data_config/lao_zhang/case_data.json @@ -0,0 +1,63 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsNone": {"username": "","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsSpecialChar": {"username": "#!$!@#!@#","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsLong": {"username": "adminadminadminadminadminadminadminadminadmin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsShort": {"username": "a","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsError": {"username": "adminxyz","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorPasswordIsNone": {"username": "admin","password": ""}, + "LoginErrorPasswordIsSpecialChar": {"username": "admin","password": "#!$!@#!@#"}, + "LoginErrorPasswordIsLong": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn"}, + "LoginErrorPasswordIsShort": {"username": "admin","password": "123456"}, + "LoginErrorPasswordIsError": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"code": "requestsAddDem","description": "requestsAddDem","isDefault": 1,"name": "requests添加的维度"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"code": "requestsAddDem"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"ids": "需要更新"} + }, + "更新维度": { + "UpdateDemSuccess": { + "code": "requestsAddDem", + "description": "requestsAddDem", + "isDefault": 0, + "name": "requestsAddDem" + } + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "code": "testAddOrg", + "demId": "需要更新", + "exceedLimitNum": 0, + "grade": "", + "limitNum": 0, + "name": "测试添加的组织", + "nowNum": 0, + "orderNo": 0, + "parentId": "0" + } + }, + "用户加入组织": { + "OrgAddUserSuccess": {"orgCode": "testAddOrg", "accounts": "admin,guest"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": { + "query": {"orgCode": "testAddOrg"}, + "body": [{"alias": "hxxmts", "value": "项目中没有关系户"}] + } + }, + "删除组织": { + "DeleteOrgSuccess": "testAddOrg" + } + } +} diff --git a/apiAutoTest_v3/data_config/lao_zhang/config.ini b/apiAutoTest_v3/data_config/lao_zhang/config.ini new file mode 100644 index 0000000..25e0df9 --- /dev/null +++ b/apiAutoTest_v3/data_config/lao_zhang/config.ini @@ -0,0 +1,12 @@ + + +[file] +# 配置数据配置层中文件的名称 +excel=apiAutoTest.xlsx +case=case_data.json +expect=expect_data.json +sql=sql_data.json + +[table] +# 配置工作表名称 +table_name=BPM diff --git a/apiAutoTest_v3/data_config/lao_zhang/expect_data.json b/apiAutoTest_v3/data_config/lao_zhang/expect_data.json new file mode 100644 index 0000000..f5396bb --- /dev/null +++ b/apiAutoTest_v3/data_config/lao_zhang/expect_data.json @@ -0,0 +1,48 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true}, + "LoginErrorUsernameIsNone": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsLong": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsShort": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsError": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsNone":{"message":"账号或密码错误"}, + "LoginErrorPasswordIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsLong": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsShort": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsError":{"message":"账号或密码错误"} + }, + "刷新token": { + "RefreshSuccess": {"message": "刷新token成功"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"message": "添加维度成功"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"isDelete": "0"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"message": "删除维度成功!"} + }, + "更新维度": { + "UpdateDemSuccess": {"message": "更新维度成功"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": {"message": "添加组织成功"} + }, + "用户加入组织": { + "OrgAddUserSuccess": {"message":"加入成功"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": {"message":"保存组织参数成功!"} + }, + "删除组织": { + "DeleteOrgSuccess": {"message":"删除组织成功!"} + } + } +} diff --git a/apiAutoTest_v3/data_config/lao_zhang/sql_data.json b/apiAutoTest_v3/data_config/lao_zhang/sql_data.json new file mode 100644 index 0000000..32844b8 --- /dev/null +++ b/apiAutoTest_v3/data_config/lao_zhang/sql_data.json @@ -0,0 +1,18 @@ +{ + "维度管理": { + "添加维度": { + "AddDemSuccess": {"delete": "dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\";"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ", + "delete": "delete from uc_org where CODE_=\"testAddOrg\";" + } + } + } +} diff --git a/apiAutoTest_v3/data_config/lisi/apiAutoTest.xlsx b/apiAutoTest_v3/data_config/lisi/apiAutoTest.xlsx new file mode 100644 index 0000000..f1f6442 Binary files /dev/null and b/apiAutoTest_v3/data_config/lisi/apiAutoTest.xlsx differ diff --git a/apiAutoTest_v3/data_config/lisi/case_data.json b/apiAutoTest_v3/data_config/lisi/case_data.json new file mode 100644 index 0000000..1b595a4 --- /dev/null +++ b/apiAutoTest_v3/data_config/lisi/case_data.json @@ -0,0 +1,63 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsNone": {"username": "","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsSpecialChar": {"username": "#!$!@#!@#","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsLong": {"username": "adminadminadminadminadminadminadminadminadmin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsShort": {"username": "a","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorUsernameIsError": {"username": "adminxyz","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="}, + "LoginErrorPasswordIsNone": {"username": "admin","password": ""}, + "LoginErrorPasswordIsSpecialChar": {"username": "admin","password": "#!$!@#!@#"}, + "LoginErrorPasswordIsLong": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn"}, + "LoginErrorPasswordIsShort": {"username": "admin","password": "123456"}, + "LoginErrorPasswordIsError": {"username": "admin","password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"code": "requestsAddDem","description": "requestsAddDem","isDefault": 1,"name": "requests添加的维度"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"code": "requestsAddDem"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"ids": "需要更新"} + }, + "更新维度": { + "UpdateDemSuccess": { + "code": "requestsAddDem", + "description": "requestsAddDem", + "isDefault": 0, + "name": "requestsAddDem" + } + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "code": "testAddOrg", + "demId": "需要更新", + "exceedLimitNum": 0, + "grade": "", + "limitNum": 0, + "name": "测试添加的组织", + "nowNum": 0, + "orderNo": 0, + "parentId": "0" + } + }, + "用户加入组织": { + "OrgAddUserSuccess": {"orgCode": "testAddOrg", "accounts": "admin,guest"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": { + "query": {"orgCode": "testAddOrg"}, + "body": [{"alias": "hxxmts", "value": "项目中没有关系户"}] + } + }, + "删除组织": { + "DeleteOrgSuccess": "testAddOrg" + } + } +} diff --git a/apiAutoTest_v3/data_config/lisi/config.ini b/apiAutoTest_v3/data_config/lisi/config.ini new file mode 100644 index 0000000..25e0df9 --- /dev/null +++ b/apiAutoTest_v3/data_config/lisi/config.ini @@ -0,0 +1,12 @@ + + +[file] +# 配置数据配置层中文件的名称 +excel=apiAutoTest.xlsx +case=case_data.json +expect=expect_data.json +sql=sql_data.json + +[table] +# 配置工作表名称 +table_name=BPM diff --git a/apiAutoTest_v3/data_config/lisi/expect_data.json b/apiAutoTest_v3/data_config/lisi/expect_data.json new file mode 100644 index 0000000..f5396bb --- /dev/null +++ b/apiAutoTest_v3/data_config/lisi/expect_data.json @@ -0,0 +1,48 @@ +{ + "认证接口":{ + "登录系统":{ + "LoginSuccess": {"username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true}, + "LoginErrorUsernameIsNone": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsLong": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsShort": {"message":"账号或密码错误"}, + "LoginErrorUsernameIsError": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsNone":{"message":"账号或密码错误"}, + "LoginErrorPasswordIsSpecialChar": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsLong": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsShort": {"message":"账号或密码错误"}, + "LoginErrorPasswordIsError":{"message":"账号或密码错误"} + }, + "刷新token": { + "RefreshSuccess": {"message": "刷新token成功"} + } + }, + "维度管理": { + "添加维度": { + "AddDemSuccess": {"message": "添加维度成功"} + }, + "根据维度编码获取维度信息": { + "GetDemMessageSuccess": {"isDelete": "0"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"message": "删除维度成功!"} + }, + "更新维度": { + "UpdateDemSuccess": {"message": "更新维度成功"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": {"message": "添加组织成功"} + }, + "用户加入组织": { + "OrgAddUserSuccess": {"message":"加入成功"} + }, + "保存组织参数": { + "SaveOrgparamsSuccess": {"message":"保存组织参数成功!"} + }, + "删除组织": { + "DeleteOrgSuccess": {"message":"删除组织成功!"} + } + } +} diff --git a/apiAutoTest_v3/data_config/lisi/sql_data.json b/apiAutoTest_v3/data_config/lisi/sql_data.json new file mode 100644 index 0000000..32844b8 --- /dev/null +++ b/apiAutoTest_v3/data_config/lisi/sql_data.json @@ -0,0 +1,18 @@ +{ + "维度管理": { + "添加维度": { + "AddDemSuccess": {"delete": "dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";"} + }, + "根据维度编码删除维度": { + "DeleteDemSuccess": {"select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\";"} + } + }, + "组织管理": { + "添加组织": { + "AddOrgSuccess": { + "select": "select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ", + "delete": "delete from uc_org where CODE_=\"testAddOrg\";" + } + } + } +} diff --git a/apiAutoTest_v3/data_config/settings.py b/apiAutoTest_v3/data_config/settings.py new file mode 100644 index 0000000..f99d52f --- /dev/null +++ b/apiAutoTest_v3/data_config/settings.py @@ -0,0 +1,37 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: settings.py +# Author: lao_zhao +# Datetime: 2024/9/4 16:03 +# Description: +# +# --------------------------------------------------------------------------- + + +# excel的列号--------------------------------------------------------------------------- +NUMBER = "A" +MODULE = "B" +API = "C" +TITLE = "D" +LEVEL = "E" +URL = "F" +REQ_METHOD = "G" +MIME = "H" +CASE_DATA = "I" +EXPECT_DATA = "J" +SQL_TYPE = "K" +SQL_DATA = "L" +UPDATE_KEY = "M" + +# ini文件中file节点的key--------------------------------------------------------------------------- +FILE_EXCEL = "excel" +FILE_CASE = "case" +FILE_EXPECT = "expect" +FILE_SQL = "sql" + +# ini文件中host节点的key--------------------------------------------------------------------------- +HOST_KEY = "bpm_host" + +# ini文件中table节点的key--------------------------------------------------------------------------- +TABLE_kEY = "table_name" \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/00e6ab3d-aded-4643-88d1-907caa2bcab2-container.json b/apiAutoTest_v3/report/html/allure_sion/00e6ab3d-aded-4643-88d1-907caa2bcab2-container.json new file mode 100644 index 0000000..c5625dc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/00e6ab3d-aded-4643-88d1-907caa2bcab2-container.json @@ -0,0 +1 @@ +{"uuid": "ac50e2b9-7347-4cfb-b707-0205d1da0654", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874282} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0210157b-3d07-49ff-a4e3-006843254c4b-container.json b/apiAutoTest_v3/report/html/allure_sion/0210157b-3d07-49ff-a4e3-006843254c4b-container.json new file mode 100644 index 0000000..e1697bf --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0210157b-3d07-49ff-a4e3-006843254c4b-container.json @@ -0,0 +1 @@ +{"uuid": "5d258f92-e8a5-4d67-afc6-0a7d284f0f90", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875169} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/02532c36-80da-4b1d-b61a-07dcf82f567b-container.json b/apiAutoTest_v3/report/html/allure_sion/02532c36-80da-4b1d-b61a-07dcf82f567b-container.json new file mode 100644 index 0000000..2822318 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/02532c36-80da-4b1d-b61a-07dcf82f567b-container.json @@ -0,0 +1 @@ +{"uuid": "88f97c78-33d1-4015-aa93-4b34a9f2321d", "befores": [{"name": "url", "status": "passed", "start": 1725509873919, "stop": 1725509873919}], "start": 1725509873919, "stop": 1725509873971} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/026cda82-416a-4017-82bf-4f2992b19067-container.json b/apiAutoTest_v3/report/html/allure_sion/026cda82-416a-4017-82bf-4f2992b19067-container.json new file mode 100644 index 0000000..85ebeaf --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/026cda82-416a-4017-82bf-4f2992b19067-container.json @@ -0,0 +1 @@ +{"uuid": "d53ae35e-1dab-4f1e-a823-46c6fad5a354", "befores": [{"name": "mime", "status": "passed", "start": 1725509874705, "stop": 1725509874705}], "start": 1725509874705, "stop": 1725509874766} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0435d593-d5fb-4bbc-b1b0-bcf107b93836-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/0435d593-d5fb-4bbc-b1b0-bcf107b93836-attachment.txt new file mode 100644 index 0000000..3306fba --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0435d593-d5fb-4bbc-b1b0-bcf107b93836-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818736529408"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/04ebee03-5a3a-4f4d-9c4c-c3064ca9138d-container.json b/apiAutoTest_v3/report/html/allure_sion/04ebee03-5a3a-4f4d-9c4c-c3064ca9138d-container.json new file mode 100644 index 0000000..964eaa4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/04ebee03-5a3a-4f4d-9c4c-c3064ca9138d-container.json @@ -0,0 +1 @@ +{"uuid": "013247b8-59ed-4f6c-88fa-716e21d966d1", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875221, "stop": 1725509875221}], "start": 1725509875221, "stop": 1725509875251} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/07279d79-0a77-4253-9c33-f548695009b1-container.json b/apiAutoTest_v3/report/html/allure_sion/07279d79-0a77-4253-9c33-f548695009b1-container.json new file mode 100644 index 0000000..5574e28 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/07279d79-0a77-4253-9c33-f548695009b1-container.json @@ -0,0 +1 @@ +{"uuid": "684b98a1-bd71-42ec-aa88-7181b04d3be6", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874936, "stop": 1725509874936}], "start": 1725509874936, "stop": 1725509874972} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/074804b4-e846-4da2-9132-43d75fb22132-container.json b/apiAutoTest_v3/report/html/allure_sion/074804b4-e846-4da2-9132-43d75fb22132-container.json new file mode 100644 index 0000000..7f0e7d2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/074804b4-e846-4da2-9132-43d75fb22132-container.json @@ -0,0 +1 @@ +{"uuid": "01098f29-7317-472d-9cc7-652736ba234a", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874199, "stop": 1725509874199}], "start": 1725509874199, "stop": 1725509874231} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/092da2d0-7c19-4be9-a3f6-d97fa878e5b6-container.json b/apiAutoTest_v3/report/html/allure_sion/092da2d0-7c19-4be9-a3f6-d97fa878e5b6-container.json new file mode 100644 index 0000000..6a82c2f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/092da2d0-7c19-4be9-a3f6-d97fa878e5b6-container.json @@ -0,0 +1 @@ +{"uuid": "c5084175-c242-4d39-8a26-40da1707522f", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509873792, "stop": 1725509873793}], "start": 1725509873792, "stop": 1725509873831} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/09d5915b-ab71-4baf-bece-66eb559f58e6-container.json b/apiAutoTest_v3/report/html/allure_sion/09d5915b-ab71-4baf-bece-66eb559f58e6-container.json new file mode 100644 index 0000000..6159303 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/09d5915b-ab71-4baf-bece-66eb559f58e6-container.json @@ -0,0 +1 @@ +{"uuid": "7bb7e85a-5058-49e2-ba42-875d65f2d8cf", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874609, "stop": 1725509874609}], "start": 1725509874609, "stop": 1725509874641} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0a4dc40a-ba89-4085-bb6a-0c8d96a82a5c-container.json b/apiAutoTest_v3/report/html/allure_sion/0a4dc40a-ba89-4085-bb6a-0c8d96a82a5c-container.json new file mode 100644 index 0000000..5953644 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0a4dc40a-ba89-4085-bb6a-0c8d96a82a5c-container.json @@ -0,0 +1 @@ +{"uuid": "8aaeb824-ae32-4d67-a49c-08cae882d2ea", "befores": [{"name": "mime", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874025} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0a848762-2e0c-420a-9546-1bed74adf143-result.json b/apiAutoTest_v3/report/html/allure_sion/0a848762-2e0c-420a-9546-1bed74adf143-result.json new file mode 100644 index 0000000..cb7b7b8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0a848762-2e0c-420a-9546-1bed74adf143-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加组织成功' == '添加组织成功!'\nE \nE - 添加组织成功!\nE ? -\nE + 添加组织成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "e99f3d6b-2c99-40eb-ab52-cc644da410a4-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/org/v1/org/addOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}"}, {"name": "expect_data", "value": "{'message': '添加组织成功'}"}, {"name": "sql_type", "value": "'delete|select'"}, {"name": "sql_data", "value": "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}"}, {"name": "update_key", "value": "'demId'"}], "start": 1725509873838, "stop": 1725509873888, "uuid": "7950588d-e0b7-41c6-9663-ddc40885337f", "historyId": "8601057ef64fcd13fa3bee37103323a1", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0b82eea6-2b91-4086-842e-c5691ed01a41-container.json b/apiAutoTest_v3/report/html/allure_sion/0b82eea6-2b91-4086-842e-c5691ed01a41-container.json new file mode 100644 index 0000000..1493c8f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0b82eea6-2b91-4086-842e-c5691ed01a41-container.json @@ -0,0 +1 @@ +{"uuid": "e0295b30-e3eb-49a1-94f1-8cdb60932ad9", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874399, "stop": 1725509874399}], "start": 1725509874399, "stop": 1725509874451} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0c831ca1-1ebe-4c8b-9f6b-5eb74744f427-result.json b/apiAutoTest_v3/report/html/allure_sion/0c831ca1-1ebe-4c8b-9f6b-5eb74744f427-result.json new file mode 100644 index 0000000..554a1ae --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0c831ca1-1ebe-4c8b-9f6b-5eb74744f427-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功!' == '【requestsAdd...度下存在组织,不允许删除 '\nE \nE - 【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 \nE + 删除维度成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "6d70e449-7a32-44d4-bbfc-284b72b87c0f-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'"}, {"name": "method", "value": "'delete'"}, {"name": "mime", "value": "'query'"}, {"name": "case_data", "value": "{'ids': '需要更新'}"}, {"name": "expect_data", "value": "{'message': '删除维度成功!'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}"}, {"name": "update_key", "value": "'ids'"}], "start": 1725509874074, "stop": 1725509874102, "uuid": "70b06e8b-1bd4-41b5-89dc-2365914c62e6", "historyId": "e2d18f98d0b8345269ccaac9d47e0009", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0f17a41e-c011-4fcb-b0c9-9bd799c26183-container.json b/apiAutoTest_v3/report/html/allure_sion/0f17a41e-c011-4fcb-b0c9-9bd799c26183-container.json new file mode 100644 index 0000000..41598a4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0f17a41e-c011-4fcb-b0c9-9bd799c26183-container.json @@ -0,0 +1 @@ +{"uuid": "781f1d5a-b2d9-48e2-8a95-08ace356df2a", "befores": [{"name": "method", "status": "passed", "start": 1725509874072, "stop": 1725509874072}], "start": 1725509874072, "stop": 1725509874122} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0f76e168-70d8-41ce-8797-be5949e3704c-container.json b/apiAutoTest_v3/report/html/allure_sion/0f76e168-70d8-41ce-8797-be5949e3704c-container.json new file mode 100644 index 0000000..beecd60 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0f76e168-70d8-41ce-8797-be5949e3704c-container.json @@ -0,0 +1 @@ +{"uuid": "308b3805-546b-470c-8411-be56dbc3ce57", "befores": [{"name": "update_key", "status": "passed", "start": 1725509873502, "stop": 1725509873503}], "start": 1725509873502, "stop": 1725509873781} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/0fa8a629-50ab-489a-b256-e7ca104cf1d7-container.json b/apiAutoTest_v3/report/html/allure_sion/0fa8a629-50ab-489a-b256-e7ca104cf1d7-container.json new file mode 100644 index 0000000..3d1b20b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/0fa8a629-50ab-489a-b256-e7ca104cf1d7-container.json @@ -0,0 +1 @@ +{"uuid": "1e132749-7092-40d0-b10b-fb07702e40f5", "children": ["b0ffe29c-5a47-4fc2-9f4c-6348d61a1311", "4f140660-245b-4efb-9908-5bb18fd29495", "d3ad5bb8-3fe1-4e13-a5a3-abcf825786f6", "4bd1a1e9-7b16-45c4-adde-46f218d2a0d9", "c1c9a166-4e8a-4034-af12-642b781f9305", "7b394fb4-02f8-4a3b-910c-cc6907718049", "64c7256a-ca2a-4a5b-83e0-a1a050be1707", "a56e2b22-da2a-4f36-8f48-a0d62e7c9c34", "bfe5ffb6-d54a-4d3a-a70a-a189648896a3", "704580fe-1700-42d0-bdda-536a423482a9", "42e84d51-19dc-4202-ba2b-1c50730ca2c6", "45b57e43-21fc-4409-a400-e5bba2a5a2c0"], "befores": [{"name": "fix_db", "status": "passed", "start": 1725509874827, "stop": 1725509874861}], "afters": [{"name": "fix_db::0", "status": "passed", "start": 1725509875448, "stop": 1725509875448}], "start": 1725509874827, "stop": 1725509875448} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1022cc47-1f1f-4814-9d50-3c5819a22a63-container.json b/apiAutoTest_v3/report/html/allure_sion/1022cc47-1f1f-4814-9d50-3c5819a22a63-container.json new file mode 100644 index 0000000..6719e7e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1022cc47-1f1f-4814-9d50-3c5819a22a63-container.json @@ -0,0 +1 @@ +{"uuid": "8f7324da-5521-4d03-aa6b-b6a2b54e111b", "befores": [{"name": "update_key", "status": "passed", "start": 1725509873793, "stop": 1725509873793}], "start": 1725509873793, "stop": 1725509873829} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/10ba902e-d242-4d8f-a426-e3410abdf1d8-container.json b/apiAutoTest_v3/report/html/allure_sion/10ba902e-d242-4d8f-a426-e3410abdf1d8-container.json new file mode 100644 index 0000000..3d175e0 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/10ba902e-d242-4d8f-a426-e3410abdf1d8-container.json @@ -0,0 +1 @@ +{"uuid": "ca6b98c0-564c-473c-b756-206eb93ab04b", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874073, "stop": 1725509874073}], "start": 1725509874073, "stop": 1725509874120} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/11313d8e-3fad-4629-b330-b6abc255f899-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/11313d8e-3fad-4629-b330-b6abc255f899-attachment.txt new file mode 100644 index 0000000..cf8dae2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/11313d8e-3fad-4629-b330-b6abc255f899-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1153ddb4-a2c1-4e08-87c1-df550f843cc5-container.json b/apiAutoTest_v3/report/html/allure_sion/1153ddb4-a2c1-4e08-87c1-df550f843cc5-container.json new file mode 100644 index 0000000..4808aee --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1153ddb4-a2c1-4e08-87c1-df550f843cc5-container.json @@ -0,0 +1 @@ +{"uuid": "ad8b23f6-a647-43c6-852b-bde1e9ed9198", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875182, "stop": 1725509875182}], "start": 1725509875182, "stop": 1725509875211} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/11761d93-6f2b-47c8-96a7-2461c14b1b42-container.json b/apiAutoTest_v3/report/html/allure_sion/11761d93-6f2b-47c8-96a7-2461c14b1b42-container.json new file mode 100644 index 0000000..7382b9f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/11761d93-6f2b-47c8-96a7-2461c14b1b42-container.json @@ -0,0 +1 @@ +{"uuid": "486b4e21-5ef4-49a0-a245-57912380fa00", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873920, "stop": 1725509873968} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/123cf6d2-841c-40d5-a11d-4140652cfa3d-container.json b/apiAutoTest_v3/report/html/allure_sion/123cf6d2-841c-40d5-a11d-4140652cfa3d-container.json new file mode 100644 index 0000000..ebf617d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/123cf6d2-841c-40d5-a11d-4140652cfa3d-container.json @@ -0,0 +1 @@ +{"uuid": "7831467d-50fb-4ec2-b76f-e25e439a4484", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875342, "stop": 1725509875342}], "start": 1725509875342, "stop": 1725509875399} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/12ae14df-3a17-4b37-abfc-60687d2e6b8e-container.json b/apiAutoTest_v3/report/html/allure_sion/12ae14df-3a17-4b37-abfc-60687d2e6b8e-container.json new file mode 100644 index 0000000..21ba211 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/12ae14df-3a17-4b37-abfc-60687d2e6b8e-container.json @@ -0,0 +1 @@ +{"uuid": "0d94321d-b756-41e5-b5ed-6c61b11acc72", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874929} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/12dd5c0f-3ceb-4d9b-855b-77e1278f00fd-container.json b/apiAutoTest_v3/report/html/allure_sion/12dd5c0f-3ceb-4d9b-855b-77e1278f00fd-container.json new file mode 100644 index 0000000..de9e043 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/12dd5c0f-3ceb-4d9b-855b-77e1278f00fd-container.json @@ -0,0 +1 @@ +{"uuid": "335d9e9f-a61b-4d54-aa0e-4daa729daa1b", "befores": [{"name": "method", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875173} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/12fd06e2-fba0-4e97-bc71-78dc4ac2f495-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/12fd06e2-fba0-4e97-bc71-78dc4ac2f495-attachment.txt new file mode 100644 index 0000000..efd525d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/12fd06e2-fba0-4e97-bc71-78dc4ac2f495-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822473654272"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/133a477d-79d1-40d0-a12c-6038eabbb20f-container.json b/apiAutoTest_v3/report/html/allure_sion/133a477d-79d1-40d0-a12c-6038eabbb20f-container.json new file mode 100644 index 0000000..5e5850c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/133a477d-79d1-40d0-a12c-6038eabbb20f-container.json @@ -0,0 +1 @@ +{"uuid": "3429e083-8986-4d39-9b12-4c786765dfb7", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875442} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/14526df8-b14d-4434-9a22-eda3ffb88fe1-container.json b/apiAutoTest_v3/report/html/allure_sion/14526df8-b14d-4434-9a22-eda3ffb88fe1-container.json new file mode 100644 index 0000000..3260654 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/14526df8-b14d-4434-9a22-eda3ffb88fe1-container.json @@ -0,0 +1 @@ +{"uuid": "0b2a02be-45c2-45d5-89f5-8b342ecaf205", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874064} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/169fdf5e-7165-4e30-b241-c10e56ca6a21-container.json b/apiAutoTest_v3/report/html/allure_sion/169fdf5e-7165-4e30-b241-c10e56ca6a21-container.json new file mode 100644 index 0000000..2e9e87e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/169fdf5e-7165-4e30-b241-c10e56ca6a21-container.json @@ -0,0 +1 @@ +{"uuid": "60a9c65d-51af-40e8-899d-583a589a3add", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874073, "stop": 1725509874073}], "start": 1725509874073, "stop": 1725509874116} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/17c07997-2a46-4e81-a0fa-d08c05f3ae61-container.json b/apiAutoTest_v3/report/html/allure_sion/17c07997-2a46-4e81-a0fa-d08c05f3ae61-container.json new file mode 100644 index 0000000..d0d5ab8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/17c07997-2a46-4e81-a0fa-d08c05f3ae61-container.json @@ -0,0 +1 @@ +{"uuid": "c8925578-96bb-43ff-a5aa-d5f0d7b74207", "children": ["b0ffe29c-5a47-4fc2-9f4c-6348d61a1311", "4f140660-245b-4efb-9908-5bb18fd29495", "d3ad5bb8-3fe1-4e13-a5a3-abcf825786f6", "4bd1a1e9-7b16-45c4-adde-46f218d2a0d9", "c1c9a166-4e8a-4034-af12-642b781f9305", "7b394fb4-02f8-4a3b-910c-cc6907718049", "64c7256a-ca2a-4a5b-83e0-a1a050be1707", "a56e2b22-da2a-4f36-8f48-a0d62e7c9c34", "bfe5ffb6-d54a-4d3a-a70a-a189648896a3", "704580fe-1700-42d0-bdda-536a423482a9", "42e84d51-19dc-4202-ba2b-1c50730ca2c6", "45b57e43-21fc-4409-a400-e5bba2a5a2c0"], "befores": [{"name": "fix_req", "status": "passed", "start": 1725509874861, "stop": 1725509874895}], "afters": [{"name": "fix_req::0", "status": "passed", "start": 1725509875446, "stop": 1725509875447}], "start": 1725509874861, "stop": 1725509875447} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/18b06448-cf30-4712-b184-ab51b80d9ca1-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/18b06448-cf30-4712-b184-ab51b80d9ca1-attachment.txt new file mode 100644 index 0000000..ff0e114 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/18b06448-cf30-4712-b184-ab51b80d9ca1-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820259061760"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1938ead7-bec2-4713-a907-407bbedc0439-container.json b/apiAutoTest_v3/report/html/allure_sion/1938ead7-bec2-4713-a907-407bbedc0439-container.json new file mode 100644 index 0000000..feef3ed --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1938ead7-bec2-4713-a907-407bbedc0439-container.json @@ -0,0 +1 @@ +{"uuid": "f251932f-1324-470a-a5c8-18b92c4bf95f", "befores": [{"name": "method", "status": "passed", "start": 1725509874524, "stop": 1725509874524}], "start": 1725509874524, "stop": 1725509874563} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1a206af5-41dd-43e8-8dfd-0f60883e215d-container.json b/apiAutoTest_v3/report/html/allure_sion/1a206af5-41dd-43e8-8dfd-0f60883e215d-container.json new file mode 100644 index 0000000..68f136a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1a206af5-41dd-43e8-8dfd-0f60883e215d-container.json @@ -0,0 +1 @@ +{"uuid": "e6a9a259-e4ba-4e67-b5d3-a5f861433cfe", "befores": [{"name": "url", "status": "passed", "start": 1725509873792, "stop": 1725509873792}], "start": 1725509873792, "stop": 1725509873833} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1a6597ce-5a7d-4b22-8f11-c3037be41280-container.json b/apiAutoTest_v3/report/html/allure_sion/1a6597ce-5a7d-4b22-8f11-c3037be41280-container.json new file mode 100644 index 0000000..6ba19a9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1a6597ce-5a7d-4b22-8f11-c3037be41280-container.json @@ -0,0 +1 @@ +{"uuid": "ed989a8c-9aeb-4ae8-b70f-0069ce2ed0f4", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874329} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1b8b90b2-b795-4eb6-b43f-4cf100a217d2-container.json b/apiAutoTest_v3/report/html/allure_sion/1b8b90b2-b795-4eb6-b43f-4cf100a217d2-container.json new file mode 100644 index 0000000..f3d1b6a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1b8b90b2-b795-4eb6-b43f-4cf100a217d2-container.json @@ -0,0 +1 @@ +{"uuid": "757057b4-9f6d-4044-9ebd-f679819f8681", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874066} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/1e72a96e-07a8-48a1-9831-0a1e58ce3580-container.json b/apiAutoTest_v3/report/html/allure_sion/1e72a96e-07a8-48a1-9831-0a1e58ce3580-container.json new file mode 100644 index 0000000..3cd299d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/1e72a96e-07a8-48a1-9831-0a1e58ce3580-container.json @@ -0,0 +1 @@ +{"uuid": "afa2d1de-0135-4429-9a43-f2a5660c3930", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874706, "stop": 1725509874706}], "start": 1725509874706, "stop": 1725509874764} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/20682d92-6a21-4b1a-8395-6bd19a043434-result.json b/apiAutoTest_v3/report/html/allure_sion/20682d92-6a21-4b1a-8395-6bd19a043434-result.json new file mode 100644 index 0000000..fb09d3d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/20682d92-6a21-4b1a-8395-6bd19a043434-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A69800>('message')\nE + where <built-in method get of dict object at 0x0000020876A69800> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "49ef8e66-cebc-43fd-b7df-3fefd834211c-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874707, "stop": 1725509874750, "uuid": "7f819331-6a84-4060-b123-7df9e83d3906", "historyId": "4365a6de5e8b42ab1bd856faf33b87f7", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2076ea0b-1ea7-4e33-800c-38b626222a43-container.json b/apiAutoTest_v3/report/html/allure_sion/2076ea0b-1ea7-4e33-800c-38b626222a43-container.json new file mode 100644 index 0000000..a56936c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2076ea0b-1ea7-4e33-800c-38b626222a43-container.json @@ -0,0 +1 @@ +{"uuid": "ec97ba4a-86d5-47c1-bbd5-ef20717df0b6", "befores": [{"name": "mime", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875074} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/20ccf901-6e9d-4ed0-adb6-1da96a756350-container.json b/apiAutoTest_v3/report/html/allure_sion/20ccf901-6e9d-4ed0-adb6-1da96a756350-container.json new file mode 100644 index 0000000..de603d9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/20ccf901-6e9d-4ed0-adb6-1da96a756350-container.json @@ -0,0 +1 @@ +{"uuid": "7dc6f0ca-e73c-4aef-90bf-26157fe2f46d", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873782} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/22a035f0-cc7d-497a-b812-05cbc6d86a3e-container.json b/apiAutoTest_v3/report/html/allure_sion/22a035f0-cc7d-497a-b812-05cbc6d86a3e-container.json new file mode 100644 index 0000000..ec74e8b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/22a035f0-cc7d-497a-b812-05cbc6d86a3e-container.json @@ -0,0 +1 @@ +{"uuid": "f55e1af2-af3d-4ab0-a541-d023737f8146", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874609, "stop": 1725509874609}], "start": 1725509874609, "stop": 1725509874641} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/22e6e7a4-fd90-48d7-a9b3-2dec38d60770-container.json b/apiAutoTest_v3/report/html/allure_sion/22e6e7a4-fd90-48d7-a9b3-2dec38d60770-container.json new file mode 100644 index 0000000..0e7a355 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/22e6e7a4-fd90-48d7-a9b3-2dec38d60770-container.json @@ -0,0 +1 @@ +{"uuid": "e8610eae-320b-430a-9150-847810580cc4", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874341} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/23bdcdbe-e3a4-42ac-b863-f4bb7ff48b70-container.json b/apiAutoTest_v3/report/html/allure_sion/23bdcdbe-e3a4-42ac-b863-f4bb7ff48b70-container.json new file mode 100644 index 0000000..faf73cd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/23bdcdbe-e3a4-42ac-b863-f4bb7ff48b70-container.json @@ -0,0 +1 @@ +{"uuid": "9a85ce74-b793-4bba-a922-4bd4cbc297c9", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874073, "stop": 1725509874073}], "start": 1725509874073, "stop": 1725509874119} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/23e5f821-be6c-43c9-83b6-6f6f7fbb5ba8-container.json b/apiAutoTest_v3/report/html/allure_sion/23e5f821-be6c-43c9-83b6-6f6f7fbb5ba8-container.json new file mode 100644 index 0000000..e675b31 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/23e5f821-be6c-43c9-83b6-6f6f7fbb5ba8-container.json @@ -0,0 +1 @@ +{"uuid": "1b9b52b5-5093-4d3d-bead-b817407bbe99", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509873793, "stop": 1725509873793}], "start": 1725509873793, "stop": 1725509873830} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2491ec92-2909-4859-aad6-77230d1ae5a5-container.json b/apiAutoTest_v3/report/html/allure_sion/2491ec92-2909-4859-aad6-77230d1ae5a5-container.json new file mode 100644 index 0000000..8333901 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2491ec92-2909-4859-aad6-77230d1ae5a5-container.json @@ -0,0 +1 @@ +{"uuid": "0125eb5a-57c8-4d98-82c3-4fa1f02e4319", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875031, "stop": 1725509875031}], "start": 1725509875031, "stop": 1725509875071} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/26917a5b-a800-4e1f-a72e-2a5931cd74bf-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/26917a5b-a800-4e1f-a72e-2a5931cd74bf-attachment.txt new file mode 100644 index 0000000..564a558 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/26917a5b-a800-4e1f-a72e-2a5931cd74bf-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546823161520128"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/270e341a-ab65-4d55-a1fe-d4a26f9180ac-container.json b/apiAutoTest_v3/report/html/allure_sion/270e341a-ab65-4d55-a1fe-d4a26f9180ac-container.json new file mode 100644 index 0000000..e31decc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/270e341a-ab65-4d55-a1fe-d4a26f9180ac-container.json @@ -0,0 +1 @@ +{"uuid": "b678f046-92f7-4df1-a4f4-ae6ea99896d3", "befores": [{"name": "url", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875075} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/28387cda-b1cc-4b86-8253-de94701445e3-container.json b/apiAutoTest_v3/report/html/allure_sion/28387cda-b1cc-4b86-8253-de94701445e3-container.json new file mode 100644 index 0000000..7f7caf5 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/28387cda-b1cc-4b86-8253-de94701445e3-container.json @@ -0,0 +1 @@ +{"uuid": "d81eb0b5-59ea-4f9b-a344-d4e1795d9d58", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875343, "stop": 1725509875343}], "start": 1725509875343, "stop": 1725509875396} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/28cf6187-7a2e-4135-916e-a12e5f4f534d-container.json b/apiAutoTest_v3/report/html/allure_sion/28cf6187-7a2e-4135-916e-a12e5f4f534d-container.json new file mode 100644 index 0000000..77c7284 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/28cf6187-7a2e-4135-916e-a12e5f4f534d-container.json @@ -0,0 +1 @@ +{"uuid": "5ed221d5-21e3-40e5-8360-efba4528bc98", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874462, "stop": 1725509874462}], "start": 1725509874461, "stop": 1725509874517} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2978dd6a-4611-44ce-b9cf-370101339fc6-container.json b/apiAutoTest_v3/report/html/allure_sion/2978dd6a-4611-44ce-b9cf-370101339fc6-container.json new file mode 100644 index 0000000..05a7e08 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2978dd6a-4611-44ce-b9cf-370101339fc6-container.json @@ -0,0 +1 @@ +{"uuid": "7b537e50-cef4-47e6-a869-273431b898ae", "befores": [{"name": "method", "status": "passed", "start": 1725509874567, "stop": 1725509874567}], "start": 1725509874567, "stop": 1725509874603} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/29817799-0aa3-4a5d-a009-f5be91da85c8-container.json b/apiAutoTest_v3/report/html/allure_sion/29817799-0aa3-4a5d-a009-f5be91da85c8-container.json new file mode 100644 index 0000000..c25b067 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/29817799-0aa3-4a5d-a009-f5be91da85c8-container.json @@ -0,0 +1 @@ +{"uuid": "7451fee2-0311-4994-8a73-63f527c7b016", "befores": [{"name": "case_data", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873920, "stop": 1725509873969} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2b599f60-30e4-4bb0-8ac7-b042ea8dcaff-container.json b/apiAutoTest_v3/report/html/allure_sion/2b599f60-30e4-4bb0-8ac7-b042ea8dcaff-container.json new file mode 100644 index 0000000..6d2c182 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2b599f60-30e4-4bb0-8ac7-b042ea8dcaff-container.json @@ -0,0 +1 @@ +{"uuid": "74e88e80-2a61-48a0-9eb1-a9ce12c06006", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874280} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2c556904-8f36-4597-ae84-263bf790df05-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/2c556904-8f36-4597-ae84-263bf790df05-attachment.txt new file mode 100644 index 0000000..f934aaf --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2c556904-8f36-4597-ae84-263bf790df05-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820485554176"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2d3bf901-b1f8-458f-96df-987c726c8a6d-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/2d3bf901-b1f8-458f-96df-987c726c8a6d-attachment.txt new file mode 100644 index 0000000..8c31680 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2d3bf901-b1f8-458f-96df-987c726c8a6d-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819416006656"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2d8e2081-5c4d-4cb0-826a-cafc03c853f8-container.json b/apiAutoTest_v3/report/html/allure_sion/2d8e2081-5c4d-4cb0-826a-cafc03c853f8-container.json new file mode 100644 index 0000000..fcb1f65 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2d8e2081-5c4d-4cb0-826a-cafc03c853f8-container.json @@ -0,0 +1 @@ +{"uuid": "9ec4e386-7538-4316-a564-e05258f84253", "befores": [{"name": "url", "status": "passed", "start": 1725509874524, "stop": 1725509874524}], "start": 1725509874524, "stop": 1725509874563} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2e8ea830-21bc-43df-8f71-d53fee9edb7d-container.json b/apiAutoTest_v3/report/html/allure_sion/2e8ea830-21bc-43df-8f71-d53fee9edb7d-container.json new file mode 100644 index 0000000..7d71336 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2e8ea830-21bc-43df-8f71-d53fee9edb7d-container.json @@ -0,0 +1 @@ +{"uuid": "4f583377-e88b-4d03-b6a3-67c4ea155742", "befores": [{"name": "case_data", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873913} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2f808646-4430-495b-baf0-ca555cb47f8c-container.json b/apiAutoTest_v3/report/html/allure_sion/2f808646-4430-495b-baf0-ca555cb47f8c-container.json new file mode 100644 index 0000000..4f0b676 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2f808646-4430-495b-baf0-ca555cb47f8c-container.json @@ -0,0 +1 @@ +{"uuid": "97c3b021-5695-468d-8c64-3657a0ab9cdc", "befores": [{"name": "mime", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875024} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/2fdfad53-d650-47b1-9770-b2cb5519bef2-container.json b/apiAutoTest_v3/report/html/allure_sion/2fdfad53-d650-47b1-9770-b2cb5519bef2-container.json new file mode 100644 index 0000000..6821df5 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/2fdfad53-d650-47b1-9770-b2cb5519bef2-container.json @@ -0,0 +1 @@ +{"uuid": "4521c350-f19e-4ded-ae57-4d04771002b4", "befores": [{"name": "method", "status": "passed", "start": 1725509874461, "stop": 1725509874461}], "start": 1725509874461, "stop": 1725509874520} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/31c97534-ace1-4a64-b912-5618130e87da-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/31c97534-ace1-4a64-b912-5618130e87da-attachment.txt new file mode 100644 index 0000000..6a2cc48 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/31c97534-ace1-4a64-b912-5618130e87da-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818946244608"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/33bb4de7-d7b0-4c81-87b4-1d057d26e911-container.json b/apiAutoTest_v3/report/html/allure_sion/33bb4de7-d7b0-4c81-87b4-1d057d26e911-container.json new file mode 100644 index 0000000..00e26ab --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/33bb4de7-d7b0-4c81-87b4-1d057d26e911-container.json @@ -0,0 +1 @@ +{"uuid": "2533f222-fa58-4d48-b733-e49bd1011c73", "befores": [{"name": "url", "status": "passed", "start": 1725509875301, "stop": 1725509875301}], "start": 1725509875301, "stop": 1725509875338} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/34f28eb3-727a-44a1-b2c1-7fa426b1d0b8-result.json b/apiAutoTest_v3/report/html/allure_sion/34f28eb3-727a-44a1-b2c1-7fa426b1d0b8-result.json new file mode 100644 index 0000000..028f3e4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/34f28eb3-727a-44a1-b2c1-7fa426b1d0b8-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加维度成功' == '添加维度成功!'\nE \nE - 添加维度成功!\nE ? -\nE + 添加维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "11313d8e-3fad-4629-b330-b6abc255f899-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功'}"}, {"name": "sql_type", "value": "'delete'"}, {"name": "sql_data", "value": "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}"}, {"name": "update_key", "value": "None"}], "start": 1725509873503, "stop": 1725509873548, "uuid": "1a799582-7155-40c7-ba3a-f5b10a0c9aa6", "historyId": "a6f6de20f1d47502e15e1b34c901fc80", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/34fb7f42-1141-47a6-ae60-0f63a1bdc71c-container.json b/apiAutoTest_v3/report/html/allure_sion/34fb7f42-1141-47a6-ae60-0f63a1bdc71c-container.json new file mode 100644 index 0000000..f87a8c5 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/34fb7f42-1141-47a6-ae60-0f63a1bdc71c-container.json @@ -0,0 +1 @@ +{"uuid": "c3db5906-19d2-4ee5-9a65-c38bcafb6dac", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874659, "stop": 1725509874660}], "start": 1725509874659, "stop": 1725509874698} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3523b0c1-7d59-4e91-bbec-6abb7d1c9169-container.json b/apiAutoTest_v3/report/html/allure_sion/3523b0c1-7d59-4e91-bbec-6abb7d1c9169-container.json new file mode 100644 index 0000000..f9f4cda --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3523b0c1-7d59-4e91-bbec-6abb7d1c9169-container.json @@ -0,0 +1 @@ +{"uuid": "f0d00745-fcfb-49e2-b755-ae72720f27c3", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875182, "stop": 1725509875182}], "start": 1725509875182, "stop": 1725509875212} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3656a95a-c184-4a4c-92e5-aff352915ed5-container.json b/apiAutoTest_v3/report/html/allure_sion/3656a95a-c184-4a4c-92e5-aff352915ed5-container.json new file mode 100644 index 0000000..c1c2bdb --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3656a95a-c184-4a4c-92e5-aff352915ed5-container.json @@ -0,0 +1 @@ +{"uuid": "278eead8-9fc4-4e2d-994d-4d2a59132f0b", "befores": [{"name": "method", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874283} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/36a6d92d-89c8-4cff-8b1b-83e7f263daec-result.json b/apiAutoTest_v3/report/html/allure_sion/36a6d92d-89c8-4cff-8b1b-83e7f263daec-result.json new file mode 100644 index 0000000..8684052 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/36a6d92d-89c8-4cff-8b1b-83e7f263daec-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A9B1C0>('message')\nE + where <built-in method get of dict object at 0x0000020876A9B1C0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "a60bcc10-a810-4473-a27b-abaa7d7bcc7b-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875344, "stop": 1725509875383, "uuid": "42e84d51-19dc-4202-ba2b-1c50730ca2c6", "historyId": "4f9df20ffdc1503910911ac0849dd913", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3728bd8e-a52b-4003-a5a2-818c9bae7127-container.json b/apiAutoTest_v3/report/html/allure_sion/3728bd8e-a52b-4003-a5a2-818c9bae7127-container.json new file mode 100644 index 0000000..3175707 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3728bd8e-a52b-4003-a5a2-818c9bae7127-container.json @@ -0,0 +1 @@ +{"uuid": "a637c904-5d71-4f98-b025-72ec98725409", "befores": [{"name": "mime", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873914} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/397bdf3d-fe8a-4afe-adbd-216dd30c0ec9-container.json b/apiAutoTest_v3/report/html/allure_sion/397bdf3d-fe8a-4afe-adbd-216dd30c0ec9-container.json new file mode 100644 index 0000000..3640ea6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/397bdf3d-fe8a-4afe-adbd-216dd30c0ec9-container.json @@ -0,0 +1 @@ +{"uuid": "4de4b3c9-2764-4586-9582-17a366de7947", "children": ["1a799582-7155-40c7-ba3a-f5b10a0c9aa6", "7a167ea0-eccf-408f-a457-a138e60915e9", "7950588d-e0b7-41c6-9663-ddc40885337f", "6faf640c-23d7-4715-b6fb-2d1886b69d22", "7b936699-4a04-46a7-8509-c4fef6ad3408", "ab67c70b-faef-4a84-8a6d-27b5d5f80d74", "70b06e8b-1bd4-41b5-89dc-2365914c62e6"], "befores": [{"name": "fix_req", "status": "passed", "start": 1725509873455, "stop": 1725509873501}], "afters": [{"name": "fix_req::0", "status": "passed", "start": 1725509875451, "stop": 1725509875451}], "start": 1725509873455, "stop": 1725509875452} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3a08691f-b4a6-43ed-b4f0-a970ef59ae07-result.json b/apiAutoTest_v3/report/html/allure_sion/3a08691f-b4a6-43ed-b4f0-a970ef59ae07-result.json new file mode 100644 index 0000000..652faa5 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3a08691f-b4a6-43ed-b4f0-a970ef59ae07-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "3fcc6baf-5900-41c5-937a-c8591ac7b1fa-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874200, "stop": 1725509874231, "uuid": "77afe7f3-d5c8-46c3-8756-bb7ac6315f45", "historyId": "65755708ce0e8df98768842417beddc8", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3a82069c-6d86-4c9f-9585-8ddbbdc96bdc-container.json b/apiAutoTest_v3/report/html/allure_sion/3a82069c-6d86-4c9f-9585-8ddbbdc96bdc-container.json new file mode 100644 index 0000000..529af9b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3a82069c-6d86-4c9f-9585-8ddbbdc96bdc-container.json @@ -0,0 +1 @@ +{"uuid": "e8cf0af2-337d-457d-8eeb-be2bce85fad0", "befores": [{"name": "mime", "status": "passed", "start": 1725509874567, "stop": 1725509874567}], "start": 1725509874567, "stop": 1725509874603} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3a8b929d-4c7b-4cf3-8ec1-e80532e0bcbd-container.json b/apiAutoTest_v3/report/html/allure_sion/3a8b929d-4c7b-4cf3-8ec1-e80532e0bcbd-container.json new file mode 100644 index 0000000..e875043 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3a8b929d-4c7b-4cf3-8ec1-e80532e0bcbd-container.json @@ -0,0 +1 @@ +{"uuid": "78391939-1835-4a27-9241-292f0f03d478", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874706, "stop": 1725509874706}], "start": 1725509874706, "stop": 1725509874763} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3be50039-fa25-43fe-a532-5c1b2dd97323-result.json b/apiAutoTest_v3/report/html/allure_sion/3be50039-fa25-43fe-a532-5c1b2dd97323-result.json new file mode 100644 index 0000000..cef977d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3be50039-fa25-43fe-a532-5c1b2dd97323-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '更新维度成功' == '更新维度成功!'\nE \nE - 更新维度成功!\nE ? -\nE + 更新维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "a32345eb-8af2-46f9-9f3a-3c5092e1a826-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'"}, {"name": "method", "value": "'put'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}"}, {"name": "expect_data", "value": "{'message': '更新维度成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509873794, "stop": 1725509873815, "uuid": "7a167ea0-eccf-408f-a457-a138e60915e9", "historyId": "15d2daeb579bb5b1c6274efce6552f25", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3c0807bc-17bb-4d38-ab4f-301fdd6f3825-container.json b/apiAutoTest_v3/report/html/allure_sion/3c0807bc-17bb-4d38-ab4f-301fdd6f3825-container.json new file mode 100644 index 0000000..5f87d66 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3c0807bc-17bb-4d38-ab4f-301fdd6f3825-container.json @@ -0,0 +1 @@ +{"uuid": "405fb057-9875-4b5c-b099-0aa38113b77c", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874568, "stop": 1725509874568}], "start": 1725509874568, "stop": 1725509874600} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3cb6ce02-6f08-45aa-bf44-7a12d4aaaaa2-container.json b/apiAutoTest_v3/report/html/allure_sion/3cb6ce02-6f08-45aa-bf44-7a12d4aaaaa2-container.json new file mode 100644 index 0000000..7985fdd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3cb6ce02-6f08-45aa-bf44-7a12d4aaaaa2-container.json @@ -0,0 +1 @@ +{"uuid": "429ad8b8-6be7-4bc7-97eb-950c70c4cef8", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874567, "stop": 1725509874568}], "start": 1725509874567, "stop": 1725509874602} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3ce085e1-20bf-4f94-a2e4-0db821d4e426-container.json b/apiAutoTest_v3/report/html/allure_sion/3ce085e1-20bf-4f94-a2e4-0db821d4e426-container.json new file mode 100644 index 0000000..c315fcc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3ce085e1-20bf-4f94-a2e4-0db821d4e426-container.json @@ -0,0 +1 @@ +{"uuid": "fb59a290-156c-45ea-918e-e45505e2b8ce", "befores": [{"name": "method", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875255} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3cfe081d-bba6-4431-b8c7-fc08c98e7065-result.json b/apiAutoTest_v3/report/html/allure_sion/3cfe081d-bba6-4431-b8c7-fc08c98e7065-result.json new file mode 100644 index 0000000..a929ff6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3cfe081d-bba6-4431-b8c7-fc08c98e7065-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "2c556904-8f36-4597-ae84-263bf790df05-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': '123456'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874661, "stop": 1725509874683, "uuid": "85149439-b10f-4f11-a5ef-9467a911b031", "historyId": "0cdf44136da9a3115d7402669edf9e44", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/3fcc6baf-5900-41c5-937a-c8591ac7b1fa-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/3fcc6baf-5900-41c5-937a-c8591ac7b1fa-attachment.txt new file mode 100644 index 0000000..f907b58 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/3fcc6baf-5900-41c5-937a-c8591ac7b1fa-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjQsImlhdCI6MTcyNTUwOTc2NH0.J_HOuG3fdAoTTnfa4mILK97aLZhTY0B32tacncdLvsupfuEbvQz61Xpv8MTiSorLhkjerDTNengw-rbASx7SNA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4055e91b-c8cc-45f0-8633-b6513254f8c3-container.json b/apiAutoTest_v3/report/html/allure_sion/4055e91b-c8cc-45f0-8633-b6513254f8c3-container.json new file mode 100644 index 0000000..6984367 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4055e91b-c8cc-45f0-8633-b6513254f8c3-container.json @@ -0,0 +1 @@ +{"uuid": "027deafb-fe37-4c83-9548-4e6332d46ad4", "befores": [{"name": "mime", "status": "passed", "start": 1725509874524, "stop": 1725509874524}], "start": 1725509874524, "stop": 1725509874562} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/41283b05-5fe7-482d-92d1-c540395a65c9-container.json b/apiAutoTest_v3/report/html/allure_sion/41283b05-5fe7-482d-92d1-c540395a65c9-container.json new file mode 100644 index 0000000..48362e2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/41283b05-5fe7-482d-92d1-c540395a65c9-container.json @@ -0,0 +1 @@ +{"uuid": "6cff49c8-fbd0-49fc-8edb-478d53734a1c", "befores": [{"name": "method", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874068} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/422e3deb-091e-417d-94d3-a5c036bf4f4f-container.json b/apiAutoTest_v3/report/html/allure_sion/422e3deb-091e-417d-94d3-a5c036bf4f4f-container.json new file mode 100644 index 0000000..7f8d101 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/422e3deb-091e-417d-94d3-a5c036bf4f4f-container.json @@ -0,0 +1 @@ +{"uuid": "6bcbf91e-e7ee-40ac-b004-9b5c64f0eb4e", "befores": [{"name": "mime", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875255} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/425bce2c-cb65-407c-8b07-394bd1b50e0f-container.json b/apiAutoTest_v3/report/html/allure_sion/425bce2c-cb65-407c-8b07-394bd1b50e0f-container.json new file mode 100644 index 0000000..d302d7d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/425bce2c-cb65-407c-8b07-394bd1b50e0f-container.json @@ -0,0 +1 @@ +{"uuid": "d0e34e12-fcb4-4709-a61f-7abac14bcd8e", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875170} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4420e04a-dd7a-41fd-972d-c7fa282220cc-container.json b/apiAutoTest_v3/report/html/allure_sion/4420e04a-dd7a-41fd-972d-c7fa282220cc-container.json new file mode 100644 index 0000000..5fdcef6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4420e04a-dd7a-41fd-972d-c7fa282220cc-container.json @@ -0,0 +1 @@ +{"uuid": "97e0d4ad-6021-4359-ac46-80cdf55c7f5a", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874398, "stop": 1725509874398}], "start": 1725509874398, "stop": 1725509874453} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/44bd2f94-1f6a-45b1-a2f9-969cc7f53ebf-container.json b/apiAutoTest_v3/report/html/allure_sion/44bd2f94-1f6a-45b1-a2f9-969cc7f53ebf-container.json new file mode 100644 index 0000000..7a4a71c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/44bd2f94-1f6a-45b1-a2f9-969cc7f53ebf-container.json @@ -0,0 +1 @@ +{"uuid": "77ba6048-0fdb-44bd-9358-2745cb2a039d", "befores": [{"name": "url", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875256} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4511730a-3c12-4215-958b-905462a87de5-container.json b/apiAutoTest_v3/report/html/allure_sion/4511730a-3c12-4215-958b-905462a87de5-container.json new file mode 100644 index 0000000..b44c760 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4511730a-3c12-4215-958b-905462a87de5-container.json @@ -0,0 +1 @@ +{"uuid": "a95751b8-4297-4b39-ab5a-a47bc0e3ef93", "befores": [{"name": "url", "status": "passed", "start": 1725509874980, "stop": 1725509874980}], "start": 1725509874980, "stop": 1725509875026} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/478312f7-b1fd-4f14-ba8c-fc0c713f1e34-container.json b/apiAutoTest_v3/report/html/allure_sion/478312f7-b1fd-4f14-ba8c-fc0c713f1e34-container.json new file mode 100644 index 0000000..e45c2c2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/478312f7-b1fd-4f14-ba8c-fc0c713f1e34-container.json @@ -0,0 +1 @@ +{"uuid": "fedae53a-aed2-460e-91e3-648681c1af67", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875021} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/47a467f3-117a-4d99-a055-bee564874b27-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/47a467f3-117a-4d99-a055-bee564874b27-attachment.txt new file mode 100644 index 0000000..271d135 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/47a467f3-117a-4d99-a055-bee564874b27-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546820129038336"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/489b0759-adf5-408d-93aa-1e277e743ea5-container.json b/apiAutoTest_v3/report/html/allure_sion/489b0759-adf5-408d-93aa-1e277e743ea5-container.json new file mode 100644 index 0000000..1a017fb --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/489b0759-adf5-408d-93aa-1e277e743ea5-container.json @@ -0,0 +1 @@ +{"uuid": "76667488-c665-42dc-bbda-8b3581cac9d7", "befores": [{"name": "method", "status": "passed", "start": 1725509874286, "stop": 1725509874287}], "start": 1725509874286, "stop": 1725509874343} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/499933b4-4906-4cea-ad6f-99dd9789abac-container.json b/apiAutoTest_v3/report/html/allure_sion/499933b4-4906-4cea-ad6f-99dd9789abac-container.json new file mode 100644 index 0000000..c2599c6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/499933b4-4906-4cea-ad6f-99dd9789abac-container.json @@ -0,0 +1 @@ +{"uuid": "77e83579-2d12-4483-b220-6762bffa62dc", "befores": [{"name": "mime", "status": "passed", "start": 1725509875181, "stop": 1725509875181}], "start": 1725509875181, "stop": 1725509875215} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/49ef8e66-cebc-43fd-b7df-3fefd834211c-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/49ef8e66-cebc-43fd-b7df-3fefd834211c-attachment.txt new file mode 100644 index 0000000..236e663 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/49ef8e66-cebc-43fd-b7df-3fefd834211c-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4a390961-1760-4c7e-8f4d-78a393cc9079-container.json b/apiAutoTest_v3/report/html/allure_sion/4a390961-1760-4c7e-8f4d-78a393cc9079-container.json new file mode 100644 index 0000000..4408239 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4a390961-1760-4c7e-8f4d-78a393cc9079-container.json @@ -0,0 +1 @@ +{"uuid": "d5f511d2-b9de-4a90-89ea-bb6a410861e2", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874525, "stop": 1725509874525}], "start": 1725509874525, "stop": 1725509874561} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4a86e9ec-b7ac-4a1a-b1c3-6624e49f518b-container.json b/apiAutoTest_v3/report/html/allure_sion/4a86e9ec-b7ac-4a1a-b1c3-6624e49f518b-container.json new file mode 100644 index 0000000..a6a0720 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4a86e9ec-b7ac-4a1a-b1c3-6624e49f518b-container.json @@ -0,0 +1 @@ +{"uuid": "8b7042e4-7a56-4283-a071-0cfd678c20a8", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874568, "stop": 1725509874568}], "start": 1725509874568, "stop": 1725509874599} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4b05f1fa-9e53-47af-b54d-3e8a1a69bf19-result.json b/apiAutoTest_v3/report/html/allure_sion/4b05f1fa-9e53-47af-b54d-3e8a1a69bf19-result.json new file mode 100644 index 0000000..dd6567f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4b05f1fa-9e53-47af-b54d-3e8a1a69bf19-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "bc40b529-f911-42c1-bbfd-5b1530e1fd51-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875082, "stop": 1725509875109, "uuid": "c1c9a166-4e8a-4034-af12-642b781f9305", "historyId": "4479ea4b1d75c6673685eb0a9d802580", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4c44f447-d723-4162-9e06-fe823708821f-container.json b/apiAutoTest_v3/report/html/allure_sion/4c44f447-d723-4162-9e06-fe823708821f-container.json new file mode 100644 index 0000000..3c7b5e2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4c44f447-d723-4162-9e06-fe823708821f-container.json @@ -0,0 +1 @@ +{"uuid": "443c8a73-f1b1-4b26-9783-8e24fa6bde4b", "befores": [{"name": "mime", "status": "passed", "start": 1725509875301, "stop": 1725509875301}], "start": 1725509875301, "stop": 1725509875337} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4d53ffca-d1d3-4342-833d-ba3a349d5ae9-container.json b/apiAutoTest_v3/report/html/allure_sion/4d53ffca-d1d3-4342-833d-ba3a349d5ae9-container.json new file mode 100644 index 0000000..4a55d3d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4d53ffca-d1d3-4342-833d-ba3a349d5ae9-container.json @@ -0,0 +1 @@ +{"uuid": "018fe065-3950-43be-8ecd-c129453c57d9", "befores": [{"name": "url", "status": "passed", "start": 1725509875180, "stop": 1725509875180}], "start": 1725509875180, "stop": 1725509875216} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4e0a3cb0-2dd4-4a0b-aec5-59065e656cef-container.json b/apiAutoTest_v3/report/html/allure_sion/4e0a3cb0-2dd4-4a0b-aec5-59065e656cef-container.json new file mode 100644 index 0000000..66c0805 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4e0a3cb0-2dd4-4a0b-aec5-59065e656cef-container.json @@ -0,0 +1 @@ +{"uuid": "eb22d21b-a4a7-405e-8043-8c3e643a0088", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874073, "stop": 1725509874073}], "start": 1725509874073, "stop": 1725509874118} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4e1df771-330b-4fc6-b87e-ab4c1c52b6f6-container.json b/apiAutoTest_v3/report/html/allure_sion/4e1df771-330b-4fc6-b87e-ab4c1c52b6f6-container.json new file mode 100644 index 0000000..1b1bd7e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4e1df771-330b-4fc6-b87e-ab4c1c52b6f6-container.json @@ -0,0 +1 @@ +{"uuid": "c065c6fa-ab77-48b8-a355-48607f33db37", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875181, "stop": 1725509875181}], "start": 1725509875181, "stop": 1725509875214} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4e9edaac-86f1-46f3-843e-f66456014639-container.json b/apiAutoTest_v3/report/html/allure_sion/4e9edaac-86f1-46f3-843e-f66456014639-container.json new file mode 100644 index 0000000..99468ee --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4e9edaac-86f1-46f3-843e-f66456014639-container.json @@ -0,0 +1 @@ +{"uuid": "a2616f72-f8d5-4d71-8566-0b17259e4769", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875342, "stop": 1725509875343}], "start": 1725509875342, "stop": 1725509875397} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4f1aaea8-483b-4dc1-9ce8-5fc173d1a78e-result.json b/apiAutoTest_v3/report/html/allure_sion/4f1aaea8-483b-4dc1-9ce8-5fc173d1a78e-result.json new file mode 100644 index 0000000..c463c80 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4f1aaea8-483b-4dc1-9ce8-5fc173d1a78e-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "a05e1ab1-2b75-4478-bfca-4f7d7b790dbe-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874463, "stop": 1725509874504, "uuid": "2b4e8825-68ef-4a66-8d82-9b8e29ad56b5", "historyId": "8eb7301a32c31c1993acb65490cebb5d", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/4fcb016c-464b-4847-8540-7515242d3fa0-container.json b/apiAutoTest_v3/report/html/allure_sion/4fcb016c-464b-4847-8540-7515242d3fa0-container.json new file mode 100644 index 0000000..9e31349 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/4fcb016c-464b-4847-8540-7515242d3fa0-container.json @@ -0,0 +1 @@ +{"uuid": "3e7c86fa-1688-484b-9cef-91d592fb3937", "befores": [{"name": "url", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873915} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/50d5bcfc-421a-44eb-be3b-4854f4cf8511-container.json b/apiAutoTest_v3/report/html/allure_sion/50d5bcfc-421a-44eb-be3b-4854f4cf8511-container.json new file mode 100644 index 0000000..ac9e1a6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/50d5bcfc-421a-44eb-be3b-4854f4cf8511-container.json @@ -0,0 +1 @@ +{"uuid": "c24e37e8-c24d-4c82-89d6-f3971c1e2f53", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874233} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/51727b68-1ea7-4d91-8f52-6c771896e8ee-container.json b/apiAutoTest_v3/report/html/allure_sion/51727b68-1ea7-4d91-8f52-6c771896e8ee-container.json new file mode 100644 index 0000000..f28a28d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/51727b68-1ea7-4d91-8f52-6c771896e8ee-container.json @@ -0,0 +1 @@ +{"uuid": "59a86059-7512-4e8c-88ad-a3512d818e5a", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875221, "stop": 1725509875221}], "start": 1725509875221, "stop": 1725509875252} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/52a9dabb-42b7-48c8-875f-5d35c3157343-container.json b/apiAutoTest_v3/report/html/allure_sion/52a9dabb-42b7-48c8-875f-5d35c3157343-container.json new file mode 100644 index 0000000..5d93d09 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/52a9dabb-42b7-48c8-875f-5d35c3157343-container.json @@ -0,0 +1 @@ +{"uuid": "67c0f1fc-b4dc-4281-ad30-a4c229ba5438", "befores": [{"name": "mime", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874067} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/52f2a7b6-7ff5-4859-a1f2-86422e26c2c2-result.json b/apiAutoTest_v3/report/html/allure_sion/52f2a7b6-7ff5-4859-a1f2-86422e26c2c2-result.json new file mode 100644 index 0000000..eda4d95 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/52f2a7b6-7ff5-4859-a1f2-86422e26c2c2-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876AA1A80>('message')\nE + where <built-in method get of dict object at 0x0000020876AA1A80> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "6ecf5ff3-8ba4-42d8-93a9-45d8c98d2eb2-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/refresh'"}, {"name": "method", "value": "'GET'"}, {"name": "mime", "value": "None"}, {"name": "case_data", "value": "None"}, {"name": "expect_data", "value": "{'message': '刷新token成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875409, "stop": 1725509875429, "uuid": "45b57e43-21fc-4409-a400-e5bba2a5a2c0", "historyId": "128729b1e005cfdd6f14c1aa881b6157", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/52fa847b-3f3b-43ac-9a91-47473ae7acb3-container.json b/apiAutoTest_v3/report/html/allure_sion/52fa847b-3f3b-43ac-9a91-47473ae7acb3-container.json new file mode 100644 index 0000000..da50dea --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/52fa847b-3f3b-43ac-9a91-47473ae7acb3-container.json @@ -0,0 +1 @@ +{"uuid": "aeafab95-e5d8-443b-a1cf-3804387c6b1e", "befores": [{"name": "url", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875129, "stop": 1725509875174} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/538b2230-1fa3-44bd-9ce3-88ca848837f8-container.json b/apiAutoTest_v3/report/html/allure_sion/538b2230-1fa3-44bd-9ce3-88ca848837f8-container.json new file mode 100644 index 0000000..66b0c60 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/538b2230-1fa3-44bd-9ce3-88ca848837f8-container.json @@ -0,0 +1 @@ +{"uuid": "69cd8fa2-5ae2-4485-bbfb-e8744c963143", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875021} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/5555ce6d-ef36-4515-9765-a63720bec9a4-container.json b/apiAutoTest_v3/report/html/allure_sion/5555ce6d-ef36-4515-9765-a63720bec9a4-container.json new file mode 100644 index 0000000..5d8fa65 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/5555ce6d-ef36-4515-9765-a63720bec9a4-container.json @@ -0,0 +1 @@ +{"uuid": "939b7277-8059-4e56-b3ec-dfacfa967c8d", "befores": [{"name": "method", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873914} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/55ae2483-0a3e-44af-8b71-99a31bea2009-container.json b/apiAutoTest_v3/report/html/allure_sion/55ae2483-0a3e-44af-8b71-99a31bea2009-container.json new file mode 100644 index 0000000..4e82cc2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/55ae2483-0a3e-44af-8b71-99a31bea2009-container.json @@ -0,0 +1 @@ +{"uuid": "7730a2a3-eb0c-4ab8-9a93-fcff1f26d2bb", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875171} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/55cf31d1-e19e-4d3c-b06f-2e95bb1e378e-container.json b/apiAutoTest_v3/report/html/allure_sion/55cf31d1-e19e-4d3c-b06f-2e95bb1e378e-container.json new file mode 100644 index 0000000..02076ad --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/55cf31d1-e19e-4d3c-b06f-2e95bb1e378e-container.json @@ -0,0 +1 @@ +{"uuid": "d507af72-fa50-4725-9731-d86ae2e8b5a4", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874234} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/56607623-2269-4354-891a-43fbfedeb365-container.json b/apiAutoTest_v3/report/html/allure_sion/56607623-2269-4354-891a-43fbfedeb365-container.json new file mode 100644 index 0000000..ba4e317 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/56607623-2269-4354-891a-43fbfedeb365-container.json @@ -0,0 +1 @@ +{"uuid": "9bbcf509-121f-414e-8e6e-d46c80be7578", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874062} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/568316e1-2b6c-44ed-866b-77eb1b21184c-result.json b/apiAutoTest_v3/report/html/allure_sion/568316e1-2b6c-44ed-866b-77eb1b21184c-result.json new file mode 100644 index 0000000..5d71590 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/568316e1-2b6c-44ed-866b-77eb1b21184c-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "e218acec-8cf6-4ba3-9b87-ee4104712266-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875262, "stop": 1725509875279, "uuid": "bfe5ffb6-d54a-4d3a-a70a-a189648896a3", "historyId": "66b67242a399356d7f6f4ce06fbff864", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/56f2722f-867c-4d5d-939e-a00acbd8461e-container.json b/apiAutoTest_v3/report/html/allure_sion/56f2722f-867c-4d5d-939e-a00acbd8461e-container.json new file mode 100644 index 0000000..bac8929 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/56f2722f-867c-4d5d-939e-a00acbd8461e-container.json @@ -0,0 +1 @@ +{"uuid": "459ada9f-bc9f-4b21-b3fd-ba0109b56711", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874928} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/576f8f19-dac5-4504-9f69-1fe608c90bc3-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/576f8f19-dac5-4504-9f69-1fe608c90bc3-attachment.txt new file mode 100644 index 0000000..b71e248 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/576f8f19-dac5-4504-9f69-1fe608c90bc3-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822700146688"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/57bc15f1-eec5-4101-a7ff-41d7e5568c93-result.json b/apiAutoTest_v3/report/html/allure_sion/57bc15f1-eec5-4101-a7ff-41d7e5568c93-result.json new file mode 100644 index 0000000..5f11986 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/57bc15f1-eec5-4101-a7ff-41d7e5568c93-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "0435d593-d5fb-4bbc-b1b0-bcf107b93836-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874244, "stop": 1725509874267, "uuid": "4731908c-5fc8-4895-9354-3bebc0a0482f", "historyId": "48abe8c46402ff324a761b2b5e506cc9", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/57d85a15-445e-4463-9e3b-c56c2ed083ca-container.json b/apiAutoTest_v3/report/html/allure_sion/57d85a15-445e-4463-9e3b-c56c2ed083ca-container.json new file mode 100644 index 0000000..f74135a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/57d85a15-445e-4463-9e3b-c56c2ed083ca-container.json @@ -0,0 +1 @@ +{"uuid": "742ca4a8-32e1-4daa-9c83-e3e8041bf4cf", "befores": [{"name": "method", "status": "passed", "start": 1725509875301, "stop": 1725509875301}], "start": 1725509875301, "stop": 1725509875337} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/58797395-efbb-4fac-a01e-a72acba285de-result.json b/apiAutoTest_v3/report/html/allure_sion/58797395-efbb-4fac-a01e-a72acba285de-result.json new file mode 100644 index 0000000..6c6b474 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/58797395-efbb-4fac-a01e-a72acba285de-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...dOrg\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "6645e6e6-6c2e-4f68-a378-b4a70fe8e25b-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "'testAddOrg'"}, {"name": "expect_data", "value": "{'message': '删除组织成功!'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874033, "stop": 1725509874049, "uuid": "ab67c70b-faef-4a84-8a6d-27b5d5f80d74", "historyId": "5b9cec47ee0edd555ba6e1220ea0e625", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/594b4e43-8d9a-4363-b506-e15f637d34fe-container.json b/apiAutoTest_v3/report/html/allure_sion/594b4e43-8d9a-4363-b506-e15f637d34fe-container.json new file mode 100644 index 0000000..88f1474 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/594b4e43-8d9a-4363-b506-e15f637d34fe-container.json @@ -0,0 +1 @@ +{"uuid": "4005dbf0-50d2-424f-913a-9a28ad0c1c96", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875295} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/5a8e6df6-897d-42d7-8213-949524b40257-container.json b/apiAutoTest_v3/report/html/allure_sion/5a8e6df6-897d-42d7-8213-949524b40257-container.json new file mode 100644 index 0000000..ddc9563 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/5a8e6df6-897d-42d7-8213-949524b40257-container.json @@ -0,0 +1 @@ +{"uuid": "64a93d6a-9a89-4274-bee4-01152f590872", "befores": [{"name": "mime", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875173} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/5cce7367-fcc7-4265-84ce-9d2e7e77734b-container.json b/apiAutoTest_v3/report/html/allure_sion/5cce7367-fcc7-4265-84ce-9d2e7e77734b-container.json new file mode 100644 index 0000000..b2d95fb --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/5cce7367-fcc7-4265-84ce-9d2e7e77734b-container.json @@ -0,0 +1 @@ +{"uuid": "a2194e38-c803-486e-be96-7aafe05e3e2d", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875072} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/5ede53d9-206a-4450-bc16-a06629b477a1-container.json b/apiAutoTest_v3/report/html/allure_sion/5ede53d9-206a-4450-bc16-a06629b477a1-container.json new file mode 100644 index 0000000..161dcfc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/5ede53d9-206a-4450-bc16-a06629b477a1-container.json @@ -0,0 +1 @@ +{"uuid": "a0f3ce70-1a0b-43b9-b48e-e3d3339eceee", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509873975, "stop": 1725509873976}], "start": 1725509873975, "stop": 1725509874014} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/5f9c0f62-1231-464f-89ba-eed2be834ac6-container.json b/apiAutoTest_v3/report/html/allure_sion/5f9c0f62-1231-464f-89ba-eed2be834ac6-container.json new file mode 100644 index 0000000..ecf812e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/5f9c0f62-1231-464f-89ba-eed2be834ac6-container.json @@ -0,0 +1 @@ +{"uuid": "be69428f-e46d-425d-ad39-db12129f360f", "befores": [{"name": "url", "status": "passed", "start": 1725509874398, "stop": 1725509874398}], "start": 1725509874398, "stop": 1725509874455} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/601e7a02-6c53-4fc0-a206-9b6b74d15b08-container.json b/apiAutoTest_v3/report/html/allure_sion/601e7a02-6c53-4fc0-a206-9b6b74d15b08-container.json new file mode 100644 index 0000000..b803f7e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/601e7a02-6c53-4fc0-a206-9b6b74d15b08-container.json @@ -0,0 +1 @@ +{"uuid": "8eb31393-eab3-46fb-ac21-58837b3936fc", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874609, "stop": 1725509874609}], "start": 1725509874609, "stop": 1725509874643} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/60631fe8-ae48-4606-89c4-e2a1f76b206a-container.json b/apiAutoTest_v3/report/html/allure_sion/60631fe8-ae48-4606-89c4-e2a1f76b206a-container.json new file mode 100644 index 0000000..93b85c3 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/60631fe8-ae48-4606-89c4-e2a1f76b206a-container.json @@ -0,0 +1 @@ +{"uuid": "3d17656e-0b78-4db1-baee-751881ecc852", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875081, "stop": 1725509875122} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/628da31c-8ac5-4ab5-892b-8b903d3b414c-container.json b/apiAutoTest_v3/report/html/allure_sion/628da31c-8ac5-4ab5-892b-8b903d3b414c-container.json new file mode 100644 index 0000000..c7310d7 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/628da31c-8ac5-4ab5-892b-8b903d3b414c-container.json @@ -0,0 +1 @@ +{"uuid": "370cca93-f549-4200-802b-7165cc84c4a4", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874389} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/62ab145e-7aae-420a-aee6-2ef351b1e1a5-container.json b/apiAutoTest_v3/report/html/allure_sion/62ab145e-7aae-420a-aee6-2ef351b1e1a5-container.json new file mode 100644 index 0000000..654b3a4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/62ab145e-7aae-420a-aee6-2ef351b1e1a5-container.json @@ -0,0 +1 @@ +{"uuid": "bdc95c4b-24c8-4b57-9983-b6a5751f84e5", "befores": [{"name": "method", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874821} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6358f8e2-e270-4d9e-957e-775b884d270d-container.json b/apiAutoTest_v3/report/html/allure_sion/6358f8e2-e270-4d9e-957e-775b884d270d-container.json new file mode 100644 index 0000000..c80be5f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6358f8e2-e270-4d9e-957e-775b884d270d-container.json @@ -0,0 +1 @@ +{"uuid": "72895c23-47aa-49a2-a0c6-d667cad4036b", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874525, "stop": 1725509874525}], "start": 1725509874525, "stop": 1725509874559} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/63e0d771-e5bf-468c-8ec8-4f6ebf17859f-container.json b/apiAutoTest_v3/report/html/allure_sion/63e0d771-e5bf-468c-8ec8-4f6ebf17859f-container.json new file mode 100644 index 0000000..ae39b07 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/63e0d771-e5bf-468c-8ec8-4f6ebf17859f-container.json @@ -0,0 +1 @@ +{"uuid": "8ab66c86-4ff3-40a5-adb0-a9cea4905e24", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874073, "stop": 1725509874073}], "start": 1725509874073, "stop": 1725509874119} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/652eb10e-1e6b-4704-b7e4-2fad34e06963-container.json b/apiAutoTest_v3/report/html/allure_sion/652eb10e-1e6b-4704-b7e4-2fad34e06963-container.json new file mode 100644 index 0000000..6da2056 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/652eb10e-1e6b-4704-b7e4-2fad34e06963-container.json @@ -0,0 +1 @@ +{"uuid": "0efd38de-1dcd-4cba-b2f5-53d212779acf", "befores": [{"name": "url", "status": "passed", "start": 1725509874072, "stop": 1725509874072}], "start": 1725509874072, "stop": 1725509874122} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/653d6b00-c107-42b7-9dbe-1c12863b8d92-container.json b/apiAutoTest_v3/report/html/allure_sion/653d6b00-c107-42b7-9dbe-1c12863b8d92-container.json new file mode 100644 index 0000000..cfed759 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/653d6b00-c107-42b7-9dbe-1c12863b8d92-container.json @@ -0,0 +1 @@ +{"uuid": "6943db72-3d9b-44eb-85f2-a588ac6e21e1", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875302, "stop": 1725509875302}], "start": 1725509875302, "stop": 1725509875334} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/65ae8972-5449-4710-9ca5-e599eaf5d38b-container.json b/apiAutoTest_v3/report/html/allure_sion/65ae8972-5449-4710-9ca5-e599eaf5d38b-container.json new file mode 100644 index 0000000..9f4747b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/65ae8972-5449-4710-9ca5-e599eaf5d38b-container.json @@ -0,0 +1 @@ +{"uuid": "42f6978d-bb53-4451-bdba-967aff2ccbb6", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874660, "stop": 1725509874660}], "start": 1725509874660, "stop": 1725509874696} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/65b726fe-9232-4848-af2b-7371efaed782-container.json b/apiAutoTest_v3/report/html/allure_sion/65b726fe-9232-4848-af2b-7371efaed782-container.json new file mode 100644 index 0000000..9ae50ed --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/65b726fe-9232-4848-af2b-7371efaed782-container.json @@ -0,0 +1 @@ +{"uuid": "757a3100-8a95-4dbb-addb-36398787c84c", "befores": [{"name": "mime", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873787} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/65b87525-b69c-453d-98d0-de35019067fd-container.json b/apiAutoTest_v3/report/html/allure_sion/65b87525-b69c-453d-98d0-de35019067fd-container.json new file mode 100644 index 0000000..b7726f5 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/65b87525-b69c-453d-98d0-de35019067fd-container.json @@ -0,0 +1 @@ +{"uuid": "d4384691-7fde-41d5-96fd-b9d7da9dee3e", "befores": [{"name": "update_key", "status": "passed", "start": 1725509873976, "stop": 1725509873976}], "start": 1725509873976, "stop": 1725509874013} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/66047419-6165-4d15-8338-7d0bf4fde0cb-container.json b/apiAutoTest_v3/report/html/allure_sion/66047419-6165-4d15-8338-7d0bf4fde0cb-container.json new file mode 100644 index 0000000..22fe305 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/66047419-6165-4d15-8338-7d0bf4fde0cb-container.json @@ -0,0 +1 @@ +{"uuid": "70137a0a-5181-477d-b60b-d2878a8120ac", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874609, "stop": 1725509874609}], "start": 1725509874609, "stop": 1725509874653} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/66324b25-aff8-46bc-98ad-ec0f56b1fdf6-container.json b/apiAutoTest_v3/report/html/allure_sion/66324b25-aff8-46bc-98ad-ec0f56b1fdf6-container.json new file mode 100644 index 0000000..65f125a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/66324b25-aff8-46bc-98ad-ec0f56b1fdf6-container.json @@ -0,0 +1 @@ +{"uuid": "88e8496f-ed1b-446f-8414-3122f00c5d55", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874063} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6645e6e6-6c2e-4f68-a378-b4a70fe8e25b-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/6645e6e6-6c2e-4f68-a378-b4a70fe8e25b-attachment.txt new file mode 100644 index 0000000..83ef0ba --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6645e6e6-6c2e-4f68-a378-b4a70fe8e25b-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/67ae0955-a25d-4a31-b536-db8fa2da20d7-container.json b/apiAutoTest_v3/report/html/allure_sion/67ae0955-a25d-4a31-b536-db8fa2da20d7-container.json new file mode 100644 index 0000000..c0056ac --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/67ae0955-a25d-4a31-b536-db8fa2da20d7-container.json @@ -0,0 +1 @@ +{"uuid": "55efd0d8-e8f5-430b-b7e2-9644e6fc0a8b", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874341} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/68cfc2af-8fad-4a40-80a8-7c80efde1aa5-container.json b/apiAutoTest_v3/report/html/allure_sion/68cfc2af-8fad-4a40-80a8-7c80efde1aa5-container.json new file mode 100644 index 0000000..602b4de --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/68cfc2af-8fad-4a40-80a8-7c80efde1aa5-container.json @@ -0,0 +1 @@ +{"uuid": "b1b98f73-813d-4c85-85ca-5fd6c32d685a", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874783, "stop": 1725509874783}], "start": 1725509874782, "stop": 1725509874817} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/68e553d4-98a2-4a29-87a9-12568a5e4870-container.json b/apiAutoTest_v3/report/html/allure_sion/68e553d4-98a2-4a29-87a9-12568a5e4870-container.json new file mode 100644 index 0000000..e421693 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/68e553d4-98a2-4a29-87a9-12568a5e4870-container.json @@ -0,0 +1 @@ +{"uuid": "4277627e-2ad9-4553-8fb6-512b69576560", "befores": [{"name": "mime", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874282} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/68f00bb0-944e-43fc-bfcb-1d6ccbbbcd87-container.json b/apiAutoTest_v3/report/html/allure_sion/68f00bb0-944e-43fc-bfcb-1d6ccbbbcd87-container.json new file mode 100644 index 0000000..15921c1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/68f00bb0-944e-43fc-bfcb-1d6ccbbbcd87-container.json @@ -0,0 +1 @@ +{"uuid": "ff62f07e-6e3b-4f19-a345-c73840472f01", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875181, "stop": 1725509875181}], "start": 1725509875181, "stop": 1725509875213} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/694aff81-83ec-44f7-afaf-09be39e39464-container.json b/apiAutoTest_v3/report/html/allure_sion/694aff81-83ec-44f7-afaf-09be39e39464-container.json new file mode 100644 index 0000000..367f53b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/694aff81-83ec-44f7-afaf-09be39e39464-container.json @@ -0,0 +1 @@ +{"uuid": "9d2a8a2e-10ce-4694-bfd7-4c0092e1fdfe", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874280} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6a061ad4-67a1-43c3-b738-ad16206076e2-container.json b/apiAutoTest_v3/report/html/allure_sion/6a061ad4-67a1-43c3-b738-ad16206076e2-container.json new file mode 100644 index 0000000..32a7c0d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6a061ad4-67a1-43c3-b738-ad16206076e2-container.json @@ -0,0 +1 @@ +{"uuid": "e0dda430-f208-4977-aecf-f64235b9a619", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874014} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6a760b63-3211-4a33-8d6a-a1faeb3ecc91-container.json b/apiAutoTest_v3/report/html/allure_sion/6a760b63-3211-4a33-8d6a-a1faeb3ecc91-container.json new file mode 100644 index 0000000..bbe43bd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6a760b63-3211-4a33-8d6a-a1faeb3ecc91-container.json @@ -0,0 +1 @@ +{"uuid": "624d2028-5eab-41d2-8a7c-7a0662bde842", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875302, "stop": 1725509875302}], "start": 1725509875302, "stop": 1725509875333} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6b698673-6827-471f-b3f0-3e694954b030-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/6b698673-6827-471f-b3f0-3e694954b030-attachment.txt new file mode 100644 index 0000000..cc5fa75 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6b698673-6827-471f-b3f0-3e694954b030-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546819952877568"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6d15dba4-31e8-49d2-94ce-632c05127d04-result.json b/apiAutoTest_v3/report/html/allure_sion/6d15dba4-31e8-49d2-94ce-632c05127d04-result.json new file mode 100644 index 0000000..8274976 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6d15dba4-31e8-49d2-94ce-632c05127d04-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "f4d99754-1573-470d-aa8c-8b163dc15982-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874897, "stop": 1725509874926, "uuid": "b0ffe29c-5a47-4fc2-9f4c-6348d61a1311", "historyId": "7f0e6cd414aa2df632599593553f643f", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6d70e449-7a32-44d4-bbfc-284b72b87c0f-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/6d70e449-7a32-44d4-bbfc-284b72b87c0f-attachment.txt new file mode 100644 index 0000000..36175c6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6d70e449-7a32-44d4-bbfc-284b72b87c0f-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831546815687270400'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6dd74b49-0b44-49dc-b23f-87c7b119f75d-container.json b/apiAutoTest_v3/report/html/allure_sion/6dd74b49-0b44-49dc-b23f-87c7b119f75d-container.json new file mode 100644 index 0000000..5e800b8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6dd74b49-0b44-49dc-b23f-87c7b119f75d-container.json @@ -0,0 +1 @@ +{"uuid": "3690ff72-7250-4e01-a3ed-660da4fad000", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874390} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6e4e3e05-a656-4cbd-a0b4-766a26d60097-container.json b/apiAutoTest_v3/report/html/allure_sion/6e4e3e05-a656-4cbd-a0b4-766a26d60097-container.json new file mode 100644 index 0000000..1ba237c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6e4e3e05-a656-4cbd-a0b4-766a26d60097-container.json @@ -0,0 +1 @@ +{"uuid": "a84fd7b6-0ae9-4e54-a8b4-d2e96c673f04", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874660, "stop": 1725509874660}], "start": 1725509874660, "stop": 1725509874697} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6e6b722c-acd8-4db1-b3bb-c0e921142aa2-container.json b/apiAutoTest_v3/report/html/allure_sion/6e6b722c-acd8-4db1-b3bb-c0e921142aa2-container.json new file mode 100644 index 0000000..26bf08b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6e6b722c-acd8-4db1-b3bb-c0e921142aa2-container.json @@ -0,0 +1 @@ +{"uuid": "fffcfccb-d40d-4834-bad9-24015b07ee5c", "befores": [{"name": "method", "status": "passed", "start": 1725509874705, "stop": 1725509874705}], "start": 1725509874705, "stop": 1725509874767} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6eb74863-5349-4384-81bc-bc97a30b1f16-container.json b/apiAutoTest_v3/report/html/allure_sion/6eb74863-5349-4384-81bc-bc97a30b1f16-container.json new file mode 100644 index 0000000..e56156c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6eb74863-5349-4384-81bc-bc97a30b1f16-container.json @@ -0,0 +1 @@ +{"uuid": "2914ffdd-9958-45b2-9654-e327111eb3d0", "befores": [{"name": "method", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874930} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6ecf5ff3-8ba4-42d8-93a9-45d8c98d2eb2-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/6ecf5ff3-8ba4-42d8-93a9-45d8c98d2eb2-attachment.txt new file mode 100644 index 0000000..d885d45 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6ecf5ff3-8ba4-42d8-93a9-45d8c98d2eb2-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/6f1bd843-7383-4ece-b2bf-8a4abe0a857c-container.json b/apiAutoTest_v3/report/html/allure_sion/6f1bd843-7383-4ece-b2bf-8a4abe0a857c-container.json new file mode 100644 index 0000000..83a6d24 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/6f1bd843-7383-4ece-b2bf-8a4abe0a857c-container.json @@ -0,0 +1 @@ +{"uuid": "ea627502-a577-4f35-800b-7f922852d731", "befores": [{"name": "url", "status": "passed", "start": 1725509875407, "stop": 1725509875408}], "start": 1725509875407, "stop": 1725509875446} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/707b3e1c-8a77-4cc1-a86b-f0bcc2d660e8-container.json b/apiAutoTest_v3/report/html/allure_sion/707b3e1c-8a77-4cc1-a86b-f0bcc2d660e8-container.json new file mode 100644 index 0000000..91b7508 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/707b3e1c-8a77-4cc1-a86b-f0bcc2d660e8-container.json @@ -0,0 +1 @@ +{"uuid": "e01d7efd-d166-40ee-b56b-286528aba811", "befores": [{"name": "method", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874393} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/71e9facc-b4f3-40e9-bf92-fee7e357d242-container.json b/apiAutoTest_v3/report/html/allure_sion/71e9facc-b4f3-40e9-bf92-fee7e357d242-container.json new file mode 100644 index 0000000..27e1016 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/71e9facc-b4f3-40e9-bf92-fee7e357d242-container.json @@ -0,0 +1 @@ +{"uuid": "153fdbf3-4e33-43bf-a892-49596c9a6819", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874660, "stop": 1725509874660}], "start": 1725509874660, "stop": 1725509874697} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/727c720c-ee3d-487d-afbf-e564e84de83e-container.json b/apiAutoTest_v3/report/html/allure_sion/727c720c-ee3d-487d-afbf-e564e84de83e-container.json new file mode 100644 index 0000000..dd1fe47 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/727c720c-ee3d-487d-afbf-e564e84de83e-container.json @@ -0,0 +1 @@ +{"uuid": "3c82a3fd-e59d-46ae-a93b-4cf255215f2d", "befores": [{"name": "mime", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875445} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/72c26fc2-dfdc-4544-97a1-90394315a25f-result.json b/apiAutoTest_v3/report/html/allure_sion/72c26fc2-dfdc-4544-97a1-90394315a25f-result.json new file mode 100644 index 0000000..e46f1c3 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/72c26fc2-dfdc-4544-97a1-90394315a25f-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "2d3bf901-b1f8-458f-96df-987c726c8a6d-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874400, "stop": 1725509874428, "uuid": "a6aebe93-c229-4fb2-af63-65a40973247f", "historyId": "a175574a4d035c584ab8478e07968208", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/72cd278e-52ae-4376-a44f-f7b53fe1987a-container.json b/apiAutoTest_v3/report/html/allure_sion/72cd278e-52ae-4376-a44f-f7b53fe1987a-container.json new file mode 100644 index 0000000..fb5b596 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/72cd278e-52ae-4376-a44f-f7b53fe1987a-container.json @@ -0,0 +1 @@ +{"uuid": "5389623c-3bac-48db-88b2-84831cd64f3b", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875444} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7317f63f-aab0-429a-af13-fc5fd53675c1-container.json b/apiAutoTest_v3/report/html/allure_sion/7317f63f-aab0-429a-af13-fc5fd53675c1-container.json new file mode 100644 index 0000000..39faca9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7317f63f-aab0-429a-af13-fc5fd53675c1-container.json @@ -0,0 +1 @@ +{"uuid": "30a8b25b-b665-4c05-894c-2df37d7bea47", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873783} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/78871f0a-a8cd-4306-9f3c-8b2eb57d6dfe-container.json b/apiAutoTest_v3/report/html/allure_sion/78871f0a-a8cd-4306-9f3c-8b2eb57d6dfe-container.json new file mode 100644 index 0000000..ac25071 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/78871f0a-a8cd-4306-9f3c-8b2eb57d6dfe-container.json @@ -0,0 +1 @@ +{"uuid": "20db6ee4-4e2b-45ac-9d53-19929d29bea2", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875171} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/79df1ddd-2555-4689-ae21-157efdd57aa8-container.json b/apiAutoTest_v3/report/html/allure_sion/79df1ddd-2555-4689-ae21-157efdd57aa8-container.json new file mode 100644 index 0000000..65a2ec2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/79df1ddd-2555-4689-ae21-157efdd57aa8-container.json @@ -0,0 +1 @@ +{"uuid": "5145809e-deb0-4669-a969-0c800e243a7e", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875302, "stop": 1725509875302}], "start": 1725509875302, "stop": 1725509875335} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7af79de7-e545-432b-aef9-9d371368e634-result.json b/apiAutoTest_v3/report/html/allure_sion/7af79de7-e545-432b-aef9-9d371368e634-result.json new file mode 100644 index 0000000..e399924 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7af79de7-e545-432b-aef9-9d371368e634-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "9a686151-f4e7-47d0-abf9-aa98564c87df-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'query'"}, {"name": "case_data", "value": "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}"}, {"name": "expect_data", "value": "{'message': '加入成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509873921, "stop": 1725509873965, "uuid": "6faf640c-23d7-4715-b6fb-2d1886b69d22", "historyId": "5945f99868ec59904be0e0c99840002e", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7b79b144-2b7a-4a0a-8cca-1670d0ac623e-container.json b/apiAutoTest_v3/report/html/allure_sion/7b79b144-2b7a-4a0a-8cca-1670d0ac623e-container.json new file mode 100644 index 0000000..fb38abd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7b79b144-2b7a-4a0a-8cca-1670d0ac623e-container.json @@ -0,0 +1 @@ +{"uuid": "42fffe50-cc5f-4257-8d4b-b02146bdbc44", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874936, "stop": 1725509874936}], "start": 1725509874936, "stop": 1725509874971} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7c96f7fa-1682-45de-9665-b629a163da61-result.json b/apiAutoTest_v3/report/html/allure_sion/7c96f7fa-1682-45de-9665-b629a163da61-result.json new file mode 100644 index 0000000..0acc653 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7c96f7fa-1682-45de-9665-b629a163da61-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "26917a5b-a800-4e1f-a72e-2a5931cd74bf-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': '123456'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875303, "stop": 1725509875320, "uuid": "704580fe-1700-42d0-bdda-536a423482a9", "historyId": "9b37711dbaecfc386d6840f06e7e961c", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7e1991e8-e82f-4048-a801-6449dde70edc-container.json b/apiAutoTest_v3/report/html/allure_sion/7e1991e8-e82f-4048-a801-6449dde70edc-container.json new file mode 100644 index 0000000..b903cbe --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7e1991e8-e82f-4048-a801-6449dde70edc-container.json @@ -0,0 +1 @@ +{"uuid": "3cddf80c-e4c3-4a5e-8423-ea66233a0b28", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875081, "stop": 1725509875121} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7e8d29d9-6f28-41b5-94ab-3d625666d06f-container.json b/apiAutoTest_v3/report/html/allure_sion/7e8d29d9-6f28-41b5-94ab-3d625666d06f-container.json new file mode 100644 index 0000000..312e925 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7e8d29d9-6f28-41b5-94ab-3d625666d06f-container.json @@ -0,0 +1 @@ +{"uuid": "3c7d9cdc-2f65-499e-b190-7b50aaf5c35c", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875293} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/7fdeadac-e1b4-4c22-ac8d-adb1b019e148-container.json b/apiAutoTest_v3/report/html/allure_sion/7fdeadac-e1b4-4c22-ac8d-adb1b019e148-container.json new file mode 100644 index 0000000..564a82a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/7fdeadac-e1b4-4c22-ac8d-adb1b019e148-container.json @@ -0,0 +1 @@ +{"uuid": "e50071c7-b55c-423b-b540-016d4f17d781", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873913} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/80b602c8-4c50-440f-9713-a0c23cb69559-container.json b/apiAutoTest_v3/report/html/allure_sion/80b602c8-4c50-440f-9713-a0c23cb69559-container.json new file mode 100644 index 0000000..9186e12 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/80b602c8-4c50-440f-9713-a0c23cb69559-container.json @@ -0,0 +1 @@ +{"uuid": "8c9e9724-9b65-460f-8444-4c3385259947", "befores": [{"name": "url", "status": "passed", "start": 1725509874658, "stop": 1725509874659}], "start": 1725509874658, "stop": 1725509874702} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/80dc2863-dbb1-4b46-8502-d610de988b5a-container.json b/apiAutoTest_v3/report/html/allure_sion/80dc2863-dbb1-4b46-8502-d610de988b5a-container.json new file mode 100644 index 0000000..6c5a548 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/80dc2863-dbb1-4b46-8502-d610de988b5a-container.json @@ -0,0 +1 @@ +{"uuid": "aa2abb7f-41d9-4480-9942-3f90f21ee8b4", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874461, "stop": 1725509874461}], "start": 1725509874461, "stop": 1725509874518} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/83ea6cba-2c67-4d3d-b1a9-9c118b29d21b-container.json b/apiAutoTest_v3/report/html/allure_sion/83ea6cba-2c67-4d3d-b1a9-9c118b29d21b-container.json new file mode 100644 index 0000000..37fc7ee --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/83ea6cba-2c67-4d3d-b1a9-9c118b29d21b-container.json @@ -0,0 +1 @@ +{"uuid": "89f82469-aaab-4769-bfc3-3d3d3fc02957", "befores": [{"name": "update_key", "status": "passed", "start": 1725509873838, "stop": 1725509873838}], "start": 1725509873838, "stop": 1725509873901} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8470053b-749e-4374-b667-5801d915d6f7-container.json b/apiAutoTest_v3/report/html/allure_sion/8470053b-749e-4374-b667-5801d915d6f7-container.json new file mode 100644 index 0000000..2741f94 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8470053b-749e-4374-b667-5801d915d6f7-container.json @@ -0,0 +1 @@ +{"uuid": "280611d6-5cbc-400e-a554-51f5b6bd9d49", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875072} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/84b8be7a-bc3c-4729-96a2-1cf88b998d9f-container.json b/apiAutoTest_v3/report/html/allure_sion/84b8be7a-bc3c-4729-96a2-1cf88b998d9f-container.json new file mode 100644 index 0000000..cd2f201 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/84b8be7a-bc3c-4729-96a2-1cf88b998d9f-container.json @@ -0,0 +1 @@ +{"uuid": "32489c27-1791-4fba-8210-e37521228085", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875441} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8593491a-aab7-4743-8fd7-8191e8e1230c-result.json b/apiAutoTest_v3/report/html/allure_sion/8593491a-aab7-4743-8fd7-8191e8e1230c-result.json new file mode 100644 index 0000000..2a6d49a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8593491a-aab7-4743-8fd7-8191e8e1230c-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876A6BEC0>('message')\nE + where <built-in method get of dict object at 0x0000020876A6BEC0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "e907567e-b2f1-443f-97fe-60b886bc265b-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/refresh'"}, {"name": "method", "value": "'GET'"}, {"name": "mime", "value": "None"}, {"name": "case_data", "value": "None"}, {"name": "expect_data", "value": "{'message': '刷新token成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874783, "stop": 1725509874802, "uuid": "67dfe0b2-045d-45ff-91b2-b037ba12a641", "historyId": "b410abf76c32aa74be9f6d0484c2321c", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/875d55d0-367c-48cb-a899-9e1902a9ebf9-container.json b/apiAutoTest_v3/report/html/allure_sion/875d55d0-367c-48cb-a899-9e1902a9ebf9-container.json new file mode 100644 index 0000000..9415e69 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/875d55d0-367c-48cb-a899-9e1902a9ebf9-container.json @@ -0,0 +1 @@ +{"uuid": "fa5c2341-f94f-4ef6-a9cb-974df1a66148", "befores": [{"name": "mime", "status": "passed", "start": 1725509874398, "stop": 1725509874398}], "start": 1725509874398, "stop": 1725509874454} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/88c28d57-1648-4b8e-babf-f0bfce8ae804-container.json b/apiAutoTest_v3/report/html/allure_sion/88c28d57-1648-4b8e-babf-f0bfce8ae804-container.json new file mode 100644 index 0000000..be280e7 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/88c28d57-1648-4b8e-babf-f0bfce8ae804-container.json @@ -0,0 +1 @@ +{"uuid": "f19bb41f-0a5b-4387-9021-d35c7fbfd96b", "befores": [{"name": "method", "status": "passed", "start": 1725509873919, "stop": 1725509873919}], "start": 1725509873919, "stop": 1725509873970} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/88ecbe73-f3e9-40d8-8301-98c1b800b2d4-container.json b/apiAutoTest_v3/report/html/allure_sion/88ecbe73-f3e9-40d8-8301-98c1b800b2d4-container.json new file mode 100644 index 0000000..1cea550 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/88ecbe73-f3e9-40d8-8301-98c1b800b2d4-container.json @@ -0,0 +1 @@ +{"uuid": "adf19f20-44ff-4719-a377-352729f1fa7b", "befores": [{"name": "case_data", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874025} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/89bb5dda-9c44-4846-bfd1-727ba9e47af6-container.json b/apiAutoTest_v3/report/html/allure_sion/89bb5dda-9c44-4846-bfd1-727ba9e47af6-container.json new file mode 100644 index 0000000..86ec90d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/89bb5dda-9c44-4846-bfd1-727ba9e47af6-container.json @@ -0,0 +1 @@ +{"uuid": "dc1385fe-f2d2-43d4-9ded-05a4b425e934", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874705, "stop": 1725509874705}], "start": 1725509874705, "stop": 1725509874765} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/89d3fa52-0736-41b4-99c3-c7ae18cd2a5f-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/89d3fa52-0736-41b4-99c3-c7ae18cd2a5f-attachment.txt new file mode 100644 index 0000000..2050dd4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/89d3fa52-0736-41b4-99c3-c7ae18cd2a5f-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822054223872"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8a2e02eb-e674-49cb-a45c-21a8262c0558-container.json b/apiAutoTest_v3/report/html/allure_sion/8a2e02eb-e674-49cb-a45c-21a8262c0558-container.json new file mode 100644 index 0000000..72243c9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8a2e02eb-e674-49cb-a45c-21a8262c0558-container.json @@ -0,0 +1 @@ +{"uuid": "236067f8-4a47-4cea-9dac-72d3dc719aa7", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874281} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8a91a5bd-2914-47bb-9ad3-b350e1cb87fa-container.json b/apiAutoTest_v3/report/html/allure_sion/8a91a5bd-2914-47bb-9ad3-b350e1cb87fa-container.json new file mode 100644 index 0000000..7a00e43 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8a91a5bd-2914-47bb-9ad3-b350e1cb87fa-container.json @@ -0,0 +1 @@ +{"uuid": "cbb9e9bb-c3b4-4ff8-b283-98c7b4847fbe", "befores": [{"name": "url", "status": "passed", "start": 1725509874460, "stop": 1725509874461}], "start": 1725509874460, "stop": 1725509874520} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8d6cbabf-56a1-4340-ad05-89894e92bff6-container.json b/apiAutoTest_v3/report/html/allure_sion/8d6cbabf-56a1-4340-ad05-89894e92bff6-container.json new file mode 100644 index 0000000..112f27a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8d6cbabf-56a1-4340-ad05-89894e92bff6-container.json @@ -0,0 +1 @@ +{"uuid": "f6ef87f8-4b92-4a66-a92a-b5a79801e6d1", "befores": [{"name": "mime", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874343} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8d8490a9-5b84-42f2-bd70-1c9122fbdc1c-container.json b/apiAutoTest_v3/report/html/allure_sion/8d8490a9-5b84-42f2-bd70-1c9122fbdc1c-container.json new file mode 100644 index 0000000..a13a643 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8d8490a9-5b84-42f2-bd70-1c9122fbdc1c-container.json @@ -0,0 +1 @@ +{"uuid": "029a48d0-e04f-4460-aa7b-5780916c49f5", "befores": [{"name": "case_data", "status": "passed", "start": 1725509873792, "stop": 1725509873792}], "start": 1725509873792, "stop": 1725509873831} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8dce53dc-1bf3-4c73-bdc6-2c251d8d9d54-container.json b/apiAutoTest_v3/report/html/allure_sion/8dce53dc-1bf3-4c73-bdc6-2c251d8d9d54-container.json new file mode 100644 index 0000000..30335f7 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8dce53dc-1bf3-4c73-bdc6-2c251d8d9d54-container.json @@ -0,0 +1 @@ +{"uuid": "7399a913-6da1-4cf0-8aa6-0c6c26ae17c3", "befores": [{"name": "url", "status": "passed", "start": 1725509874031, "stop": 1725509874032}], "start": 1725509874031, "stop": 1725509874068} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8e44ed56-aef5-4b7e-913c-3277903294e3-container.json b/apiAutoTest_v3/report/html/allure_sion/8e44ed56-aef5-4b7e-913c-3277903294e3-container.json new file mode 100644 index 0000000..ab31611 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8e44ed56-aef5-4b7e-913c-3277903294e3-container.json @@ -0,0 +1 @@ +{"uuid": "9901e157-5545-4bc4-bdbc-689174afb6ce", "children": ["1a799582-7155-40c7-ba3a-f5b10a0c9aa6", "7a167ea0-eccf-408f-a457-a138e60915e9", "7950588d-e0b7-41c6-9663-ddc40885337f", "6faf640c-23d7-4715-b6fb-2d1886b69d22", "7b936699-4a04-46a7-8509-c4fef6ad3408", "ab67c70b-faef-4a84-8a6d-27b5d5f80d74", "70b06e8b-1bd4-41b5-89dc-2365914c62e6"], "befores": [{"name": "fix_db", "status": "passed", "start": 1725509873410, "stop": 1725509873455}], "afters": [{"name": "fix_db::0", "status": "passed", "start": 1725509875453, "stop": 1725509875453}], "start": 1725509873410, "stop": 1725509875453} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8f33cda7-72fb-4a27-898e-f56ee6a9633c-container.json b/apiAutoTest_v3/report/html/allure_sion/8f33cda7-72fb-4a27-898e-f56ee6a9633c-container.json new file mode 100644 index 0000000..2e76c8c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8f33cda7-72fb-4a27-898e-f56ee6a9633c-container.json @@ -0,0 +1 @@ +{"uuid": "2368ef59-1aa5-4479-a6ab-b62c8c4803e2", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875073} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8f3db0e1-c31d-4652-bfea-ba43c92081fc-container.json b/apiAutoTest_v3/report/html/allure_sion/8f3db0e1-c31d-4652-bfea-ba43c92081fc-container.json new file mode 100644 index 0000000..7f627f2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8f3db0e1-c31d-4652-bfea-ba43c92081fc-container.json @@ -0,0 +1 @@ +{"uuid": "225efa70-4a78-407c-a278-6d76d741be18", "befores": [{"name": "url", "status": "passed", "start": 1725509874286, "stop": 1725509874286}], "start": 1725509874286, "stop": 1725509874344} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8f68e127-7db1-44e3-a805-61350ff50d24-container.json b/apiAutoTest_v3/report/html/allure_sion/8f68e127-7db1-44e3-a805-61350ff50d24-container.json new file mode 100644 index 0000000..4296be8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8f68e127-7db1-44e3-a805-61350ff50d24-container.json @@ -0,0 +1 @@ +{"uuid": "1b749c7f-6e99-41e7-bce7-886a29b1ac19", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874928} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/8fd10e55-d10e-4623-9db5-73b0c404f33b-container.json b/apiAutoTest_v3/report/html/allure_sion/8fd10e55-d10e-4623-9db5-73b0c404f33b-container.json new file mode 100644 index 0000000..40907b1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/8fd10e55-d10e-4623-9db5-73b0c404f33b-container.json @@ -0,0 +1 @@ +{"uuid": "ab6c8d7c-3037-4ff3-bb45-6c5d12f8bd90", "befores": [{"name": "mime", "status": "passed", "start": 1725509874935, "stop": 1725509874935}], "start": 1725509874935, "stop": 1725509874974} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9325f40c-bd4f-4c7c-8c00-0ce9fe8d789f-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/9325f40c-bd4f-4c7c-8c00-0ce9fe8d789f-attachment.txt new file mode 100644 index 0000000..8d3463b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9325f40c-bd4f-4c7c-8c00-0ce9fe8d789f-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821848702976"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/956b16d6-7240-4451-8951-6c5a858a1d51-container.json b/apiAutoTest_v3/report/html/allure_sion/956b16d6-7240-4451-8951-6c5a858a1d51-container.json new file mode 100644 index 0000000..d310d52 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/956b16d6-7240-4451-8951-6c5a858a1d51-container.json @@ -0,0 +1 @@ +{"uuid": "79c10d60-b545-47dd-b74e-13d71a2794e7", "befores": [{"name": "url", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874283} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/963d654e-249a-4c47-ac90-4646c9c34c8d-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/963d654e-249a-4c47-ac90-4646c9c34c8d-attachment.txt new file mode 100644 index 0000000..6889f1f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/963d654e-249a-4c47-ac90-4646c9c34c8d-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819197902848"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/964b064c-c405-4d24-8df9-f245bc607a8c-container.json b/apiAutoTest_v3/report/html/allure_sion/964b064c-c405-4d24-8df9-f245bc607a8c-container.json new file mode 100644 index 0000000..d1a3390 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/964b064c-c405-4d24-8df9-f245bc607a8c-container.json @@ -0,0 +1 @@ +{"uuid": "39e63814-eb78-4d34-8254-a1bea037122e", "befores": [{"name": "method", "status": "passed", "start": 1725509874398, "stop": 1725509874398}], "start": 1725509874398, "stop": 1725509874454} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/97625561-1b6f-4b89-a9ec-a4e4550eb813-container.json b/apiAutoTest_v3/report/html/allure_sion/97625561-1b6f-4b89-a9ec-a4e4550eb813-container.json new file mode 100644 index 0000000..06d0c97 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/97625561-1b6f-4b89-a9ec-a4e4550eb813-container.json @@ -0,0 +1 @@ +{"uuid": "3b3a4b8e-3eac-43b5-8663-2a7dd9741f68", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874568, "stop": 1725509874568}], "start": 1725509874568, "stop": 1725509874601} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/993f6a60-e4b5-47bd-98cb-23ff3a7895b4-container.json b/apiAutoTest_v3/report/html/allure_sion/993f6a60-e4b5-47bd-98cb-23ff3a7895b4-container.json new file mode 100644 index 0000000..f51419d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/993f6a60-e4b5-47bd-98cb-23ff3a7895b4-container.json @@ -0,0 +1 @@ +{"uuid": "d937e5bb-b5f4-4076-b998-294e899e5e3c", "befores": [{"name": "url", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874394} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9a360b2b-3042-4a54-b3aa-3e2b2f6196f1-container.json b/apiAutoTest_v3/report/html/allure_sion/9a360b2b-3042-4a54-b3aa-3e2b2f6196f1-container.json new file mode 100644 index 0000000..6c5fd03 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9a360b2b-3042-4a54-b3aa-3e2b2f6196f1-container.json @@ -0,0 +1 @@ +{"uuid": "544d115b-1000-4135-95c7-dacce3ae7663", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874461, "stop": 1725509874461}], "start": 1725509874461, "stop": 1725509874518} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9a3c86c8-db4d-4b19-b999-34915a9ce2b9-container.json b/apiAutoTest_v3/report/html/allure_sion/9a3c86c8-db4d-4b19-b999-34915a9ce2b9-container.json new file mode 100644 index 0000000..c998883 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9a3c86c8-db4d-4b19-b999-34915a9ce2b9-container.json @@ -0,0 +1 @@ +{"uuid": "676db72b-9d58-47be-866f-4a6feb679d78", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875253} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9a686151-f4e7-47d0-abf9-aa98564c87df-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/9a686151-f4e7-47d0-abf9-aa98564c87df-attachment.txt new file mode 100644 index 0000000..307e5f0 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9a686151-f4e7-47d0-abf9-aa98564c87df-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9ad32179-ed53-4327-ad25-0e5e680014cf-container.json b/apiAutoTest_v3/report/html/allure_sion/9ad32179-ed53-4327-ad25-0e5e680014cf-container.json new file mode 100644 index 0000000..f2a1ea8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9ad32179-ed53-4327-ad25-0e5e680014cf-container.json @@ -0,0 +1 @@ +{"uuid": "0f597b5a-490d-48c8-9a84-d55ca24c764b", "befores": [{"name": "mime", "status": "passed", "start": 1725509874659, "stop": 1725509874659}], "start": 1725509874659, "stop": 1725509874699} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9af2ef87-2903-4fcd-bba1-5b48b34c97dd-container.json b/apiAutoTest_v3/report/html/allure_sion/9af2ef87-2903-4fcd-bba1-5b48b34c97dd-container.json new file mode 100644 index 0000000..ca3b62c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9af2ef87-2903-4fcd-bba1-5b48b34c97dd-container.json @@ -0,0 +1 @@ +{"uuid": "2306511c-9b91-40aa-b88b-6ec83e2b9fb7", "befores": [{"name": "mime", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874930} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9ee15a63-4b84-426f-963b-b241013823dd-container.json b/apiAutoTest_v3/report/html/allure_sion/9ee15a63-4b84-426f-963b-b241013823dd-container.json new file mode 100644 index 0000000..ba743c1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9ee15a63-4b84-426f-963b-b241013823dd-container.json @@ -0,0 +1 @@ +{"uuid": "6d8d32b4-798e-45ea-8658-47df4042c8c8", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874462, "stop": 1725509874462}], "start": 1725509874462, "stop": 1725509874516} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9ee87215-1a91-4c01-a5ba-821e2f395030-container.json b/apiAutoTest_v3/report/html/allure_sion/9ee87215-1a91-4c01-a5ba-821e2f395030-container.json new file mode 100644 index 0000000..aa2a1a3 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9ee87215-1a91-4c01-a5ba-821e2f395030-container.json @@ -0,0 +1 @@ +{"uuid": "ce1dba8e-bb7d-4963-b68f-1f599879c6e6", "children": ["1a799582-7155-40c7-ba3a-f5b10a0c9aa6", "7a167ea0-eccf-408f-a457-a138e60915e9", "7950588d-e0b7-41c6-9663-ddc40885337f", "6faf640c-23d7-4715-b6fb-2d1886b69d22", "7b936699-4a04-46a7-8509-c4fef6ad3408", "ab67c70b-faef-4a84-8a6d-27b5d5f80d74", "70b06e8b-1bd4-41b5-89dc-2365914c62e6", "77afe7f3-d5c8-46c3-8756-bb7ac6315f45", "4731908c-5fc8-4895-9354-3bebc0a0482f", "4ea79eb4-3585-40b3-aa13-4a770ac0d978", "a346218f-1488-43e9-9408-f784b24c13f1", "a6aebe93-c229-4fb2-af63-65a40973247f", "2b4e8825-68ef-4a66-8d82-9b8e29ad56b5", "19062a21-71e6-4646-a836-3a7dc87236ce", "5bca2cfb-7e48-4e15-9326-af1a219a1728", "e2eccefd-e733-49ad-85ee-b3eab55b44e9", "85149439-b10f-4f11-a5ef-9467a911b031", "7f819331-6a84-4060-b123-7df9e83d3906", "67dfe0b2-045d-45ff-91b2-b037ba12a641", "b0ffe29c-5a47-4fc2-9f4c-6348d61a1311", "4f140660-245b-4efb-9908-5bb18fd29495", "d3ad5bb8-3fe1-4e13-a5a3-abcf825786f6", "4bd1a1e9-7b16-45c4-adde-46f218d2a0d9", "c1c9a166-4e8a-4034-af12-642b781f9305", "7b394fb4-02f8-4a3b-910c-cc6907718049", "64c7256a-ca2a-4a5b-83e0-a1a050be1707", "a56e2b22-da2a-4f36-8f48-a0d62e7c9c34", "bfe5ffb6-d54a-4d3a-a70a-a189648896a3", "704580fe-1700-42d0-bdda-536a423482a9", "42e84d51-19dc-4202-ba2b-1c50730ca2c6", "45b57e43-21fc-4409-a400-e5bba2a5a2c0"], "befores": [{"name": "_session_faker", "status": "passed", "start": 1725509873268, "stop": 1725509873410}], "start": 1725509873268, "stop": 1725509875454} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/9fb2bcb2-776e-4b60-993a-eab104912b2f-container.json b/apiAutoTest_v3/report/html/allure_sion/9fb2bcb2-776e-4b60-993a-eab104912b2f-container.json new file mode 100644 index 0000000..dc3810d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/9fb2bcb2-776e-4b60-993a-eab104912b2f-container.json @@ -0,0 +1 @@ +{"uuid": "af03f265-4983-4127-baaf-bc76bfad7d56", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874233} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a05e1ab1-2b75-4478-bfca-4f7d7b790dbe-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/a05e1ab1-2b75-4478-bfca-4f7d7b790dbe-attachment.txt new file mode 100644 index 0000000..9232d1c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a05e1ab1-2b75-4478-bfca-4f7d7b790dbe-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819734773760"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a0edff9a-8b39-4254-8b27-d1c5b1fb33ae-container.json b/apiAutoTest_v3/report/html/allure_sion/a0edff9a-8b39-4254-8b27-d1c5b1fb33ae-container.json new file mode 100644 index 0000000..5ba1691 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a0edff9a-8b39-4254-8b27-d1c5b1fb33ae-container.json @@ -0,0 +1 @@ +{"uuid": "22c71ca4-99b4-4297-81d7-eb0d5c103abe", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875295} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a12b3bf4-306f-476c-8b2e-b10ce9c76e21-container.json b/apiAutoTest_v3/report/html/allure_sion/a12b3bf4-306f-476c-8b2e-b10ce9c76e21-container.json new file mode 100644 index 0000000..42b82f0 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a12b3bf4-306f-476c-8b2e-b10ce9c76e21-container.json @@ -0,0 +1 @@ +{"uuid": "980cf994-5f5e-4798-8a9b-6511d23d8f01", "befores": [{"name": "url", "status": "passed", "start": 1725509875260, "stop": 1725509875260}], "start": 1725509875260, "stop": 1725509875298} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a16c7455-006a-460f-b7c1-1060b4687404-container.json b/apiAutoTest_v3/report/html/allure_sion/a16c7455-006a-460f-b7c1-1060b4687404-container.json new file mode 100644 index 0000000..148ae14 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a16c7455-006a-460f-b7c1-1060b4687404-container.json @@ -0,0 +1 @@ +{"uuid": "221172f9-dc5b-4f82-b9a1-bfe31f994f1d", "befores": [{"name": "mime", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874820} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a1a310b8-1ab4-4098-8b39-be01bc1ec469-container.json b/apiAutoTest_v3/report/html/allure_sion/a1a310b8-1ab4-4098-8b39-be01bc1ec469-container.json new file mode 100644 index 0000000..82ae3b4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a1a310b8-1ab4-4098-8b39-be01bc1ec469-container.json @@ -0,0 +1 @@ +{"uuid": "d7ae8b15-cff0-4f8e-985f-a5a0c2fd193e", "befores": [{"name": "method", "status": "passed", "start": 1725509875260, "stop": 1725509875260}], "start": 1725509875260, "stop": 1725509875297} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a1d2a3c4-4454-4d08-826d-bb201602acf6-container.json b/apiAutoTest_v3/report/html/allure_sion/a1d2a3c4-4454-4d08-826d-bb201602acf6-container.json new file mode 100644 index 0000000..78c4800 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a1d2a3c4-4454-4d08-826d-bb201602acf6-container.json @@ -0,0 +1 @@ +{"uuid": "4757ca11-62b2-432b-b22a-c255c55b7598", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874927} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a2a74b53-bf72-4feb-980f-1de6fdc3a08c-container.json b/apiAutoTest_v3/report/html/allure_sion/a2a74b53-bf72-4feb-980f-1de6fdc3a08c-container.json new file mode 100644 index 0000000..391308f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a2a74b53-bf72-4feb-980f-1de6fdc3a08c-container.json @@ -0,0 +1 @@ +{"uuid": "e64264a6-ac25-44a4-90bd-ec0aafa0258c", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873781} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a32345eb-8af2-46f9-9f3a-3c5092e1a826-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/a32345eb-8af2-46f9-9f3a-3c5092e1a826-attachment.txt new file mode 100644 index 0000000..fc4d403 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a32345eb-8af2-46f9-9f3a-3c5092e1a826-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a33b25f6-996b-419a-bd98-538b1be7e554-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/a33b25f6-996b-419a-bd98-538b1be7e554-attachment.txt new file mode 100644 index 0000000..bbd8f99 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a33b25f6-996b-419a-bd98-538b1be7e554-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a36370a2-dc99-4ed6-8e50-1d139ecfdadb-container.json b/apiAutoTest_v3/report/html/allure_sion/a36370a2-dc99-4ed6-8e50-1d139ecfdadb-container.json new file mode 100644 index 0000000..912fbde --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a36370a2-dc99-4ed6-8e50-1d139ecfdadb-container.json @@ -0,0 +1 @@ +{"uuid": "7c3e30eb-d6e9-4381-b3d7-785faf6cab81", "befores": [{"name": "method", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875075} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a3e2cb54-2d6d-47fb-9b51-e13c31df561c-container.json b/apiAutoTest_v3/report/html/allure_sion/a3e2cb54-2d6d-47fb-9b51-e13c31df561c-container.json new file mode 100644 index 0000000..e497521 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a3e2cb54-2d6d-47fb-9b51-e13c31df561c-container.json @@ -0,0 +1 @@ +{"uuid": "6006d533-cc62-4027-b45c-26a0329fd509", "befores": [{"name": "method", "status": "passed", "start": 1725509874659, "stop": 1725509874659}], "start": 1725509874659, "stop": 1725509874700} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a4acbd6c-94c7-416a-b19c-ee822a724574-container.json b/apiAutoTest_v3/report/html/allure_sion/a4acbd6c-94c7-416a-b19c-ee822a724574-container.json new file mode 100644 index 0000000..5fe1487 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a4acbd6c-94c7-416a-b19c-ee822a724574-container.json @@ -0,0 +1 @@ +{"uuid": "702d107c-7fc9-4f9a-9375-e8d4e441fd29", "befores": [{"name": "method", "status": "passed", "start": 1725509874980, "stop": 1725509874981}], "start": 1725509874980, "stop": 1725509875025} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a4d332dd-eb8d-473f-87a1-f57e19b1e865-result.json b/apiAutoTest_v3/report/html/allure_sion/a4d332dd-eb8d-473f-87a1-f57e19b1e865-result.json new file mode 100644 index 0000000..8f669ac --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a4d332dd-eb8d-473f-87a1-f57e19b1e865-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "576f8f19-dac5-4504-9f69-1fe608c90bc3-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': ''}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875182, "stop": 1725509875211, "uuid": "64c7256a-ca2a-4a5b-83e0-a1a050be1707", "historyId": "8a6f5940a978fd4ecaa53e97a35ae776", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a60bcc10-a810-4473-a27b-abaa7d7bcc7b-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/a60bcc10-a810-4473-a27b-abaa7d7bcc7b-attachment.txt new file mode 100644 index 0000000..236e663 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a60bcc10-a810-4473-a27b-abaa7d7bcc7b-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a60e34e5-ebed-4714-9b87-f6569dc36ce3-result.json b/apiAutoTest_v3/report/html/allure_sion/a60e34e5-ebed-4714-9b87-f6569dc36ce3-result.json new file mode 100644 index 0000000..886ccac --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a60e34e5-ebed-4714-9b87-f6569dc36ce3-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "31c97534-ace1-4a64-b912-5618130e87da-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874288, "stop": 1725509874316, "uuid": "4ea79eb4-3585-40b3-aa13-4a770ac0d978", "historyId": "fb4addf01045fbe8c5cdee39d26ad4eb", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a73f857d-c7c2-4ba3-9481-470fe9ac4481-result.json b/apiAutoTest_v3/report/html/allure_sion/a73f857d-c7c2-4ba3-9481-470fe9ac4481-result.json new file mode 100644 index 0000000..44c177f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a73f857d-c7c2-4ba3-9481-470fe9ac4481-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "963d654e-249a-4c47-ac90-4646c9c34c8d-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874349, "stop": 1725509874377, "uuid": "a346218f-1488-43e9-9408-f784b24c13f1", "historyId": "63d2c1d0245c2602497f67b56e03a018", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a91bd51d-e868-4402-b099-96a5ec5fbc9d-container.json b/apiAutoTest_v3/report/html/allure_sion/a91bd51d-e868-4402-b099-96a5ec5fbc9d-container.json new file mode 100644 index 0000000..f750eeb --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a91bd51d-e868-4402-b099-96a5ec5fbc9d-container.json @@ -0,0 +1 @@ +{"uuid": "397df108-46ab-4e1c-ac95-e060e893792f", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874342} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/a968f54d-2dce-446d-be9d-2c7b86b2e145-container.json b/apiAutoTest_v3/report/html/allure_sion/a968f54d-2dce-446d-be9d-2c7b86b2e145-container.json new file mode 100644 index 0000000..1df688a --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/a968f54d-2dce-446d-be9d-2c7b86b2e145-container.json @@ -0,0 +1 @@ +{"uuid": "aa48dde3-7f74-42dc-b5ec-6a3a0c22ab3d", "befores": [{"name": "method", "status": "passed", "start": 1725509875342, "stop": 1725509875342}], "start": 1725509875342, "stop": 1725509875401} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/aa328651-5ef4-450e-b05e-851043d6db2b-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/aa328651-5ef4-450e-b05e-851043d6db2b-attachment.txt new file mode 100644 index 0000000..3110b62 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/aa328651-5ef4-450e-b05e-851043d6db2b-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821634793472"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/aacf4bd1-c28a-41fa-a814-85c6181280b8-container.json b/apiAutoTest_v3/report/html/allure_sion/aacf4bd1-c28a-41fa-a814-85c6181280b8-container.json new file mode 100644 index 0000000..39c5dfd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/aacf4bd1-c28a-41fa-a814-85c6181280b8-container.json @@ -0,0 +1 @@ +{"uuid": "21566572-621e-4d09-afef-9390f233340b", "befores": [{"name": "mime", "status": "passed", "start": 1725509874461, "stop": 1725509874461}], "start": 1725509874461, "stop": 1725509874519} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ab33b33c-a733-4a52-8232-b6c44509a7f4-container.json b/apiAutoTest_v3/report/html/allure_sion/ab33b33c-a733-4a52-8232-b6c44509a7f4-container.json new file mode 100644 index 0000000..bf546f1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ab33b33c-a733-4a52-8232-b6c44509a7f4-container.json @@ -0,0 +1 @@ +{"uuid": "a6959113-a48e-42c2-a78c-fb8dce7173ec", "befores": [{"name": "url", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874028} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ace72e80-1fb4-4e9f-bd8d-d01753cda23b-container.json b/apiAutoTest_v3/report/html/allure_sion/ace72e80-1fb4-4e9f-bd8d-d01753cda23b-container.json new file mode 100644 index 0000000..ca2094e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ace72e80-1fb4-4e9f-bd8d-d01753cda23b-container.json @@ -0,0 +1 @@ +{"uuid": "5b12c70d-3952-4b78-b882-3b4988254d30", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875024} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ace9b35f-ac1a-43db-a1b7-0652237c7553-container.json b/apiAutoTest_v3/report/html/allure_sion/ace9b35f-ac1a-43db-a1b7-0652237c7553-container.json new file mode 100644 index 0000000..d62da29 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ace9b35f-ac1a-43db-a1b7-0652237c7553-container.json @@ -0,0 +1 @@ +{"uuid": "82718d4b-1407-4735-b530-4ee7405897ac", "befores": [{"name": "url", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873788} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/acedd2f9-a57c-4ade-9272-65fca417a2f4-container.json b/apiAutoTest_v3/report/html/allure_sion/acedd2f9-a57c-4ade-9272-65fca417a2f4-container.json new file mode 100644 index 0000000..e6da18f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/acedd2f9-a57c-4ade-9272-65fca417a2f4-container.json @@ -0,0 +1 @@ +{"uuid": "f042e3a0-eae6-4aa4-9341-154716d91f9a", "befores": [{"name": "url", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874239} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ae058efc-9346-450b-8917-c6726360d568-container.json b/apiAutoTest_v3/report/html/allure_sion/ae058efc-9346-450b-8917-c6726360d568-container.json new file mode 100644 index 0000000..bf5aaf2 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ae058efc-9346-450b-8917-c6726360d568-container.json @@ -0,0 +1 @@ +{"uuid": "11dd9c12-e963-4c61-8e5a-4706c790ec84", "befores": [{"name": "method", "status": "passed", "start": 1725509874608, "stop": 1725509874608}], "start": 1725509874608, "stop": 1725509874654} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ae63dd4b-e454-4f61-afec-0d689da75f4b-container.json b/apiAutoTest_v3/report/html/allure_sion/ae63dd4b-e454-4f61-afec-0d689da75f4b-container.json new file mode 100644 index 0000000..2eaa111 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ae63dd4b-e454-4f61-afec-0d689da75f4b-container.json @@ -0,0 +1 @@ +{"uuid": "04ad958a-6762-4340-9416-a6b67809adc9", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875292} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b11997ba-e9f7-46e8-8c68-e351f24ed04a-container.json b/apiAutoTest_v3/report/html/allure_sion/b11997ba-e9f7-46e8-8c68-e351f24ed04a-container.json new file mode 100644 index 0000000..82d2559 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b11997ba-e9f7-46e8-8c68-e351f24ed04a-container.json @@ -0,0 +1 @@ +{"uuid": "e1117db6-bf1d-4949-b3ac-bcb6a0b9ef7a", "befores": [{"name": "mime", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875296} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b2cf7a41-ae68-4b68-89dc-56effb546736-container.json b/apiAutoTest_v3/report/html/allure_sion/b2cf7a41-ae68-4b68-89dc-56effb546736-container.json new file mode 100644 index 0000000..ac69c01 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b2cf7a41-ae68-4b68-89dc-56effb546736-container.json @@ -0,0 +1 @@ +{"uuid": "443f1302-4a7f-4ba9-adfa-64a758b2e2bf", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874287, "stop": 1725509874287}], "start": 1725509874287, "stop": 1725509874339} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b4029107-b718-4444-a7cf-c9ce965b40c9-container.json b/apiAutoTest_v3/report/html/allure_sion/b4029107-b718-4444-a7cf-c9ce965b40c9-container.json new file mode 100644 index 0000000..da6f47c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b4029107-b718-4444-a7cf-c9ce965b40c9-container.json @@ -0,0 +1 @@ +{"uuid": "90aa0996-5ca1-4f82-8b9e-538e18ba553d", "befores": [{"name": "method", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874027} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b4748040-907f-47d5-9818-94f193e5193a-result.json b/apiAutoTest_v3/report/html/allure_sion/b4748040-907f-47d5-9818-94f193e5193a-result.json new file mode 100644 index 0000000..968aa2f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b4748040-907f-47d5-9818-94f193e5193a-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "a33b25f6-996b-419a-bd98-538b1be7e554-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'query|json'"}, {"name": "case_data", "value": "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}"}, {"name": "expect_data", "value": "{'message': '保存组织参数成功!'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509873976, "stop": 1725509874012, "uuid": "7b936699-4a04-46a7-8509-c4fef6ad3408", "historyId": "fd1f5cf8cf0975a36ecfc6a676bd4dfa", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b51a1357-d922-46ad-b63f-44534126ee5e-container.json b/apiAutoTest_v3/report/html/allure_sion/b51a1357-d922-46ad-b63f-44534126ee5e-container.json new file mode 100644 index 0000000..cb01608 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b51a1357-d922-46ad-b63f-44534126ee5e-container.json @@ -0,0 +1 @@ +{"uuid": "cc0fcf4a-d892-4c52-a618-916886ee71c4", "befores": [{"name": "url", "status": "passed", "start": 1725509875080, "stop": 1725509875080}], "start": 1725509875080, "stop": 1725509875125} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b542e928-7a83-4cc1-93df-c59f56f82118-container.json b/apiAutoTest_v3/report/html/allure_sion/b542e928-7a83-4cc1-93df-c59f56f82118-container.json new file mode 100644 index 0000000..5dee611 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b542e928-7a83-4cc1-93df-c59f56f82118-container.json @@ -0,0 +1 @@ +{"uuid": "de9ca8a4-d221-4f78-b168-5e8cd417065e", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874568, "stop": 1725509874568}], "start": 1725509874568, "stop": 1725509874600} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b61d1456-f89a-4634-87f5-4fa24796153b-container.json b/apiAutoTest_v3/report/html/allure_sion/b61d1456-f89a-4634-87f5-4fa24796153b-container.json new file mode 100644 index 0000000..d8cec4e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b61d1456-f89a-4634-87f5-4fa24796153b-container.json @@ -0,0 +1 @@ +{"uuid": "bc472b13-02ad-41ee-808a-d2d384542956", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874525, "stop": 1725509874525}], "start": 1725509874525, "stop": 1725509874558} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b857b28e-5c49-4588-8a28-b1b998e2a123-container.json b/apiAutoTest_v3/report/html/allure_sion/b857b28e-5c49-4588-8a28-b1b998e2a123-container.json new file mode 100644 index 0000000..24c065e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b857b28e-5c49-4588-8a28-b1b998e2a123-container.json @@ -0,0 +1 @@ +{"uuid": "b498587a-9ca5-4bd5-8236-1b99b87c39aa", "befores": [{"name": "mime", "status": "passed", "start": 1725509875342, "stop": 1725509875342}], "start": 1725509875342, "stop": 1725509875400} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/b9cce0d4-d63d-4e98-8e22-9d7d80c33704-container.json b/apiAutoTest_v3/report/html/allure_sion/b9cce0d4-d63d-4e98-8e22-9d7d80c33704-container.json new file mode 100644 index 0000000..c7da9fa --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/b9cce0d4-d63d-4e98-8e22-9d7d80c33704-container.json @@ -0,0 +1 @@ +{"uuid": "d8170919-9162-4c0a-9e11-6600deb6975c", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875443} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ba87fc3c-b977-4011-be90-99a5e18916a7-container.json b/apiAutoTest_v3/report/html/allure_sion/ba87fc3c-b977-4011-be90-99a5e18916a7-container.json new file mode 100644 index 0000000..bd7a8be --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ba87fc3c-b977-4011-be90-99a5e18916a7-container.json @@ -0,0 +1 @@ +{"uuid": "9254fbd2-5432-4dce-9b4d-ff3ce012a854", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874525, "stop": 1725509874525}], "start": 1725509874525, "stop": 1725509874559} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/bb659730-4604-4ba7-b905-69ff990a7a93-container.json b/apiAutoTest_v3/report/html/allure_sion/bb659730-4604-4ba7-b905-69ff990a7a93-container.json new file mode 100644 index 0000000..3300ea4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/bb659730-4604-4ba7-b905-69ff990a7a93-container.json @@ -0,0 +1 @@ +{"uuid": "8fe89865-0d02-4673-900c-6a1748372b96", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874706, "stop": 1725509874706}], "start": 1725509874706, "stop": 1725509874765} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/bc40b529-f911-42c1-bbfd-5b1530e1fd51-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/bc40b529-f911-42c1-bbfd-5b1530e1fd51-attachment.txt new file mode 100644 index 0000000..f5c65fc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/bc40b529-f911-42c1-bbfd-5b1530e1fd51-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822268133376"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/bcdc58b3-3fbf-416d-b65a-50975a92b794-result.json b/apiAutoTest_v3/report/html/allure_sion/bcdc58b3-3fbf-416d-b65a-50975a92b794-result.json new file mode 100644 index 0000000..c9981b6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/bcdc58b3-3fbf-416d-b65a-50975a92b794-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "18b06448-cf30-4712-b184-ab51b80d9ca1-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874610, "stop": 1725509874629, "uuid": "e2eccefd-e733-49ad-85ee-b3eab55b44e9", "historyId": "a4925b7a43beba15ce710d3a2d8ba3f6", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/be2b4265-18ac-42ed-b725-5f4f1e7c7e12-container.json b/apiAutoTest_v3/report/html/allure_sion/be2b4265-18ac-42ed-b725-5f4f1e7c7e12-container.json new file mode 100644 index 0000000..c27138f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/be2b4265-18ac-42ed-b725-5f4f1e7c7e12-container.json @@ -0,0 +1 @@ +{"uuid": "68c6c802-25bf-410f-9583-acd341cc4a39", "befores": [{"name": "method", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873787} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/be565ac6-67aa-4370-bc4d-5a9f9754d27b-container.json b/apiAutoTest_v3/report/html/allure_sion/be565ac6-67aa-4370-bc4d-5a9f9754d27b-container.json new file mode 100644 index 0000000..42ac223 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/be565ac6-67aa-4370-bc4d-5a9f9754d27b-container.json @@ -0,0 +1 @@ +{"uuid": "b592bb97-25f1-4eac-bcc3-0cd390e60f17", "befores": [{"name": "method", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875445} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/bf7c8766-967b-4ba1-b431-52036edf58be-container.json b/apiAutoTest_v3/report/html/allure_sion/bf7c8766-967b-4ba1-b431-52036edf58be-container.json new file mode 100644 index 0000000..e85fecf --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/bf7c8766-967b-4ba1-b431-52036edf58be-container.json @@ -0,0 +1 @@ +{"uuid": "210c1fb0-af82-484a-8b75-32d5538c48cd", "befores": [{"name": "url", "status": "passed", "start": 1725509874895, "stop": 1725509874895}], "start": 1725509874895, "stop": 1725509874931} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/bffdff74-455a-44a9-a9fd-491b80e46bde-container.json b/apiAutoTest_v3/report/html/allure_sion/bffdff74-455a-44a9-a9fd-491b80e46bde-container.json new file mode 100644 index 0000000..0b47ea1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/bffdff74-455a-44a9-a9fd-491b80e46bde-container.json @@ -0,0 +1 @@ +{"uuid": "201910b8-f5ec-4cd8-be17-13c37e59b4ae", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875081, "stop": 1725509875123} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c0f1b0ae-f912-4244-8f08-e25d22c8b86f-container.json b/apiAutoTest_v3/report/html/allure_sion/c0f1b0ae-f912-4244-8f08-e25d22c8b86f-container.json new file mode 100644 index 0000000..d11f6fa --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c0f1b0ae-f912-4244-8f08-e25d22c8b86f-container.json @@ -0,0 +1 @@ +{"uuid": "bb8cfad9-3ead-4982-b84c-0d61b136f96c", "befores": [{"name": "url", "status": "passed", "start": 1725509874567, "stop": 1725509874567}], "start": 1725509874567, "stop": 1725509874604} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c119242e-7d80-4f03-96fe-73b21b8628bf-container.json b/apiAutoTest_v3/report/html/allure_sion/c119242e-7d80-4f03-96fe-73b21b8628bf-container.json new file mode 100644 index 0000000..9ae7810 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c119242e-7d80-4f03-96fe-73b21b8628bf-container.json @@ -0,0 +1 @@ +{"uuid": "2404c147-0f09-48d1-9848-1ac13ca1a93d", "befores": [{"name": "case_data", "status": "passed", "start": 1725509873502, "stop": 1725509873502}], "start": 1725509873502, "stop": 1725509873786} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c2bf26aa-4b1c-43c2-968c-6f2374592f6b-container.json b/apiAutoTest_v3/report/html/allure_sion/c2bf26aa-4b1c-43c2-968c-6f2374592f6b-container.json new file mode 100644 index 0000000..8e14f6f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c2bf26aa-4b1c-43c2-968c-6f2374592f6b-container.json @@ -0,0 +1 @@ +{"uuid": "88babbdb-dbd5-4392-a3f6-c0eb7bbcc066", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875252} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c656fe8c-fda4-4809-85ed-872109e1489a-container.json b/apiAutoTest_v3/report/html/allure_sion/c656fe8c-fda4-4809-85ed-872109e1489a-container.json new file mode 100644 index 0000000..7e5988d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c656fe8c-fda4-4809-85ed-872109e1489a-container.json @@ -0,0 +1 @@ +{"uuid": "ea9bb235-51cd-4071-b2de-55b100db008e", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875023} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c744cc76-eaf8-45d2-8742-5877474aa790-container.json b/apiAutoTest_v3/report/html/allure_sion/c744cc76-eaf8-45d2-8742-5877474aa790-container.json new file mode 100644 index 0000000..4968fce --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c744cc76-eaf8-45d2-8742-5877474aa790-container.json @@ -0,0 +1 @@ +{"uuid": "26b7d55e-f50d-49b6-bafa-0451e67408f5", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875220, "stop": 1725509875220}], "start": 1725509875220, "stop": 1725509875254} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c74662e0-1ecc-440f-8fa7-04cd3c66e225-container.json b/apiAutoTest_v3/report/html/allure_sion/c74662e0-1ecc-440f-8fa7-04cd3c66e225-container.json new file mode 100644 index 0000000..3c542d8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c74662e0-1ecc-440f-8fa7-04cd3c66e225-container.json @@ -0,0 +1 @@ +{"uuid": "bf42876a-868c-4665-8eac-1ca90e81b2d8", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874936, "stop": 1725509874936}], "start": 1725509874935, "stop": 1725509874974} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c795afa6-73e2-4273-b51f-6d116da97c09-container.json b/apiAutoTest_v3/report/html/allure_sion/c795afa6-73e2-4273-b51f-6d116da97c09-container.json new file mode 100644 index 0000000..bf6a78c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c795afa6-73e2-4273-b51f-6d116da97c09-container.json @@ -0,0 +1 @@ +{"uuid": "ac555c31-0925-4227-8ea2-cb3304b781dc", "befores": [{"name": "mime", "status": "passed", "start": 1725509874072, "stop": 1725509874072}], "start": 1725509874072, "stop": 1725509874121} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c8551a3c-2f91-4358-9c20-903a19604387-container.json b/apiAutoTest_v3/report/html/allure_sion/c8551a3c-2f91-4358-9c20-903a19604387-container.json new file mode 100644 index 0000000..caea096 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c8551a3c-2f91-4358-9c20-903a19604387-container.json @@ -0,0 +1 @@ +{"uuid": "3891f26b-6290-4a59-b2a7-bde1c43d013c", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874392} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/c93a1947-16fd-411e-9e5e-03ace330f4e6-container.json b/apiAutoTest_v3/report/html/allure_sion/c93a1947-16fd-411e-9e5e-03ace330f4e6-container.json new file mode 100644 index 0000000..8266dbc --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/c93a1947-16fd-411e-9e5e-03ace330f4e6-container.json @@ -0,0 +1 @@ +{"uuid": "f291d5f5-a95e-48f1-83f5-53428d4a6115", "befores": [{"name": "url", "status": "passed", "start": 1725509875342, "stop": 1725509875342}], "start": 1725509875342, "stop": 1725509875403} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ca2e81f7-6c8d-4cc3-9ccf-5b34b756ab09-container.json b/apiAutoTest_v3/report/html/allure_sion/ca2e81f7-6c8d-4cc3-9ccf-5b34b756ab09-container.json new file mode 100644 index 0000000..cea0e68 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ca2e81f7-6c8d-4cc3-9ccf-5b34b756ab09-container.json @@ -0,0 +1 @@ +{"uuid": "e5bc9528-cc3c-4973-8bf1-d8f7bbec179c", "befores": [{"name": "update_key", "status": "passed", "start": 1725509875343, "stop": 1725509875343}], "start": 1725509875343, "stop": 1725509875396} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/caf7c1a0-4780-47a4-9496-7c7916aca800-container.json b/apiAutoTest_v3/report/html/allure_sion/caf7c1a0-4780-47a4-9496-7c7916aca800-container.json new file mode 100644 index 0000000..4eab69d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/caf7c1a0-4780-47a4-9496-7c7916aca800-container.json @@ -0,0 +1 @@ +{"uuid": "bb55e765-d5d2-4297-9189-a7cc083c5651", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874391} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cb4911f6-4d5f-45cb-ae63-6532e636818a-container.json b/apiAutoTest_v3/report/html/allure_sion/cb4911f6-4d5f-45cb-ae63-6532e636818a-container.json new file mode 100644 index 0000000..c527ad8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cb4911f6-4d5f-45cb-ae63-6532e636818a-container.json @@ -0,0 +1 @@ +{"uuid": "231c70b4-01f7-457e-849b-f7619f975819", "children": ["77afe7f3-d5c8-46c3-8756-bb7ac6315f45", "4731908c-5fc8-4895-9354-3bebc0a0482f", "4ea79eb4-3585-40b3-aa13-4a770ac0d978", "a346218f-1488-43e9-9408-f784b24c13f1", "a6aebe93-c229-4fb2-af63-65a40973247f", "2b4e8825-68ef-4a66-8d82-9b8e29ad56b5", "19062a21-71e6-4646-a836-3a7dc87236ce", "5bca2cfb-7e48-4e15-9326-af1a219a1728", "e2eccefd-e733-49ad-85ee-b3eab55b44e9", "85149439-b10f-4f11-a5ef-9467a911b031", "7f819331-6a84-4060-b123-7df9e83d3906", "67dfe0b2-045d-45ff-91b2-b037ba12a641"], "befores": [{"name": "fix_db", "status": "passed", "start": 1725509874131, "stop": 1725509874160}], "afters": [{"name": "fix_db::0", "status": "passed", "start": 1725509875450, "stop": 1725509875450}], "start": 1725509874131, "stop": 1725509875450} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cb648822-5b1f-4323-ae9b-f26ed83d8617-container.json b/apiAutoTest_v3/report/html/allure_sion/cb648822-5b1f-4323-ae9b-f26ed83d8617-container.json new file mode 100644 index 0000000..214a9ac --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cb648822-5b1f-4323-ae9b-f26ed83d8617-container.json @@ -0,0 +1 @@ +{"uuid": "3eda18bc-d6af-4748-8be0-e8ed32cf5b0c", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874783, "stop": 1725509874783}], "start": 1725509874783, "stop": 1725509874816} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ccc3a036-9747-4608-a05a-dc84a04dc802-container.json b/apiAutoTest_v3/report/html/allure_sion/ccc3a036-9747-4608-a05a-dc84a04dc802-container.json new file mode 100644 index 0000000..6f8523e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ccc3a036-9747-4608-a05a-dc84a04dc802-container.json @@ -0,0 +1 @@ +{"uuid": "85cba1ed-d8a2-4fd7-9e87-b23f041617b3", "befores": [{"name": "url", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874821} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cd057717-371c-4a11-89ed-24e85d14c5ca-container.json b/apiAutoTest_v3/report/html/allure_sion/cd057717-371c-4a11-89ed-24e85d14c5ca-container.json new file mode 100644 index 0000000..75f077c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cd057717-371c-4a11-89ed-24e85d14c5ca-container.json @@ -0,0 +1 @@ +{"uuid": "6fc16640-595d-45f4-ab31-0566daabd064", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874706, "stop": 1725509874706}], "start": 1725509874706, "stop": 1725509874764} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cd36aeb7-d9a3-41d9-8a80-6d8809855e3b-container.json b/apiAutoTest_v3/report/html/allure_sion/cd36aeb7-d9a3-41d9-8a80-6d8809855e3b-container.json new file mode 100644 index 0000000..e96fc5d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cd36aeb7-d9a3-41d9-8a80-6d8809855e3b-container.json @@ -0,0 +1 @@ +{"uuid": "e4712bd9-4702-4edd-afa1-6b4cc33c1869", "befores": [{"name": "method", "status": "passed", "start": 1725509875181, "stop": 1725509875181}], "start": 1725509875181, "stop": 1725509875215} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cfa0d174-8946-45fd-9407-810f83226bb0-container.json b/apiAutoTest_v3/report/html/allure_sion/cfa0d174-8946-45fd-9407-810f83226bb0-container.json new file mode 100644 index 0000000..66f1e9f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cfa0d174-8946-45fd-9407-810f83226bb0-container.json @@ -0,0 +1 @@ +{"uuid": "c6a1d3be-863c-4cf1-9671-407320a7dc79", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874525, "stop": 1725509874525}], "start": 1725509874525, "stop": 1725509874560} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/cfde9a03-4292-4909-9673-10afd234b2f5-result.json b/apiAutoTest_v3/report/html/allure_sion/cfde9a03-4292-4909-9673-10afd234b2f5-result.json new file mode 100644 index 0000000..93e26d4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/cfde9a03-4292-4909-9673-10afd234b2f5-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "d8e15505-9c59-40f0-8d5c-29600502cf41-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': '#!$!@#!@#'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875221, "stop": 1725509875250, "uuid": "a56e2b22-da2a-4f36-8f48-a0d62e7c9c34", "historyId": "4f9935fe474283bd57d587585b81a84e", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d0348df4-bb5a-4b71-ac30-68831fabaa54-container.json b/apiAutoTest_v3/report/html/allure_sion/d0348df4-bb5a-4b71-ac30-68831fabaa54-container.json new file mode 100644 index 0000000..bb28a0e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d0348df4-bb5a-4b71-ac30-68831fabaa54-container.json @@ -0,0 +1 @@ +{"uuid": "df412e74-d1af-4288-9592-c5fce228d13e", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874399, "stop": 1725509874399}], "start": 1725509874399, "stop": 1725509874451} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d0844c99-5c36-40dc-a8fc-fb4f42777480-result.json b/apiAutoTest_v3/report/html/allure_sion/d0844c99-5c36-40dc-a8fc-fb4f42777480-result.json new file mode 100644 index 0000000..7e999c9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d0844c99-5c36-40dc-a8fc-fb4f42777480-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "9325f40c-bd4f-4c7c-8c00-0ce9fe8d789f-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874981, "stop": 1725509875008, "uuid": "d3ad5bb8-3fe1-4e13-a5a3-abcf825786f6", "historyId": "5bd9b2d423d7ab258be173e3e344797e", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d224dd3c-d7d3-467a-bf77-e1061a630412-container.json b/apiAutoTest_v3/report/html/allure_sion/d224dd3c-d7d3-467a-bf77-e1061a630412-container.json new file mode 100644 index 0000000..acb29e1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d224dd3c-d7d3-467a-bf77-e1061a630412-container.json @@ -0,0 +1 @@ +{"uuid": "62b5fa3f-ad65-48fc-9eb1-0e8c6779b6b4", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875408, "stop": 1725509875408}], "start": 1725509875408, "stop": 1725509875442} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d42c20d7-99af-4394-93bc-8db90283a383-container.json b/apiAutoTest_v3/report/html/allure_sion/d42c20d7-99af-4394-93bc-8db90283a383-container.json new file mode 100644 index 0000000..6f07cc6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d42c20d7-99af-4394-93bc-8db90283a383-container.json @@ -0,0 +1 @@ +{"uuid": "a7e306c8-8fcb-497a-a3ad-831a97e84b8f", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874819} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d46388ab-f569-480f-9ef2-d0444c2fc231-container.json b/apiAutoTest_v3/report/html/allure_sion/d46388ab-f569-480f-9ef2-d0444c2fc231-container.json new file mode 100644 index 0000000..ef0d0e7 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d46388ab-f569-480f-9ef2-d0444c2fc231-container.json @@ -0,0 +1 @@ +{"uuid": "2ea2d77c-5c4b-4cf3-a07c-01c884bb01e9", "befores": [{"name": "mime", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875080, "stop": 1725509875124} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d4eedda4-6dd2-4527-9424-43b57b696905-container.json b/apiAutoTest_v3/report/html/allure_sion/d4eedda4-6dd2-4527-9424-43b57b696905-container.json new file mode 100644 index 0000000..dc1ee66 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d4eedda4-6dd2-4527-9424-43b57b696905-container.json @@ -0,0 +1 @@ +{"uuid": "69e28acd-2a65-4a5c-875e-bd73e2ab740a", "children": ["77afe7f3-d5c8-46c3-8756-bb7ac6315f45", "4731908c-5fc8-4895-9354-3bebc0a0482f", "4ea79eb4-3585-40b3-aa13-4a770ac0d978", "a346218f-1488-43e9-9408-f784b24c13f1", "a6aebe93-c229-4fb2-af63-65a40973247f", "2b4e8825-68ef-4a66-8d82-9b8e29ad56b5", "19062a21-71e6-4646-a836-3a7dc87236ce", "5bca2cfb-7e48-4e15-9326-af1a219a1728", "e2eccefd-e733-49ad-85ee-b3eab55b44e9", "85149439-b10f-4f11-a5ef-9467a911b031", "7f819331-6a84-4060-b123-7df9e83d3906", "67dfe0b2-045d-45ff-91b2-b037ba12a641"], "befores": [{"name": "fix_req", "status": "passed", "start": 1725509874160, "stop": 1725509874198}], "afters": [{"name": "fix_req::0", "status": "passed", "start": 1725509875449, "stop": 1725509875449}], "start": 1725509874160, "stop": 1725509875449} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d5b04229-9259-4a71-8561-0dcc93b4459f-container.json b/apiAutoTest_v3/report/html/allure_sion/d5b04229-9259-4a71-8561-0dcc93b4459f-container.json new file mode 100644 index 0000000..84041b6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d5b04229-9259-4a71-8561-0dcc93b4459f-container.json @@ -0,0 +1 @@ +{"uuid": "2bcc20a5-1c25-4e27-b775-7ad89348e6a6", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874981, "stop": 1725509874981}], "start": 1725509874981, "stop": 1725509875022} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d6d2ec01-1f17-4c51-b9b2-9366b8a6c797-container.json b/apiAutoTest_v3/report/html/allure_sion/d6d2ec01-1f17-4c51-b9b2-9366b8a6c797-container.json new file mode 100644 index 0000000..6ed3889 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d6d2ec01-1f17-4c51-b9b2-9366b8a6c797-container.json @@ -0,0 +1 @@ +{"uuid": "2195a74d-7709-4b8f-a9bf-b3db63d41527", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874032, "stop": 1725509874032}], "start": 1725509874032, "stop": 1725509874065} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d75cb761-e71f-46c3-a6e6-64ff9ff526de-container.json b/apiAutoTest_v3/report/html/allure_sion/d75cb761-e71f-46c3-a6e6-64ff9ff526de-container.json new file mode 100644 index 0000000..9d7bb0b --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d75cb761-e71f-46c3-a6e6-64ff9ff526de-container.json @@ -0,0 +1 @@ +{"uuid": "a774eb94-c9c5-47c5-a977-81e1ef9c5318", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509875302, "stop": 1725509875302}], "start": 1725509875302, "stop": 1725509875334} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d773a47f-4e85-43f5-ac2f-b580a7622f66-container.json b/apiAutoTest_v3/report/html/allure_sion/d773a47f-4e85-43f5-ac2f-b580a7622f66-container.json new file mode 100644 index 0000000..aed32b9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d773a47f-4e85-43f5-ac2f-b580a7622f66-container.json @@ -0,0 +1 @@ +{"uuid": "d1079138-bb4e-459a-bc7b-592e5ecdb7c3", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875081, "stop": 1725509875124} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d7cce177-c8ff-4953-b534-b42e5aafdbaa-container.json b/apiAutoTest_v3/report/html/allure_sion/d7cce177-c8ff-4953-b534-b42e5aafdbaa-container.json new file mode 100644 index 0000000..37c72cd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d7cce177-c8ff-4953-b534-b42e5aafdbaa-container.json @@ -0,0 +1 @@ +{"uuid": "9c351b9c-eecb-47c7-9ed9-ad7d06964bf3", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875342, "stop": 1725509875342}], "start": 1725509875342, "stop": 1725509875398} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d8b3bfd6-30c0-4291-b61b-71105347deba-result.json b/apiAutoTest_v3/report/html/allure_sion/d8b3bfd6-30c0-4291-b61b-71105347deba-result.json new file mode 100644 index 0000000..663fdba --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d8b3bfd6-30c0-4291-b61b-71105347deba-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "89d3fa52-0736-41b4-99c3-c7ae18cd2a5f-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875031, "stop": 1725509875058, "uuid": "4bd1a1e9-7b16-45c4-adde-46f218d2a0d9", "historyId": "fc03ee40552f426cfe867dad8cd957fd", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d8e15505-9c59-40f0-8d5c-29600502cf41-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/d8e15505-9c59-40f0-8d5c-29600502cf41-attachment.txt new file mode 100644 index 0000000..5bc81da --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d8e15505-9c59-40f0-8d5c-29600502cf41-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822863724544"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d921fa27-15cf-454f-a00b-e3ac960f91c9-container.json b/apiAutoTest_v3/report/html/allure_sion/d921fa27-15cf-454f-a00b-e3ac960f91c9-container.json new file mode 100644 index 0000000..247ec2f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d921fa27-15cf-454f-a00b-e3ac960f91c9-container.json @@ -0,0 +1 @@ +{"uuid": "ae90ae44-f2d2-42dd-bda3-31a2d8b85849", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509873975, "stop": 1725509873975}], "start": 1725509873975, "stop": 1725509874015} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d9c81a96-5d4b-4c08-a7f4-2d2b62949587-container.json b/apiAutoTest_v3/report/html/allure_sion/d9c81a96-5d4b-4c08-a7f4-2d2b62949587-container.json new file mode 100644 index 0000000..ff39c0c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d9c81a96-5d4b-4c08-a7f4-2d2b62949587-container.json @@ -0,0 +1 @@ +{"uuid": "8bd9274c-6d06-41ae-898a-dd2bc3225fc2", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875302, "stop": 1725509875302}], "start": 1725509875302, "stop": 1725509875336} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/d9e6fd3b-ff06-46c7-b2db-8169a4a5c669-container.json b/apiAutoTest_v3/report/html/allure_sion/d9e6fd3b-ff06-46c7-b2db-8169a4a5c669-container.json new file mode 100644 index 0000000..1a81632 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/d9e6fd3b-ff06-46c7-b2db-8169a4a5c669-container.json @@ -0,0 +1 @@ +{"uuid": "d856c267-9d93-4bd6-8c56-a6f0196b2ef0", "befores": [{"name": "mime", "status": "passed", "start": 1725509874608, "stop": 1725509874608}], "start": 1725509874608, "stop": 1725509874653} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/dac9e07e-9d74-44d9-9225-675c3eee92ad-container.json b/apiAutoTest_v3/report/html/allure_sion/dac9e07e-9d74-44d9-9225-675c3eee92ad-container.json new file mode 100644 index 0000000..e114454 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/dac9e07e-9d74-44d9-9225-675c3eee92ad-container.json @@ -0,0 +1 @@ +{"uuid": "24419093-29d4-47ee-97bc-17d80b339c1c", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509873837, "stop": 1725509873837}], "start": 1725509873837, "stop": 1725509873912} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/dc83d3b9-ce21-4a5f-b120-9efa9876be64-container.json b/apiAutoTest_v3/report/html/allure_sion/dc83d3b9-ce21-4a5f-b120-9efa9876be64-container.json new file mode 100644 index 0000000..997e1a8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/dc83d3b9-ce21-4a5f-b120-9efa9876be64-container.json @@ -0,0 +1 @@ +{"uuid": "3aaaf574-cbd7-4fe5-a239-59c4a1af06a5", "befores": [{"name": "mime", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874392} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/dc99db38-31d5-40ce-bcd8-9020a0445ec4-result.json b/apiAutoTest_v3/report/html/allure_sion/dc99db38-31d5-40ce-bcd8-9020a0445ec4-result.json new file mode 100644 index 0000000..a22af5d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/dc99db38-31d5-40ce-bcd8-9020a0445ec4-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "47a467f3-117a-4d99-a055-bee564874b27-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': '#!$!@#!@#'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874568, "stop": 1725509874598, "uuid": "5bca2cfb-7e48-4e15-9326-af1a219a1728", "historyId": "f3de7943a90f208dcf1743488a8f191d", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/dd278a64-494e-4a12-8d90-8ab2e489a802-container.json b/apiAutoTest_v3/report/html/allure_sion/dd278a64-494e-4a12-8d90-8ab2e489a802-container.json new file mode 100644 index 0000000..354b1dd --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/dd278a64-494e-4a12-8d90-8ab2e489a802-container.json @@ -0,0 +1 @@ +{"uuid": "030f51fc-d8c7-47d9-83bb-fcac6a253693", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874348, "stop": 1725509874348}], "start": 1725509874348, "stop": 1725509874391} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/dd81b04f-cf14-4f34-ab9a-db39445a712d-container.json b/apiAutoTest_v3/report/html/allure_sion/dd81b04f-cf14-4f34-ab9a-db39445a712d-container.json new file mode 100644 index 0000000..bfd6dba --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/dd81b04f-cf14-4f34-ab9a-db39445a712d-container.json @@ -0,0 +1 @@ +{"uuid": "a025d813-dbb9-458f-982b-0bf1c627df73", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874399, "stop": 1725509874399}], "start": 1725509874399, "stop": 1725509874452} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/deade760-e58a-4b34-be60-3a2041ebd11a-container.json b/apiAutoTest_v3/report/html/allure_sion/deade760-e58a-4b34-be60-3a2041ebd11a-container.json new file mode 100644 index 0000000..4077952 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/deade760-e58a-4b34-be60-3a2041ebd11a-container.json @@ -0,0 +1 @@ +{"uuid": "1e7375b4-20b2-4e54-a383-82ef502bcf8a", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874936, "stop": 1725509874936}], "start": 1725509874936, "stop": 1725509874973} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e1f56acd-c569-431c-9367-bfc1788220fb-container.json b/apiAutoTest_v3/report/html/allure_sion/e1f56acd-c569-431c-9367-bfc1788220fb-container.json new file mode 100644 index 0000000..1e540ad --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e1f56acd-c569-431c-9367-bfc1788220fb-container.json @@ -0,0 +1 @@ +{"uuid": "862996ee-6176-42e1-ae18-dfccc41cbc0f", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873920, "stop": 1725509873968} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e218acec-8cf6-4ba3-9b87-ee4104712266-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/e218acec-8cf6-4ba3-9b87-ee4104712266-attachment.txt new file mode 100644 index 0000000..dca7ecf --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e218acec-8cf6-4ba3-9b87-ee4104712266-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546822989553664"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e2f8a8ad-6b71-440e-a4ee-c08ac2e33e26-container.json b/apiAutoTest_v3/report/html/allure_sion/e2f8a8ad-6b71-440e-a4ee-c08ac2e33e26-container.json new file mode 100644 index 0000000..42546c3 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e2f8a8ad-6b71-440e-a4ee-c08ac2e33e26-container.json @@ -0,0 +1 @@ +{"uuid": "8c641461-ea9c-4a6a-b4c1-f33c1b27f98f", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874399, "stop": 1725509874399}], "start": 1725509874399, "stop": 1725509874441} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e44fd45a-6fcd-4b0b-b2d2-610869409bfe-container.json b/apiAutoTest_v3/report/html/allure_sion/e44fd45a-6fcd-4b0b-b2d2-610869409bfe-container.json new file mode 100644 index 0000000..2bc95ac --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e44fd45a-6fcd-4b0b-b2d2-610869409bfe-container.json @@ -0,0 +1 @@ +{"uuid": "58ffd779-1767-4374-9921-58b77a63cebc", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874462, "stop": 1725509874462}], "start": 1725509874462, "stop": 1725509874515} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e4c7143f-d9fe-4ff9-b167-1d2e4095f321-container.json b/apiAutoTest_v3/report/html/allure_sion/e4c7143f-d9fe-4ff9-b167-1d2e4095f321-container.json new file mode 100644 index 0000000..2512e86 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e4c7143f-d9fe-4ff9-b167-1d2e4095f321-container.json @@ -0,0 +1 @@ +{"uuid": "a015bb0e-f52a-40ab-b076-3fc55aa12905", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873920, "stop": 1725509873967} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e58cd3c6-65b9-4d6f-848c-053d02f06404-container.json b/apiAutoTest_v3/report/html/allure_sion/e58cd3c6-65b9-4d6f-848c-053d02f06404-container.json new file mode 100644 index 0000000..ad96e01 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e58cd3c6-65b9-4d6f-848c-053d02f06404-container.json @@ -0,0 +1 @@ +{"uuid": "54db544c-0a87-4073-855a-bee075b7fe33", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875030, "stop": 1725509875030}], "start": 1725509875030, "stop": 1725509875074} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e5ec472d-2933-44af-9820-075fcdde3cf6-container.json b/apiAutoTest_v3/report/html/allure_sion/e5ec472d-2933-44af-9820-075fcdde3cf6-container.json new file mode 100644 index 0000000..873470c --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e5ec472d-2933-44af-9820-075fcdde3cf6-container.json @@ -0,0 +1 @@ +{"uuid": "df671dc7-9271-4046-9ca8-a810a3b0865a", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509873838, "stop": 1725509873838}], "start": 1725509873838, "stop": 1725509873902} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e907567e-b2f1-443f-97fe-60b886bc265b-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/e907567e-b2f1-443f-97fe-60b886bc265b-attachment.txt new file mode 100644 index 0000000..d885d45 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e907567e-b2f1-443f-97fe-60b886bc265b-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e99f3d6b-2c99-40eb-ab52-cc644da410a4-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/e99f3d6b-2c99-40eb-ab52-cc644da410a4-attachment.txt new file mode 100644 index 0000000..67a84d8 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e99f3d6b-2c99-40eb-ab52-cc644da410a4-attachment.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/e9c716d0-1fa2-4e38-a122-3095445171ed-container.json b/apiAutoTest_v3/report/html/allure_sion/e9c716d0-1fa2-4e38-a122-3095445171ed-container.json new file mode 100644 index 0000000..702d657 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/e9c716d0-1fa2-4e38-a122-3095445171ed-container.json @@ -0,0 +1 @@ +{"uuid": "021710ff-7746-4256-8dcc-bee839778e41", "befores": [{"name": "method", "status": "passed", "start": 1725509873792, "stop": 1725509873792}], "start": 1725509873792, "stop": 1725509873833} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ea95ee18-b4cd-4abd-ab69-21e49fe557c5-container.json b/apiAutoTest_v3/report/html/allure_sion/ea95ee18-b4cd-4abd-ab69-21e49fe557c5-container.json new file mode 100644 index 0000000..883003f --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ea95ee18-b4cd-4abd-ab69-21e49fe557c5-container.json @@ -0,0 +1 @@ +{"uuid": "5dfb399b-aadb-4dca-9cf5-1a379910e6bb", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509874199, "stop": 1725509874199}], "start": 1725509874198, "stop": 1725509874232} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/eab6d221-6c2b-480e-887f-0c6b67b61b6e-result.json b/apiAutoTest_v3/report/html/allure_sion/eab6d221-6c2b-480e-887f-0c6b67b61b6e-result.json new file mode 100644 index 0000000..0707b41 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/eab6d221-6c2b-480e-887f-0c6b67b61b6e-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "12fd06e2-fba0-4e97-bc71-78dc4ac2f495-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509875131, "stop": 1725509875157, "uuid": "7b394fb4-02f8-4a3b-910c-cc6907718049", "historyId": "878a8b6a3f33c260878ce369810ee073", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/eaf1b213-72bc-4b9c-8faa-cc46be0eff56-container.json b/apiAutoTest_v3/report/html/allure_sion/eaf1b213-72bc-4b9c-8faa-cc46be0eff56-container.json new file mode 100644 index 0000000..675b5c9 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/eaf1b213-72bc-4b9c-8faa-cc46be0eff56-container.json @@ -0,0 +1 @@ +{"uuid": "77224ead-4b3a-41a2-a028-c347401ec4e8", "befores": [{"name": "url", "status": "passed", "start": 1725509874935, "stop": 1725509874935}], "start": 1725509874935, "stop": 1725509874976} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ebfd9e99-535a-4ad0-a585-53e1552b2b39-container.json b/apiAutoTest_v3/report/html/allure_sion/ebfd9e99-535a-4ad0-a585-53e1552b2b39-container.json new file mode 100644 index 0000000..5849dee --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ebfd9e99-535a-4ad0-a585-53e1552b2b39-container.json @@ -0,0 +1 @@ +{"uuid": "ba070870-e6ab-46fc-af04-ae940e5fd942", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875261, "stop": 1725509875261}], "start": 1725509875261, "stop": 1725509875294} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ec371f6a-7e3a-43de-a38e-85eed8d16316-container.json b/apiAutoTest_v3/report/html/allure_sion/ec371f6a-7e3a-43de-a38e-85eed8d16316-container.json new file mode 100644 index 0000000..fd13453 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ec371f6a-7e3a-43de-a38e-85eed8d16316-container.json @@ -0,0 +1 @@ +{"uuid": "2330174c-b1f7-416c-b396-183ce6e95c62", "befores": [{"name": "update_key", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873920, "stop": 1725509873966} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ec9b1bdd-b7f3-470d-89ac-6304aa82f061-container.json b/apiAutoTest_v3/report/html/allure_sion/ec9b1bdd-b7f3-470d-89ac-6304aa82f061-container.json new file mode 100644 index 0000000..7d8fb87 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ec9b1bdd-b7f3-470d-89ac-6304aa82f061-container.json @@ -0,0 +1 @@ +{"uuid": "41338d60-b3c3-49e7-9abd-942d859fb88a", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874609, "stop": 1725509874609}], "start": 1725509874609, "stop": 1725509874642} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ed642336-ea6c-4441-b4c3-2ba349d91815-container.json b/apiAutoTest_v3/report/html/allure_sion/ed642336-ea6c-4441-b4c3-2ba349d91815-container.json new file mode 100644 index 0000000..506d333 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ed642336-ea6c-4441-b4c3-2ba349d91815-container.json @@ -0,0 +1 @@ +{"uuid": "75edd730-ac24-43b6-b254-e8c2905c9b24", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509874936, "stop": 1725509874936}], "start": 1725509874936, "stop": 1725509874973} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ed930418-8b84-4a10-a982-00d23b56d78f-container.json b/apiAutoTest_v3/report/html/allure_sion/ed930418-8b84-4a10-a982-00d23b56d78f-container.json new file mode 100644 index 0000000..061c58d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ed930418-8b84-4a10-a982-00d23b56d78f-container.json @@ -0,0 +1 @@ +{"uuid": "79ca5d85-e38d-4e69-8549-943c347d854e", "befores": [{"name": "method", "status": "passed", "start": 1725509874935, "stop": 1725509874935}], "start": 1725509874935, "stop": 1725509874975} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/edd36e24-62a0-4363-9ec7-6d622d487041-result.json b/apiAutoTest_v3/report/html/allure_sion/edd36e24-62a0-4363-9ec7-6d622d487041-result.json new file mode 100644 index 0000000..1df93d4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/edd36e24-62a0-4363-9ec7-6d622d487041-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "6b698673-6827-471f-b3f0-3e694954b030-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': ''}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874526, "stop": 1725509874557, "uuid": "19062a21-71e6-4646-a836-3a7dc87236ce", "historyId": "9cdfc96e3129cbb4c7fa5ec8d0c6d4f1", "testCaseId": "76d35760a932e639b00339c72f742819", "fullName": "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lao_zhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lao_zhang.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ee13ed60-837c-485c-a72f-37845f7a5fbb-container.json b/apiAutoTest_v3/report/html/allure_sion/ee13ed60-837c-485c-a72f-37845f7a5fbb-container.json new file mode 100644 index 0000000..54a0168 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ee13ed60-837c-485c-a72f-37845f7a5fbb-container.json @@ -0,0 +1 @@ +{"uuid": "ea71953a-0a2a-403a-9cb4-83b061ef93cb", "befores": [{"name": "url", "status": "passed", "start": 1725509874705, "stop": 1725509874705}], "start": 1725509874705, "stop": 1725509874768} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ee5163d6-9720-444d-844c-e049ec9640a7-container.json b/apiAutoTest_v3/report/html/allure_sion/ee5163d6-9720-444d-844c-e049ec9640a7-container.json new file mode 100644 index 0000000..149aa69 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ee5163d6-9720-444d-844c-e049ec9640a7-container.json @@ -0,0 +1 @@ +{"uuid": "cc59edd5-a0cc-43c9-838a-a88b578d45aa", "befores": [{"name": "method", "status": "passed", "start": 1725509875080, "stop": 1725509875080}], "start": 1725509875080, "stop": 1725509875125} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/eed258ba-976a-4d73-8cf4-d00f0ea01be5-container.json b/apiAutoTest_v3/report/html/allure_sion/eed258ba-976a-4d73-8cf4-d00f0ea01be5-container.json new file mode 100644 index 0000000..12270ee --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/eed258ba-976a-4d73-8cf4-d00f0ea01be5-container.json @@ -0,0 +1 @@ +{"uuid": "50b23217-1426-4023-8141-d754fdee7378", "befores": [{"name": "sql_data", "status": "passed", "start": 1725509873793, "stop": 1725509873793}], "start": 1725509873793, "stop": 1725509873830} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ef37e243-d29e-4e4f-aff0-cb1335dd5181-container.json b/apiAutoTest_v3/report/html/allure_sion/ef37e243-d29e-4e4f-aff0-cb1335dd5181-container.json new file mode 100644 index 0000000..cb2281e --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ef37e243-d29e-4e4f-aff0-cb1335dd5181-container.json @@ -0,0 +1 @@ +{"uuid": "c88afe06-5612-46da-b748-d4b269749b0e", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874819} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ef984d4b-1a8c-4cc4-8a3a-7b2cb7e96a7b-container.json b/apiAutoTest_v3/report/html/allure_sion/ef984d4b-1a8c-4cc4-8a3a-7b2cb7e96a7b-container.json new file mode 100644 index 0000000..845e0e0 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ef984d4b-1a8c-4cc4-8a3a-7b2cb7e96a7b-container.json @@ -0,0 +1 @@ +{"uuid": "70a59917-566b-434c-a44b-8c693a2098a2", "befores": [{"name": "method", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874238} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/efc9d027-455b-4bec-9e7e-f71c8d66fb68-container.json b/apiAutoTest_v3/report/html/allure_sion/efc9d027-455b-4bec-9e7e-f71c8d66fb68-container.json new file mode 100644 index 0000000..5a36c7d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/efc9d027-455b-4bec-9e7e-f71c8d66fb68-container.json @@ -0,0 +1 @@ +{"uuid": "24158b06-2c25-4107-9ff6-baedc6a0280f", "befores": [{"name": "mime", "status": "passed", "start": 1725509873792, "stop": 1725509873792}], "start": 1725509873792, "stop": 1725509873832} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/f4d99754-1573-470d-aa8c-8b163dc15982-attachment.txt b/apiAutoTest_v3/report/html/allure_sion/f4d99754-1573-470d-aa8c-8b163dc15982-attachment.txt new file mode 100644 index 0000000..5565013 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/f4d99754-1573-470d-aa8c-8b163dc15982-attachment.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/f5261e59-510a-48cd-800b-cdbf30420e0c-container.json b/apiAutoTest_v3/report/html/allure_sion/f5261e59-510a-48cd-800b-cdbf30420e0c-container.json new file mode 100644 index 0000000..0c787e4 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/f5261e59-510a-48cd-800b-cdbf30420e0c-container.json @@ -0,0 +1 @@ +{"uuid": "908faab9-b8e1-4f5e-910a-3acb8bfbe34f", "befores": [{"name": "expect_data", "status": "passed", "start": 1725509875081, "stop": 1725509875081}], "start": 1725509875081, "stop": 1725509875123} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/f61598b3-0650-46a5-84fc-ab98bf138b2d-container.json b/apiAutoTest_v3/report/html/allure_sion/f61598b3-0650-46a5-84fc-ab98bf138b2d-container.json new file mode 100644 index 0000000..89de9f1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/f61598b3-0650-46a5-84fc-ab98bf138b2d-container.json @@ -0,0 +1 @@ +{"uuid": "5a2bca86-9ec4-4430-9fb5-b2505aab6591", "befores": [{"name": "mime", "status": "passed", "start": 1725509873920, "stop": 1725509873920}], "start": 1725509873919, "stop": 1725509873970} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/f75f9f1b-ef5d-42ea-9308-5f423c18f61c-container.json b/apiAutoTest_v3/report/html/allure_sion/f75f9f1b-ef5d-42ea-9308-5f423c18f61c-container.json new file mode 100644 index 0000000..80fc1aa --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/f75f9f1b-ef5d-42ea-9308-5f423c18f61c-container.json @@ -0,0 +1 @@ +{"uuid": "e5b82337-45a4-44ed-924a-9da7da0be243", "befores": [{"name": "update_key", "status": "passed", "start": 1725509874243, "stop": 1725509874243}], "start": 1725509874243, "stop": 1725509874279} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/f9180d5a-010d-4176-9149-5dac944e1142-container.json b/apiAutoTest_v3/report/html/allure_sion/f9180d5a-010d-4176-9149-5dac944e1142-container.json new file mode 100644 index 0000000..d08a5ca --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/f9180d5a-010d-4176-9149-5dac944e1142-container.json @@ -0,0 +1 @@ +{"uuid": "451071b2-c678-461c-b8dc-0caac2a2f32c", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874659, "stop": 1725509874659}], "start": 1725509874659, "stop": 1725509874699} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fa22c706-d476-4a97-89b9-4fd270daa3db-container.json b/apiAutoTest_v3/report/html/allure_sion/fa22c706-d476-4a97-89b9-4fd270daa3db-container.json new file mode 100644 index 0000000..097da7d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fa22c706-d476-4a97-89b9-4fd270daa3db-container.json @@ -0,0 +1 @@ +{"uuid": "576971ba-73c9-4d36-a3e3-7a59d54a7f7b", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509875181, "stop": 1725509875181}], "start": 1725509875181, "stop": 1725509875213} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fbb6ac54-15c1-448f-8817-8c405edbd947-container.json b/apiAutoTest_v3/report/html/allure_sion/fbb6ac54-15c1-448f-8817-8c405edbd947-container.json new file mode 100644 index 0000000..1c53183 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fbb6ac54-15c1-448f-8817-8c405edbd947-container.json @@ -0,0 +1 @@ +{"uuid": "b8215dec-013b-4fa8-af6f-d1211f4b5d1e", "befores": [{"name": "mime", "status": "passed", "start": 1725509874198, "stop": 1725509874198}], "start": 1725509874198, "stop": 1725509874237} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fbf14f6a-02ac-4692-b416-bff15aea8e33-container.json b/apiAutoTest_v3/report/html/allure_sion/fbf14f6a-02ac-4692-b416-bff15aea8e33-container.json new file mode 100644 index 0000000..85354c6 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fbf14f6a-02ac-4692-b416-bff15aea8e33-container.json @@ -0,0 +1 @@ +{"uuid": "88f4c499-cdaa-471c-91e8-947beb9df775", "befores": [{"name": "case_data", "status": "passed", "start": 1725509875130, "stop": 1725509875130}], "start": 1725509875130, "stop": 1725509875172} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fd01e590-0142-47d0-b8aa-fb070e404290-result.json b/apiAutoTest_v3/report/html/allure_sion/fd01e590-0142-47d0-b8aa-fb070e404290-result.json new file mode 100644 index 0000000..5298f0d --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fd01e590-0142-47d0-b8aa-fb070e404290-result.json @@ -0,0 +1 @@ +{"name": "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError"}, "attachments": [{"name": "log", "source": "aa328651-5ef4-450e-b05e-851043d6db2b-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1725509874936, "stop": 1725509874957, "uuid": "4f140660-245b-4efb-9908-5bb18fd29495", "historyId": "20a9dde76564254d92ac1acd705592d1", "testCaseId": "30413c9ad577094fd4f26156c81f01f9", "fullName": "test_case.test_lisi.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_lisi"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-4FFIKGU"}, {"name": "thread", "value": "17444-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_lisi.test_bpm"}]} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fe56bfa9-1864-46b3-83f1-8b0f7d310237-container.json b/apiAutoTest_v3/report/html/allure_sion/fe56bfa9-1864-46b3-83f1-8b0f7d310237-container.json new file mode 100644 index 0000000..658bd84 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fe56bfa9-1864-46b3-83f1-8b0f7d310237-container.json @@ -0,0 +1 @@ +{"uuid": "2d2cb67f-339b-46d9-a459-989a562dc98c", "befores": [{"name": "sql_type", "status": "passed", "start": 1725509874782, "stop": 1725509874782}], "start": 1725509874782, "stop": 1725509874818} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/fe94974c-1504-4017-ab21-946cf511a2a8-container.json b/apiAutoTest_v3/report/html/allure_sion/fe94974c-1504-4017-ab21-946cf511a2a8-container.json new file mode 100644 index 0000000..8cdd7e1 --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/fe94974c-1504-4017-ab21-946cf511a2a8-container.json @@ -0,0 +1 @@ +{"uuid": "e56577fb-5e84-4ab1-9716-0c37cf549b13", "befores": [{"name": "case_data", "status": "passed", "start": 1725509874896, "stop": 1725509874896}], "start": 1725509874896, "stop": 1725509874929} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/allure_sion/ff0e5bed-35e7-411c-9f3e-a9424221867f-container.json b/apiAutoTest_v3/report/html/allure_sion/ff0e5bed-35e7-411c-9f3e-a9424221867f-container.json new file mode 100644 index 0000000..5f7c6ae --- /dev/null +++ b/apiAutoTest_v3/report/html/allure_sion/ff0e5bed-35e7-411c-9f3e-a9424221867f-container.json @@ -0,0 +1 @@ +{"uuid": "f205520b-9d21-4a9c-a890-3759dbe8ef33", "befores": [{"name": "url", "status": "passed", "start": 1725509874608, "stop": 1725509874608}], "start": 1725509874608, "stop": 1725509874655} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/assets/style.css b/apiAutoTest_v3/report/html/assets/style.css new file mode 100644 index 0000000..561524c --- /dev/null +++ b/apiAutoTest_v3/report/html/assets/style.css @@ -0,0 +1,319 @@ +body { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + /* do not increase min-width as some may use split screens */ + min-width: 800px; + color: #999; +} + +h1 { + font-size: 24px; + color: black; +} + +h2 { + font-size: 16px; + color: black; +} + +p { + color: black; +} + +a { + color: #999; +} + +table { + border-collapse: collapse; +} + +/****************************** + * SUMMARY INFORMATION + ******************************/ +#environment td { + padding: 5px; + border: 1px solid #e6e6e6; + vertical-align: top; +} +#environment tr:nth-child(odd) { + background-color: #f6f6f6; +} +#environment ul { + margin: 0; + padding: 0 20px; +} + +/****************************** + * TEST RESULT COLORS + ******************************/ +span.passed, +.passed .col-result { + color: green; +} + +span.skipped, +span.xfailed, +span.rerun, +.skipped .col-result, +.xfailed .col-result, +.rerun .col-result { + color: orange; +} + +span.error, +span.failed, +span.xpassed, +.error .col-result, +.failed .col-result, +.xpassed .col-result { + color: red; +} + +.col-links__extra { + margin-right: 3px; +} + +/****************************** + * RESULTS TABLE + * + * 1. Table Layout + * 2. Extra + * 3. Sorting items + * + ******************************/ +/*------------------ + * 1. Table Layout + *------------------*/ +#results-table { + border: 1px solid #e6e6e6; + color: #999; + font-size: 12px; + width: 100%; +} +#results-table th, +#results-table td { + padding: 5px; + border: 1px solid #e6e6e6; + text-align: left; +} +#results-table th { + font-weight: bold; +} + +/*------------------ + * 2. Extra + *------------------*/ +.logwrapper { + max-height: 230px; + overflow-y: scroll; + background-color: #e6e6e6; +} +.logwrapper.expanded { + max-height: none; +} +.logwrapper.expanded .logexpander:after { + content: "collapse [-]"; +} +.logwrapper .logexpander { + z-index: 1; + position: sticky; + top: 10px; + width: max-content; + border: 1px solid; + border-radius: 3px; + padding: 5px 7px; + margin: 10px 0 10px calc(100% - 80px); + cursor: pointer; + background-color: #e6e6e6; +} +.logwrapper .logexpander:after { + content: "expand [+]"; +} +.logwrapper .logexpander:hover { + color: #000; + border-color: #000; +} +.logwrapper .log { + min-height: 40px; + position: relative; + top: -50px; + height: calc(100% + 50px); + border: 1px solid #e6e6e6; + color: black; + display: block; + font-family: "Courier New", Courier, monospace; + padding: 5px; + padding-right: 80px; + white-space: pre-wrap; +} + +div.media { + border: 1px solid #e6e6e6; + float: right; + height: 240px; + margin: 0 5px; + overflow: hidden; + width: 320px; +} + +.media-container { + display: grid; + grid-template-columns: 25px auto 25px; + align-items: center; + flex: 1 1; + overflow: hidden; + height: 200px; +} + +.media-container--fullscreen { + grid-template-columns: 0px auto 0px; +} + +.media-container__nav--right, +.media-container__nav--left { + text-align: center; + cursor: pointer; +} + +.media-container__viewport { + cursor: pointer; + text-align: center; + height: inherit; +} +.media-container__viewport img, +.media-container__viewport video { + object-fit: cover; + width: 100%; + max-height: 100%; +} + +.media__name, +.media__counter { + display: flex; + flex-direction: row; + justify-content: space-around; + flex: 0 0 25px; + align-items: center; +} + +.collapsible td:not(.col-links) { + cursor: pointer; +} +.collapsible td:not(.col-links):hover::after { + color: #bbb; + font-style: italic; + cursor: pointer; +} + +.col-result { + width: 130px; +} +.col-result:hover::after { + content: " (hide details)"; +} + +.col-result.collapsed:hover::after { + content: " (show details)"; +} + +#environment-header h2:hover::after { + content: " (hide details)"; + color: #bbb; + font-style: italic; + cursor: pointer; + font-size: 12px; +} + +#environment-header.collapsed h2:hover::after { + content: " (show details)"; + color: #bbb; + font-style: italic; + cursor: pointer; + font-size: 12px; +} + +/*------------------ + * 3. Sorting items + *------------------*/ +.sortable { + cursor: pointer; +} +.sortable.desc:after { + content: " "; + position: relative; + left: 5px; + bottom: -12.5px; + border: 10px solid #4caf50; + border-bottom: 0; + border-left-color: transparent; + border-right-color: transparent; +} +.sortable.asc:after { + content: " "; + position: relative; + left: 5px; + bottom: 12.5px; + border: 10px solid #4caf50; + border-top: 0; + border-left-color: transparent; + border-right-color: transparent; +} + +.hidden, .summary__reload__button.hidden { + display: none; +} + +.summary__data { + flex: 0 0 550px; +} +.summary__reload { + flex: 1 1; + display: flex; + justify-content: center; +} +.summary__reload__button { + flex: 0 0 300px; + display: flex; + color: white; + font-weight: bold; + background-color: #4caf50; + text-align: center; + justify-content: center; + align-items: center; + border-radius: 3px; + cursor: pointer; +} +.summary__reload__button:hover { + background-color: #46a049; +} +.summary__spacer { + flex: 0 0 550px; +} + +.controls { + display: flex; + justify-content: space-between; +} + +.filters, +.collapse { + display: flex; + align-items: center; +} +.filters button, +.collapse button { + color: #999; + border: none; + background: none; + cursor: pointer; + text-decoration: underline; +} +.filters button:hover, +.collapse button:hover { + color: #ccc; +} + +.filter__label { + margin-right: 10px; +} diff --git a/apiAutoTest_v3/report/html/bpm.html b/apiAutoTest_v3/report/html/bpm.html new file mode 100644 index 0000000..57a8771 --- /dev/null +++ b/apiAutoTest_v3/report/html/bpm.html @@ -0,0 +1,1091 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"/> + <title id="head-title">bpm.html</title> + <style type="text/css">body { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + /* do not increase min-width as some may use split screens */ + min-width: 800px; + color: #999; +} + +h1 { + font-size: 24px; + color: black; +} + +h2 { + font-size: 16px; + color: black; +} + +p { + color: black; +} + +a { + color: #999; +} + +table { + border-collapse: collapse; +} + +/****************************** + * SUMMARY INFORMATION + ******************************/ +#environment td { + padding: 5px; + border: 1px solid #e6e6e6; + vertical-align: top; +} +#environment tr:nth-child(odd) { + background-color: #f6f6f6; +} +#environment ul { + margin: 0; + padding: 0 20px; +} + +/****************************** + * TEST RESULT COLORS + ******************************/ +span.passed, +.passed .col-result { + color: green; +} + +span.skipped, +span.xfailed, +span.rerun, +.skipped .col-result, +.xfailed .col-result, +.rerun .col-result { + color: orange; +} + +span.error, +span.failed, +span.xpassed, +.error .col-result, +.failed .col-result, +.xpassed .col-result { + color: red; +} + +.col-links__extra { + margin-right: 3px; +} + +/****************************** + * RESULTS TABLE + * + * 1. Table Layout + * 2. Extra + * 3. Sorting items + * + ******************************/ +/*------------------ + * 1. Table Layout + *------------------*/ +#results-table { + border: 1px solid #e6e6e6; + color: #999; + font-size: 12px; + width: 100%; +} +#results-table th, +#results-table td { + padding: 5px; + border: 1px solid #e6e6e6; + text-align: left; +} +#results-table th { + font-weight: bold; +} + +/*------------------ + * 2. Extra + *------------------*/ +.logwrapper { + max-height: 230px; + overflow-y: scroll; + background-color: #e6e6e6; +} +.logwrapper.expanded { + max-height: none; +} +.logwrapper.expanded .logexpander:after { + content: "collapse [-]"; +} +.logwrapper .logexpander { + z-index: 1; + position: sticky; + top: 10px; + width: max-content; + border: 1px solid; + border-radius: 3px; + padding: 5px 7px; + margin: 10px 0 10px calc(100% - 80px); + cursor: pointer; + background-color: #e6e6e6; +} +.logwrapper .logexpander:after { + content: "expand [+]"; +} +.logwrapper .logexpander:hover { + color: #000; + border-color: #000; +} +.logwrapper .log { + min-height: 40px; + position: relative; + top: -50px; + height: calc(100% + 50px); + border: 1px solid #e6e6e6; + color: black; + display: block; + font-family: "Courier New", Courier, monospace; + padding: 5px; + padding-right: 80px; + white-space: pre-wrap; +} + +div.media { + border: 1px solid #e6e6e6; + float: right; + height: 240px; + margin: 0 5px; + overflow: hidden; + width: 320px; +} + +.media-container { + display: grid; + grid-template-columns: 25px auto 25px; + align-items: center; + flex: 1 1; + overflow: hidden; + height: 200px; +} + +.media-container--fullscreen { + grid-template-columns: 0px auto 0px; +} + +.media-container__nav--right, +.media-container__nav--left { + text-align: center; + cursor: pointer; +} + +.media-container__viewport { + cursor: pointer; + text-align: center; + height: inherit; +} +.media-container__viewport img, +.media-container__viewport video { + object-fit: cover; + width: 100%; + max-height: 100%; +} + +.media__name, +.media__counter { + display: flex; + flex-direction: row; + justify-content: space-around; + flex: 0 0 25px; + align-items: center; +} + +.collapsible td:not(.col-links) { + cursor: pointer; +} +.collapsible td:not(.col-links):hover::after { + color: #bbb; + font-style: italic; + cursor: pointer; +} + +.col-result { + width: 130px; +} +.col-result:hover::after { + content: " (hide details)"; +} + +.col-result.collapsed:hover::after { + content: " (show details)"; +} + +#environment-header h2:hover::after { + content: " (hide details)"; + color: #bbb; + font-style: italic; + cursor: pointer; + font-size: 12px; +} + +#environment-header.collapsed h2:hover::after { + content: " (show details)"; + color: #bbb; + font-style: italic; + cursor: pointer; + font-size: 12px; +} + +/*------------------ + * 3. Sorting items + *------------------*/ +.sortable { + cursor: pointer; +} +.sortable.desc:after { + content: " "; + position: relative; + left: 5px; + bottom: -12.5px; + border: 10px solid #4caf50; + border-bottom: 0; + border-left-color: transparent; + border-right-color: transparent; +} +.sortable.asc:after { + content: " "; + position: relative; + left: 5px; + bottom: 12.5px; + border: 10px solid #4caf50; + border-top: 0; + border-left-color: transparent; + border-right-color: transparent; +} + +.hidden, .summary__reload__button.hidden { + display: none; +} + +.summary__data { + flex: 0 0 550px; +} +.summary__reload { + flex: 1 1; + display: flex; + justify-content: center; +} +.summary__reload__button { + flex: 0 0 300px; + display: flex; + color: white; + font-weight: bold; + background-color: #4caf50; + text-align: center; + justify-content: center; + align-items: center; + border-radius: 3px; + cursor: pointer; +} +.summary__reload__button:hover { + background-color: #46a049; +} +.summary__spacer { + flex: 0 0 550px; +} + +.controls { + display: flex; + justify-content: space-between; +} + +.filters, +.collapse { + display: flex; + align-items: center; +} +.filters button, +.collapse button { + color: #999; + border: none; + background: none; + cursor: pointer; + text-decoration: underline; +} +.filters button:hover, +.collapse button:hover { + color: #ccc; +} + +.filter__label { + margin-right: 10px; +} + + </style> + + </head> + <body> + <h1 id="title">bpm.html</h1> + <p>Report generated on 05-Sep-2024 at 11:29:45 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> + v4.1.1</p> + <div id="environment-header"> + <h2>Environment</h2> + </div> + <table id="environment"></table> + <!-- TEMPLATES --> + <template id="template_environment_row"> + <tr> + <td></td> + <td></td> + </tr> + </template> + <template id="template_results-table__body--empty"> + <tbody class="results-table-row"> + <tr id="not-found-message"> + <td colspan="4">No results found. Check the filters.</th> + </tr> + </template> + <template id="template_results-table__tbody"> + <tbody class="results-table-row"> + <tr class="collapsible"> + </tr> + <tr class="extras-row"> + <td class="extra" colspan="4"> + <div class="extraHTML"></div> + <div class="media"> + <div class="media-container"> + <div class="media-container__nav--left"><</div> + <div class="media-container__viewport"> + <img src="" /> + <video controls> + <source src="" type="video/mp4"> + </video> + </div> + <div class="media-container__nav--right">></div> + </div> + <div class="media__name"></div> + <div class="media__counter"></div> + </div> + <div class="logwrapper"> + <div class="logexpander"></div> + <div class="log"></div> + </div> + </td> + </tr> + </tbody> + </template> + <!-- END TEMPLATES --> + <div class="summary"> + <div class="summary__data"> + <h2>Summary</h2> + <div class="additional-summary prefix"> + </div> + <p class="run-count">31 tests took 00:00:05.</p> + <p class="filter">(Un)check the boxes to filter the results.</p> + <div class="summary__reload"> + <div class="summary__reload__button hidden" onclick="location.reload()"> + <div>There are still tests running. <br />Reload this page to get the latest results!</div> + </div> + </div> + <div class="summary__spacer"></div> + <div class="controls"> + <div class="filters"> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="failed" /> + <span class="failed">23 Failed,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="passed" /> + <span class="passed">8 Passed,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="skipped" disabled/> + <span class="skipped">0 Skipped,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xfailed" disabled/> + <span class="xfailed">0 Expected failures,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xpassed" disabled/> + <span class="xpassed">0 Unexpected passes,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="error" disabled/> + <span class="error">0 Errors,</span> + <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="rerun" /> + <span class="rerun">115 Reruns</span> + </div> + <div class="collapse"> + <button id="show_all_details">Show all details</button> / <button id="hide_all_details">Hide all details</button> + </div> + </div> + </div> + <div class="additional-summary summary"> + </div> + <div class="additional-summary postfix"> + </div> + </div> + <table id="results-table"> + <thead id="results-table-head"> + <tr> + <th class="sortable" data-column-type="result">Result</th> + <th class="sortable" data-column-type="testId">Test</th> + <th class="sortable" data-column-type="duration">Duration</th> + <th>Links</th> + </tr> + </thead> + </table> + </body> + <footer> + <div id="data-container" data-jsonblob="{"environment": {"Python": "3.12.4", "Platform": "Windows-10-10.0.17763-SP0", "Packages": {"pytest": "8.3.2", "pluggy": "1.5.0"}, "Plugins": {"Faker": "26.1.0", "dependency": "0.6.0", "html": "4.1.1", "metadata": "3.1.1", "ordering": "0.6", "rerunfailures": "14.0"}, "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_251"}, "tests": {"test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", "duration": "48 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]</td>", "<td class=\"col-duration\">48 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E45D7410&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/addDem&#x27;, method = &#x27;post&#x27;, mime = &#x27;application/json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = &#x27;delete&#x27;, sql_data = {&#x27;delete&#x27;: &#x27;dELETE FROM uc_demension WHERE `CODE_`=&quot;requestsAddDem&quot;;&#x27;}, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/addDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 1, &#x27;name&#x27;: &#x27;requests\u6dfb\u52a0\u7684\u7ef4\u5ea6&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27; == &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&#x27;\nE \nE - \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01\nE ? -\nE + \u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E458EF60&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/updateDem&#x27;, method = &#x27;put&#x27;, mime = &#x27;json&#x27;\ncase_data = {&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;requestsAddDem&#x27;, &#x27;description&#x27;: &#x27;requestsAddDem&#x27;, &#x27;isDefault&#x27;: 0, &#x27;name&#x27;: &#x27;requestsAddDem&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u66f4\u65b0\u7ef4\u5ea6\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", "duration": "65 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]</td>", "<td class=\"col-duration\">65 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27; == &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&#x27;\nE \nE - \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01\nE ? -\nE + \u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43A7F50&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;, url = &#x27;http://36.139.193.99:8088/api/org/v1/org/addOrg&#x27;\nmethod = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = {&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, ...}\nexpect_data = {&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, sql_type = &#x27;delete|select&#x27;\nsql_data = {&#x27;delete&#x27;: &#x27;delete from uc_org where CODE_=&quot;testAddOrg&quot;;&#x27;, &#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;; &#x27;}\nupdate_key = &#x27;demId&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/addOrg, \u7528\u4f8b\u6570\u636e:{&#x27;code&#x27;: &#x27;testAddOrg&#x27;, &#x27;demId&#x27;: &#x27;1831533284036288512&#x27;, &#x27;exceedLimitNum&#x27;: 0, &#x27;grade&#x27;: &#x27;&#x27;, &#x27;limitNum&#x27;: 0, &#x27;name&#x27;: &#x27;\u6d4b\u8bd5\u6dfb\u52a0\u7684\u7ec4\u7ec7&#x27;, &#x27;nowNum&#x27;: 0, &#x27;orderNo&#x27;: 0, &#x27;parentId&#x27;: &#x27;0&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u6dfb\u52a0\u7ec4\u7ec7\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", "duration": "39 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">39 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, \u7528\u4f8b\u6570\u636e:{&#x27;orgCode&#x27;: &#x27;testAddOrg&#x27;, &#x27;accounts&#x27;: &#x27;admin,guest&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u52a0\u5165\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u52a0\u5165\u6210\u529f&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, \u7528\u4f8b\u6570\u636e:{&#x27;query&#x27;: {&#x27;orgCode&#x27;: &#x27;testAddOrg&#x27;}, &#x27;body&#x27;: [{&#x27;alias&#x27;: &#x27;hxxmts&#x27;, &#x27;value&#x27;: &#x27;\u9879\u76ee\u4e2d\u6ca1\u6709\u5173\u7cfb\u6237&#x27;}]}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u4fdd\u5b58\u7ec4\u7ec7\u53c2\u6570\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u4fdd\u5b58\u7ec4\u7ec7\u53c2\u6570\u6210\u529f\uff01&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", "duration": "18 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">18 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE assert &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27; == &#x27;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&#x27;\nE \nE - \u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010&quot;testAddOrg&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b\nE + \u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AC2F0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/org/v1/org/deleteOrg&#x27;, method = &#x27;POST&#x27;, mime = &#x27;json&#x27;, case_data = &#x27;testAddOrg&#x27;, expect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, \u7528\u4f8b\u6570\u636e:testAddOrg, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ec4\u7ec7\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:true,&quot;message&quot;:&quot;\u90e8\u5206\u5220\u9664\u6210\u529f\uff0c\u5176\u4e2d\u7f16\u7801\u4e3a\u3010\\&quot;testAddOrg\\&quot;\u3011\u7684\u7ec4\u7ec7\u4e0d\u5b58\u5728\uff1b&quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", "duration": "41 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_demo/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]</td>", "<td class=\"col-duration\">41 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27; == &#x27;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &#x27;\nE \nE - \u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 \nE + \u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x00000208E43AD790&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E345ECF0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E468C560&gt;\nurl = &#x27;http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds&#x27;, method = &#x27;delete&#x27;, mime = &#x27;query&#x27;, case_data = {&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, sql_type = &#x27;select&#x27;, sql_data = {&#x27;select&#x27;: &#x27;select ID_ from uc_demension where CODE_=&quot;requestsAddDem&quot;;&#x27;}\nupdate_key = &#x27;ids&#x27;\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \u7528\u4f8b\u6570\u636e:{&#x27;ids&#x27;: &#x27;1831533284036288512&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5220\u9664\u7ef4\u5ea6\u6210\u529f\uff01&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u3010requestsAddDem(requestsAddDem)\u3011\u7684\u7ef4\u5ea6\u4e0b\u5b58\u5728\u7ec4\u7ec7\uff0c\u4e0d\u5141\u8bb8\u5220\u9664 &quot;,&quot;value&quot;:&quot;&quot;,&quot;code&quot;:200}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", "duration": "101 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]</td>", "<td class=\"col-duration\">101 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;username&#x27;: &#x27;\u8d85\u7ea7\u7ba1\u7406\u5458&#x27;, &#x27;account&#x27;: &#x27;admin&#x27;, &#x27;userId&#x27;: &#x27;1&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTI5OTksImlhdCI6MTcyNTUwNjU5OX0.XYuTYZcRobV0E1x1ijt3sF5oF-q0n_QMR3cBRcXv_GSKoUVOdzEcM6cO65TKN6zCYS2hvrKfFNmoweLh4jVOXw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "46 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">46 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636630&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533542602547200&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533555432923136&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533568208773120&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533580988817408&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533593781444608&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533606607626240&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636690&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533606897033216&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533619710631936&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533632494870528&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533645308469248&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533658063347712&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533670830809088&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "49 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">49 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636C00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533671166353408&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533683908648960&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533696764190720&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533709577789440&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533722420748288&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533735280484352&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "36 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">36 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636270&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533735574085632&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533748370907136&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533761142562816&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533773935190016&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533786719428608&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533799516250112&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "32 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">32 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F60&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533799830822912&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533812686364672&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533825487380480&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533838263230464&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533851055857664&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533863835901952&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533864200806400&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", "duration": "31 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]</td>", "<td class=\"col-duration\">31 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;#!$!@#!@#&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533864335024128&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636F00&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533864439881728&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533877228314624&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533889987387392&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533902813569024&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533915581030400&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533928340103168&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "24 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">24 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635010&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533928616927232&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533941388582912&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533954168627200&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533966952865792&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533979716132864&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831533992454234112&quot;}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B28A00&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B28A00&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDYsImlhdCI6MTcyNTUwNjcwNn0.157JiTP2ah21cD1AlaFNV8iAVWMhG_Q0Nkr6IljpKrukB-MQG3c_LEFhivXXZC8AhtyJLpSqCQqCvGoQPhE6Dw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDYsImlhdCI6MTcyNTUwNjcwNn0.157JiTP2ah21cD1AlaFNV8iAVWMhG_Q0Nkr6IljpKrukB-MQG3c_LEFhivXXZC8AhtyJLpSqCQqCvGoQPhE6Dw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E49EE2C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E49EE2C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDksImlhdCI6MTcyNTUwNjcwOX0.q8DQH7rNuxMWgDwY_2QPSrvjPQEI_o2qAvoij5KLQswkXEpfogZucgV8SnGYZ0n14PZ2zV6YdopJMyyjqeuOEg&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDksImlhdCI6MTcyNTUwNjcwOX0.q8DQH7rNuxMWgDwY_2QPSrvjPQEI_o2qAvoij5KLQswkXEpfogZucgV8SnGYZ0n14PZ2zV6YdopJMyyjqeuOEg&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4A79800&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4A79800&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTIsImlhdCI6MTcyNTUwNjcxMn0.fvceF-XLGUh-qwkqG7hye4LC11oe-N8rs4O7kmhL7J-1hZl6P3N6U7uCA6BjFmA4bINtjfcopCbTFCO78DSw_A&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTIsImlhdCI6MTcyNTUwNjcxMn0.fvceF-XLGUh-qwkqG7hye4LC11oe-N8rs4O7kmhL7J-1hZl6P3N6U7uCA6BjFmA4bINtjfcopCbTFCO78DSw_A&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AA76C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AA76C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTUsImlhdCI6MTcyNTUwNjcxNX0.9WUsg4ZQ81fGfpb3EONbKAVwdXwqAo5K4a0OKMx2oWQrOytx_Nn-M6NY6oJY3cy1spId4nYk7QEWgX738Dr-AA&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTUsImlhdCI6MTcyNTUwNjcxNX0.9WUsg4ZQ81fGfpb3EONbKAVwdXwqAo5K4a0OKMx2oWQrOytx_Nn-M6NY6oJY3cy1spId4nYk7QEWgX738Dr-AA&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4A3A280&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4A3A280&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTgsImlhdCI6MTcyNTUwNjcxOH0.UGKFLtqnUsa32LRt4eZx15uITMzt9tACC5sZIkx-Vaq-WGOU07-6r7w2O-CME4RWowbkBIh0yip1EKz-UrGlmw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTgsImlhdCI6MTcyNTUwNjcxOH0.UGKFLtqnUsa32LRt4eZx15uITMzt9tACC5sZIkx-Vaq-WGOU07-6r7w2O-CME4RWowbkBIh0yip1EKz-UrGlmw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "37 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">37 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AE7EC0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AE7EC0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4636D20&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDYsImlhdCI6MTcyNTUwNjcwNn0.157JiTP2ah21cD1AlaFNV8iAVWMhG_Q0Nkr6IljpKrukB-MQG3c_LEFhivXXZC8AhtyJLpSqCQqCvGoQPhE6Dw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDksImlhdCI6MTcyNTUwNjcwOX0.q8DQH7rNuxMWgDwY_2QPSrvjPQEI_o2qAvoij5KLQswkXEpfogZucgV8SnGYZ0n14PZ2zV6YdopJMyyjqeuOEg&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTIsImlhdCI6MTcyNTUwNjcxMn0.fvceF-XLGUh-qwkqG7hye4LC11oe-N8rs4O7kmhL7J-1hZl6P3N6U7uCA6BjFmA4bINtjfcopCbTFCO78DSw_A&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTUsImlhdCI6MTcyNTUwNjcxNX0.9WUsg4ZQ81fGfpb3EONbKAVwdXwqAo5K4a0OKMx2oWQrOytx_Nn-M6NY6oJY3cy1spId4nYk7QEWgX738Dr-AA&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTgsImlhdCI6MTcyNTUwNjcxOH0.UGKFLtqnUsa32LRt4eZx15uITMzt9tACC5sZIkx-Vaq-WGOU07-6r7w2O-CME4RWowbkBIh0yip1EKz-UrGlmw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n"}], "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AC9B80&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AC9B80&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B2BC40&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B2BC40&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjUsImlhdCI6MTcyNTUwNjcyNX0.MRu3tADIYEw1SHeh-Xc72VYhv--SOJKdsdsFVgOBYf6vr0sueZy2_PpPfFmSaeM45mB8yzyifHM8eeANXFpr_w&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjUsImlhdCI6MTcyNTUwNjcyNX0.MRu3tADIYEw1SHeh-Xc72VYhv--SOJKdsdsFVgOBYf6vr0sueZy2_PpPfFmSaeM45mB8yzyifHM8eeANXFpr_w&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B470C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B470C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjgsImlhdCI6MTcyNTUwNjcyOH0.PeW9YWyRcQo0X0Q2R7Tc9RoxFiOV-Rz2jnxGVdekhTD325yJ3YPUI0HYBtnmO9LfxrFobWiMesncceabz6d-wQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjgsImlhdCI6MTcyNTUwNjcyOH0.PeW9YWyRcQo0X0Q2R7Tc9RoxFiOV-Rz2jnxGVdekhTD325yJ3YPUI0HYBtnmO9LfxrFobWiMesncceabz6d-wQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B4E680&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B4E680&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzEsImlhdCI6MTcyNTUwNjczMX0.lT5MNiH-cZYW03WabpxhR_KuGodyOfY2SiQ_bHDH7fGuLSE5woOBrTDQK3rVGzb_i1_85xe7a0GeBM2Ngibc3g&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzEsImlhdCI6MTcyNTUwNjczMX0.lT5MNiH-cZYW03WabpxhR_KuGodyOfY2SiQ_bHDH7fGuLSE5woOBrTDQK3rVGzb_i1_85xe7a0GeBM2Ngibc3g&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B55DC0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B55DC0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzQsImlhdCI6MTcyNTUwNjczNH0.PxHVLbFX-pZCbMvDsLljN3CNoIVO_qYYWznSs7RI0lR6zdYA23i_wZaC-qz9Bi4BtSLNEo3aBdzKenEbDXLSpQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzQsImlhdCI6MTcyNTUwNjczNH0.PxHVLbFX-pZCbMvDsLljN3CNoIVO_qYYWznSs7RI0lR6zdYA23i_wZaC-qz9Bi4BtSLNEo3aBdzKenEbDXLSpQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "23 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lao_zhang/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">23 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B51800&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B51800&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x00000208E4635910&gt;\nfix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E49944A0&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4995490&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjUsImlhdCI6MTcyNTUwNjcyNX0.MRu3tADIYEw1SHeh-Xc72VYhv--SOJKdsdsFVgOBYf6vr0sueZy2_PpPfFmSaeM45mB8yzyifHM8eeANXFpr_w&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjgsImlhdCI6MTcyNTUwNjcyOH0.PeW9YWyRcQo0X0Q2R7Tc9RoxFiOV-Rz2jnxGVdekhTD325yJ3YPUI0HYBtnmO9LfxrFobWiMesncceabz6d-wQ&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzEsImlhdCI6MTcyNTUwNjczMX0.lT5MNiH-cZYW03WabpxhR_KuGodyOfY2SiQ_bHDH7fGuLSE5woOBrTDQK3rVGzb_i1_85xe7a0GeBM2Ngibc3g&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzQsImlhdCI6MTcyNTUwNjczNH0.PxHVLbFX-pZCbMvDsLljN3CNoIVO_qYYWznSs7RI0lR6zdYA23i_wZaC-qz9Bi4BtSLNEo3aBdzKenEbDXLSpQ&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", "duration": "112 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]</td>", "<td class=\"col-duration\">112 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;username&#x27;: &#x27;\u8d85\u7ea7\u7ba1\u7406\u5458&#x27;, &#x27;account&#x27;: &#x27;admin&#x27;, &#x27;userId&#x27;: &#x27;1&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", "duration": "34 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]</td>", "<td class=\"col-duration\">34 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E465BCE0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534121722683392&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534134506921984&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534147400212480&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534160389971968&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534173253902336&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534186042335232&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", "duration": "43 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]</td>", "<td class=\"col-duration\">43 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E43ABA10&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534186365296640&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534199141146624&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534211933773824&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534224688652288&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534237451919360&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;#!$!@#!@#&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534250240352256&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", "duration": "51 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]</td>", "<td class=\"col-duration\">51 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D370&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534250559119360&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534263322386432&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534276102430720&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534288903446528&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534301691879424&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminadminadminadminadminadminadminadminadmin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534314522255360&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D520&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;a&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534314912325632&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534327679787008&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534340447248384&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534353231486976&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534366015725568&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;a&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534378829324288&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", "duration": "33 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]</td>", "<td class=\"col-duration\">33 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&#x27;\nE \nE - \u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D5B0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;, &#x27;username&#x27;: &#x27;adminxyz&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534379152285696&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534392007827456&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534404808843264&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534417618247680&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534430582841344&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;adminxyz&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u6237\u9519\u8bef\u6216\u8be5\u79df\u6237\u672a\u542f\u7528&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534443375468544&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", "duration": "44 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]</td>", "<td class=\"col-duration\">44 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534443711012864&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]": [{"extras": [], "result": "Passed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", "duration": "35 ms", "resultsTableRow": ["<td class=\"col-result\">Passed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]</td>", "<td class=\"col-duration\">35 ms</td>", "<td class=\"col-links\"></td>"], "log": "------------------------------ Captured log call -------------------------------\nINFO \u5f20\u4e09:test_bpm.py:57 \u65ad\u8a00\u6210\u529f\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;#!$!@#!@#&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534443874590720&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D9A0&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;post&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534443975254016&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534456709160960&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534469443067904&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534482210529280&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534494977990656&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534507770617856&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", "duration": "27 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]</td>", "<td class=\"col-duration\">27 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == &#x27;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&#x27;\nE \nE - \u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e\nE + \u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D850&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;, case_data = {&#x27;password&#x27;: &#x27;123456&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}, expect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534508080996352&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534520856846336&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534533716582400&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534546542764032&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534559289253888&quot;}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;123456&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;state&quot;:false,&quot;message&quot;:&quot;\u89e3\u5bc6\u5bc6\u7801\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5RSA\u516c\u94a5\u548c\u79c1\u94a5\u914d\u7f6e&quot;,&quot;code&quot;:200,&quot;logId&quot;:&quot;1831534572065103872&quot;}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4A693C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4A693C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDQsImlhdCI6MTcyNTUwNjg0NH0.dcuCNZZa9Gl-uMikYcPn0SuN-Xp8uSBhYnZmE9a4sOkYC38xIv6p_79GzizgrcBic2FTw-e419KuOqYFqemvcw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDQsImlhdCI6MTcyNTUwNjg0NH0.dcuCNZZa9Gl-uMikYcPn0SuN-Xp8uSBhYnZmE9a4sOkYC38xIv6p_79GzizgrcBic2FTw-e419KuOqYFqemvcw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B9C340&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B9C340&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDgsImlhdCI6MTcyNTUwNjg0OH0.E72Ly7siFrAWFqb0VWv2YTH2aoh_bX39slvlh0jXdg2jdJdopRVV_kqpB1JLeK0wJcLVELJxk1MIOW7hy59Bww&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDgsImlhdCI6MTcyNTUwNjg0OH0.E72Ly7siFrAWFqb0VWv2YTH2aoh_bX39slvlh0jXdg2jdJdopRVV_kqpB1JLeK0wJcLVELJxk1MIOW7hy59Bww&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AA57C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AA57C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTEsImlhdCI6MTcyNTUwNjg1MX0.fI9aVZSXrcvWo2OqQqzJcOu5U0o91E6sUHEqkPqq4oPOAjdQ690y523ZbngiBk_nbtgSt41incQvpIIj-qMPEQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTEsImlhdCI6MTcyNTUwNjg1MX0.fI9aVZSXrcvWo2OqQqzJcOu5U0o91E6sUHEqkPqq4oPOAjdQ690y523ZbngiBk_nbtgSt41incQvpIIj-qMPEQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AE78C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AE78C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTQsImlhdCI6MTcyNTUwNjg1NH0.YTv0hSjqOJHNnjoiAycR9MB2paNEuy1E-eoW6YnvkDmVCqWjr5Md67QIU5dN4gv3eAw4gsgLelydM1klbPpbdw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTQsImlhdCI6MTcyNTUwNjg1NH0.YTv0hSjqOJHNnjoiAycR9MB2paNEuy1E-eoW6YnvkDmVCqWjr5Md67QIU5dN4gv3eAw4gsgLelydM1klbPpbdw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4AEFBC0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4AEFBC0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTcsImlhdCI6MTcyNTUwNjg1N30.gmFFM_PbAs2RwEHn5gFkGEhggRMFIqDSt7zzGLNJg8E7Ihhd-NNvEbTFoNc-P2NpzLD-D6AyblvuSV4bzLAocw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTcsImlhdCI6MTcyNTUwNjg1N30.gmFFM_PbAs2RwEHn5gFkGEhggRMFIqDSt7zzGLNJg8E7Ihhd-NNvEbTFoNc-P2NpzLD-D6AyblvuSV4bzLAocw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", "duration": "54 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]</td>", "<td class=\"col-duration\">54 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B20F40&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B20F40&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468DB80&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/auth&#x27;, method = &#x27;POST&#x27;\nmime = &#x27;application/json&#x27;\ncase_data = {&#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;, &#x27;username&#x27;: &#x27;admin&#x27;}\nexpect_data = {&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDQsImlhdCI6MTcyNTUwNjg0NH0.dcuCNZZa9Gl-uMikYcPn0SuN-Xp8uSBhYnZmE9a4sOkYC38xIv6p_79GzizgrcBic2FTw-e419KuOqYFqemvcw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDgsImlhdCI6MTcyNTUwNjg0OH0.E72Ly7siFrAWFqb0VWv2YTH2aoh_bX39slvlh0jXdg2jdJdopRVV_kqpB1JLeK0wJcLVELJxk1MIOW7hy59Bww&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTEsImlhdCI6MTcyNTUwNjg1MX0.fI9aVZSXrcvWo2OqQqzJcOu5U0o91E6sUHEqkPqq4oPOAjdQ690y523ZbngiBk_nbtgSt41incQvpIIj-qMPEQ&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTQsImlhdCI6MTcyNTUwNjg1NH0.YTv0hSjqOJHNnjoiAycR9MB2paNEuy1E-eoW6YnvkDmVCqWjr5Md67QIU5dN4gv3eAw4gsgLelydM1klbPpbdw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTcsImlhdCI6MTcyNTUwNjg1N30.gmFFM_PbAs2RwEHn5gFkGEhggRMFIqDSt7zzGLNJg8E7Ihhd-NNvEbTFoNc-P2NpzLD-D6AyblvuSV4bzLAocw&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/auth, \u7528\u4f8b\u6570\u636e:{&#x27;username&#x27;: &#x27;admin&#x27;, &#x27;password&#x27;: &#x27;bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ&#x27;}, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&quot;,&quot;username&quot;:&quot;\u8d85\u7ea7\u7ba1\u7406\u5458&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;1&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true,&quot;userAttrs&quot;:{&quot;tenantId&quot;:&quot;-1&quot;}}\n\n"}], "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]": [{"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4A38800&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4A38800&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4B4EB00&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4B4EB00&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjMsImlhdCI6MTcyNTUwNjg2M30.mOc7Vrb2VHZ27l232kbmspY0Ht-yAEpxqgeg-nQw_bNV7x5ruFj2imx7jH4QHfPLoUPyXaV2RJqwPqI3CHrKuQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjMsImlhdCI6MTcyNTUwNjg2M30.mOc7Vrb2VHZ27l232kbmspY0Ht-yAEpxqgeg-nQw_bNV7x5ruFj2imx7jH4QHfPLoUPyXaV2RJqwPqI3CHrKuQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E492E0C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E492E0C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjYsImlhdCI6MTcyNTUwNjg2Nn0.F85m4qdVR0b1_g9CHFmO8vbln8jD0a3ogc6fKXg6bjBvUtzffG4zVs-vmrTraCHxndSMEeM24iRJl-ETXhfeSQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjYsImlhdCI6MTcyNTUwNjg2Nn0.F85m4qdVR0b1_g9CHFmO8vbln8jD0a3ogc6fKXg6bjBvUtzffG4zVs-vmrTraCHxndSMEeM24iRJl-ETXhfeSQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E4BE22C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E4BE22C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjksImlhdCI6MTcyNTUwNjg2OX0.hPLQ-i5v8Jr0mD4GMfB1guyz7YtB_MLtNFqOVoSjp4biGCvmuYigbft0utW7wAF_xnpqqUvS1aSf7imL0c9sHg&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjksImlhdCI6MTcyNTUwNjg2OX0.hPLQ-i5v8Jr0mD4GMfB1guyz7YtB_MLtNFqOVoSjp4biGCvmuYigbft0utW7wAF_xnpqqUvS1aSf7imL0c9sHg&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Rerun", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Rerun</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E492F000&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E492F000&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzIsImlhdCI6MTcyNTUwNjg3Mn0.BH3g0yOcJA30zugkEeVex8h53zM23-qOFKUAUbUe_sMROBk0x2FRj_zHBYEgMRIOZsbJpAqIkmnI8pT84Jc6xw&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzIsImlhdCI6MTcyNTUwNjg3Mn0.BH3g0yOcJA30zugkEeVex8h53zM23-qOFKUAUbUe_sMROBk0x2FRj_zHBYEgMRIOZsbJpAqIkmnI8pT84Jc6xw&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n"}, {"extras": [], "result": "Failed", "testId": "test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", "duration": "28 ms", "resultsTableRow": ["<td class=\"col-result\">Failed</td>", "<td class=\"col-testId\">test_case/test_lisi/test_bpm.py::TestBPM::test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]</td>", "<td class=\"col-duration\">28 ms</td>", "<td class=\"col-links\"></td>"], "log": "self = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n&gt; assert expect_data[key] == res.json().get(key)\nE AssertionError: assert &#x27;\u5237\u65b0token\u6210\u529f&#x27; == None\nE + where None = &lt;built-in method get of dict object at 0x00000208E49ED2C0&gt;(&#x27;message&#x27;)\nE + where &lt;built-in method get of dict object at 0x00000208E49ED2C0&gt; = {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzUsImlhdCI6MTcyNTUwNjg3NX0.wiX-ZwfqbeLs0Dhh6oxrAnxfHwBZBl_SS4h6CfKU6pIa6izVfOHuCL0aBtOgu8rz63w9XMCF77mdnFSNXu04LQ&#x27;, ...}.get\nE + where {&#x27;account&#x27;: &#x27;admin&#x27;, &#x27;expiration&#x27;: 86400, &#x27;loginStatus&#x27;: True, &#x27;token&#x27;: &#x27;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzUsImlhdCI6MTcyNTUwNjg3NX0.wiX-ZwfqbeLs0Dhh6oxrAnxfHwBZBl_SS4h6CfKU6pIa6izVfOHuCL0aBtOgu8rz63w9XMCF77mdnFSNXu04LQ&#x27;, ...} = json()\nE + where json = &lt;Response [200]&gt;.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &lt;apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208E468D580&gt;, fix_db = &lt;apiAutoTest_v3.common.db.DB object at 0x00000208E4B49E20&gt;\nfix_req = &lt;apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208E4B59520&gt;, url = &#x27;http://36.139.193.99:8088/refresh&#x27;, method = &#x27;GET&#x27;\nmime = None, case_data = None, expect_data = {&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(&quot;url, method, mime, case_data, expect_data, sql_type, sql_data, update_key&quot;, excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3adelete\n if sql_type == &quot;delete&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u5224\u65adsql\u8bed\u53e5\u7c7b\u578b\u662f\u5426\u4e3aselect\n elif sql_type == &quot;select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u5224\u65adsql\u8bed\u53e5\u7684\u7c7b\u578b\u662f\u5426\u4e3aselect|delete \u6216\u8005\u4e3a delete|select\n elif sql_type == &quot;select|delete&quot; or sql_type == &quot;delete|select&quot;:\n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528delete\u65b9\u6cd5\u6267\u884c\u5220\u9664\u7684sql\u8bed\u53e5\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n fix_db.delete(sql_data[&#x27;delete&#x27;])\n \n # \u4f7f\u7528DB\u7c7b\u5bf9\u8c61\u8c03\u7528select\u65b9\u6cd5\u6267\u884c\u67e5\u8be2\u7684sql\u8bed\u53e5\uff0c \u5e76\u83b7\u53d6\u67e5\u8be2\u7ed3\u679c\uff0cDB\u7c7b\u5bf9\u8c61===fix_db\u81ea\u5b9a\u4e49\u56fa\u4ef6\n select_result = fix_db.select(sql_data[&#x27;select&#x27;])\n # \u5c06\u67e5\u8be2\u7ed3\u679c\u66f4\u65b0\u5230\u7528\u4f8b\u6570\u636e\u4e2d\n case_data[update_key] = select_result\n \n # \u4f7f\u7528RequestMethod\u7c7b\u5bf9\u8c61\u53d1\u9001\u8bf7\u6c42\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # \u65ad\u8a00\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f&quot;\u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:{url}, \u7528\u4f8b\u6570\u636e:{case_data}, \u671f\u671b\u6570\u636e:{expect_data}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{res.text}&quot;)\n&gt; raise AssertionError(&quot;\u65ad\u8a00\u5931\u8d25&quot;)\nE AssertionError: \u65ad\u8a00\u5931\u8d25\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjMsImlhdCI6MTcyNTUwNjg2M30.mOc7Vrb2VHZ27l232kbmspY0Ht-yAEpxqgeg-nQw_bNV7x5ruFj2imx7jH4QHfPLoUPyXaV2RJqwPqI3CHrKuQ&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjYsImlhdCI6MTcyNTUwNjg2Nn0.F85m4qdVR0b1_g9CHFmO8vbln8jD0a3ogc6fKXg6bjBvUtzffG4zVs-vmrTraCHxndSMEeM24iRJl-ETXhfeSQ&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjksImlhdCI6MTcyNTUwNjg2OX0.hPLQ-i5v8Jr0mD4GMfB1guyz7YtB_MLtNFqOVoSjp4biGCvmuYigbft0utW7wAF_xnpqqUvS1aSf7imL0c9sHg&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzIsImlhdCI6MTcyNTUwNjg3Mn0.BH3g0yOcJA30zugkEeVex8h53zM23-qOFKUAUbUe_sMROBk0x2FRj_zHBYEgMRIOZsbJpAqIkmnI8pT84Jc6xw&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n\n------------------------------ Captured log call -------------------------------\nERROR \u5f20\u4e09:test_bpm.py:54 \u65ad\u8a00\u5931\u8d25\uff0c\u63a5\u53e3url\u4e3a:http://36.139.193.99:8088/refresh, \u7528\u4f8b\u6570\u636e:None, \u671f\u671b\u6570\u636e:{&#x27;message&#x27;: &#x27;\u5237\u65b0token\u6210\u529f&#x27;}, \u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e:{&quot;token&quot;:&quot;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzUsImlhdCI6MTcyNTUwNjg3NX0.wiX-ZwfqbeLs0Dhh6oxrAnxfHwBZBl_SS4h6CfKU6pIa6izVfOHuCL0aBtOgu8rz63w9XMCF77mdnFSNXu04LQ&quot;,&quot;username&quot;:&quot;admin&quot;,&quot;account&quot;:&quot;admin&quot;,&quot;userId&quot;:&quot;&quot;,&quot;expiration&quot;:86400,&quot;loginStatus&quot;:true}\n\n"}]}, "renderCollapsed": ["passed"], "initialSort": "result", "title": "bpm.html"}"></div> + <script> + (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +const { getCollapsedCategory, setCollapsedIds } = require('./storage.js') + +class DataManager { + setManager(data) { + const collapsedCategories = [...getCollapsedCategory(data.renderCollapsed)] + const collapsedIds = [] + const tests = Object.values(data.tests).flat().map((test, index) => { + const collapsed = collapsedCategories.includes(test.result.toLowerCase()) + const id = `test_${index}` + if (collapsed) { + collapsedIds.push(id) + } + return { + ...test, + id, + collapsed, + } + }) + const dataBlob = { ...data, tests } + this.data = { ...dataBlob } + this.renderData = { ...dataBlob } + setCollapsedIds(collapsedIds) + } + + get allData() { + return { ...this.data } + } + + resetRender() { + this.renderData = { ...this.data } + } + + setRender(data) { + this.renderData.tests = [...data] + } + + toggleCollapsedItem(id) { + this.renderData.tests = this.renderData.tests.map((test) => + test.id === id ? { ...test, collapsed: !test.collapsed } : test, + ) + } + + set allCollapsed(collapsed) { + this.renderData = { ...this.renderData, tests: [...this.renderData.tests.map((test) => ( + { ...test, collapsed } + ))] } + } + + get testSubset() { + return [...this.renderData.tests] + } + + get environment() { + return this.renderData.environment + } + + get initialSort() { + return this.data.initialSort + } +} + +module.exports = { + manager: new DataManager(), +} + +},{"./storage.js":8}],2:[function(require,module,exports){ +const mediaViewer = require('./mediaviewer.js') +const templateEnvRow = document.getElementById('template_environment_row') +const templateResult = document.getElementById('template_results-table__tbody') + +function htmlToElements(html) { + const temp = document.createElement('template') + temp.innerHTML = html + return temp.content.childNodes +} + +const find = (selector, elem) => { + if (!elem) { + elem = document + } + return elem.querySelector(selector) +} + +const findAll = (selector, elem) => { + if (!elem) { + elem = document + } + return [...elem.querySelectorAll(selector)] +} + +const dom = { + getStaticRow: (key, value) => { + const envRow = templateEnvRow.content.cloneNode(true) + const isObj = typeof value === 'object' && value !== null + const values = isObj ? Object.keys(value).map((k) => `${k}: ${value[k]}`) : null + + const valuesElement = htmlToElements( + values ? `<ul>${values.map((val) => `<li>${val}</li>`).join('')}<ul>` : `<div>${value}</div>`)[0] + const td = findAll('td', envRow) + td[0].textContent = key + td[1].appendChild(valuesElement) + + return envRow + }, + getResultTBody: ({ testId, id, log, extras, resultsTableRow, tableHtml, result, collapsed }) => { + const resultBody = templateResult.content.cloneNode(true) + resultBody.querySelector('tbody').classList.add(result.toLowerCase()) + resultBody.querySelector('tbody').id = testId + resultBody.querySelector('.collapsible').dataset.id = id + + resultsTableRow.forEach((html) => { + const t = document.createElement('template') + t.innerHTML = html + resultBody.querySelector('.collapsible').appendChild(t.content) + }) + + if (log) { + // Wrap lines starting with "E" with span.error to color those lines red + const wrappedLog = log.replace(/^E.*$/gm, (match) => `<span class="error">${match}</span>`) + resultBody.querySelector('.log').innerHTML = wrappedLog + } else { + resultBody.querySelector('.log').remove() + } + + if (collapsed) { + resultBody.querySelector('.collapsible > td')?.classList.add('collapsed') + resultBody.querySelector('.extras-row').classList.add('hidden') + } else { + resultBody.querySelector('.collapsible > td')?.classList.remove('collapsed') + } + + const media = [] + extras?.forEach(({ name, format_type, content }) => { + if (['image', 'video'].includes(format_type)) { + media.push({ path: content, name, format_type }) + } + + if (format_type === 'html') { + resultBody.querySelector('.extraHTML').insertAdjacentHTML('beforeend', `<div>${content}</div>`) + } + }) + mediaViewer.setup(resultBody, media) + + // Add custom html from the pytest_html_results_table_html hook + tableHtml?.forEach((item) => { + resultBody.querySelector('td[class="extra"]').insertAdjacentHTML('beforeend', item) + }) + + return resultBody + }, +} + +module.exports = { + dom, + htmlToElements, + find, + findAll, +} + +},{"./mediaviewer.js":6}],3:[function(require,module,exports){ +const { manager } = require('./datamanager.js') +const { doSort } = require('./sort.js') +const storageModule = require('./storage.js') + +const getFilteredSubSet = (filter) => + manager.allData.tests.filter(({ result }) => filter.includes(result.toLowerCase())) + +const doInitFilter = () => { + const currentFilter = storageModule.getVisible() + const filteredSubset = getFilteredSubSet(currentFilter) + manager.setRender(filteredSubset) +} + +const doFilter = (type, show) => { + if (show) { + storageModule.showCategory(type) + } else { + storageModule.hideCategory(type) + } + + const currentFilter = storageModule.getVisible() + const filteredSubset = getFilteredSubSet(currentFilter) + manager.setRender(filteredSubset) + + const sortColumn = storageModule.getSort() + doSort(sortColumn, true) +} + +module.exports = { + doFilter, + doInitFilter, +} + +},{"./datamanager.js":1,"./sort.js":7,"./storage.js":8}],4:[function(require,module,exports){ +const { redraw, bindEvents, renderStatic } = require('./main.js') +const { doInitFilter } = require('./filter.js') +const { doInitSort } = require('./sort.js') +const { manager } = require('./datamanager.js') +const data = JSON.parse(document.getElementById('data-container').dataset.jsonblob) + +function init() { + manager.setManager(data) + doInitFilter() + doInitSort() + renderStatic() + redraw() + bindEvents() +} + +init() + +},{"./datamanager.js":1,"./filter.js":3,"./main.js":5,"./sort.js":7}],5:[function(require,module,exports){ +const { dom, find, findAll } = require('./dom.js') +const { manager } = require('./datamanager.js') +const { doSort } = require('./sort.js') +const { doFilter } = require('./filter.js') +const { + getVisible, + getCollapsedIds, + setCollapsedIds, + getSort, + getSortDirection, + possibleFilters, +} = require('./storage.js') + +const removeChildren = (node) => { + while (node.firstChild) { + node.removeChild(node.firstChild) + } +} + +const renderStatic = () => { + const renderEnvironmentTable = () => { + const environment = manager.environment + const rows = Object.keys(environment).map((key) => dom.getStaticRow(key, environment[key])) + const table = document.getElementById('environment') + removeChildren(table) + rows.forEach((row) => table.appendChild(row)) + } + renderEnvironmentTable() +} + +const addItemToggleListener = (elem) => { + elem.addEventListener('click', ({ target }) => { + const id = target.parentElement.dataset.id + manager.toggleCollapsedItem(id) + + const collapsedIds = getCollapsedIds() + if (collapsedIds.includes(id)) { + const updated = collapsedIds.filter((item) => item !== id) + setCollapsedIds(updated) + } else { + collapsedIds.push(id) + setCollapsedIds(collapsedIds) + } + redraw() + }) +} + +const renderContent = (tests) => { + const sortAttr = getSort(manager.initialSort) + const sortAsc = JSON.parse(getSortDirection()) + const rows = tests.map(dom.getResultTBody) + const table = document.getElementById('results-table') + const tableHeader = document.getElementById('results-table-head') + + const newTable = document.createElement('table') + newTable.id = 'results-table' + + // remove all sorting classes and set the relevant + findAll('.sortable', tableHeader).forEach((elem) => elem.classList.remove('asc', 'desc')) + tableHeader.querySelector(`.sortable[data-column-type="${sortAttr}"]`)?.classList.add(sortAsc ? 'desc' : 'asc') + newTable.appendChild(tableHeader) + + if (!rows.length) { + const emptyTable = document.getElementById('template_results-table__body--empty').content.cloneNode(true) + newTable.appendChild(emptyTable) + } else { + rows.forEach((row) => { + if (!!row) { + findAll('.collapsible td:not(.col-links', row).forEach(addItemToggleListener) + find('.logexpander', row).addEventListener('click', + (evt) => evt.target.parentNode.classList.toggle('expanded'), + ) + newTable.appendChild(row) + } + }) + } + + table.replaceWith(newTable) +} + +const renderDerived = () => { + const currentFilter = getVisible() + possibleFilters.forEach((result) => { + const input = document.querySelector(`input[data-test-result="${result}"]`) + input.checked = currentFilter.includes(result) + }) +} + +const bindEvents = () => { + const filterColumn = (evt) => { + const { target: element } = evt + const { testResult } = element.dataset + + doFilter(testResult, element.checked) + const collapsedIds = getCollapsedIds() + const updated = manager.renderData.tests.map((test) => { + return { + ...test, + collapsed: collapsedIds.includes(test.id), + } + }) + manager.setRender(updated) + redraw() + } + + const header = document.getElementById('environment-header') + header.addEventListener('click', () => { + const table = document.getElementById('environment') + table.classList.toggle('hidden') + header.classList.toggle('collapsed') + }) + + findAll('input[name="filter_checkbox"]').forEach((elem) => { + elem.addEventListener('click', filterColumn) + }) + + findAll('.sortable').forEach((elem) => { + elem.addEventListener('click', (evt) => { + const { target: element } = evt + const { columnType } = element.dataset + doSort(columnType) + redraw() + }) + }) + + document.getElementById('show_all_details').addEventListener('click', () => { + manager.allCollapsed = false + setCollapsedIds([]) + redraw() + }) + document.getElementById('hide_all_details').addEventListener('click', () => { + manager.allCollapsed = true + const allIds = manager.renderData.tests.map((test) => test.id) + setCollapsedIds(allIds) + redraw() + }) +} + +const redraw = () => { + const { testSubset } = manager + + renderContent(testSubset) + renderDerived() +} + +module.exports = { + redraw, + bindEvents, + renderStatic, +} + +},{"./datamanager.js":1,"./dom.js":2,"./filter.js":3,"./sort.js":7,"./storage.js":8}],6:[function(require,module,exports){ +class MediaViewer { + constructor(assets) { + this.assets = assets + this.index = 0 + } + + nextActive() { + this.index = this.index === this.assets.length - 1 ? 0 : this.index + 1 + return [this.activeFile, this.index] + } + + prevActive() { + this.index = this.index === 0 ? this.assets.length - 1 : this.index -1 + return [this.activeFile, this.index] + } + + get currentIndex() { + return this.index + } + + get activeFile() { + return this.assets[this.index] + } +} + + +const setup = (resultBody, assets) => { + if (!assets.length) { + resultBody.querySelector('.media').classList.add('hidden') + return + } + + const mediaViewer = new MediaViewer(assets) + const container = resultBody.querySelector('.media-container') + const leftArrow = resultBody.querySelector('.media-container__nav--left') + const rightArrow = resultBody.querySelector('.media-container__nav--right') + const mediaName = resultBody.querySelector('.media__name') + const counter = resultBody.querySelector('.media__counter') + const imageEl = resultBody.querySelector('img') + const sourceEl = resultBody.querySelector('source') + const videoEl = resultBody.querySelector('video') + + const setImg = (media, index) => { + if (media?.format_type === 'image') { + imageEl.src = media.path + + imageEl.classList.remove('hidden') + videoEl.classList.add('hidden') + } else if (media?.format_type === 'video') { + sourceEl.src = media.path + + videoEl.classList.remove('hidden') + imageEl.classList.add('hidden') + } + + mediaName.innerText = media?.name + counter.innerText = `${index + 1} / ${assets.length}` + } + setImg(mediaViewer.activeFile, mediaViewer.currentIndex) + + const moveLeft = () => { + const [media, index] = mediaViewer.prevActive() + setImg(media, index) + } + const doRight = () => { + const [media, index] = mediaViewer.nextActive() + setImg(media, index) + } + const openImg = () => { + window.open(mediaViewer.activeFile.path, '_blank') + } + if (assets.length === 1) { + container.classList.add('media-container--fullscreen') + } else { + leftArrow.addEventListener('click', moveLeft) + rightArrow.addEventListener('click', doRight) + } + imageEl.addEventListener('click', openImg) +} + +module.exports = { + setup, +} + +},{}],7:[function(require,module,exports){ +const { manager } = require('./datamanager.js') +const storageModule = require('./storage.js') + +const genericSort = (list, key, ascending, customOrder) => { + let sorted + if (customOrder) { + sorted = list.sort((a, b) => { + const aValue = a.result.toLowerCase() + const bValue = b.result.toLowerCase() + + const aIndex = customOrder.findIndex((item) => item.toLowerCase() === aValue) + const bIndex = customOrder.findIndex((item) => item.toLowerCase() === bValue) + + // Compare the indices to determine the sort order + return aIndex - bIndex + }) + } else { + sorted = list.sort((a, b) => a[key] === b[key] ? 0 : a[key] > b[key] ? 1 : -1) + } + + if (ascending) { + sorted.reverse() + } + return sorted +} + +const durationSort = (list, ascending) => { + const parseDuration = (duration) => { + if (duration.includes(':')) { + // If it's in the format "HH:mm:ss" + const [hours, minutes, seconds] = duration.split(':').map(Number) + return (hours * 3600 + minutes * 60 + seconds) * 1000 + } else { + // If it's in the format "nnn ms" + return parseInt(duration) + } + } + const sorted = list.sort((a, b) => parseDuration(a['duration']) - parseDuration(b['duration'])) + if (ascending) { + sorted.reverse() + } + return sorted +} + +const doInitSort = () => { + const type = storageModule.getSort(manager.initialSort) + const ascending = storageModule.getSortDirection() + const list = manager.testSubset + const initialOrder = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed', 'Skipped', 'Passed'] + + storageModule.setSort(type) + storageModule.setSortDirection(ascending) + + if (type?.toLowerCase() === 'original') { + manager.setRender(list) + } else { + let sortedList + switch (type) { + case 'duration': + sortedList = durationSort(list, ascending) + break + case 'result': + sortedList = genericSort(list, type, ascending, initialOrder) + break + default: + sortedList = genericSort(list, type, ascending) + break + } + manager.setRender(sortedList) + } +} + +const doSort = (type, skipDirection) => { + const newSortType = storageModule.getSort(manager.initialSort) !== type + const currentAsc = storageModule.getSortDirection() + let ascending + if (skipDirection) { + ascending = currentAsc + } else { + ascending = newSortType ? false : !currentAsc + } + storageModule.setSort(type) + storageModule.setSortDirection(ascending) + + const list = manager.testSubset + const sortedList = type === 'duration' ? durationSort(list, ascending) : genericSort(list, type, ascending) + manager.setRender(sortedList) +} + +module.exports = { + doInitSort, + doSort, +} + +},{"./datamanager.js":1,"./storage.js":8}],8:[function(require,module,exports){ +const possibleFilters = [ + 'passed', + 'skipped', + 'failed', + 'error', + 'xfailed', + 'xpassed', + 'rerun', +] + +const getVisible = () => { + const url = new URL(window.location.href) + const settings = new URLSearchParams(url.search).get('visible') + const lower = (item) => { + const lowerItem = item.toLowerCase() + if (possibleFilters.includes(lowerItem)) { + return lowerItem + } + return null + } + return settings === null ? + possibleFilters : + [...new Set(settings?.split(',').map(lower).filter((item) => item))] +} + +const hideCategory = (categoryToHide) => { + const url = new URL(window.location.href) + const visibleParams = new URLSearchParams(url.search).get('visible') + const currentVisible = visibleParams ? visibleParams.split(',') : [...possibleFilters] + const settings = [...new Set(currentVisible)].filter((f) => f !== categoryToHide).join(',') + + url.searchParams.set('visible', settings) + window.history.pushState({}, null, unescape(url.href)) +} + +const showCategory = (categoryToShow) => { + if (typeof window === 'undefined') { + return + } + const url = new URL(window.location.href) + const currentVisible = new URLSearchParams(url.search).get('visible')?.split(',').filter(Boolean) || + [...possibleFilters] + const settings = [...new Set([categoryToShow, ...currentVisible])] + const noFilter = possibleFilters.length === settings.length || !settings.length + + noFilter ? url.searchParams.delete('visible') : url.searchParams.set('visible', settings.join(',')) + window.history.pushState({}, null, unescape(url.href)) +} + +const getSort = (initialSort) => { + const url = new URL(window.location.href) + let sort = new URLSearchParams(url.search).get('sort') + if (!sort) { + sort = initialSort || 'result' + } + return sort +} + +const setSort = (type) => { + const url = new URL(window.location.href) + url.searchParams.set('sort', type) + window.history.pushState({}, null, unescape(url.href)) +} + +const getCollapsedCategory = (renderCollapsed) => { + let categories + if (typeof window !== 'undefined') { + const url = new URL(window.location.href) + const collapsedItems = new URLSearchParams(url.search).get('collapsed') + switch (true) { + case !renderCollapsed && collapsedItems === null: + categories = ['passed'] + break + case collapsedItems?.length === 0 || /^["']{2}$/.test(collapsedItems): + categories = [] + break + case /^all$/.test(collapsedItems) || collapsedItems === null && /^all$/.test(renderCollapsed): + categories = [...possibleFilters] + break + default: + categories = collapsedItems?.split(',').map((item) => item.toLowerCase()) || renderCollapsed + break + } + } else { + categories = [] + } + return categories +} + +const getSortDirection = () => JSON.parse(sessionStorage.getItem('sortAsc')) || false +const setSortDirection = (ascending) => sessionStorage.setItem('sortAsc', ascending) + +const getCollapsedIds = () => JSON.parse(sessionStorage.getItem('collapsedIds')) || [] +const setCollapsedIds = (list) => sessionStorage.setItem('collapsedIds', JSON.stringify(list)) + +module.exports = { + getVisible, + hideCategory, + showCategory, + getCollapsedIds, + setCollapsedIds, + getSort, + setSort, + getSortDirection, + setSortDirection, + getCollapsedCategory, + possibleFilters, +} + +},{}]},{},[4]); + </script> + </footer> +</html> \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/app.js b/apiAutoTest_v3/report/html/self/app.js new file mode 100644 index 0000000..83bc7a2 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/app.js @@ -0,0 +1,60 @@ +!function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}__webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="/",__webpack_require__(__webpack_require__.s=210)}([function(e,t){function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},_getPrototypeOf(t)}e.exports=_getPrototypeOf},function(e,t,n){"use strict";n.d(t,"a",function(){return behavior}),n.d(t,"b",function(){return className}),n.d(t,"e",function(){return regions}),n.d(t,"d",function(){return options});var r=n(8),a=n.n(r),i=n(54);function behavior(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var r=n.prototype;r.behaviors=Object.assign(a()({},e,t),r.behaviors)}}function className(e){return function(t){t.prototype.className=e}}function regions(e){return function(t){t.prototype.regions=Object.assign(e,t.regions)}}function options(e){return function(t){t.prototype.options=Object.assign(e,t.options)}}n.d(t,"c",function(){return i.on})},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){var r=n(126),a=n(2);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}},function(e,t,n){var r=n(127);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){function _defineProperties(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}},function(e,t,n){"use strict";n.r(t);var r=n(42),a=n.n(r);t.default=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.pop();return a.a.apply(void 0,t.concat([r.hash]))}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){"use strict";n.r(t),n.d(t,"default",function(){return translate});var r=n(19);function translate(e,t){return r.c.t(e,t?t.hash:{})}},function(e,t,n){e.exports=function(e,t,n){"use strict";e="default"in e?e.default:e,t="default"in t?t.default:t,n="default"in n?n.default:n;var r=function(e){return function(t){for(var n=arguments.length,r=Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];return e.apply(t,r)}},a=e.Model.extend,i=function deprecate(e,n){t.isObject(e)&&(e=e.prev+" is going to be removed in the future. Please use "+e.next+" instead."+(e.url?" See: "+e.url:"")),te.DEV_MODE&&(void 0!==n&&n||deprecate._cache[e]||(deprecate._warn("Deprecation warning: "+e),deprecate._cache[e]=!0))};i._console="undefined"!=typeof console?console:{},i._warn=function(){var e=i._console.warn||i._console.log||t.noop;return e.apply(i._console,arguments)},i._cache={};var o=function(e){return document.documentElement.contains(e&&e.parentNode)},s=function(e,n){var r=this;e&&t.each(n,function(t){var n=e[t];void 0!==n&&(r[t]=n)})},l=function(e){if(e)return this.options&&void 0!==this.options[e]?this.options[e]:this[e]},u=function(e){var n=this;return t.reduce(e,function(e,r,a){return t.isFunction(r)||(r=n[r]),r&&(e[a]=r),e},{})},c=/(^|:)(\w)/gi;function getEventName(e,t,n){return n.toUpperCase()}var f=t.memoize(function(e){return"on"+e.replace(c,getEventName)});function triggerMethod$1(e){for(var n=arguments.length,r=Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];var i=f(e),o=l.call(this,i),s=void 0;return t.isFunction(o)&&(s=o.apply(this,r)),this.trigger.apply(this,arguments),s}function triggerMethodOn(e){for(var n=arguments.length,r=Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];return t.isFunction(e.triggerMethod)?e.triggerMethod.apply(e,r):triggerMethod$1.apply(e,r)}function triggerMethodChildren(e,n,r){e._getImmediateChildren&&t.each(e._getImmediateChildren(),function(e){r(e)&&triggerMethodOn(e,n,e)})}function shouldTriggerAttach(e){return!e._isAttached}function shouldAttach(e){return!!shouldTriggerAttach(e)&&(e._isAttached=!0,!0)}function shouldTriggerDetach(e){return e._isAttached}function shouldDetach(e){return!!shouldTriggerDetach(e)&&(e._isAttached=!1,!0)}function triggerDOMRefresh(e){e._isAttached&&e._isRendered&&triggerMethodOn(e,"dom:refresh",e)}function triggerDOMRemove(e){e._isAttached&&e._isRendered&&triggerMethodOn(e,"dom:remove",e)}function handleBeforeAttach(){triggerMethodChildren(this,"before:attach",shouldTriggerAttach)}function handleAttach(){triggerMethodChildren(this,"attach",shouldAttach),triggerDOMRefresh(this)}function handleBeforeDetach(){triggerMethodChildren(this,"before:detach",shouldTriggerDetach),triggerDOMRemove(this)}function handleDetach(){triggerMethodChildren(this,"detach",shouldDetach)}function handleBeforeRender(){triggerDOMRemove(this)}function handleRender(){triggerDOMRefresh(this)}function monitorViewEvents(e){e._areViewEventsMonitored||(e._areViewEventsMonitored=!0,e.on({"before:attach":handleBeforeAttach,attach:handleAttach,"before:detach":handleBeforeDetach,detach:handleDetach,"before:render":handleBeforeRender,render:handleRender}))}var h=["description","fileName","lineNumber","name","message","number"],d=a.call(Error,{urlRoot:"http://marionettejs.com/docs/v3.3.1/",constructor:function(e,n){t.isObject(e)?e=(n=e).message:n||(n={});var r=Error.call(this,e);t.extend(this,t.pick(r,h),t.pick(n,h)),this.captureStackTrace(),n.url&&(this.url=this.urlRoot+n.url)},captureStackTrace:function(){Error.captureStackTrace&&Error.captureStackTrace(this,d)},toString:function(){return this.name+": "+this.message+(this.url?" See: "+this.url:"")}});function iterateEvents(e,n,r,a){if(n&&r){if(!t.isObject(r))throw new d({message:"Bindings must be an object.",url:"marionette.functions.html#marionettebindevents"});t.each(r,function(r,i){t.isString(r)?function(e,n,r,a,i){var o=a.split(/\s+/);t.each(o,function(t){var a=e[t];if(!a)throw new d('Method "'+t+'" was configured as an event handler, but does not exist.');e[i](n,r,a)})}(e,n,i,r,a):e[a](n,i,r)})}}function bindEvents(e,t){return iterateEvents(this,e,t,"listenTo"),this}function unbindEvents(e,t){return iterateEvents(this,e,t,"stopListening"),this}function iterateReplies(e,n,r,a){if(n&&r){if(!t.isObject(r))throw new d({message:"Bindings must be an object.",url:"marionette.functions.html#marionettebindrequests"});var i=u.call(e,r);n[a](i,e)}}function bindRequests(e,t){return iterateReplies(this,e,t,"reply"),this}function unbindRequests(e,t){return iterateReplies(this,e,t,"stopReplying"),this}d.extend=a;var p={normalizeMethods:u,_setOptions:function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];this.options=t.extend.apply(t,[{},t.result(this,"options")].concat(n))},mergeOptions:s,getOption:l,bindEvents:bindEvents,unbindEvents:unbindEvents},m={_initRadio:function(){var e=t.result(this,"channelName");if(e){if(!n)throw new d({name:"BackboneRadioMissing",message:'The dependency "backbone.radio" is missing.'});var r=this._channel=n.channel(e),a=t.result(this,"radioEvents");this.bindEvents(r,a);var i=t.result(this,"radioRequests");this.bindRequests(r,i),this.on("destroy",this._destroyRadio)}},_destroyRadio:function(){this._channel.stopReplying(null,null,this)},getChannel:function(){return this._channel},bindEvents:bindEvents,unbindEvents:unbindEvents,bindRequests:bindRequests,unbindRequests:unbindRequests},g=["channelName","radioEvents","radioRequests"],v=function(e){this._setOptions(e),this.mergeOptions(e,g),this.cid=t.uniqueId(this.cidPrefix),this._initRadio(),this.initialize.apply(this,arguments)};v.extend=a,t.extend(v.prototype,e.Events,p,m,{cidPrefix:"mno",_isDestroyed:!1,isDestroyed:function(){return this._isDestroyed},initialize:function(){},destroy:function(){if(this._isDestroyed)return this;for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.triggerMethod.apply(this,["before:destroy",this].concat(t)),this._isDestroyed=!0,this.triggerMethod.apply(this,["destroy",this].concat(t)),this.stopListening(),this},triggerMethod:triggerMethod$1});var b={createBuffer:function(){return document.createDocumentFragment()},appendChildren:function(t,n){e.$(t).append(n)},beforeEl:function(t,n){e.$(t).before(n)},replaceEl:function(e,t){if(e!==t){var n=t.parentNode;n&&n.replaceChild(e,t)}},detachContents:function(t){e.$(t).contents().detach()},setInnerContent:function(t,n){e.$(t).html(n)},detachEl:function(t){e.$(t).detach()},removeEl:function(t){e.$(t).remove()},findEls:function(t,n){return e.$(t,n)}},y=function(e){this.templateId=e};t.extend(y,{templateCaches:{},get:function(e,t){var n=this.templateCaches[e];return n||(n=new y(e),this.templateCaches[e]=n),n.load(t)},clear:function(){for(var e=void 0,t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n.length;if(a>0)for(e=0;e<a;e++)delete this.templateCaches[n[e]];else this.templateCaches={}}}),t.extend(y.prototype,b,{load:function(e){if(this.compiledTemplate)return this.compiledTemplate;var t=this.loadTemplate(this.templateId,e);return this.compiledTemplate=this.compileTemplate(t,e),this.compiledTemplate},loadTemplate:function(e,t){var n=this.findEls(e);if(!n.length)throw new d({name:"NoTemplateError",message:'Could not find template: "'+e+'"'});return n.html()},compileTemplate:function(e,n){return t.template(e,n)}});var _=t.invokeMap||t.invoke;function parseBehaviors(e,n){return t.chain(n).map(function(n,r){var a=function(e,n){return e.behaviorClass?e.behaviorClass:t.isFunction(e)?e:t.isFunction(te.Behaviors.behaviorsLookup)?te.Behaviors.behaviorsLookup(e,n)[n]:te.Behaviors.behaviorsLookup[n]}(n,r),i=n===a?{}:n,o=new a(i,e),s=parseBehaviors(e,t.result(o,"behaviors"));return[o].concat(s)}).flatten().value()}var w={_initBehaviors:function(){this._behaviors=this._getBehaviors()},_getBehaviors:function(){var e=t.result(this,"behaviors");return t.isObject(e)?parseBehaviors(this,e):{}},_getBehaviorTriggers:function(){var e=_(this._behaviors,"getTriggers");return t.reduce(e,function(e,n){return t.extend(e,n)},{})},_getBehaviorEvents:function(){var e=_(this._behaviors,"getEvents");return t.reduce(e,function(e,n){return t.extend(e,n)},{})},_proxyBehaviorViewProperties:function(){_(this._behaviors,"proxyViewProperties")},_delegateBehaviorEntityEvents:function(){_(this._behaviors,"delegateEntityEvents")},_undelegateBehaviorEntityEvents:function(){_(this._behaviors,"undelegateEntityEvents")},_destroyBehaviors:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];_.apply(void 0,[this._behaviors,"destroy"].concat(t))},_removeBehavior:function(e){this._isDestroyed||(this._behaviors=t.without(this._behaviors,e))},_bindBehaviorUIElements:function(){_(this._behaviors,"bindUIElements")},_unbindBehaviorUIElements:function(){_(this._behaviors,"unbindUIElements")},_triggerEventOnBehaviors:function(){for(var e=this._behaviors,t=0,n=e&&e.length;t<n;t++)triggerMethod$1.apply(e[t],arguments)}},x={_delegateEntityEvents:function(e,n){this._undelegateEntityEvents(e,n);var r=t.result(this,"modelEvents");bindEvents.call(this,e,r);var a=t.result(this,"collectionEvents");bindEvents.call(this,n,a)},_undelegateEntityEvents:function(e,n){var r=t.result(this,"modelEvents");unbindEvents.call(this,e,r);var a=t.result(this,"collectionEvents");unbindEvents.call(this,n,a)}},k=/^(\S+)\s*(.*)$/,C=function(e){var n=e.match(k);return function(e,n){return[e+t.uniqueId(".evt"),n].join(" ")}(n[1],n[2])},S={childViewEventPrefix:!0,triggersStopPropagation:!0,triggersPreventDefault:!0};function isEnabled(e){return!!S[e]}var T={_getViewTriggers:function(e,n){return t.reduce(n,function(n,r,a){return a=C(a),n[a]=function(e,n){t.isString(n)&&(n={event:n});var r=n.event,a=!!n.preventDefault;isEnabled("triggersPreventDefault")&&(a=!1!==n.preventDefault);var i=!!n.stopPropagation;return isEnabled("triggersStopPropagation")&&(i=!1!==n.stopPropagation),function(t){a&&t.preventDefault(),i&&t.stopPropagation(),e.triggerMethod(r,e,t)}}(e,r),n},{})}},E=function(e,t){return e.replace(/@ui\.[a-zA-Z-_$0-9]*/g,function(e){return t[e.slice(4)]})},M={normalizeUIKeys:function(e){var n=this._getUIBindings();return function(e,n){return t.reduce(e,function(e,t,r){var a=E(r,n);return e[a]=t,e},{})}(e,n)},normalizeUIString:function(e){var t=this._getUIBindings();return E(e,t)},normalizeUIValues:function(e,n){var r=this._getUIBindings();return function _normalizeUIValues(e,n,r){return t.each(e,function(a,i){t.isString(a)?e[i]=E(a,n):t.isObject(a)&&t.isArray(r)&&(t.extend(a,_normalizeUIValues(t.pick(a,r),n)),t.each(r,function(e){var r=a[e];t.isString(r)&&(a[e]=E(r,n))}))}),e}(e,r,n)},_getUIBindings:function(){var e=t.result(this,"_uiBindings"),n=t.result(this,"ui");return e||n},_bindUIElements:function(){var e=this;if(this.ui){this._uiBindings||(this._uiBindings=this.ui);var n=t.result(this,"_uiBindings");this._ui={},t.each(n,function(t,n){e._ui[n]=e.$(t)}),this.ui=this._ui}},_unbindUIElements:function(){var e=this;this.ui&&this._uiBindings&&(t.each(this.ui,function(t,n){delete e.ui[n]}),this.ui=this._uiBindings,delete this._uiBindings,delete this._ui)},_getUI:function(e){return this._ui[e]}},O={supportsRenderLifecycle:!0,supportsDestroyLifecycle:!0,_isDestroyed:!1,isDestroyed:function(){return!!this._isDestroyed},_isRendered:!1,isRendered:function(){return!!this._isRendered},_isAttached:!1,isAttached:function(){return!!this._isAttached},delegateEvents:function(n){this._proxyBehaviorViewProperties(),this._buildEventProxies();var r=this._getEvents(n);void 0===n&&(this.events=r);var a=t.extend({},this._getBehaviorEvents(),r,this._getBehaviorTriggers(),this.getTriggers());return e.View.prototype.delegateEvents.call(this,a),this},_getEvents:function(e){var n=e||this.events;return t.isFunction(n)?this.normalizeUIKeys(n.call(this)):this.normalizeUIKeys(n)},getTriggers:function(){if(this.triggers){var e=this.normalizeUIKeys(t.result(this,"triggers"));return this._getViewTriggers(this,e)}},delegateEntityEvents:function(){return this._delegateEntityEvents(this.model,this.collection),this._delegateBehaviorEntityEvents(),this},undelegateEntityEvents:function(){return this._undelegateEntityEvents(this.model,this.collection),this._undelegateBehaviorEntityEvents(),this},destroy:function(){if(this._isDestroyed)return this;for(var e=!!this._isAttached,t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.triggerMethod.apply(this,["before:destroy",this].concat(n)),e&&this.triggerMethod("before:detach",this),this.unbindUIElements(),this.removeEl(this.el),e&&(this._isAttached=!1,this.triggerMethod("detach",this)),this._removeChildren(),this._isDestroyed=!0,this._isRendered=!1,this._destroyBehaviors.apply(this,n),this.triggerMethod.apply(this,["destroy",this].concat(n)),this.stopListening(),this},bindUIElements:function(){return this._bindUIElements(),this._bindBehaviorUIElements(),this},unbindUIElements:function(){return this._unbindUIElements(),this._unbindBehaviorUIElements(),this},getUI:function(e){return this._getUI(e)},childViewEventPrefix:function(){return!!isEnabled("childViewEventPrefix")&&"childview"},triggerMethod:function(){var e=triggerMethod$1.apply(this,arguments);return this._triggerEventOnBehaviors.apply(this,arguments),e},_buildEventProxies:function(){this._childViewEvents=t.result(this,"childViewEvents"),this._childViewTriggers=t.result(this,"childViewTriggers")},_proxyChildViewEvents:function(e){this.listenTo(e,"all",this._childViewEventHandler)},_childViewEventHandler:function(e){for(var n=this.normalizeMethods(this._childViewEvents),r=arguments.length,a=Array(r>1?r-1:0),i=1;i<r;i++)a[i-1]=arguments[i];void 0!==n&&t.isFunction(n[e])&&n[e].apply(this,a);var o=this._childViewTriggers;o&&t.isString(o[e])&&this.triggerMethod.apply(this,[o[e]].concat(a));var s=t.result(this,"childViewEventPrefix");if(!1!==s){var l=s+":"+e;this.triggerMethod.apply(this,[l].concat(a))}}};function destroyBackboneView(e){e.supportsDestroyLifecycle||triggerMethodOn(e,"before:destroy",e);var t=!!e._isAttached;t&&triggerMethodOn(e,"before:detach",e),e.remove(),t&&(e._isAttached=!1,triggerMethodOn(e,"detach",e)),e._isDestroyed=!0,e.supportsDestroyLifecycle||triggerMethodOn(e,"destroy",e)}t.extend(O,b,w,p,x,T,M);var A=["allowMissingEl","parentEl","replaceElement"],R=v.extend({cidPrefix:"mnr",replaceElement:!1,_isReplaced:!1,_isSwappingView:!1,constructor:function(t){if(this._setOptions(t),this.mergeOptions(t,A),this._initEl=this.el=this.getOption("el"),this.el=this.el instanceof e.$?this.el[0]:this.el,!this.el)throw new d({name:"NoElError",message:'An "el" must be specified for a region.'});this.$el=this.getEl(this.el),v.call(this,t)},show:function(e,t){if(this._ensureElement(t))return(e=this._getView(e,t))===this.currentView?this:(this._isSwappingView=!!this.currentView,this.triggerMethod("before:show",this,e,t),e._isAttached||this.empty(t),this._setupChildView(e),this._renderView(e),this._attachView(e,t),this.currentView=e,this.triggerMethod("show",this,e,t),this._isSwappingView=!1,this)},_setupChildView:function(e){monitorViewEvents(e),this._proxyChildViewEvents(e),e.on("destroy",this._empty,this)},_proxyChildViewEvents:function(e){var t=this._parentView;t&&t._proxyChildViewEvents(e)},_renderView:function(e){e._isRendered||(e.supportsRenderLifecycle||triggerMethodOn(e,"before:render",e),e.render(),e.supportsRenderLifecycle||(e._isRendered=!0,triggerMethodOn(e,"render",e)))},_attachView:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=!e._isAttached&&o(this.el),a=void 0===n.replaceElement?!!t.result(this,"replaceElement"):!!n.replaceElement;r&&triggerMethodOn(e,"before:attach",e),a?this._replaceEl(e):this.attachHtml(e),r&&(e._isAttached=!0,triggerMethodOn(e,"attach",e))},_ensureElement:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(t.isObject(this.el)||(this.$el=this.getEl(this.el),this.el=this.$el[0]),!this.$el||0===this.$el.length){var n=void 0===e.allowMissingEl?!!t.result(this,"allowMissingEl"):!!e.allowMissingEl;if(n)return!1;throw new d('An "el" must exist in DOM for this region '+this.cid)}return!0},_getView:function(t){if(!t)throw new d({name:"ViewNotValid",message:"The view passed is undefined and therefore invalid. You must pass a view instance to show."});if(t._isDestroyed)throw new d({name:"ViewDestroyedError",message:'View (cid: "'+t.cid+'") has already been destroyed and cannot be used.'});if(t instanceof e.View)return t;var n=this._getViewOptions(t);return new P(n)},_getViewOptions:function(e){return t.isFunction(e)?{template:e}:t.isObject(e)?e:{template:function(){return e}}},getEl:function(e){return this.findEls(e,t.result(this,"parentEl"))},_replaceEl:function(e){this._restoreEl(),e.on("before:destroy",this._restoreEl,this),this.replaceEl(e.el,this.el),this._isReplaced=!0},_restoreEl:function(){if(this._isReplaced){var e=this.currentView;e&&(this._detachView(e),this._isReplaced=!1)}},isReplaced:function(){return!!this._isReplaced},isSwappingView:function(){return!!this._isSwappingView},attachHtml:function(e){this.appendChildren(this.el,e.el)},empty:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{allowMissingEl:!0},t=this.currentView;if(!t)return this._ensureElement(e)&&this.detachHtml(),this;var n=!e.preventDestroy;return n||i("The preventDestroy option is deprecated. Use Region#detachView"),this._empty(t,n),this},_empty:function(e,t){e.off("destroy",this._empty,this),this.triggerMethod("before:empty",this,e),this._restoreEl(),delete this.currentView,e._isDestroyed||(t?this.removeView(e):this._detachView(e),this._stopChildViewEvents(e)),this.triggerMethod("empty",this,e)},_stopChildViewEvents:function(e){var t=this._parentView;t&&this._parentView.stopListening(e)},destroyView:function(e){return e._isDestroyed?e:(e.destroy?e.destroy():destroyBackboneView(e),e)},removeView:function(e){this.destroyView(e)},detachView:function(){var e=this.currentView;if(e)return this._empty(e),e},_detachView:function(e){var t=!!e._isAttached,n=this._isReplaced;t&&triggerMethodOn(e,"before:detach",e),n?this.replaceEl(this.el,e.el):this.detachHtml(),t&&(e._isAttached=!1,triggerMethodOn(e,"detach",e))},detachHtml:function(){this.detachContents(this.el)},hasView:function(){return!!this.currentView},reset:function(e){return this.empty(e),this.$el&&(this.el=this._initEl),delete this.$el,this},destroy:function(e){return this._isDestroyed?this:(this.reset(e),this._name&&this._parentView._removeReferences(this._name),delete this._parentView,delete this._name,v.prototype.destroy.apply(this,arguments))}});t.extend(R.prototype,b);var N=function(e,n){return e instanceof R?e:function(e,n){var r=t.extend({},n);if(t.isString(e))return t.extend(r,{el:e}),buildRegionFromObject(r);if(t.isFunction(e))return t.extend(r,{regionClass:e}),buildRegionFromObject(r);if(t.isObject(e))return e.selector&&i("The selector option on a Region definition object is deprecated. Use el to pass a selector string"),t.extend(r,{el:e.selector},e),buildRegionFromObject(r);throw new d({message:"Improper region configuration type.",url:"marionette.region.html#region-configuration-types"})}(e,n)};function buildRegionFromObject(e){var n=e.regionClass,r=t.omit(e,"regionClass");return new n(r)}var D={regionClass:R,_initRegions:function(){this.regions=this.regions||{},this._regions={},this.addRegions(t.result(this,"regions"))},_reInitRegions:function(){_(this._regions,"reset")},addRegion:function(e,t){var n={};return n[e]=t,this.addRegions(n)[e]},addRegions:function(e){if(!t.isEmpty(e))return e=this.normalizeUIValues(e,["selector","el"]),this.regions=t.extend({},this.regions,e),this._addRegions(e)},_addRegions:function(e){var n=this,r={regionClass:this.regionClass,parentEl:t.partial(t.result,this,"el")};return t.reduce(e,function(e,t,a){return e[a]=N(t,r),n._addRegion(e[a],a),e},{})},_addRegion:function(e,t){this.triggerMethod("before:add:region",this,t,e),e._parentView=this,e._name=t,this._regions[t]=e,this.triggerMethod("add:region",this,t,e)},removeRegion:function(e){var t=this._regions[e];return this._removeRegion(t,e),t},removeRegions:function(){var e=this._getRegions();return t.each(this._regions,t.bind(this._removeRegion,this)),e},_removeRegion:function(e,t){this.triggerMethod("before:remove:region",this,t,e),e.destroy(),this.triggerMethod("remove:region",this,t,e)},_removeReferences:function(e){delete this.regions[e],delete this._regions[e]},emptyRegions:function(){var e=this.getRegions();return _(e,"empty"),e},hasRegion:function(e){return!!this.getRegion(e)},getRegion:function(e){return this._isRendered||this.render(),this._regions[e]},_getRegions:function(){return t.clone(this._regions)},getRegions:function(){return this._isRendered||this.render(),this._getRegions()},showChildView:function(e,t){for(var n=this.getRegion(e),r=arguments.length,a=Array(r>2?r-2:0),i=2;i<r;i++)a[i-2]=arguments[i];return n.show.apply(n,[t].concat(a))},detachChildView:function(e){return this.getRegion(e).detachView()},getChildView:function(e){return this.getRegion(e).currentView}},V={render:function(e,n){if(!e)throw new d({name:"TemplateNotFoundError",message:"Cannot render the template since its false, null or undefined."});var r=t.isFunction(e)?e:y.get(e);return r(n)}},j=["behaviors","childViewEventPrefix","childViewEvents","childViewTriggers","collectionEvents","events","modelEvents","regionClass","regions","template","templateContext","triggers","ui"],P=e.View.extend({constructor:function(n){this.render=t.bind(this.render,this),this._setOptions(n),this.mergeOptions(n,j),monitorViewEvents(this),this._initBehaviors(),this._initRegions();var r=Array.prototype.slice.call(arguments);r[0]=this.options,e.View.prototype.constructor.apply(this,r),this.delegateEntityEvents(),this._triggerEventOnBehaviors("initialize",this)},serializeData:function(){return this.model||this.collection?this.model?this.serializeModel():{items:this.serializeCollection()}:{}},serializeModel:function(){return this.model?t.clone(this.model.attributes):{}},serializeCollection:function(){return this.collection?this.collection.map(function(e){return t.clone(e.attributes)}):{}},setElement:function(){var t=!!this.el;return e.View.prototype.setElement.apply(this,arguments),t&&(this._isRendered=!!this.$el.length,this._isAttached=o(this.el)),this._isRendered&&this.bindUIElements(),this},render:function(){return this._isDestroyed?this:(this.triggerMethod("before:render",this),this._isRendered&&this._reInitRegions(),this._renderTemplate(),this.bindUIElements(),this._isRendered=!0,this.triggerMethod("render",this),this)},_renderTemplate:function(){var e=this.getTemplate();if(!1!==e){var t=this.mixinTemplateContext(this.serializeData()),n=this._renderHtml(e,t);this.attachElContent(n)}else i("template:false is deprecated. Use _.noop.")},_renderHtml:function(e,t){return V.render(e,t,this)},getTemplate:function(){return this.template},mixinTemplateContext:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.result(this,"templateContext");return t.extend(e,n)},attachElContent:function(e){return this.setInnerContent(this.el,e),this},_removeChildren:function(){this.removeRegions()},_getImmediateChildren:function(){return t.chain(this._getRegions()).map("currentView").compact().value()}},{setRenderer:function(e){this.prototype._renderHtml=e}});t.extend(P.prototype,O,D);var L=["forEach","each","map","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","toArray","first","initial","rest","last","without","isEmpty","pluck","reduce","partition"],I=function(e,n){t.each(L,function(r){e[r]=function(){var e=t.values(t.result(this,n)),a=[e].concat(t.toArray(arguments));return t[r].apply(t,a)}})},B=function(e){this._views={},this._indexByModel={},this._indexByCustom={},this._updateLength(),t.each(e,t.bind(this.add,this))};I(B.prototype,"_views"),t.extend(B.prototype,{add:function(e,t){return this._add(e,t)._updateLength()},_add:function(e,t){var n=e.cid;return this._views[n]=e,e.model&&(this._indexByModel[e.model.cid]=n),t&&(this._indexByCustom[t]=n),this},findByModel:function(e){return this.findByModelCid(e.cid)},findByModelCid:function(e){var t=this._indexByModel[e];return this.findByCid(t)},findByCustom:function(e){var t=this._indexByCustom[e];return this.findByCid(t)},findByIndex:function(e){return t.values(this._views)[e]},findByCid:function(e){return this._views[e]},remove:function(e){return this._remove(e)._updateLength()},_remove:function(e){var n=e.cid;return e.model&&delete this._indexByModel[e.model.cid],t.some(this._indexByCustom,t.bind(function(e,t){if(e===n)return delete this._indexByCustom[t],!0},this)),delete this._views[n],this},_updateLength:function(){return this.length=t.size(this._views),this}});var z=["behaviors","childView","childViewEventPrefix","childViewEvents","childViewOptions","childViewTriggers","collectionEvents","events","filter","emptyView","emptyViewOptions","modelEvents","reorderOnSort","sort","triggers","ui","viewComparator"],U=e.View.extend({sort:!0,constructor:function(n){this.render=t.bind(this.render,this),this._setOptions(n),this.mergeOptions(n,z),monitorViewEvents(this),this._initBehaviors(),this.once("render",this._initialEvents),this._initChildViewStorage(),this._bufferedChildren=[];var r=Array.prototype.slice.call(arguments);r[0]=this.options,e.View.prototype.constructor.apply(this,r),this.delegateEntityEvents(),this._triggerEventOnBehaviors("initialize",this)},_startBuffering:function(){this._isBuffering=!0},_endBuffering:function(){var e=!!this._isAttached,n=e?this._getImmediateChildren():[];this._isBuffering=!1,t.each(n,function(e){triggerMethodOn(e,"before:attach",e)}),this.attachBuffer(this,this._createBuffer()),t.each(n,function(e){e._isAttached=!0,triggerMethodOn(e,"attach",e)}),this._bufferedChildren=[]},_getImmediateChildren:function(){return t.values(this.children._views)},_initialEvents:function(){this.collection&&(this.listenTo(this.collection,"add",this._onCollectionAdd),this.listenTo(this.collection,"update",this._onCollectionUpdate),this.listenTo(this.collection,"reset",this.render),this.sort&&this.listenTo(this.collection,"sort",this._sortViews))},_onCollectionAdd:function(e,n,r){var a=void 0!==r.at&&(r.index||n.indexOf(e));(this.filter||!1===a)&&(a=t.indexOf(this._filteredSortedModels(a),e)),this._shouldAddChild(e,a)&&(this._destroyEmptyView(),this._addChild(e,a))},_onCollectionUpdate:function(e,t){var n=t.changes;this._removeChildModels(n.removed)},_removeChildModels:function(e){var t=this._getRemovedViews(e);t.length&&(this.children._updateLength(),this._updateIndices(t,!1),this.isEmpty()&&this._showEmptyView())},_getRemovedViews:function(e){var n=this;return t.reduce(e,function(e,t){var r=t&&n.children.findByModel(t);return!r||r._isDestroyed?e:(n._removeChildView(r),e.push(r),e)},[])},_removeChildView:function(e){this.triggerMethod("before:remove:child",this,e),this.children._remove(e),e.destroy?e.destroy():destroyBackboneView(e),this.stopListening(e),this.triggerMethod("remove:child",this,e)},setElement:function(){var t=!!this.el;return e.View.prototype.setElement.apply(this,arguments),t&&(this._isAttached=o(this.el)),this},render:function(){return this._isDestroyed?this:(this.triggerMethod("before:render",this),this._renderChildren(),this._isRendered=!0,this.triggerMethod("render",this),this)},setFilter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.preventRender,r=this._isRendered&&!this._isDestroyed,a=this.filter!==e,i=r&&a&&!n;if(i){var o=this._filteredSortedModels();this.filter=e;var s=this._filteredSortedModels();this._applyModelDeltas(s,o)}else this.filter=e;return this},removeFilter:function(e){return this.setFilter(null,e)},_applyModelDeltas:function(e,n){var r=this,a={};t.each(e,function(e,t){var n=!r.children.findByModel(e);n&&r._onCollectionAdd(e,r.collection,{at:t}),a[e.cid]=!0});var i=t.filter(n,function(e){return!a[e.cid]&&r.children.findByModel(e)});this._removeChildModels(i)},reorder:function(){var e=this.children,n=this._filteredSortedModels();if(!n.length&&this._showingEmptyView)return this;var r=t.some(n,function(t){return!e.findByModel(t)});if(r)this.render();else{var a=[],i=e.reduce(function(e,r){var i=t.indexOf(n,r.model);return-1===i?(a.push(r.model),e):(r._index=i,e[i]=r.el,e)},new Array(n.length));this.triggerMethod("before:reorder",this),this._appendReorderedChildren(i),this._removeChildModels(a),this.triggerMethod("reorder",this)}return this},resortView:function(){return this.reorderOnSort?this.reorder():this._renderChildren(),this},_sortViews:function(){var e=this,n=this._filteredSortedModels(),r=t.find(n,function(t,n){var r=e.children.findByModel(t);return!r||r._index!==n});r&&this.resortView()},_emptyViewIndex:-1,_appendReorderedChildren:function(e){this.appendChildren(this.el,e)},_renderChildren:function(){this._isRendered&&(this._destroyEmptyView(),this._destroyChildren());var e=this._filteredSortedModels();this.isEmpty({processedModels:e})?this._showEmptyView():(this.triggerMethod("before:render:children",this),this._startBuffering(),this._showCollection(e),this._endBuffering(),this.triggerMethod("render:children",this))},_createView:function(e,t){var n=this._getChildView(e),r=this._getChildViewOptions(e,t),a=this.buildChildView(e,n,r);return a},_setupChildView:function(e,t){monitorViewEvents(e),this._proxyChildViewEvents(e),this.sort&&(e._index=t)},_showCollection:function(e){t.each(e,t.bind(this._addChild,this)),this.children._updateLength()},_filteredSortedModels:function(e){if(!this.collection||!this.collection.length)return[];var t=this.getViewComparator(),n=this.collection.models;if(e=Math.min(Math.max(e,0),n.length-1),t){var r=void 0;e&&(r=n[e],n=n.slice(0,e).concat(n.slice(e+1))),n=this._sortModelsBy(n,t),r&&n.splice(e,0,r)}return n=this._filterModels(n)},getViewComparator:function(){return this.viewComparator},_filterModels:function(e){var n=this;return this.filter&&(e=t.filter(e,function(e,t){return n._shouldAddChild(e,t)})),e},_sortModelsBy:function(e,n){return"string"==typeof n?t.sortBy(e,function(e){return e.get(n)}):1===n.length?t.sortBy(e,t.bind(n,this)):t.clone(e).sort(t.bind(n,this))},_showEmptyView:function(){var n=this._getEmptyView();if(n&&!this._showingEmptyView){this._showingEmptyView=!0;var r=new e.Model,a=this.emptyViewOptions||this.childViewOptions;t.isFunction(a)&&(a=a.call(this,r,this._emptyViewIndex));var i=this.buildChildView(r,n,a);this.triggerMethod("before:render:empty",this,i),this.addChildView(i,0),this.triggerMethod("render:empty",this,i)}},_destroyEmptyView:function(){this._showingEmptyView&&(this.triggerMethod("before:remove:empty",this),this._destroyChildren(),delete this._showingEmptyView,this.triggerMethod("remove:empty",this))},_getEmptyView:function(){var e=this.emptyView;if(e)return this._getView(e)},_getChildView:function(e){var t=this.childView;if(!t)throw new d({name:"NoChildViewError",message:'A "childView" must be specified'});if(!(t=this._getView(t,e)))throw new d({name:"InvalidChildViewError",message:'"childView" must be a view class or a function that returns a view class'});return t},_getView:function(n,r){return n.prototype instanceof e.View||n===e.View?n:t.isFunction(n)?n.call(this,r):void 0},_addChild:function(e,t){var n=this._createView(e,t);return this.addChildView(n,t),n},_getChildViewOptions:function(e,n){return t.isFunction(this.childViewOptions)?this.childViewOptions(e,n):this.childViewOptions},addChildView:function(e,t){return this.triggerMethod("before:add:child",this,e),this._setupChildView(e,t),this._isBuffering?this.children._add(e):(this._updateIndices(e,!0),this.children.add(e)),this._renderView(e),this._attachView(e,t),this.triggerMethod("add:child",this,e),e},_updateIndices:function(e,n){if(this.sort)if(n){var r=t.isArray(e)?t.max(e,"_index"):e;t.isObject(r)&&this.children.each(function(e){e._index>=r._index&&(e._index+=1)})}else t.each(t.sortBy(this.children._views,"_index"),function(e,t){e._index=t})},_renderView:function(e){e._isRendered||(e.supportsRenderLifecycle||triggerMethodOn(e,"before:render",e),e.render(),e.supportsRenderLifecycle||(e._isRendered=!0,triggerMethodOn(e,"render",e)))},_attachView:function(e,t){var n=!e._isAttached&&!this._isBuffering&&this._isAttached;n&&triggerMethodOn(e,"before:attach",e),this.attachHtml(this,e,t),n&&(e._isAttached=!0,triggerMethodOn(e,"attach",e))},buildChildView:function(e,n,r){var a=t.extend({model:e},r);return new n(a)},removeChildView:function(e){return!e||e._isDestroyed?e:(this._removeChildView(e),this.children._updateLength(),this._updateIndices(e,!1),e)},isEmpty:function(e){var n=void 0;return t.result(e,"processedModels")?n=e.processedModels:(n=this.collection?this.collection.models:[],n=this._filterModels(n)),0===n.length},attachBuffer:function(e,t){this.appendChildren(e.el,t)},_createBuffer:function(){var e=this,n=this.createBuffer();return t.each(this._bufferedChildren,function(t){e.appendChildren(n,t.el)}),n},attachHtml:function(e,t,n){e._isBuffering?e._bufferedChildren.splice(n,0,t):e._insertBefore(t,n)||e._insertAfter(t)},_insertBefore:function(e,t){var n=void 0,r=this.sort&&t<this.children.length-1;return r&&(n=this.children.find(function(e){return e._index===t+1})),!!n&&(this.beforeEl(n.el,e.el),!0)},_insertAfter:function(e){this.appendChildren(this.el,e.el)},_initChildViewStorage:function(){this.children=new B},_removeChildren:function(){this._destroyChildren()},_destroyChildren:function(e){this.children.length&&(this.triggerMethod("before:destroy:children",this),this.children.each(t.bind(this._removeChildView,this)),this.children._updateLength(),this.triggerMethod("destroy:children",this))},_shouldAddChild:function(e,n){var r=this.filter;return!t.isFunction(r)||r.call(this,e,n,this.collection)}});t.extend(U.prototype,O);var F=function(){this._init()};function stringComparator(e,t){return t.model&&t.model.get(e)}I(F.prototype,"_views"),t.extend(F.prototype,{_init:function(){this._views=[],this._viewsByCid={},this._indexByModel={},this._updateLength()},_add:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._views.length,n=e.cid;this._viewsByCid[n]=e,e.model&&(this._indexByModel[e.model.cid]=n),this._views.splice(t,0,e),this._updateLength()},_sort:function(e){return"string"==typeof e?(e=t.partial(stringComparator,e),this._sortBy(e)):1===e.length?this._sortBy(e):this._views.sort(e)},_sortBy:function(e){var n=t.sortBy(this._views,e);return this._set(n),n},_set:function(e){this._views.length=0,this._views.push.apply(this._views,e.slice(0)),this._updateLength()},findByModel:function(e){return this.findByModelCid(e.cid)},findByModelCid:function(e){var t=this._indexByModel[e];return this.findByCid(t)},findByIndex:function(e){return this._views[e]},findIndexByView:function(e){return this._views.indexOf(e)},findByCid:function(e){return this._viewsByCid[e]},_remove:function(e){if(this._viewsByCid[e.cid]){e.model&&delete this._indexByModel[e.model.cid],delete this._viewsByCid[e.cid];var t=this.findIndexByView(e);this._views.splice(t,1),this._updateLength()}},_updateLength:function(){this.length=this._views.length}});var H=["behaviors","childView","childViewEventPrefix","childViewEvents","childViewOptions","childViewTriggers","collectionEvents","emptyView","emptyViewOptions","events","modelEvents","sortWithCollection","triggers","ui","viewComparator","viewFilter"],q=e.View.extend({sortWithCollection:!0,constructor:function(t){this._setOptions(t),this.mergeOptions(t,H),monitorViewEvents(this),this.once("render",this._initialEvents),this._initChildViewStorage(),this._initBehaviors();var n=Array.prototype.slice.call(arguments);n[0]=this.options,e.View.prototype.constructor.apply(this,n),this._initEmptyRegion(),this.delegateEntityEvents(),this._triggerEventOnBehaviors("initialize",this)},_initChildViewStorage:function(){this.children=new F},_initEmptyRegion:function(){this.emptyRegion=new R({el:this.el}),this.emptyRegion._parentView=this},_initialEvents:function(){this.listenTo(this.collection,{sort:this._onCollectionSort,reset:this._onCollectionReset,update:this._onCollectionUpdate})},_onCollectionSort:function(){var e=this;if(this.sortWithCollection&&this.collection.length===this.children.length){var t=this.collection.some(function(t){return!e.children.findByModel(t)});t||this.sort()}},_onCollectionReset:function(){this.render()},_onCollectionUpdate:function(e,t){var n=t.changes,r=this._removeChildModels(n.removed);this._addChildModels(n.added),this._detachChildren(r),this._showChildren(),this._removeChildViews(r)},_removeChildModels:function(e){return t.map(e,t.bind(this._removeChildModel,this))},_removeChildModel:function(e){var t=this.children.findByModel(e);return this._removeChild(t),t},_removeChild:function(e){this.triggerMethod("before:remove:child",this,e),this.children._remove(e),this.triggerMethod("remove:child",this,e)},_addChildModels:function(e){return t.map(e,t.bind(this._addChildModel,this))},_addChildModel:function(e){var t=this._createChildView(e);return this._addChild(t),t},_createChildView:function(e){var t=this._getChildView(e),n=this._getChildViewOptions(e),r=this.buildChildView(e,t,n);return r},_addChild:function(e,t){this.triggerMethod("before:add:child",this,e),this._setupChildView(e),this.children._add(e,t),this.triggerMethod("add:child",this,e)},_getChildView:function(e){var t=this.childView;if(!t)throw new d({name:"NoChildViewError",message:'A "childView" must be specified'});if(!(t=this._getView(t,e)))throw new d({name:"InvalidChildViewError",message:'"childView" must be a view class or a function that returns a view class'});return t},_getView:function(n,r){return n.prototype instanceof e.View||n===e.View?n:t.isFunction(n)?n.call(this,r):void 0},_getChildViewOptions:function(e){return t.isFunction(this.childViewOptions)?this.childViewOptions(e):this.childViewOptions},buildChildView:function(e,n,r){var a=t.extend({model:e},r);return new n(a)},_setupChildView:function(e){monitorViewEvents(e),e.on("destroy",this.removeChildView,this),this._proxyChildViewEvents(e)},_getImmediateChildren:function(){return this.children._views},setElement:function(){var t=!!this.el;return e.View.prototype.setElement.apply(this,arguments),t&&(this._isAttached=o(this.el)),this},render:function(){return this._isDestroyed?this:(this.triggerMethod("before:render",this),this._destroyChildren(),this.children._init(),this.collection&&this._addChildModels(this.collection.models),this._showChildren(),this._isRendered=!0,this.triggerMethod("render",this),this)},sort:function(){return this._isDestroyed?this:this.children.length?(this._showChildren(),this):this},_showChildren:function(){this.isEmpty()?this._showEmptyView():(this._sortChildren(),this.filter())},isEmpty:function(e){return e||!this.children.length},_showEmptyView:function(){var e=this._getEmptyView();if(e){var t=this._getEmptyViewOptions();this.emptyRegion.show(new e(t))}},_getEmptyView:function(){var e=this.emptyView;if(e)return this._getView(e)},_destroyEmptyView:function(){this.emptyRegion.hasView()&&this.emptyRegion.empty()},_getEmptyViewOptions:function(){var e=this.emptyViewOptions||this.childViewOptions;return t.isFunction(e)?e.call(this):e},_sortChildren:function(){this.triggerMethod("before:sort",this);var e=this.getComparator();t.isFunction(e)&&(e=e.bind(this)),this.children._sort(e),this.triggerMethod("sort",this)},setComparator:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.preventRender,r=this.viewComparator!==e,a=r&&!n;return this.viewComparator=e,a&&this.sort(),this},removeComparator:function(e){return this.setComparator(null,e)},getComparator:function(){return this.viewComparator||this._viewComparator},_viewComparator:function(e){if(this.collection)return this.collection.indexOf(e.model)},filter:function(){if(this._isDestroyed)return this;if(!this.children.length)return this;var e=this._filterChildren();return this._renderChildren(e),this},_filterChildren:function(){var e=this._getFilter();if(!e)return this.children._views;this.triggerMethod("before:filter",this);var n=this.children.partition(t.bind(e,this));return this._detachChildren(n[1]),this.triggerMethod("filter",this),n[0]},_getFilter:function(){var e=this.getFilter();if(!e)return!1;if(t.isFunction(e))return e;if(t.isObject(e)){var n=t.matches(e);return function(e){return n(e.model&&e.model.attributes)}}if(t.isString(e))return function(t){return t.model&&t.model.get(e)};throw new d({name:"InvalidViewFilterError",message:'"viewFilter" must be a function, predicate object literal, a string indicating a model attribute, or falsy'})},getFilter:function(){return this.viewFilter},setFilter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.preventRender,r=this.viewFilter!==e,a=r&&!n;return this.viewFilter=e,a&&this.filter(),this},removeFilter:function(e){return this.setFilter(null,e)},_detachChildren:function(e){t.each(e,t.bind(this._detachChildView,this))},_detachChildView:function(e){var t=!!e._isAttached;t&&triggerMethodOn(e,"before:detach",e),this.detachHtml(e),t&&(e._isAttached=!1,triggerMethodOn(e,"detach",e))},detachHtml:function(e){this.detachEl(e.el)},_renderChildren:function(e){if(this.isEmpty(!e.length))this._showEmptyView();else{this._destroyEmptyView(),this.triggerMethod("before:render:children",this,e);var t=this._getBuffer(e);this._attachChildren(t,e),this.triggerMethod("render:children",this,e)}},_attachChildren:function(e,n){var r=!!this._isAttached;n=r?n:[],t.each(n,function(e){e._isAttached||triggerMethodOn(e,"before:attach",e)}),this.attachHtml(this,e),t.each(n,function(e){e._isAttached||(e._isAttached=!0,triggerMethodOn(e,"attach",e))})},_getBuffer:function(e){var n=this,r=this.createBuffer();return t.each(e,function(e){n._renderChildView(e),n.appendChildren(r,e.el)}),r},_renderChildView:function(e){e._isRendered||(e.supportsRenderLifecycle||triggerMethodOn(e,"before:render",e),e.render(),e.supportsRenderLifecycle||(e._isRendered=!0,triggerMethodOn(e,"render",e)))},attachHtml:function(e,t){this.appendChildren(e.el,t)},addChildView:function(e,t){return!e||e._isDestroyed?e:(this._addChild(e,t),this._showChildren(),e)},detachChildView:function(e){return this.removeChildView(e,{shouldDetach:!0}),e},removeChildView:function(e,t){return e?(this._removeChildView(e,t),this._removeChild(e),this.isEmpty()&&this._showEmptyView(),e):e},_removeChildViews:function(e){t.each(e,t.bind(this._removeChildView,this))},_removeChildView:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.shouldDetach;e.off("destroy",this.removeChildView,this),n?this._detachChildView(e):this._destroyChildView(e),this.stopListening(e)},_destroyChildView:function(e){e._isDestroyed||(e.destroy?e.destroy():destroyBackboneView(e))},_removeChildren:function(){this._destroyChildren(),this.emptyRegion.destroy()},_destroyChildren:function(){this.children&&this.children.length&&(this.triggerMethod("before:destroy:children",this),this.children.each(t.bind(this._removeChildView,this)),this.triggerMethod("destroy:children",this))}});t.extend(q.prototype,O);var W=["childViewContainer","template","templateContext"],$=U.extend({constructor:function(e){i("CompositeView is deprecated. Convert to View at your earliest convenience"),this.mergeOptions(e,W),U.prototype.constructor.apply(this,arguments)},_initialEvents:function(){this.collection&&(this.listenTo(this.collection,"add",this._onCollectionAdd),this.listenTo(this.collection,"update",this._onCollectionUpdate),this.listenTo(this.collection,"reset",this.renderChildren),this.sort&&this.listenTo(this.collection,"sort",this._sortViews))},_getChildView:function(e){var t=this.childView;if(!t)return this.constructor;if(!(t=this._getView(t,e)))throw new d({name:"InvalidChildViewError",message:'"childView" must be a view class or a function that returns a view class'});return t},serializeData:function(){return this.serializeModel()},render:function(){return this._isDestroyed?this:(this._isRendering=!0,this.resetChildViewContainer(),this.triggerMethod("before:render",this),this._renderTemplate(),this.bindUIElements(),this.renderChildren(),this._isRendering=!1,this._isRendered=!0,this.triggerMethod("render",this),this)},renderChildren:function(){(this._isRendered||this._isRendering)&&U.prototype._renderChildren.call(this)},attachBuffer:function(e,t){var n=this.getChildViewContainer(e);this.appendChildren(n,t)},_insertAfter:function(e){var t=this.getChildViewContainer(this,e);this.appendChildren(t,e.el)},_appendReorderedChildren:function(e){var t=this.getChildViewContainer(this);this.appendChildren(t,e)},getChildViewContainer:function(e,n){if(e.$childViewContainer)return e.$childViewContainer;var r=void 0,a=e.childViewContainer;if(a){var i=t.result(e,"childViewContainer");if((r="@"===i.charAt(0)&&e.ui?e.ui[i.substr(4)]:this.findEls(i,e.$el)).length<=0)throw new d({name:"ChildViewContainerMissingError",message:'The specified "childViewContainer" was not found: '+e.childViewContainer})}else r=e.$el;return e.$childViewContainer=r,r},resetChildViewContainer:function(){this.$childViewContainer&&(this.$childViewContainer=void 0)}}),Y=t.pick(P.prototype,"serializeModel","getTemplate","_renderTemplate","_renderHtml","mixinTemplateContext","attachElContent");t.extend($.prototype,Y);var G=["collectionEvents","events","modelEvents","triggers","ui"],X=v.extend({cidPrefix:"mnb",constructor:function(e,n){this.view=n,this.defaults&&i("Behavior defaults are deprecated. For similar functionality set options on the Behavior class."),this.defaults=t.clone(t.result(this,"defaults",{})),this._setOptions(this.defaults,e),this.mergeOptions(this.options,G),this.ui=t.extend({},t.result(this,"ui"),t.result(n,"ui")),v.apply(this,arguments)},$:function(){return this.view.$.apply(this.view,arguments)},destroy:function(){return this.stopListening(),this.view._removeBehavior(this),this},proxyViewProperties:function(){return this.$el=this.view.$el,this.el=this.view.el,this},bindUIElements:function(){return this._bindUIElements(),this},unbindUIElements:function(){return this._unbindUIElements(),this},getUI:function(e){return this._getUI(e)},delegateEntityEvents:function(){return this._delegateEntityEvents(this.view.model,this.view.collection),this},undelegateEntityEvents:function(){return this._undelegateEntityEvents(this.view.model,this.view.collection),this},getEvents:function(){var e=this,n=this.normalizeUIKeys(t.result(this,"events"));return t.reduce(n,function(n,r,a){if(t.isFunction(r)||(r=e[r]),r)return a=C(a),n[a]=t.bind(r,e),n},{})},getTriggers:function(){if(this.triggers){var e=this.normalizeUIKeys(t.result(this,"triggers"));return this._getViewTriggers(this.view,e)}}});t.extend(X.prototype,x,T,M);var K=["region","regionClass"],Z=v.extend({cidPrefix:"mna",constructor:function(e){this._setOptions(e),this.mergeOptions(e,K),this._initRegion(),v.prototype.constructor.apply(this,arguments)},regionClass:R,_initRegion:function(){var e=this.region;if(e){var t={regionClass:this.regionClass};this._region=N(e,t)}},getRegion:function(){return this._region},showView:function(e){for(var t=this.getRegion(),n=arguments.length,r=Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];return t.show.apply(t,[e].concat(r))},getView:function(){return this.getRegion().currentView},start:function(e){return this.triggerMethod("before:start",this,e),this.triggerMethod("start",this,e),this}}),J=["appRoutes","controller"],Q=e.Router.extend({constructor:function(t){this._setOptions(t),this.mergeOptions(t,J),e.Router.apply(this,arguments);var n=this.appRoutes,r=this._getController();this.processAppRoutes(r,n),this.on("route",this._processOnRoute,this)},appRoute:function(e,t){var n=this._getController();return this._addAppRoute(n,e,t),this},_processOnRoute:function(e,n){if(t.isFunction(this.onRoute)){var r=t.invert(this.appRoutes)[e];this.onRoute(e,r,n)}},processAppRoutes:function(e,n){var r=this;if(!n)return this;var a=t.keys(n).reverse();return t.each(a,function(t){r._addAppRoute(e,t,n[t])}),this},_getController:function(){return this.controller},_addAppRoute:function(e,n,r){var a=e[r];if(!a)throw new d('Method "'+r+'" was not found on the controller');this.route(n,r,t.bind(a,e))},triggerMethod:triggerMethod$1});t.extend(Q.prototype,p);var ee=e.Marionette,te=e.Marionette={};return te.noConflict=function(){return e.Marionette=ee,this},te.bindEvents=r(bindEvents),te.unbindEvents=r(unbindEvents),te.bindRequests=r(bindRequests),te.unbindRequests=r(unbindRequests),te.mergeOptions=r(s),te.getOption=r(l),te.normalizeMethods=r(u),te.extend=a,te.isNodeAttached=o,te.deprecate=i,te.triggerMethod=r(triggerMethod$1),te.triggerMethodOn=triggerMethodOn,te.isEnabled=isEnabled,te.setEnabled=function(e,t){return S[e]=t},te.monitorViewEvents=monitorViewEvents,te.Behaviors={},te.Behaviors.behaviorsLookup=function(){throw new d({message:"You must define where your behaviors are stored.",url:"marionette.behaviors.md#behaviorslookup"})},te.Application=Z,te.AppRouter=Q,te.Renderer=V,te.TemplateCache=y,te.View=P,te.CollectionView=U,te.NextCollectionView=q,te.CompositeView=$,te.Behavior=X,te.Region=R,te.Error=d,te.Object=v,te.DEV_MODE=!1,te.FEATURES=S,te.VERSION="3.3.1",te}(n(13),n(14),n(125))},function(e,t,n){e.exports=n(135).default},function(e,t){e.exports=function(e,t,n,r,a){var i={};return Object.keys(r).forEach(function(e){i[e]=r[e]}),i.enumerable=!!i.enumerable,i.configurable=!!i.configurable,("value"in i||i.initializer)&&(i.writable=!0),i=n.slice().reverse().reduce(function(n,r){return r(e,t,n)||n},i),a&&void 0!==i.initializer&&(i.value=i.initializer?i.initializer.call(a):void 0,i.initializer=void 0),void 0===i.initializer&&(Object.defineProperty(e,t,i),i=null),i}},function(e,t,n){(function(r){var a,i,o;o="object"==typeof self&&self.self===self&&self||"object"==typeof r&&r.global===r&&r,a=[n(14),n(15),t],void 0===(i=function(e,t,n){o.Backbone=function(e,t,n,r){var a=e.Backbone,i=Array.prototype.slice;t.VERSION="1.3.3",t.$=r,t.noConflict=function(){return e.Backbone=a,this},t.emulateHTTP=!1,t.emulateJSON=!1;var o=function(e,t,r){n.each(t,function(t,a){n[a]&&(e.prototype[a]=function(e,t,r){switch(e){case 1:return function(){return n[t](this[r])};case 2:return function(e){return n[t](this[r],e)};case 3:return function(e,a){return n[t](this[r],s(e,this),a)};case 4:return function(e,a,i){return n[t](this[r],s(e,this),a,i)};default:return function(){var e=i.call(arguments);return e.unshift(this[r]),n[t].apply(n,e)}}}(t,a,r))})},s=function(e,t){return n.isFunction(e)?e:n.isObject(e)&&!t._isModel(e)?l(e):n.isString(e)?function(t){return t.get(e)}:e},l=function(e){var t=n.matches(e);return function(e){return t(e.attributes)}},u=t.Events={},c=/\s+/,f=function(e,t,r,a,i){var o,s=0;if(r&&"object"==typeof r){void 0!==a&&"context"in i&&void 0===i.context&&(i.context=a);for(o=n.keys(r);s<o.length;s++)t=f(e,t,o[s],r[o[s]],i)}else if(r&&c.test(r))for(o=r.split(c);s<o.length;s++)t=e(t,o[s],a,i);else t=e(t,r,a,i);return t};u.on=function(e,t,n){return h(this,e,t,n)};var h=function(e,t,n,r,a){if(e._events=f(d,e._events||{},t,n,{context:r,ctx:e,listening:a}),a){var i=e._listeners||(e._listeners={});i[a.id]=a}return e};u.listenTo=function(e,t,r){if(!e)return this;var a=e._listenId||(e._listenId=n.uniqueId("l")),i=this._listeningTo||(this._listeningTo={}),o=i[a];if(!o){var s=this._listenId||(this._listenId=n.uniqueId("l"));o=i[a]={obj:e,objId:a,id:s,listeningTo:i,count:0}}return h(e,t,r,this,o),this};var d=function(e,t,n,r){if(n){var a=e[t]||(e[t]=[]),i=r.context,o=r.ctx,s=r.listening;s&&s.count++,a.push({callback:n,context:i,ctx:i||o,listening:s})}return e};u.off=function(e,t,n){return this._events?(this._events=f(p,this._events,e,t,{context:n,listeners:this._listeners}),this):this},u.stopListening=function(e,t,r){var a=this._listeningTo;if(!a)return this;for(var i=e?[e._listenId]:n.keys(a),o=0;o<i.length;o++){var s=a[i[o]];if(!s)break;s.obj.off(t,r,this)}return this};var p=function(e,t,r,a){if(e){var i,o=0,s=a.context,l=a.listeners;if(t||r||s){for(var u=t?[t]:n.keys(e);o<u.length;o++){t=u[o];var c=e[t];if(!c)break;for(var f=[],h=0;h<c.length;h++){var d=c[h];r&&r!==d.callback&&r!==d.callback._callback||s&&s!==d.context?f.push(d):(i=d.listening)&&0==--i.count&&(delete l[i.id],delete i.listeningTo[i.objId])}f.length?e[t]=f:delete e[t]}return e}for(var p=n.keys(l);o<p.length;o++)i=l[p[o]],delete l[i.id],delete i.listeningTo[i.objId]}};u.once=function(e,t,r){var a=f(m,{},e,t,n.bind(this.off,this));return"string"==typeof e&&null==r&&(t=void 0),this.on(a,t,r)},u.listenToOnce=function(e,t,r){var a=f(m,{},t,r,n.bind(this.stopListening,this,e));return this.listenTo(e,a)};var m=function(e,t,r,a){if(r){var i=e[t]=n.once(function(){a(t,i),r.apply(this,arguments)});i._callback=r}return e};u.trigger=function(e){if(!this._events)return this;for(var t=Math.max(0,arguments.length-1),n=Array(t),r=0;r<t;r++)n[r]=arguments[r+1];return f(g,this._events,e,void 0,n),this};var g=function(e,t,n,r){if(e){var a=e[t],i=e.all;a&&i&&(i=i.slice()),a&&v(a,r),i&&v(i,[t].concat(r))}return e},v=function(e,t){var n,r=-1,a=e.length,i=t[0],o=t[1],s=t[2];switch(t.length){case 0:for(;++r<a;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<a;)(n=e[r]).callback.call(n.ctx,i);return;case 2:for(;++r<a;)(n=e[r]).callback.call(n.ctx,i,o);return;case 3:for(;++r<a;)(n=e[r]).callback.call(n.ctx,i,o,s);return;default:for(;++r<a;)(n=e[r]).callback.apply(n.ctx,t);return}};u.bind=u.on,u.unbind=u.off,n.extend(t,u);var b=t.Model=function(e,t){var r=e||{};t||(t={}),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(r=this.parse(r,t)||{});var a=n.result(this,"defaults");r=n.defaults(n.extend({},a,r),a),this.set(r,t),this.changed={},this.initialize.apply(this,arguments)};n.extend(b.prototype,u,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",initialize:function(){},toJSON:function(e){return n.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return n.escape(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!n.iteratee(e,this)(this.attributes)},set:function(e,t,r){if(null==e)return this;var a;if("object"==typeof e?(a=e,r=t):(a={})[e]=t,r||(r={}),!this._validate(a,r))return!1;var i=r.unset,o=r.silent,s=[],l=this._changing;this._changing=!0,l||(this._previousAttributes=n.clone(this.attributes),this.changed={});var u=this.attributes,c=this.changed,f=this._previousAttributes;for(var h in a)t=a[h],n.isEqual(u[h],t)||s.push(h),n.isEqual(f[h],t)?delete c[h]:c[h]=t,i?delete u[h]:u[h]=t;if(this.idAttribute in a&&(this.id=this.get(this.idAttribute)),!o){s.length&&(this._pending=r);for(var d=0;d<s.length;d++)this.trigger("change:"+s[d],this,u[s[d]],r)}if(l)return this;if(!o)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger("change",this,r);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,n.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var r in this.attributes)t[r]=void 0;return this.set(t,n.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!n.isEmpty(this.changed):n.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&n.clone(this.changed);var t=this._changing?this._previousAttributes:this.attributes,r={};for(var a in e){var i=e[a];n.isEqual(t[a],i)||(r[a]=i)}return!!n.size(r)&&r},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(e){e=n.extend({parse:!0},e);var t=this,r=e.success;return e.success=function(n){var a=e.parse?t.parse(n,e):n;if(!t.set(a,e))return!1;r&&r.call(e.context,t,n,e),t.trigger("sync",t,n,e)},L(this,e),this.sync("read",this,e)},save:function(e,t,r){var a;null==e||"object"==typeof e?(a=e,r=t):(a={})[e]=t;var i=(r=n.extend({validate:!0,parse:!0},r)).wait;if(a&&!i){if(!this.set(a,r))return!1}else if(!this._validate(a,r))return!1;var o=this,s=r.success,l=this.attributes;r.success=function(e){o.attributes=l;var t=r.parse?o.parse(e,r):e;if(i&&(t=n.extend({},a,t)),t&&!o.set(t,r))return!1;s&&s.call(r.context,o,e,r),o.trigger("sync",o,e,r)},L(this,r),a&&i&&(this.attributes=n.extend({},l,a));var u=this.isNew()?"create":r.patch?"patch":"update";"patch"!==u||r.attrs||(r.attrs=a);var c=this.sync(u,this,r);return this.attributes=l,c},destroy:function(e){e=e?n.clone(e):{};var t=this,r=e.success,a=e.wait,i=function(){t.stopListening(),t.trigger("destroy",t,t.collection,e)};e.success=function(n){a&&i(),r&&r.call(e.context,t,n,e),t.isNew()||t.trigger("sync",t,n,e)};var o=!1;return this.isNew()?n.defer(e.success):(L(this,e),o=this.sync("delete",this,e)),a||i(),o},url:function(){var e=n.result(this,"urlRoot")||n.result(this.collection,"url")||P();if(this.isNew())return e;var t=this.get(this.idAttribute);return e.replace(/[^\/]$/,"$&/")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},n.extend({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=n.extend({},this.attributes,e);var r=this.validationError=this.validate(e,t)||null;return!r||(this.trigger("invalid",this,r,n.extend(t,{validationError:r})),!1)}}),o(b,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},"attributes");var y=t.Collection=function(e,t){t||(t={}),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,n.extend({silent:!0},t))},_={add:!0,remove:!0,merge:!0},w={add:!0,remove:!1},x=function(e,t,n){n=Math.min(Math.max(n,0),e.length);var r,a=Array(e.length-n),i=t.length;for(r=0;r<a.length;r++)a[r]=e[r+n];for(r=0;r<i;r++)e[r+n]=t[r];for(r=0;r<a.length;r++)e[r+i+n]=a[r]};n.extend(y.prototype,u,{model:b,initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return t.sync.apply(this,arguments)},add:function(e,t){return this.set(e,n.extend({merge:!1},t,w))},remove:function(e,t){t=n.extend({},t);var r=!n.isArray(e);e=r?[e]:e.slice();var a=this._removeModels(e,t);return!t.silent&&a.length&&(t.changes={added:[],merged:[],removed:a},this.trigger("update",this,t)),r?a[0]:a},set:function(e,t){if(null!=e){(t=n.extend({},_,t)).parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);var r=!n.isArray(e);e=r?[e]:e.slice();var a=t.at;null!=a&&(a=+a),a>this.length&&(a=this.length),a<0&&(a+=this.length+1);var i,o,s=[],l=[],u=[],c=[],f={},h=t.add,d=t.merge,p=t.remove,m=!1,g=this.comparator&&null==a&&!1!==t.sort,v=n.isString(this.comparator)?this.comparator:null;for(o=0;o<e.length;o++){i=e[o];var b=this.get(i);if(b){if(d&&i!==b){var y=this._isModel(i)?i.attributes:i;t.parse&&(y=b.parse(y,t)),b.set(y,t),u.push(b),g&&!m&&(m=b.hasChanged(v))}f[b.cid]||(f[b.cid]=!0,s.push(b)),e[o]=b}else h&&(i=e[o]=this._prepareModel(i,t))&&(l.push(i),this._addReference(i,t),f[i.cid]=!0,s.push(i))}if(p){for(o=0;o<this.length;o++)i=this.models[o],f[i.cid]||c.push(i);c.length&&this._removeModels(c,t)}var w=!1,k=!g&&h&&p;if(s.length&&k?(w=this.length!==s.length||n.some(this.models,function(e,t){return e!==s[t]}),this.models.length=0,x(this.models,s,0),this.length=this.models.length):l.length&&(g&&(m=!0),x(this.models,l,null==a?this.length:a),this.length=this.models.length),m&&this.sort({silent:!0}),!t.silent){for(o=0;o<l.length;o++)null!=a&&(t.index=a+o),(i=l[o]).trigger("add",i,this,t);(m||w)&&this.trigger("sort",this,t),(l.length||c.length||u.length)&&(t.changes={added:l,removed:c,merged:u},this.trigger("update",this,t))}return r?e[0]:e}},reset:function(e,t){t=t?n.clone(t):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],t);return t.previousModels=this.models,this._reset(),e=this.add(e,n.extend({silent:!0},t)),t.silent||this.trigger("reset",this,t),e},push:function(e,t){return this.add(e,n.extend({at:this.length},t))},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,n.extend({at:0},t))},shift:function(e){var t=this.at(0);return this.remove(t,e)},slice:function(){return i.apply(this.models,arguments)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(e.attributes||e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?"find":"filter"](e)},findWhere:function(e){return this.where(e,!0)},sort:function(e){var t=this.comparator;if(!t)throw new Error("Cannot sort a set without a comparator");e||(e={});var r=t.length;return n.isFunction(t)&&(t=n.bind(t,this)),1===r||n.isString(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger("sort",this,e),this},pluck:function(e){return this.map(e+"")},fetch:function(e){var t=(e=n.extend({parse:!0},e)).success,r=this;return e.success=function(n){var a=e.reset?"reset":"set";r[a](n,e),t&&t.call(e.context,r,n,e),r.trigger("sync",r,n,e)},L(this,e),this.sync("read",this,e)},create:function(e,t){var r=(t=t?n.clone(t):{}).wait;if(!(e=this._prepareModel(e,t)))return!1;r||this.add(e,t);var a=this,i=t.success;return t.success=function(e,t,n){r&&a.add(e,n),i&&i.call(n.context,e,t,n)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||"id"]},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;(t=t?n.clone(t):{}).collection=this;var r=new this.model(e,t);return r.validationError?(this.trigger("invalid",this,r.validationError,t),!1):r},_removeModels:function(e,t){for(var n=[],r=0;r<e.length;r++){var a=this.get(e[r]);if(a){var i=this.indexOf(a);this.models.splice(i,1),this.length--,delete this._byId[a.cid];var o=this.modelId(a.attributes);null!=o&&delete this._byId[o],t.silent||(t.index=i,a.trigger("remove",a,this,t)),n.push(a),this._removeReference(a,t)}}return n},_isModel:function(e){return e instanceof b},_addReference:function(e,t){this._byId[e.cid]=e;var n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on("all",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];var n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off("all",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if(("add"===e||"remove"===e)&&n!==this)return;if("destroy"===e&&this.remove(t,r),"change"===e){var a=this.modelId(t.previousAttributes()),i=this.modelId(t.attributes);a!==i&&(null!=a&&delete this._byId[a],null!=i&&(this._byId[i]=t))}}this.trigger.apply(this,arguments)}}),o(y,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},"models");var k=t.View=function(e){this.cid=n.uniqueId("view"),n.extend(this,n.pick(e,S)),this._ensureElement(),this.initialize.apply(this,arguments)},C=/^(\S+)\s*(.*)$/,S=["model","collection","el","id","attributes","className","tagName","events"];n.extend(k.prototype,u,{tagName:"div",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){this.$el=e instanceof t.$?e:t.$(e),this.el=this.$el[0]},delegateEvents:function(e){if(e||(e=n.result(this,"events")),!e)return this;for(var t in this.undelegateEvents(),e){var r=e[t];if(n.isFunction(r)||(r=this[r]),r){var a=t.match(C);this.delegate(a[1],a[2],n.bind(r,this))}}return this},delegate:function(e,t,n){return this.$el.on(e+".delegateEvents"+this.cid,t,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(".delegateEvents"+this.cid),this},undelegate:function(e,t,n){return this.$el.off(e+".delegateEvents"+this.cid,t,n),this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,"el"));else{var e=n.extend({},n.result(this,"attributes"));this.id&&(e.id=n.result(this,"id")),this.className&&(e.class=n.result(this,"className")),this.setElement(this._createElement(n.result(this,"tagName"))),this._setAttributes(e)}},_setAttributes:function(e){this.$el.attr(e)}}),t.sync=function(e,r,a){var i=T[e];n.defaults(a||(a={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON});var o={type:i,dataType:"json"};if(a.url||(o.url=n.result(r,"url")||P()),null!=a.data||!r||"create"!==e&&"update"!==e&&"patch"!==e||(o.contentType="application/json",o.data=JSON.stringify(a.attrs||r.toJSON(a))),a.emulateJSON&&(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),a.emulateHTTP&&("PUT"===i||"DELETE"===i||"PATCH"===i)){o.type="POST",a.emulateJSON&&(o.data._method=i);var s=a.beforeSend;a.beforeSend=function(e){if(e.setRequestHeader("X-HTTP-Method-Override",i),s)return s.apply(this,arguments)}}"GET"===o.type||a.emulateJSON||(o.processData=!1);var l=a.error;a.error=function(e,t,n){a.textStatus=t,a.errorThrown=n,l&&l.call(a.context,e,t,n)};var u=a.xhr=t.ajax(n.extend(o,a));return r.trigger("request",r,u,a),u};var T={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};t.ajax=function(){return t.$.ajax.apply(t.$,arguments)};var E=t.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},M=/\((.*?)\)/g,O=/(\(\?)?:\w+/g,A=/\*\w+/g,R=/[\-{}\[\]+?.,\\\^$|#\s]/g;n.extend(E.prototype,u,{initialize:function(){},route:function(e,r,a){n.isRegExp(e)||(e=this._routeToRegExp(e)),n.isFunction(r)&&(a=r,r=""),a||(a=this[r]);var i=this;return t.history.route(e,function(n){var o=i._extractParameters(e,n);!1!==i.execute(a,o,r)&&(i.trigger.apply(i,["route:"+r].concat(o)),i.trigger("route",r,o),t.history.trigger("route",i,r,o))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,n){return t.history.navigate(e,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,"routes");for(var e,t=n.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(R,"\\$&").replace(M,"(?:$1)?").replace(O,function(e,t){return t?e:"([^/?]+)"}).replace(A,"([^?]*?)"),new RegExp("^"+e+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(e,t){var r=e.exec(t).slice(1);return n.map(r,function(e,t){return t===r.length-1?e||null:e?decodeURIComponent(e):null})}});var N=t.History=function(){this.handlers=[],this.checkUrl=n.bind(this.checkUrl,this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},D=/^[#\/]|\s+$/g,V=/^\/+|\/+$/g,j=/#.*$/;N.started=!1,n.extend(N.prototype,u,{interval:50,atRoot:function(){var e=this.location.pathname.replace(/[^\/]$/,"$&/");return e===this.root&&!this.getSearch()},matchRoot:function(){var e=this.decodeFragment(this.location.pathname),t=e.slice(0,this.root.length-1)+"/";return t===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,"%2525"))},getSearch:function(){var e=this.location.href.replace(/#.*/,"").match(/\?.+/);return e?e[0]:""},getHash:function(e){var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:""},getPath:function(){var e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(D,"")},start:function(e){if(N.started)throw new Error("Backbone.history has already been started");if(N.started=!0,this.options=n.extend({root:"/"},this.options,e),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(V,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var t=this.root.slice(0,-1)||"/";return this.location.replace(t+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var r=document.body,a=r.insertBefore(this.iframe,r.firstChild).contentWindow;a.document.open(),a.document.close(),a.location.hash="#"+this.fragment}var i=window.addEventListener||function(e,t){return attachEvent("on"+e,t)};if(this._usePushState?i("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?i("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var e=window.removeEventListener||function(e,t){return detachEvent("on"+e,t)};this._usePushState?e("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&e("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),N.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),n.some(this.handlers,function(t){if(t.route.test(e))return t.callback(e),!0}))},navigate:function(e,t){if(!N.started)return!1;t&&!0!==t||(t={trigger:!!t}),e=this.getFragment(e||"");var n=this.root;""!==e&&"?"!==e.charAt(0)||(n=n.slice(0,-1)||"/");var r=n+e;if(e=this.decodeFragment(e.replace(j,"")),this.fragment!==e){if(this.fragment=e,this._usePushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){var a=this.iframe.contentWindow;t.replace||(a.document.open(),a.document.close()),this._updateHash(a.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){var r=e.href.replace(/(javascript:|#).*$/,"");e.replace(r+"#"+t)}else e.hash="#"+t}}),t.history=new N,b.extend=y.extend=E.extend=k.extend=N.extend=function(e,t){var r,a=this;return r=e&&n.has(e,"constructor")?e.constructor:function(){return a.apply(this,arguments)},n.extend(r,a,t),r.prototype=n.create(a.prototype,e),r.prototype.constructor=r,r.__super__=a.prototype,r};var P=function(){throw new Error('A "url" property or function must be specified')},L=function(e,t){var n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger("error",e,r,t)}};return t}(o,n,e,t)}.apply(t,a))||(e.exports=i)}).call(this,n(37))},function(e,t,n){(function(e,n){var r;!function(){var a="object"==typeof self&&self.self===self&&self||"object"==typeof e&&e.global===e&&e||this||{},i=a._,o=Array.prototype,s=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=o.push,c=o.slice,f=s.toString,h=s.hasOwnProperty,d=Array.isArray,p=Object.keys,m=Object.create,g=function(){},v=function(e){return e instanceof v?e:this instanceof v?void(this._wrapped=e):new v(e)};t.nodeType?a._=v:(!n.nodeType&&n.exports&&(t=n.exports=v),t._=v),v.VERSION="1.9.1";var b,y=function(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 3:return function(n,r,a){return e.call(t,n,r,a)};case 4:return function(n,r,a,i){return e.call(t,n,r,a,i)}}return function(){return e.apply(t,arguments)}},_=function(e,t,n){return v.iteratee!==b?v.iteratee(e,t):null==e?v.identity:v.isFunction(e)?y(e,t,n):v.isObject(e)&&!v.isArray(e)?v.matcher(e):v.property(e)};v.iteratee=b=function(e,t){return _(e,t,1/0)};var w=function(e,t){return t=null==t?e.length-1:+t,function(){for(var n=Math.max(arguments.length-t,0),r=Array(n),a=0;a<n;a++)r[a]=arguments[a+t];switch(t){case 0:return e.call(this,r);case 1:return e.call(this,arguments[0],r);case 2:return e.call(this,arguments[0],arguments[1],r)}var i=Array(t+1);for(a=0;a<t;a++)i[a]=arguments[a];return i[t]=r,e.apply(this,i)}},x=function(e){if(!v.isObject(e))return{};if(m)return m(e);g.prototype=e;var t=new g;return g.prototype=null,t},k=function(e){return function(t){return null==t?void 0:t[e]}},C=function(e,t){return null!=e&&h.call(e,t)},S=function(e,t){for(var n=t.length,r=0;r<n;r++){if(null==e)return;e=e[t[r]]}return n?e:void 0},T=Math.pow(2,53)-1,E=k("length"),M=function(e){var t=E(e);return"number"==typeof t&&t>=0&&t<=T};v.each=v.forEach=function(e,t,n){var r,a;if(t=y(t,n),M(e))for(r=0,a=e.length;r<a;r++)t(e[r],r,e);else{var i=v.keys(e);for(r=0,a=i.length;r<a;r++)t(e[i[r]],i[r],e)}return e},v.map=v.collect=function(e,t,n){t=_(t,n);for(var r=!M(e)&&v.keys(e),a=(r||e).length,i=Array(a),o=0;o<a;o++){var s=r?r[o]:o;i[o]=t(e[s],s,e)}return i};var O=function(e){return function(t,n,r,a){var i=arguments.length>=3;return function(t,n,r,a){var i=!M(t)&&v.keys(t),o=(i||t).length,s=e>0?0:o-1;for(a||(r=t[i?i[s]:s],s+=e);s>=0&&s<o;s+=e){var l=i?i[s]:s;r=n(r,t[l],l,t)}return r}(t,y(n,a,4),r,i)}};v.reduce=v.foldl=v.inject=O(1),v.reduceRight=v.foldr=O(-1),v.find=v.detect=function(e,t,n){var r=(M(e)?v.findIndex:v.findKey)(e,t,n);if(void 0!==r&&-1!==r)return e[r]},v.filter=v.select=function(e,t,n){var r=[];return t=_(t,n),v.each(e,function(e,n,a){t(e,n,a)&&r.push(e)}),r},v.reject=function(e,t,n){return v.filter(e,v.negate(_(t)),n)},v.every=v.all=function(e,t,n){t=_(t,n);for(var r=!M(e)&&v.keys(e),a=(r||e).length,i=0;i<a;i++){var o=r?r[i]:i;if(!t(e[o],o,e))return!1}return!0},v.some=v.any=function(e,t,n){t=_(t,n);for(var r=!M(e)&&v.keys(e),a=(r||e).length,i=0;i<a;i++){var o=r?r[i]:i;if(t(e[o],o,e))return!0}return!1},v.contains=v.includes=v.include=function(e,t,n,r){return M(e)||(e=v.values(e)),("number"!=typeof n||r)&&(n=0),v.indexOf(e,t,n)>=0},v.invoke=w(function(e,t,n){var r,a;return v.isFunction(t)?a=t:v.isArray(t)&&(r=t.slice(0,-1),t=t[t.length-1]),v.map(e,function(e){var i=a;if(!i){if(r&&r.length&&(e=S(e,r)),null==e)return;i=e[t]}return null==i?i:i.apply(e,n)})}),v.pluck=function(e,t){return v.map(e,v.property(t))},v.where=function(e,t){return v.filter(e,v.matcher(t))},v.findWhere=function(e,t){return v.find(e,v.matcher(t))},v.max=function(e,t,n){var r,a,i=-1/0,o=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=M(e)?e:v.values(e)).length;s<l;s++)null!=(r=e[s])&&r>i&&(i=r);else t=_(t,n),v.each(e,function(e,n,r){((a=t(e,n,r))>o||a===-1/0&&i===-1/0)&&(i=e,o=a)});return i},v.min=function(e,t,n){var r,a,i=1/0,o=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var s=0,l=(e=M(e)?e:v.values(e)).length;s<l;s++)null!=(r=e[s])&&r<i&&(i=r);else t=_(t,n),v.each(e,function(e,n,r){((a=t(e,n,r))<o||a===1/0&&i===1/0)&&(i=e,o=a)});return i},v.shuffle=function(e){return v.sample(e,1/0)},v.sample=function(e,t,n){if(null==t||n)return M(e)||(e=v.values(e)),e[v.random(e.length-1)];var r=M(e)?v.clone(e):v.values(e),a=E(r);t=Math.max(Math.min(t,a),0);for(var i=a-1,o=0;o<t;o++){var s=v.random(o,i),l=r[o];r[o]=r[s],r[s]=l}return r.slice(0,t)},v.sortBy=function(e,t,n){var r=0;return t=_(t,n),v.pluck(v.map(e,function(e,n,a){return{value:e,index:r++,criteria:t(e,n,a)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")};var A=function(e,t){return function(n,r,a){var i=t?[[],[]]:{};return r=_(r,a),v.each(n,function(t,a){var o=r(t,a,n);e(i,t,o)}),i}};v.groupBy=A(function(e,t,n){C(e,n)?e[n].push(t):e[n]=[t]}),v.indexBy=A(function(e,t,n){e[n]=t}),v.countBy=A(function(e,t,n){C(e,n)?e[n]++:e[n]=1});var R=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;v.toArray=function(e){return e?v.isArray(e)?c.call(e):v.isString(e)?e.match(R):M(e)?v.map(e,v.identity):v.values(e):[]},v.size=function(e){return null==e?0:M(e)?e.length:v.keys(e).length},v.partition=A(function(e,t,n){e[n?0:1].push(t)},!0),v.first=v.head=v.take=function(e,t,n){return null==e||e.length<1?null==t?void 0:[]:null==t||n?e[0]:v.initial(e,e.length-t)},v.initial=function(e,t,n){return c.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))},v.last=function(e,t,n){return null==e||e.length<1?null==t?void 0:[]:null==t||n?e[e.length-1]:v.rest(e,Math.max(0,e.length-t))},v.rest=v.tail=v.drop=function(e,t,n){return c.call(e,null==t||n?1:t)},v.compact=function(e){return v.filter(e,Boolean)};var N=function(e,t,n,r){for(var a=(r=r||[]).length,i=0,o=E(e);i<o;i++){var s=e[i];if(M(s)&&(v.isArray(s)||v.isArguments(s)))if(t)for(var l=0,u=s.length;l<u;)r[a++]=s[l++];else N(s,t,n,r),a=r.length;else n||(r[a++]=s)}return r};v.flatten=function(e,t){return N(e,t,!1)},v.without=w(function(e,t){return v.difference(e,t)}),v.uniq=v.unique=function(e,t,n,r){v.isBoolean(t)||(r=n,n=t,t=!1),null!=n&&(n=_(n,r));for(var a=[],i=[],o=0,s=E(e);o<s;o++){var l=e[o],u=n?n(l,o,e):l;t&&!n?(o&&i===u||a.push(l),i=u):n?v.contains(i,u)||(i.push(u),a.push(l)):v.contains(a,l)||a.push(l)}return a},v.union=w(function(e){return v.uniq(N(e,!0,!0))}),v.intersection=function(e){for(var t=[],n=arguments.length,r=0,a=E(e);r<a;r++){var i=e[r];if(!v.contains(t,i)){var o;for(o=1;o<n&&v.contains(arguments[o],i);o++);o===n&&t.push(i)}}return t},v.difference=w(function(e,t){return t=N(t,!0,!0),v.filter(e,function(e){return!v.contains(t,e)})}),v.unzip=function(e){for(var t=e&&v.max(e,E).length||0,n=Array(t),r=0;r<t;r++)n[r]=v.pluck(e,r);return n},v.zip=w(v.unzip),v.object=function(e,t){for(var n={},r=0,a=E(e);r<a;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n};var D=function(e){return function(t,n,r){n=_(n,r);for(var a=E(t),i=e>0?0:a-1;i>=0&&i<a;i+=e)if(n(t[i],i,t))return i;return-1}};v.findIndex=D(1),v.findLastIndex=D(-1),v.sortedIndex=function(e,t,n,r){for(var a=(n=_(n,r,1))(t),i=0,o=E(e);i<o;){var s=Math.floor((i+o)/2);n(e[s])<a?i=s+1:o=s}return i};var V=function(e,t,n){return function(r,a,i){var o=0,s=E(r);if("number"==typeof i)e>0?o=i>=0?i:Math.max(i+s,o):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,a)]===a?i:-1;if(a!=a)return(i=t(c.call(r,o,s),v.isNaN))>=0?i+o:-1;for(i=e>0?o:s-1;i>=0&&i<s;i+=e)if(r[i]===a)return i;return-1}};v.indexOf=V(1,v.findIndex,v.sortedIndex),v.lastIndexOf=V(-1,v.findLastIndex),v.range=function(e,t,n){null==t&&(t=e||0,e=0),n||(n=t<e?-1:1);for(var r=Math.max(Math.ceil((t-e)/n),0),a=Array(r),i=0;i<r;i++,e+=n)a[i]=e;return a},v.chunk=function(e,t){if(null==t||t<1)return[];for(var n=[],r=0,a=e.length;r<a;)n.push(c.call(e,r,r+=t));return n};var j=function(e,t,n,r,a){if(!(r instanceof t))return e.apply(n,a);var i=x(e.prototype),o=e.apply(i,a);return v.isObject(o)?o:i};v.bind=w(function(e,t,n){if(!v.isFunction(e))throw new TypeError("Bind must be called on a function");var r=w(function(a){return j(e,r,t,this,n.concat(a))});return r}),v.partial=w(function(e,t){var n=v.partial.placeholder,r=function(){for(var a=0,i=t.length,o=Array(i),s=0;s<i;s++)o[s]=t[s]===n?arguments[a++]:t[s];for(;a<arguments.length;)o.push(arguments[a++]);return j(e,r,this,this,o)};return r}),v.partial.placeholder=v,v.bindAll=w(function(e,t){var n=(t=N(t,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=t[n];e[r]=v.bind(e[r],e)}}),v.memoize=function(e,t){var n=function(r){var a=n.cache,i=""+(t?t.apply(this,arguments):r);return C(a,i)||(a[i]=e.apply(this,arguments)),a[i]};return n.cache={},n},v.delay=w(function(e,t,n){return setTimeout(function(){return e.apply(null,n)},t)}),v.defer=v.partial(v.delay,v,1),v.throttle=function(e,t,n){var r,a,i,o,s=0;n||(n={});var l=function(){s=!1===n.leading?0:v.now(),r=null,o=e.apply(a,i),r||(a=i=null)},u=function(){var u=v.now();s||!1!==n.leading||(s=u);var c=t-(u-s);return a=this,i=arguments,c<=0||c>t?(r&&(clearTimeout(r),r=null),s=u,o=e.apply(a,i),r||(a=i=null)):r||!1===n.trailing||(r=setTimeout(l,c)),o};return u.cancel=function(){clearTimeout(r),s=0,r=a=i=null},u},v.debounce=function(e,t,n){var r,a,i=function(t,n){r=null,n&&(a=e.apply(t,n))},o=w(function(o){if(r&&clearTimeout(r),n){var s=!r;r=setTimeout(i,t),s&&(a=e.apply(this,o))}else r=v.delay(i,t,this,o);return a});return o.cancel=function(){clearTimeout(r),r=null},o},v.wrap=function(e,t){return v.partial(t,e)},v.negate=function(e){return function(){return!e.apply(this,arguments)}},v.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},v.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},v.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},v.once=v.partial(v.before,2),v.restArguments=w;var P=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],I=function(e,t){var n=L.length,r=e.constructor,a=v.isFunction(r)&&r.prototype||s,i="constructor";for(C(e,i)&&!v.contains(t,i)&&t.push(i);n--;)(i=L[n])in e&&e[i]!==a[i]&&!v.contains(t,i)&&t.push(i)};v.keys=function(e){if(!v.isObject(e))return[];if(p)return p(e);var t=[];for(var n in e)C(e,n)&&t.push(n);return P&&I(e,t),t},v.allKeys=function(e){if(!v.isObject(e))return[];var t=[];for(var n in e)t.push(n);return P&&I(e,t),t},v.values=function(e){for(var t=v.keys(e),n=t.length,r=Array(n),a=0;a<n;a++)r[a]=e[t[a]];return r},v.mapObject=function(e,t,n){t=_(t,n);for(var r=v.keys(e),a=r.length,i={},o=0;o<a;o++){var s=r[o];i[s]=t(e[s],s,e)}return i},v.pairs=function(e){for(var t=v.keys(e),n=t.length,r=Array(n),a=0;a<n;a++)r[a]=[t[a],e[t[a]]];return r},v.invert=function(e){for(var t={},n=v.keys(e),r=0,a=n.length;r<a;r++)t[e[n[r]]]=n[r];return t},v.functions=v.methods=function(e){var t=[];for(var n in e)v.isFunction(e[n])&&t.push(n);return t.sort()};var B=function(e,t){return function(n){var r=arguments.length;if(t&&(n=Object(n)),r<2||null==n)return n;for(var a=1;a<r;a++)for(var i=arguments[a],o=e(i),s=o.length,l=0;l<s;l++){var u=o[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}};v.extend=B(v.allKeys),v.extendOwn=v.assign=B(v.keys),v.findKey=function(e,t,n){t=_(t,n);for(var r,a=v.keys(e),i=0,o=a.length;i<o;i++)if(t(e[r=a[i]],r,e))return r};var z,U,F=function(e,t,n){return t in n};v.pick=w(function(e,t){var n={},r=t[0];if(null==e)return n;v.isFunction(r)?(t.length>1&&(r=y(r,t[1])),t=v.allKeys(e)):(r=F,t=N(t,!1,!1),e=Object(e));for(var a=0,i=t.length;a<i;a++){var o=t[a],s=e[o];r(s,o,e)&&(n[o]=s)}return n}),v.omit=w(function(e,t){var n,r=t[0];return v.isFunction(r)?(r=v.negate(r),t.length>1&&(n=t[1])):(t=v.map(N(t,!1,!1),String),r=function(e,n){return!v.contains(t,n)}),v.pick(e,r,n)}),v.defaults=B(v.allKeys,!0),v.create=function(e,t){var n=x(e);return t&&v.extendOwn(n,t),n},v.clone=function(e){return v.isObject(e)?v.isArray(e)?e.slice():v.extend({},e):e},v.tap=function(e,t){return t(e),e},v.isMatch=function(e,t){var n=v.keys(t),r=n.length;if(null==e)return!r;for(var a=Object(e),i=0;i<r;i++){var o=n[i];if(t[o]!==a[o]||!(o in a))return!1}return!0},z=function(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;var a=typeof e;return("function"===a||"object"===a||"object"==typeof t)&&U(e,t,n,r)},U=function(e,t,n,r){e instanceof v&&(e=e._wrapped),t instanceof v&&(t=t._wrapped);var a=f.call(e);if(a!==f.call(t))return!1;switch(a){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0==+e?1/+e==1/t:+e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object Symbol]":return l.valueOf.call(e)===l.valueOf.call(t)}var i="[object Array]"===a;if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var o=e.constructor,s=t.constructor;if(o!==s&&!(v.isFunction(o)&&o instanceof o&&v.isFunction(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),i){if((u=e.length)!==t.length)return!1;for(;u--;)if(!z(e[u],t[u],n,r))return!1}else{var c,h=v.keys(e);if(u=h.length,v.keys(t).length!==u)return!1;for(;u--;)if(c=h[u],!C(t,c)||!z(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0},v.isEqual=function(e,t){return z(e,t)},v.isEmpty=function(e){return null==e||(M(e)&&(v.isArray(e)||v.isString(e)||v.isArguments(e))?0===e.length:0===v.keys(e).length)},v.isElement=function(e){return!(!e||1!==e.nodeType)},v.isArray=d||function(e){return"[object Array]"===f.call(e)},v.isObject=function(e){var t=typeof e;return"function"===t||"object"===t&&!!e},v.each(["Arguments","Function","String","Number","Date","RegExp","Error","Symbol","Map","WeakMap","Set","WeakSet"],function(e){v["is"+e]=function(t){return f.call(t)==="[object "+e+"]"}}),v.isArguments(arguments)||(v.isArguments=function(e){return C(e,"callee")});var H=a.document&&a.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof H&&(v.isFunction=function(e){return"function"==typeof e||!1}),v.isFinite=function(e){return!v.isSymbol(e)&&isFinite(e)&&!isNaN(parseFloat(e))},v.isNaN=function(e){return v.isNumber(e)&&isNaN(e)},v.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"===f.call(e)},v.isNull=function(e){return null===e},v.isUndefined=function(e){return void 0===e},v.has=function(e,t){if(!v.isArray(t))return C(e,t);for(var n=t.length,r=0;r<n;r++){var a=t[r];if(null==e||!h.call(e,a))return!1;e=e[a]}return!!n},v.noConflict=function(){return a._=i,this},v.identity=function(e){return e},v.constant=function(e){return function(){return e}},v.noop=function(){},v.property=function(e){return v.isArray(e)?function(t){return S(t,e)}:k(e)},v.propertyOf=function(e){return null==e?function(){}:function(t){return v.isArray(t)?S(e,t):e[t]}},v.matcher=v.matches=function(e){return e=v.extendOwn({},e),function(t){return v.isMatch(t,e)}},v.times=function(e,t,n){var r=Array(Math.max(0,e));t=y(t,n,1);for(var a=0;a<e;a++)r[a]=t(a);return r},v.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},v.now=Date.now||function(){return(new Date).getTime()};var q={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},W=v.invert(q),$=function(e){var t=function(t){return e[t]},n="(?:"+v.keys(e).join("|")+")",r=RegExp(n),a=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(a,t):e}};v.escape=$(q),v.unescape=$(W),v.result=function(e,t,n){v.isArray(t)||(t=[t]);var r=t.length;if(!r)return v.isFunction(n)?n.call(e):n;for(var a=0;a<r;a++){var i=null==e?void 0:e[t[a]];void 0===i&&(i=n,a=r),e=v.isFunction(i)?i.call(e):i}return e};var Y=0;v.uniqueId=function(e){var t=++Y+"";return e?e+t:t},v.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var G=/(.)^/,X={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},K=/\\|'|\r|\n|\u2028|\u2029/g,Z=function(e){return"\\"+X[e]};v.template=function(e,t,n){!t&&n&&(t=n),t=v.defaults({},t,v.templateSettings);var r,a=RegExp([(t.escape||G).source,(t.interpolate||G).source,(t.evaluate||G).source].join("|")+"|$","g"),i=0,o="__p+='";e.replace(a,function(t,n,r,a,s){return o+=e.slice(i,s).replace(K,Z),i=s+t.length,n?o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?o+="'+\n((__t=("+r+"))==null?'':__t)+\n'":a&&(o+="';\n"+a+"\n__p+='"),t}),o+="';\n",t.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(t.variable||"obj","_",o)}catch(e){throw e.source=o,e}var s=function(e){return r.call(this,e,v)},l=t.variable||"obj";return s.source="function("+l+"){\n"+o+"}",s},v.chain=function(e){var t=v(e);return t._chain=!0,t};var J=function(e,t){return e._chain?v(t).chain():t};v.mixin=function(e){return v.each(v.functions(e),function(t){var n=v[t]=e[t];v.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),J(this,n.apply(v,e))}}),v},v.mixin(v),v.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=o[e];v.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0],J(this,n)}}),v.each(["concat","join","slice"],function(e){var t=o[e];v.prototype[e]=function(){return J(this,t.apply(this._wrapped,arguments))}}),v.prototype.value=function(){return this._wrapped},v.prototype.valueOf=v.prototype.toJSON=v.prototype.value,v.prototype.toString=function(){return String(this._wrapped)},void 0===(r=function(){return v}.apply(t,[]))||(n.exports=r)}()}).call(this,n(37),n(53)(e))},function(e,t,n){var r; +/*! + * jQuery JavaScript Library v3.5.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-04-10T15:07Z + */ +/*! + * jQuery JavaScript Library v3.5.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-04-10T15:07Z + */ +!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,function(n,a){"use strict";var i=[],o=Object.getPrototypeOf,s=i.slice,l=i.flat?function(e){return i.flat.call(e)}:function(e){return i.concat.apply([],e)},u=i.push,c=i.indexOf,f={},h=f.toString,d=f.hasOwnProperty,p=d.toString,m=p.call(Object),g={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},b=function(e){return null!=e&&e===e.window},y=n.document,_={type:!0,src:!0,nonce:!0,noModule:!0};function DOMEval(e,t,n){var r,a,i=(n=n||y).createElement("script");if(i.text=e,t)for(r in _)(a=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function toType(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[h.call(e)]||"object":typeof e}var w=function(e,t){return new w.fn.init(e,t)};function isArrayLike(e){var t=!!e&&"length"in e&&e.length,n=toType(e);return!v(e)&&!b(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}w.fn=w.prototype={jquery:"3.5.0",constructor:w,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(w.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:i.sort,splice:i.splice},w.extend=w.fn.extend=function(){var e,t,n,r,a,i,o=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[s]||{},s++),"object"==typeof o||v(o)||(o={}),s===l&&(o=this,s--);s<l;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&o!==r&&(u&&r&&(w.isPlainObject(r)||(a=Array.isArray(r)))?(n=o[t],i=a&&!Array.isArray(n)?[]:a||w.isPlainObject(n)?n:{},a=!1,o[t]=w.extend(u,i,r)):void 0!==r&&(o[t]=r));return o},w.extend({expando:"jQuery"+("3.5.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==h.call(e))&&(!(t=o(e))||"function"==typeof(n=d.call(t,"constructor")&&t.constructor)&&p.call(n)===m)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){DOMEval(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(isArrayLike(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(isArrayLike(Object(e))?w.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:c.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,a=e.length;r<n;r++)e[a++]=t[r];return e.length=a,e},grep:function(e,t,n){for(var r=[],a=0,i=e.length,o=!n;a<i;a++)!t(e[a],a)!==o&&r.push(e[a]);return r},map:function(e,t,n){var r,a,i=0,o=[];if(isArrayLike(e))for(r=e.length;i<r;i++)null!=(a=t(e[i],i,n))&&o.push(a);else for(i in e)null!=(a=t(e[i],i,n))&&o.push(a);return l(o)},guid:1,support:g}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=i[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){f["[object "+t+"]"]=t.toLowerCase()});var x= +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +function(e){var t,n,r,a,i,o,s,l,u,c,f,h,d,p,m,g,v,b,y,_="sizzle"+1*new Date,w=e.document,x=0,k=0,C=createCache(),S=createCache(),T=createCache(),E=createCache(),M=function(e,t){return e===t&&(f=!0),0},O={}.hasOwnProperty,A=[],R=A.pop,N=A.push,D=A.push,V=A.slice,j=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",B="\\["+L+"*("+I+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+L+"*\\]",z=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+B+")*)|.*)\\)|)",U=new RegExp(L+"+","g"),F=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),H=new RegExp("^"+L+"*,"+L+"*"),q=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),W=new RegExp(L+"|>"),$=new RegExp(z),Y=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+B),PSEUDO:new RegExp("^"+z),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/HTML$/i,K=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+L+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){h()},oe=addCombinator(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{D.apply(A=V.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){D={apply:A.length?function(e,t){N.apply(e,V.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function Sizzle(e,t,r,a){var i,s,u,c,f,p,v,b=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!a&&(h(t),t=t||d,m)){if(11!==w&&(f=Q.exec(e)))if(i=f[1]){if(9===w){if(!(u=t.getElementById(i)))return r;if(u.id===i)return r.push(u),r}else if(b&&(u=b.getElementById(i))&&y(t,u)&&u.id===i)return r.push(u),r}else{if(f[2])return D.apply(r,t.getElementsByTagName(e)),r;if((i=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return D.apply(r,t.getElementsByClassName(i)),r}if(n.qsa&&!E[e+" "]&&(!g||!g.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,b=t,1===w&&(W.test(e)||q.test(e))){for((b=ee.test(e)&&testContext(t.parentNode)||t)===t&&n.scope||((c=t.getAttribute("id"))?c=c.replace(re,ae):t.setAttribute("id",c=_)),s=(p=o(e)).length;s--;)p[s]=(c?"#"+c:":scope")+" "+toSelector(p[s]);v=p.join(",")}try{return D.apply(r,b.querySelectorAll(v)),r}catch(t){E(e,!0)}finally{c===_&&t.removeAttribute("id")}}}return l(e.replace(F,"$1"),t,r,a)}function createCache(){var e=[];return function cache(t,n){return e.push(t+" ")>r.cacheLength&&delete cache[e.shift()],cache[t+" "]=n}}function markFunction(e){return e[_]=!0,e}function assert(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function addHandle(e,t){for(var n=e.split("|"),a=n.length;a--;)r.attrHandle[n[a]]=t}function siblingCheck(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function createInputPseudo(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function createButtonPseudo(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function createDisabledPseudo(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function createPositionalPseudo(e){return markFunction(function(t){return t=+t,markFunction(function(n,r){for(var a,i=e([],n.length,t),o=i.length;o--;)n[a=i[o]]&&(n[a]=!(r[a]=n[a]))})})}function testContext(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=Sizzle.support={},i=Sizzle.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!X.test(t||n&&n.nodeName||"HTML")},h=Sizzle.setDocument=function(e){var t,a,o=e?e.ownerDocument||e:w;return o!=d&&9===o.nodeType&&o.documentElement?(p=(d=o).documentElement,m=!i(d),w!=d&&(a=d.defaultView)&&a.top!==a&&(a.addEventListener?a.addEventListener("unload",ie,!1):a.attachEvent&&a.attachEvent("onunload",ie)),n.scope=assert(function(e){return p.appendChild(e).appendChild(d.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),n.attributes=assert(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=assert(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=J.test(d.getElementsByClassName),n.getById=assert(function(e){return p.appendChild(e).id=_,!d.getElementsByName||!d.getElementsByName(_).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[a++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=J.test(d.querySelectorAll))&&(assert(function(e){var t;p.appendChild(e).innerHTML="<a id='"+_+"'></a><select id='"+_+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+L+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+L+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+_+"-]").length||g.push("~="),(t=d.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\["+L+"*name"+L+"*="+L+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")}),assert(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+L+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(n.matchesSelector=J.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&assert(function(e){n.disconnectedMatch=b.call(e,"*"),b.call(e,"[s!='']:x"),v.push("!=",z)}),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=J.test(p.compareDocumentPosition),y=t||J.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},M=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==d||e.ownerDocument==w&&y(w,e)?-1:t==d||t.ownerDocument==w&&y(w,t)?1:c?j(c,e)-j(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e==d?-1:t==d?1:a?-1:i?1:c?j(c,e)-j(c,t):0;if(a===i)return siblingCheck(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?siblingCheck(o[r],s[r]):o[r]==w?-1:s[r]==w?1:0},d):d},Sizzle.matches=function(e,t){return Sizzle(e,null,null,t)},Sizzle.matchesSelector=function(e,t){if(h(e),n.matchesSelector&&m&&!E[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=b.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){E(t,!0)}return Sizzle(t,d,null,[e]).length>0},Sizzle.contains=function(e,t){return(e.ownerDocument||e)!=d&&h(e),y(e,t)},Sizzle.attr=function(e,t){(e.ownerDocument||e)!=d&&h(e);var a=r.attrHandle[t.toLowerCase()],i=a&&O.call(r.attrHandle,t.toLowerCase())?a(e,t,!m):void 0;return void 0!==i?i:n.attributes||!m?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},Sizzle.escape=function(e){return(e+"").replace(re,ae)},Sizzle.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},Sizzle.uniqueSort=function(e){var t,r=[],a=0,i=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(M),f){for(;t=e[i++];)t===e[i]&&(a=r.push(i));for(;a--;)e.splice(r[a],1)}return c=null,e},a=Sizzle.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=a(t);return n},(r=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Sizzle.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Sizzle.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&$.test(n)&&(t=o(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=new RegExp("(^|"+L+")"+e+"("+L+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var a=Sizzle.attr(r,e);return null==a?"!="===t:!t||(a+="","="===t?a===n:"!="===t?a!==n:"^="===t?n&&0===a.indexOf(n):"*="===t?n&&a.indexOf(n)>-1:"$="===t?n&&a.slice(-n.length)===n:"~="===t?(" "+a.replace(U," ")+" ").indexOf(n)>-1:"|="===t&&(a===n||a.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,a){var i="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===a?function(e){return!!e.parentNode}:function(t,n,l){var u,c,f,h,d,p,m=i!==o?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),b=!l&&!s,y=!1;if(g){if(i){for(;m;){for(h=t;h=h[m];)if(s?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?g.firstChild:g.lastChild],o&&b){for(y=(d=(u=(c=(f=(h=g)[_]||(h[_]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]||[])[0]===x&&u[1])&&u[2],h=d&&g.childNodes[d];h=++d&&h&&h[m]||(y=d=0)||p.pop();)if(1===h.nodeType&&++y&&h===t){c[e]=[x,d,y];break}}else if(b&&(y=d=(u=(c=(f=(h=t)[_]||(h[_]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]||[])[0]===x&&u[1]),!1===y)for(;(h=++d&&h&&h[m]||(y=d=0)||p.pop())&&((s?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++y||(b&&((c=(f=h[_]||(h[_]={}))[h.uniqueID]||(f[h.uniqueID]={}))[e]=[x,y]),h!==t)););return(y-=a)===r||y%r==0&&y/r>=0}}},PSEUDO:function(e,t){var n,a=r.pseudos[e]||r.setFilters[e.toLowerCase()]||Sizzle.error("unsupported pseudo: "+e);return a[_]?a(t):a.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?markFunction(function(e,n){for(var r,i=a(e,t),o=i.length;o--;)e[r=j(e,i[o])]=!(n[r]=i[o])}):function(e){return a(e,0,n)}):a}},pseudos:{not:markFunction(function(e){var t=[],n=[],r=s(e.replace(F,"$1"));return r[_]?markFunction(function(e,t,n,a){for(var i,o=r(e,null,a,[]),s=e.length;s--;)(i=o[s])&&(e[s]=!(t[s]=i))}):function(e,a,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}}),has:markFunction(function(e){return function(t){return Sizzle(e,t).length>0}}),contains:markFunction(function(e){return e=e.replace(te,ne),function(t){return(t.textContent||a(t)).indexOf(e)>-1}}),lang:markFunction(function(e){return Y.test(e||"")||Sizzle.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:createDisabledPseudo(!1),disabled:createDisabledPseudo(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(e,t){return[t-1]}),eq:createPositionalPseudo(function(e,t,n){return[n<0?n+t:n]}),even:createPositionalPseudo(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:createPositionalPseudo(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:createPositionalPseudo(function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e}),gt:createPositionalPseudo(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=createInputPseudo(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=createButtonPseudo(t);function setFilters(){}function toSelector(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function addCombinator(e,t,n){var r=t.dir,a=t.next,i=a||r,o=n&&"parentNode"===i,s=k++;return t.first?function(t,n,a){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,a);return!1}:function(t,n,l){var u,c,f,h=[x,s];if(l){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,l))return!0}else for(;t=t[r];)if(1===t.nodeType||o)if(c=(f=t[_]||(t[_]={}))[t.uniqueID]||(f[t.uniqueID]={}),a&&a===t.nodeName.toLowerCase())t=t[r]||t;else{if((u=c[i])&&u[0]===x&&u[1]===s)return h[2]=u[2];if(c[i]=h,h[2]=e(t,n,l))return!0}return!1}}function elementMatcher(e){return e.length>1?function(t,n,r){for(var a=e.length;a--;)if(!e[a](t,n,r))return!1;return!0}:e[0]}function condense(e,t,n,r,a){for(var i,o=[],s=0,l=e.length,u=null!=t;s<l;s++)(i=e[s])&&(n&&!n(i,r,a)||(o.push(i),u&&t.push(s)));return o}function setMatcher(e,t,n,r,a,i){return r&&!r[_]&&(r=setMatcher(r)),a&&!a[_]&&(a=setMatcher(a,i)),markFunction(function(i,o,s,l){var u,c,f,h=[],d=[],p=o.length,m=i||function(e,t,n){for(var r=0,a=t.length;r<a;r++)Sizzle(e,t[r],n);return n}(t||"*",s.nodeType?[s]:s,[]),g=!e||!i&&t?m:condense(m,h,e,s,l),v=n?a||(i?e:p||r)?[]:o:g;if(n&&n(g,v,s,l),r)for(u=condense(v,d),r(u,[],s,l),c=u.length;c--;)(f=u[c])&&(v[d[c]]=!(g[d[c]]=f));if(i){if(a||e){if(a){for(u=[],c=v.length;c--;)(f=v[c])&&u.push(g[c]=f);a(null,v=[],u,l)}for(c=v.length;c--;)(f=v[c])&&(u=a?j(i,f):h[c])>-1&&(i[u]=!(o[u]=f))}}else v=condense(v===o?v.splice(p,v.length):v),a?a(null,o,v,l):D.apply(o,v)})}function matcherFromTokens(e){for(var t,n,a,i=e.length,o=r.relative[e[0].type],s=o||r.relative[" "],l=o?1:0,c=addCombinator(function(e){return e===t},s,!0),f=addCombinator(function(e){return j(t,e)>-1},s,!0),h=[function(e,n,r){var a=!o&&(r||n!==u)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,a}];l<i;l++)if(n=r.relative[e[l].type])h=[addCombinator(elementMatcher(h),n)];else{if((n=r.filter[e[l].type].apply(null,e[l].matches))[_]){for(a=++l;a<i&&!r.relative[e[a].type];a++);return setMatcher(l>1&&elementMatcher(h),l>1&&toSelector(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(F,"$1"),n,l<a&&matcherFromTokens(e.slice(l,a)),a<i&&matcherFromTokens(e=e.slice(a)),a<i&&toSelector(e))}h.push(n)}return elementMatcher(h)}return setFilters.prototype=r.filters=r.pseudos,r.setFilters=new setFilters,o=Sizzle.tokenize=function(e,t){var n,a,i,o,s,l,u,c=S[e+" "];if(c)return t?0:c.slice(0);for(s=e,l=[],u=r.preFilter;s;){for(o in n&&!(a=H.exec(s))||(a&&(s=s.slice(a[0].length)||s),l.push(i=[])),n=!1,(a=q.exec(s))&&(n=a.shift(),i.push({value:n,type:a[0].replace(F," ")}),s=s.slice(n.length)),r.filter)!(a=G[o].exec(s))||u[o]&&!(a=u[o](a))||(n=a.shift(),i.push({value:n,type:o,matches:a}),s=s.slice(n.length));if(!n)break}return t?s.length:s?Sizzle.error(e):S(e,l).slice(0)},s=Sizzle.compile=function(e,t){var n,a=[],i=[],s=T[e+" "];if(!s){for(t||(t=o(e)),n=t.length;n--;)(s=matcherFromTokens(t[n]))[_]?a.push(s):i.push(s);(s=T(e,function(e,t){var n=t.length>0,a=e.length>0,i=function(i,o,s,l,c){var f,p,g,v=0,b="0",y=i&&[],_=[],w=u,k=i||a&&r.find.TAG("*",c),C=x+=null==w?1:Math.random()||.1,S=k.length;for(c&&(u=o==d||o||c);b!==S&&null!=(f=k[b]);b++){if(a&&f){for(p=0,o||f.ownerDocument==d||(h(f),s=!m);g=e[p++];)if(g(f,o||d,s)){l.push(f);break}c&&(x=C)}n&&((f=!g&&f)&&v--,i&&y.push(f))}if(v+=b,n&&b!==v){for(p=0;g=t[p++];)g(y,_,o,s);if(i){if(v>0)for(;b--;)y[b]||_[b]||(_[b]=R.call(l));_=condense(_)}D.apply(l,_),c&&!i&&_.length>0&&v+t.length>1&&Sizzle.uniqueSort(l)}return c&&(x=C,u=w),y};return n?markFunction(i):i}(i,a))).selector=e}return s},l=Sizzle.select=function(e,t,n,a){var i,l,u,c,f,h="function"==typeof e&&e,d=!a&&o(e=h.selector||e);if(n=n||[],1===d.length){if((l=d[0]=d[0].slice(0)).length>2&&"ID"===(u=l[0]).type&&9===t.nodeType&&m&&r.relative[l[1].type]){if(!(t=(r.find.ID(u.matches[0].replace(te,ne),t)||[])[0]))return n;h&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(i=G.needsContext.test(e)?0:l.length;i--&&(u=l[i],!r.relative[c=u.type]);)if((f=r.find[c])&&(a=f(u.matches[0].replace(te,ne),ee.test(l[0].type)&&testContext(t.parentNode)||t))){if(l.splice(i,1),!(e=a.length&&toSelector(l)))return D.apply(n,a),n;break}}return(h||s(e,d))(a,t,!m,n,!t||ee.test(e)&&testContext(t.parentNode)||t),n},n.sortStable=_.split("").sort(M).join("")===_,n.detectDuplicates=!!f,h(),n.sortDetached=assert(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),assert(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||addHandle("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&assert(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||addHandle("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),assert(function(e){return null==e.getAttribute("disabled")})||addHandle(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),Sizzle}(n);w.find=x,w.expr=x.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=x.uniqueSort,w.text=x.getText,w.isXMLDoc=x.isXML,w.contains=x.contains,w.escapeSelector=x.escape;var k=function(e,t,n){for(var r=[],a=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&w(e).is(n))break;r.push(e)}return r},C=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},S=w.expr.match.needsContext;function nodeName(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var T=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function winnow(e,t,n){return v(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return c.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(a[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,a[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(winnow(this,e||[],!1))},not:function(e){return this.pushStack(winnow(this,e||[],!0))},is:function(e){return!!winnow(this,"string"==typeof e&&S.test(e)?w(e):e||[],!1).length}});var E,M=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||E,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:M.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:y,!0)),T.test(r[1])&&w.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=y.getElementById(r[2]))&&(this[0]=a,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,E=w(y);var O=/^(?:parents|prev(?:Until|All))/,A={children:!0,contents:!0,next:!0,prev:!0};function sibling(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,a=this.length,i=[],o="string"!=typeof e&&w(e);if(!S.test(e))for(;r<a;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(o?o.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?w.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?c.call(w(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return sibling(e,"nextSibling")},prev:function(e){return sibling(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return C((e.parentNode||{}).firstChild,e)},children:function(e){return C(e.firstChild)},contents:function(e){return null!=e.contentDocument&&o(e.contentDocument)?e.contentDocument:(nodeName(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var a=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(a=w.filter(r,a)),this.length>1&&(A[e]||w.uniqueSort(a),O.test(e)&&a.reverse()),this.pushStack(a)}});var R=/[^\x20\t\r\n\f]+/g;function Identity(e){return e}function Thrower(e){throw e}function adoptValue(e,t,n,r){var a;try{e&&v(a=e.promise)?a.call(e).done(t).fail(n):e&&v(a=e.then)?a.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return w.each(e.match(R)||[],function(e,n){t[n]=!0}),t}(e):w.extend({},e);var t,n,r,a,i=[],o=[],s=-1,l=function(){for(a=a||e.once,r=t=!0;o.length;s=-1)for(n=o.shift();++s<i.length;)!1===i[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=i.length,n=!1);e.memory||(n=!1),t=!1,a&&(i=n?[]:"")},u={add:function(){return i&&(n&&!t&&(s=i.length-1,o.push(n)),function add(t){w.each(t,function(t,n){v(n)?e.unique&&u.has(n)||i.push(n):n&&n.length&&"string"!==toType(n)&&add(n)})}(arguments),n&&!t&&l()),this},remove:function(){return w.each(arguments,function(e,t){for(var n;(n=w.inArray(t,i,n))>-1;)i.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return a=o=[],i=n="",this},disabled:function(){return!i},lock:function(){return a=o=[],n||t||(i=n=""),this},locked:function(){return!!a},fireWith:function(e,n){return a||(n=[e,(n=n||[]).slice?n.slice():n],o.push(n),t||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!r}};return u},w.extend({Deferred:function(e){var t=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",a={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(n){w.each(t,function(t,r){var a=v(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=a&&a.apply(this,arguments);e&&v(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,a?[e]:arguments)})}),e=null}).promise()},then:function(e,r,a){var i=0;function resolve(e,t,r,a){return function(){var o=this,s=arguments,l=function(){var n,l;if(!(e<i)){if((n=r.apply(o,s))===t.promise())throw new TypeError("Thenable self-resolution");l=n&&("object"==typeof n||"function"==typeof n)&&n.then,v(l)?a?l.call(n,resolve(i,t,Identity,a),resolve(i,t,Thrower,a)):(i++,l.call(n,resolve(i,t,Identity,a),resolve(i,t,Thrower,a),resolve(i,t,Identity,t.notifyWith))):(r!==Identity&&(o=void 0,s=[n]),(a||t.resolveWith)(o,s))}},u=a?l:function(){try{l()}catch(n){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(n,u.stackTrace),e+1>=i&&(r!==Thrower&&(o=void 0,s=[n]),t.rejectWith(o,s))}};e?u():(w.Deferred.getStackHook&&(u.stackTrace=w.Deferred.getStackHook()),n.setTimeout(u))}}return w.Deferred(function(n){t[0][3].add(resolve(0,n,v(a)?a:Identity,n.notifyWith)),t[1][3].add(resolve(0,n,v(e)?e:Identity)),t[2][3].add(resolve(0,n,v(r)?r:Thrower))}).promise()},promise:function(e){return null!=e?w.extend(e,a):a}},i={};return w.each(t,function(e,n){var o=n[2],s=n[5];a[n[1]]=o.add,s&&o.add(function(){r=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),o.add(n[3].fire),i[n[0]]=function(){return i[n[0]+"With"](this===i?void 0:this,arguments),this},i[n[0]+"With"]=o.fireWith}),a.promise(i),e&&e.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),a=s.call(arguments),i=w.Deferred(),o=function(e){return function(n){r[e]=this,a[e]=arguments.length>1?s.call(arguments):n,--t||i.resolveWith(r,a)}};if(t<=1&&(adoptValue(e,i.done(o(n)).resolve,i.reject,!t),"pending"===i.state()||v(a[n]&&a[n].then)))return i.then();for(;n--;)adoptValue(a[n],o(n),i.reject);return i.promise()}});var N=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&N.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},w.readyException=function(e){n.setTimeout(function(){throw e})};var D=w.Deferred();function completed(){y.removeEventListener("DOMContentLoaded",completed),n.removeEventListener("load",completed),w.ready()}w.fn.ready=function(e){return D.then(e).catch(function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||D.resolveWith(y,[w]))}}),w.ready.then=D.then,"complete"===y.readyState||"loading"!==y.readyState&&!y.documentElement.doScroll?n.setTimeout(w.ready):(y.addEventListener("DOMContentLoaded",completed),n.addEventListener("load",completed));var V=function(e,t,n,r,a,i,o){var s=0,l=e.length,u=null==n;if("object"===toType(n))for(s in a=!0,n)V(e,t,s,n[s],!0,i,o);else if(void 0!==r&&(a=!0,v(r)||(o=!0),u&&(o?(t.call(e,r),t=null):(u=t,t=function(e,t,n){return u.call(w(e),n)})),t))for(;s<l;s++)t(e[s],n,o?r:r.call(e[s],s,t(e[s],n)));return a?e:u?t.call(e):l?t(e[0],n):i},j=/^-ms-/,P=/-([a-z])/g;function fcamelCase(e,t){return t.toUpperCase()}function camelCase(e){return e.replace(j,"ms-").replace(P,fcamelCase)}var L=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Data(){this.expando=w.expando+Data.uid++}Data.uid=1,Data.prototype={cache:function(e){var t=e[this.expando];return t||(t=Object.create(null),L(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,a=this.cache(e);if("string"==typeof t)a[camelCase(t)]=n;else for(r in t)a[camelCase(r)]=t[r];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][camelCase(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(camelCase):(t=camelCase(t))in r?[t]:t.match(R)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var I=new Data,B=new Data,z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function dataAttr(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=function(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:z.test(e)?JSON.parse(e):e)}(n)}catch(e){}B.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return B.hasData(e)||I.hasData(e)},data:function(e,t,n){return B.access(e,t,n)},removeData:function(e,t){B.remove(e,t)},_data:function(e,t,n){return I.access(e,t,n)},_removeData:function(e,t){I.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,a,i=this[0],o=i&&i.attributes;if(void 0===e){if(this.length&&(a=B.get(i),1===i.nodeType&&!I.get(i,"hasDataAttrs"))){for(n=o.length;n--;)o[n]&&0===(r=o[n].name).indexOf("data-")&&(r=camelCase(r.slice(5)),dataAttr(i,r,a[r]));I.set(i,"hasDataAttrs",!0)}return a}return"object"==typeof e?this.each(function(){B.set(this,e)}):V(this,function(t){var n;if(i&&void 0===t)return void 0!==(n=B.get(i,e))?n:void 0!==(n=dataAttr(i,e))?n:void 0;this.each(function(){B.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){B.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=I.get(e,t),n&&(!r||Array.isArray(n)?r=I.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,a=n.shift(),i=w._queueHooks(e,t);"inprogress"===a&&(a=n.shift(),r--),a&&("fx"===t&&n.unshift("inprogress"),delete i.stop,a.call(e,function(){w.dequeue(e,t)},i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return I.get(e,n)||I.access(e,n,{empty:w.Callbacks("once memory").add(function(){I.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,a=w.Deferred(),i=this,o=this.length,s=function(){--r||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(n=I.get(i[o],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),a.promise(t)}});var F=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,H=new RegExp("^(?:([+-])=|)("+F+")([a-z%]*)$","i"),q=["Top","Right","Bottom","Left"],W=y.documentElement,$=function(e){return w.contains(e.ownerDocument,e)},Y={composed:!0};W.getRootNode&&($=function(e){return w.contains(e.ownerDocument,e)||e.getRootNode(Y)===e.ownerDocument});var G=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&$(e)&&"none"===w.css(e,"display")};function adjustCSS(e,t,n,r){var a,i,o=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},l=s(),u=n&&n[3]||(w.cssNumber[t]?"":"px"),c=e.nodeType&&(w.cssNumber[t]||"px"!==u&&+l)&&H.exec(w.css(e,t));if(c&&c[3]!==u){for(l/=2,u=u||c[3],c=+l||1;o--;)w.style(e,t,c+u),(1-i)*(1-(i=s()/l||.5))<=0&&(o=0),c/=i;c*=2,w.style(e,t,c+u),n=n||[]}return n&&(c=+c||+l||0,a=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=u,r.start=c,r.end=a)),a}var X={};function getDefaultDisplay(e){var t,n=e.ownerDocument,r=e.nodeName,a=X[r];return a||(t=n.body.appendChild(n.createElement(r)),a=w.css(t,"display"),t.parentNode.removeChild(t),"none"===a&&(a="block"),X[r]=a,a)}function showHide(e,t){for(var n,r,a=[],i=0,o=e.length;i<o;i++)(r=e[i]).style&&(n=r.style.display,t?("none"===n&&(a[i]=I.get(r,"display")||null,a[i]||(r.style.display="")),""===r.style.display&&G(r)&&(a[i]=getDefaultDisplay(r))):"none"!==n&&(a[i]="none",I.set(r,"display",n)));for(i=0;i<o;i++)null!=a[i]&&(e[i].style.display=a[i]);return e}w.fn.extend({show:function(){return showHide(this,!0)},hide:function(){return showHide(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){G(this)?w(this).show():w(this).hide()})}});var K,Z,J=/^(?:checkbox|radio)$/i,Q=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,ee=/^$|^module$|\/(?:java|ecma)script/i;K=y.createDocumentFragment().appendChild(y.createElement("div")),(Z=y.createElement("input")).setAttribute("type","radio"),Z.setAttribute("checked","checked"),Z.setAttribute("name","t"),K.appendChild(Z),g.checkClone=K.cloneNode(!0).cloneNode(!0).lastChild.checked,K.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!K.cloneNode(!0).lastChild.defaultValue,K.innerHTML="<option></option>",g.option=!!K.lastChild;var te={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function getAll(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&nodeName(e,t)?w.merge([e],n):n}function setGlobalEval(e,t){for(var n=0,r=e.length;n<r;n++)I.set(e[n],"globalEval",!t||I.get(t[n],"globalEval"))}te.tbody=te.tfoot=te.colgroup=te.caption=te.thead,te.th=te.td,g.option||(te.optgroup=te.option=[1,"<select multiple='multiple'>","</select>"]);var ne=/<|&#?\w+;/;function buildFragment(e,t,n,r,a){for(var i,o,s,l,u,c,f=t.createDocumentFragment(),h=[],d=0,p=e.length;d<p;d++)if((i=e[d])||0===i)if("object"===toType(i))w.merge(h,i.nodeType?[i]:i);else if(ne.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(Q.exec(i)||["",""])[1].toLowerCase(),l=te[s]||te._default,o.innerHTML=l[1]+w.htmlPrefilter(i)+l[2],c=l[0];c--;)o=o.lastChild;w.merge(h,o.childNodes),(o=f.firstChild).textContent=""}else h.push(t.createTextNode(i));for(f.textContent="",d=0;i=h[d++];)if(r&&w.inArray(i,r)>-1)a&&a.push(i);else if(u=$(i),o=getAll(f.appendChild(i),"script"),u&&setGlobalEval(o),n)for(c=0;i=o[c++];)ee.test(i.type||"")&&n.push(i);return f}var re=/^key/,ae=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ie=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return!0}function returnFalse(){return!1}function expectSync(e,t){return e===function(){try{return y.activeElement}catch(e){}}()==("focus"===t)}function on(e,t,n,r,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)on(e,s,n,r,t[s],i);return e}if(null==r&&null==a?(a=n,r=n=void 0):null==a&&("string"==typeof n?(a=r,r=void 0):(a=r,r=n,n=void 0)),!1===a)a=returnFalse;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return w().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=w.guid++)),e.each(function(){w.event.add(this,t,a,r,n)})}function leverageNative(e,t,n){n?(I.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var r,a,i=I.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(w.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=s.call(arguments),I.set(this,t,i),r=n(this,t),this[t](),i!==(a=I.get(this,t))||r?I.set(this,t,!1):a={},i!==a)return e.stopImmediatePropagation(),e.preventDefault(),a.value}else i.length&&(I.set(this,t,{value:w.event.trigger(w.extend(i[0],w.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===I.get(e,t)&&w.event.add(e,t,returnTrue)}w.event={global:{},add:function(e,t,n,r,a){var i,o,s,l,u,c,f,h,d,p,m,g=I.get(e);if(L(e))for(n.handler&&(n=(i=n).handler,a=i.selector),a&&w.find.matchesSelector(W,a),n.guid||(n.guid=w.guid++),(l=g.events)||(l=g.events=Object.create(null)),(o=g.handle)||(o=g.handle=function(t){return void 0!==w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||"").match(R)||[""]).length;u--;)d=m=(s=ie.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(a?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&w.expr.match.needsContext.test(a),namespace:p.join(".")},i),(h=l[d])||((h=l[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,p,o)||e.addEventListener&&e.addEventListener(d,o)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),a?h.splice(h.delegateCount++,0,c):h.push(c),w.event.global[d]=!0)},remove:function(e,t,n,r,a){var i,o,s,l,u,c,f,h,d,p,m,g=I.hasData(e)&&I.get(e);if(g&&(l=g.events)){for(u=(t=(t||"").match(R)||[""]).length;u--;)if(d=m=(s=ie.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),d){for(f=w.event.special[d]||{},h=l[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=h.length;i--;)c=h[i],!a&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(h.splice(i,1),c.selector&&h.delegateCount--,f.remove&&f.remove.call(e,c));o&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||w.removeEvent(e,d,g.handle),delete l[d])}else for(d in l)w.event.remove(e,d+t[u],n,r,!0);w.isEmptyObject(l)&&I.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=new Array(arguments.length),l=w.event.fix(e),u=(I.get(this,"events")||Object.create(null))[l.type]||[],c=w.event.special[l.type]||{};for(s[0]=l,t=1;t<arguments.length;t++)s[t]=arguments[t];if(l.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,l)){for(o=w.event.handlers.call(this,l,u),t=0;(a=o[t++])&&!l.isPropagationStopped();)for(l.currentTarget=a.elem,n=0;(i=a.handlers[n++])&&!l.isImmediatePropagationStopped();)l.rnamespace&&!1!==i.namespace&&!l.rnamespace.test(i.namespace)||(l.handleObj=i,l.data=i.data,void 0!==(r=((w.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,s))&&!1===(l.result=r)&&(l.preventDefault(),l.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,l),l.result}},handlers:function(e,t){var n,r,a,i,o,s=[],l=t.delegateCount,u=e.target;if(l&&u.nodeType&&!("click"===e.type&&e.button>=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],o={},n=0;n<l;n++)void 0===o[a=(r=t[n]).selector+" "]&&(o[a]=r.needsContext?w(a,this).index(u)>-1:w.find(a,this,null,[u]).length),o[a]&&i.push(r);i.length&&s.push({elem:u,handlers:i})}return u=this,l<t.length&&s.push({elem:u,handlers:t.slice(l)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:v(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return J.test(t.type)&&t.click&&nodeName(t,"input")&&leverageNative(t,"click",returnTrue),!1},trigger:function(e){var t=this||e;return J.test(t.type)&&t.click&&nodeName(t,"input")&&leverageNative(t,"click"),!0},_default:function(e){var t=e.target;return J.test(t.type)&&t.click&&nodeName(t,"input")&&I.get(t,"click")||nodeName(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?returnTrue:returnFalse,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=returnTrue,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&re.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&ae.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({focus:"focusin",blur:"focusout"},function(e,t){w.event.special[e]={setup:function(){return leverageNative(this,e,expectSync),!1},trigger:function(){return leverageNative(this,e),!0},delegateType:t}}),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,a=e.handleObj;return r&&(r===this||w.contains(this,r))||(e.type=a.origType,n=a.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return on(this,e,t,n,r)},one:function(e,t,n,r){return on(this,e,t,n,r,1)},off:function(e,t,n){var r,a;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(a in e)this.off(a,t,e[a]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=returnFalse),this.each(function(){w.event.remove(this,e,n,t)})}});var oe=/<script|<style|<link/i,se=/checked\s*(?:[^=]|=\s*.checked.)/i,le=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function manipulationTarget(e,t){return nodeName(e,"table")&&nodeName(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function disableScript(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function restoreScript(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function cloneCopyEvent(e,t){var n,r,a,i,o,s;if(1===t.nodeType){if(I.hasData(e)&&(s=I.get(e).events))for(a in I.remove(t,"handle events"),s)for(n=0,r=s[a].length;n<r;n++)w.event.add(t,a,s[a][n]);B.hasData(e)&&(i=B.access(e),o=w.extend({},i),B.set(t,o))}}function domManip(e,t,n,r){t=l(t);var a,i,o,s,u,c,f=0,h=e.length,d=h-1,p=t[0],m=v(p);if(m||h>1&&"string"==typeof p&&!g.checkClone&&se.test(p))return e.each(function(a){var i=e.eq(a);m&&(t[0]=p.call(this,a,i.html())),domManip(i,t,n,r)});if(h&&(i=(a=buildFragment(t,e[0].ownerDocument,!1,e,r)).firstChild,1===a.childNodes.length&&(a=i),i||r)){for(s=(o=w.map(getAll(a,"script"),disableScript)).length;f<h;f++)u=a,f!==d&&(u=w.clone(u,!0,!0),s&&w.merge(o,getAll(u,"script"))),n.call(e[f],u,f);if(s)for(c=o[o.length-1].ownerDocument,w.map(o,restoreScript),f=0;f<s;f++)u=o[f],ee.test(u.type||"")&&!I.access(u,"globalEval")&&w.contains(c,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?w._evalUrl&&!u.noModule&&w._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},c):DOMEval(u.textContent.replace(le,""),u,c))}return e}function remove(e,t,n){for(var r,a=t?w.filter(t,e):e,i=0;null!=(r=a[i]);i++)n||1!==r.nodeType||w.cleanData(getAll(r)),r.parentNode&&(n&&$(r)&&setGlobalEval(getAll(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,a,i,o,s,l,u,c=e.cloneNode(!0),f=$(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(o=getAll(c),r=0,a=(i=getAll(e)).length;r<a;r++)s=i[r],l=o[r],u=void 0,"input"===(u=l.nodeName.toLowerCase())&&J.test(s.type)?l.checked=s.checked:"input"!==u&&"textarea"!==u||(l.defaultValue=s.defaultValue);if(t)if(n)for(i=i||getAll(e),o=o||getAll(c),r=0,a=i.length;r<a;r++)cloneCopyEvent(i[r],o[r]);else cloneCopyEvent(e,c);return(o=getAll(c,"script")).length>0&&setGlobalEval(o,!f&&getAll(e,"script")),c},cleanData:function(e){for(var t,n,r,a=w.event.special,i=0;void 0!==(n=e[i]);i++)if(L(n)){if(t=n[I.expando]){if(t.events)for(r in t.events)a[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[I.expando]=void 0}n[B.expando]&&(n[B.expando]=void 0)}}}),w.fn.extend({detach:function(e){return remove(this,e,!0)},remove:function(e){return remove(this,e)},text:function(e){return V(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return domManip(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||manipulationTarget(this,e).appendChild(e)})},prepend:function(){return domManip(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=manipulationTarget(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return domManip(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return domManip(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(getAll(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return V(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!oe.test(e)&&!te[(Q.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(getAll(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return domManip(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(getAll(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],a=w(e),i=a.length-1,o=0;o<=i;o++)n=o===i?this:this.clone(!0),w(a[o])[t](n),u.apply(r,n.get());return this.pushStack(r)}});var ue=new RegExp("^("+F+")(?!px)[a-z%]+$","i"),ce=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},fe=function(e,t,n){var r,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in r=n.call(e),t)e.style[a]=i[a];return r},he=new RegExp(q.join("|"),"i");function curCSS(e,t,n){var r,a,i,o,s=e.style;return(n=n||ce(e))&&(""!==(o=n.getPropertyValue(t)||n[t])||$(e)||(o=w.style(e,t)),!g.pixelBoxStyles()&&ue.test(o)&&he.test(t)&&(r=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=n.width,s.width=r,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function addGetHookIf(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function computeStyleTests(){if(l){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",W.appendChild(s).appendChild(l);var i=n.getComputedStyle(l);e="1%"!==i.top,o=12===roundPixelMeasures(i.marginLeft),l.style.right="60%",a=36===roundPixelMeasures(i.right),t=36===roundPixelMeasures(i.width),l.style.position="absolute",r=12===roundPixelMeasures(l.offsetWidth/3),W.removeChild(s),l=null}}function roundPixelMeasures(e){return Math.round(parseFloat(e))}var e,t,r,a,i,o,s=y.createElement("div"),l=y.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===l.style.backgroundClip,w.extend(g,{boxSizingReliable:function(){return computeStyleTests(),t},pixelBoxStyles:function(){return computeStyleTests(),a},pixelPosition:function(){return computeStyleTests(),e},reliableMarginLeft:function(){return computeStyleTests(),o},scrollboxSize:function(){return computeStyleTests(),r},reliableTrDimensions:function(){var e,t,r,a;return null==i&&(e=y.createElement("table"),t=y.createElement("tr"),r=y.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",r.style.height="9px",W.appendChild(e).appendChild(t).appendChild(r),a=n.getComputedStyle(t),i=parseInt(a.height)>3,W.removeChild(e)),i}}))}();var de=["Webkit","Moz","ms"],pe=y.createElement("div").style,me={};function finalPropName(e){var t=w.cssProps[e]||me[e];return t||(e in pe?e:me[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=de.length;n--;)if((e=de[n]+t)in pe)return e}(e)||e)}var ge=/^(none|table(?!-c[ea]).+)/,ve=/^--/,be={position:"absolute",visibility:"hidden",display:"block"},ye={letterSpacing:"0",fontWeight:"400"};function setPositiveNumber(e,t,n){var r=H.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function boxModelAdjustment(e,t,n,r,a,i){var o="width"===t?1:0,s=0,l=0;if(n===(r?"border":"content"))return 0;for(;o<4;o+=2)"margin"===n&&(l+=w.css(e,n+q[o],!0,a)),r?("content"===n&&(l-=w.css(e,"padding"+q[o],!0,a)),"margin"!==n&&(l-=w.css(e,"border"+q[o]+"Width",!0,a))):(l+=w.css(e,"padding"+q[o],!0,a),"padding"!==n?l+=w.css(e,"border"+q[o]+"Width",!0,a):s+=w.css(e,"border"+q[o]+"Width",!0,a));return!r&&i>=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-l-s-.5))||0),l}function getWidthOrHeight(e,t,n){var r=ce(e),a=(!g.boxSizingReliable()||n)&&"border-box"===w.css(e,"boxSizing",!1,r),i=a,o=curCSS(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(ue.test(o)){if(!n)return o;o="auto"}return(!g.boxSizingReliable()&&a||!g.reliableTrDimensions()&&nodeName(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===w.css(e,"display",!1,r))&&e.getClientRects().length&&(a="border-box"===w.css(e,"boxSizing",!1,r),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+boxModelAdjustment(e,t,n||(a?"border":"content"),i,r,o)+"px"}function Tween(e,t,n,r,a){return new Tween.prototype.init(e,t,n,r,a)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=curCSS(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=camelCase(t),l=ve.test(t),u=e.style;if(l||(t=finalPropName(s)),o=w.cssHooks[t]||w.cssHooks[s],void 0===n)return o&&"get"in o&&void 0!==(a=o.get(e,!1,r))?a:u[t];"string"===(i=typeof n)&&(a=H.exec(n))&&a[1]&&(n=adjustCSS(e,t,a),i="number"),null!=n&&n==n&&("number"!==i||l||(n+=a&&a[3]||(w.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),o&&"set"in o&&void 0===(n=o.set(e,n,r))||(l?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,r){var a,i,o,s=camelCase(t);return ve.test(t)||(t=finalPropName(s)),(o=w.cssHooks[t]||w.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,n)),void 0===a&&(a=curCSS(e,t,r)),"normal"===a&&t in ye&&(a=ye[t]),""===n||n?(i=parseFloat(a),!0===n||isFinite(i)?i||0:a):a}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ge.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?getWidthOrHeight(e,t,r):fe(e,be,function(){return getWidthOrHeight(e,t,r)})},set:function(e,n,r){var a,i=ce(e),o=!g.scrollboxSize()&&"absolute"===i.position,s=(o||r)&&"border-box"===w.css(e,"boxSizing",!1,i),l=r?boxModelAdjustment(e,t,r,s,i):0;return s&&o&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-boxModelAdjustment(e,t,"border",!1,i)-.5)),l&&(a=H.exec(n))&&"px"!==(a[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),setPositiveNumber(0,n,l)}}}),w.cssHooks.marginLeft=addGetHookIf(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(curCSS(e,"marginLeft"))||e.getBoundingClientRect().left-fe(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,a={},i="string"==typeof n?n.split(" "):[n];r<4;r++)a[e+q[r]+t]=i[r]||i[r-2]||i[0];return a}},"margin"!==e&&(w.cssHooks[e+t].set=setPositiveNumber)}),w.fn.extend({css:function(e,t){return V(this,function(e,t,n){var r,a,i={},o=0;if(Array.isArray(t)){for(r=ce(e),a=t.length;o<a;o++)i[t[o]]=w.css(e,t[o],!1,r);return i}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}}),w.Tween=Tween,Tween.prototype={constructor:Tween,init:function(e,t,n,r,a,i){this.elem=e,this.prop=n,this.easing=a||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(w.cssNumber[n]?"":"px")},cur:function(){var e=Tween.propHooks[this.prop];return e&&e.get?e.get(this):Tween.propHooks._default.get(this)},run:function(e){var t,n=Tween.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Tween.propHooks._default.set(this),this}},Tween.prototype.init.prototype=Tween.prototype,Tween.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[finalPropName(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=Tween.prototype.init,w.fx.step={};var _e,we,xe=/^(?:toggle|show|hide)$/,ke=/queueHooks$/;function schedule(){we&&(!1===y.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(schedule):n.setTimeout(schedule,w.fx.interval),w.fx.tick())}function createFxNow(){return n.setTimeout(function(){_e=void 0}),_e=Date.now()}function genFx(e,t){var n,r=0,a={height:e};for(t=t?1:0;r<4;r+=2-t)a["margin"+(n=q[r])]=a["padding"+n]=e;return t&&(a.opacity=a.width=e),a}function createTween(e,t,n){for(var r,a=(Animation.tweeners[t]||[]).concat(Animation.tweeners["*"]),i=0,o=a.length;i<o;i++)if(r=a[i].call(n,t,e))return r}function Animation(e,t,n){var r,a,i=0,o=Animation.prefilters.length,s=w.Deferred().always(function(){delete l.elem}),l=function(){if(a)return!1;for(var t=_e||createFxNow(),n=Math.max(0,u.startTime+u.duration-t),r=1-(n/u.duration||0),i=0,o=u.tweens.length;i<o;i++)u.tweens[i].run(r);return s.notifyWith(e,[u,r,n]),r<1&&o?n:(o||s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:_e||createFxNow(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(a)return this;for(a=!0;n<r;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(!function(e,t){var n,r,a,i,o;for(n in e)if(a=t[r=camelCase(n)],i=e[n],Array.isArray(i)&&(a=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(o=w.cssHooks[r])&&"expand"in o)for(n in i=o.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=a);else t[r]=a}(c,u.opts.specialEasing);i<o;i++)if(r=Animation.prefilters[i].call(u,e,c,u.opts))return v(r.stop)&&(w._queueHooks(u.elem,u.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,createTween,u),v(u.opts.start)&&u.opts.start.call(e,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),w.fx.timer(w.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u}w.Animation=w.extend(Animation,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return adjustCSS(n.elem,e,H.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,a=e.length;r<a;r++)n=e[r],Animation.tweeners[n]=Animation.tweeners[n]||[],Animation.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,a,i,o,s,l,u,c,f="width"in t||"height"in t,h=this,d={},p=e.style,m=e.nodeType&&G(e),g=I.get(e,"fxshow");for(r in n.queue||(null==(o=w._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,h.always(function(){h.always(function(){o.unqueued--,w.queue(e,"fx").length||o.empty.fire()})})),t)if(a=t[r],xe.test(a)){if(delete t[r],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[r])continue;m=!0}d[r]=g&&g[r]||w.style(e,r)}if((l=!w.isEmptyObject(t))||!w.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=g&&g.display)&&(u=I.get(e,"display")),"none"===(c=w.css(e,"display"))&&(u?c=u:(showHide([e],!0),u=e.style.display||u,c=w.css(e,"display"),showHide([e]))),("inline"===c||"inline-block"===c&&null!=u)&&"none"===w.css(e,"float")&&(l||(h.done(function(){p.display=u}),null==u&&(c=p.display,u="none"===c?"":c)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",h.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),l=!1,d)l||(g?"hidden"in g&&(m=g.hidden):g=I.access(e,"fxshow",{display:u}),i&&(g.hidden=!m),m&&showHide([e],!0),h.done(function(){for(r in m||showHide([e]),I.remove(e,"fxshow"),d)w.style(e,r,d[r])})),l=createTween(m?g[r]:0,r,h),r in g||(g[r]=l.start,m&&(l.end=l.start,l.start=0))}],prefilter:function(e,t){t?Animation.prefilters.unshift(e):Animation.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(G).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var a=w.isEmptyObject(e),i=w.speed(t,n,r),o=function(){var t=Animation(this,w.extend({},e),i);(a||I.get(this,"finish"))&&t.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||"fx",[]),this.each(function(){var t=!0,a=null!=e&&e+"queueHooks",i=w.timers,o=I.get(this);if(a)o[a]&&o[a].stop&&r(o[a]);else for(a in o)o[a]&&o[a].stop&&ke.test(a)&&r(o[a]);for(a=i.length;a--;)i[a].elem!==this||null!=e&&i[a].queue!==e||(i[a].anim.stop(n),t=!1,i.splice(a,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=I.get(this),r=n[e+"queue"],a=n[e+"queueHooks"],i=w.timers,o=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),a&&a.stop&&a.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<o;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,a){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(genFx(t,!0),e,r,a)}}),w.each({slideDown:genFx("show"),slideUp:genFx("hide"),slideToggle:genFx("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(_e=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),_e=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){we||(we=!0,schedule())},w.fx.stop=function(){we=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(e,t){return e=w.fx&&w.fx.speeds[e]||e,t=t||"fx",this.queue(t,function(t,r){var a=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(a)}})},function(){var e=y.createElement("input"),t=y.createElement("select").appendChild(y.createElement("option"));e.type="checkbox",g.checkOn=""!==e.value,g.optSelected=t.selected,(e=y.createElement("input")).value="t",e.type="radio",g.radioValue="t"===e.value}();var Ce,Se=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return V(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?w.prop(e,t,n):(1===i&&w.isXMLDoc(e)||(a=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?Ce:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:(e.setAttribute(t,n+""),n):a&&"get"in a&&null!==(r=a.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&"radio"===t&&nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,a=t&&t.match(R);if(a&&1===e.nodeType)for(;n=a[r++];)e.removeAttribute(n)}}),Ce={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=Se[t]||w.find.attr;Se[t]=function(e,t,r){var a,i,o=t.toLowerCase();return r||(i=Se[o],Se[o]=a,a=null!=n(e,t,r)?o:null,Se[o]=i),a}});var Te=/^(?:input|select|textarea|button)$/i,Ee=/^(?:a|area)$/i;function stripAndCollapse(e){return(e.match(R)||[]).join(" ")}function getClass(e){return e.getAttribute&&e.getAttribute("class")||""}function classesToArray(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}w.fn.extend({prop:function(e,t){return V(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&w.isXMLDoc(e)||(t=w.propFix[t]||t,a=w.propHooks[t]),void 0!==n?a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:e[t]=n:a&&"get"in a&&null!==(r=a.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):Te.test(e.nodeName)||Ee.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this}),w.fn.extend({addClass:function(e){var t,n,r,a,i,o,s,l=0;if(v(e))return this.each(function(t){w(this).addClass(e.call(this,t,getClass(this)))});if((t=classesToArray(e)).length)for(;n=this[l++];)if(a=getClass(n),r=1===n.nodeType&&" "+stripAndCollapse(a)+" "){for(o=0;i=t[o++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a!==(s=stripAndCollapse(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,a,i,o,s,l=0;if(v(e))return this.each(function(t){w(this).removeClass(e.call(this,t,getClass(this)))});if(!arguments.length)return this.attr("class","");if((t=classesToArray(e)).length)for(;n=this[l++];)if(a=getClass(n),r=1===n.nodeType&&" "+stripAndCollapse(a)+" "){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a!==(s=stripAndCollapse(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):v(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,getClass(this),t),t)}):this.each(function(){var t,a,i,o;if(r)for(a=0,i=w(this),o=classesToArray(e);t=o[a++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||((t=getClass(this))&&I.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":I.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+stripAndCollapse(getClass(n))+" ").indexOf(t)>-1)return!0;return!1}});var Me=/\r/g;w.fn.extend({val:function(e){var t,n,r,a=this[0];return arguments.length?(r=v(e),this.each(function(n){var a;1===this.nodeType&&(null==(a=r?e.call(this,n,w(this).val()):e)?a="":"number"==typeof a?a+="":Array.isArray(a)&&(a=w.map(a,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,a,"value")||(this.value=a))})):a?(t=w.valHooks[a.type]||w.valHooks[a.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(a,"value"))?n:"string"==typeof(n=a.value)?n.replace(Me,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:stripAndCollapse(w.text(e))}},select:{get:function(e){var t,n,r,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],l=o?i+1:a.length;for(r=i<0?l:o?i:0;r<l;r++)if(((n=a[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!nodeName(n.parentNode,"optgroup"))){if(t=w(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,a=e.options,i=w.makeArray(t),o=a.length;o--;)((r=a[o]).selected=w.inArray(w.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},g.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),g.focusin="onfocusin"in n;var Oe=/^(?:focusinfocus|focusoutblur)$/,Ae=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(e,t,r,a){var i,o,s,l,u,c,f,h,p=[r||y],m=d.call(e,"type")?e.type:e,g=d.call(e,"namespace")?e.namespace.split("."):[];if(o=h=s=r=r||y,3!==r.nodeType&&8!==r.nodeType&&!Oe.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(g=m.split("."),m=g.shift(),g.sort()),u=m.indexOf(":")<0&&"on"+m,(e=e[w.expando]?e:new w.Event(m,"object"==typeof e&&e)).isTrigger=a?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:w.makeArray(t,[e]),f=w.event.special[m]||{},a||!f.trigger||!1!==f.trigger.apply(r,t))){if(!a&&!f.noBubble&&!b(r)){for(l=f.delegateType||m,Oe.test(l+m)||(o=o.parentNode);o;o=o.parentNode)p.push(o),s=o;s===(r.ownerDocument||y)&&p.push(s.defaultView||s.parentWindow||n)}for(i=0;(o=p[i++])&&!e.isPropagationStopped();)h=o,e.type=i>1?l:f.bindType||m,(c=(I.get(o,"events")||Object.create(null))[e.type]&&I.get(o,"handle"))&&c.apply(o,t),(c=u&&o[u])&&c.apply&&L(o)&&(e.result=c.apply(o,t),!1===e.result&&e.preventDefault());return e.type=m,a||e.isDefaultPrevented()||f._default&&!1!==f._default.apply(p.pop(),t)||!L(r)||u&&v(r[m])&&!b(r)&&((s=r[u])&&(r[u]=null),w.event.triggered=m,e.isPropagationStopped()&&h.addEventListener(m,Ae),r[m](),e.isPropagationStopped()&&h.removeEventListener(m,Ae),w.event.triggered=void 0,s&&(r[u]=s)),e.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),g.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,a=I.access(r,t);a||r.addEventListener(e,n,!0),I.access(r,t,(a||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,a=I.access(r,t)-1;a?I.access(r,t,a):(r.removeEventListener(e,n,!0),I.remove(r,t))}}});var Re=n.location,Ne={guid:Date.now()},De=/\?/;w.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+e),t};var Ve=/\[\]$/,je=/\r?\n/g,Pe=/^(?:submit|button|image|reset|file)$/i,Le=/^(?:input|select|textarea|keygen)/i;function buildParams(e,t,n,r){var a;if(Array.isArray(t))w.each(t,function(t,a){n||Ve.test(e)?r(e,a):buildParams(e+"["+("object"==typeof a&&null!=a?t:"")+"]",a,n,r)});else if(n||"object"!==toType(t))r(e,t);else for(a in t)buildParams(e+"["+a+"]",t[a],n,r)}w.param=function(e,t){var n,r=[],a=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){a(this.name,this.value)});else for(n in e)buildParams(n,e[n],t,a);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&Le.test(this.nodeName)&&!Pe.test(e)&&(this.checked||!J.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(je,"\r\n")}}):{name:t.name,value:n.replace(je,"\r\n")}}).get()}});var Ie=/%20/g,Be=/#.*$/,ze=/([?&])_=[^&]*/,Ue=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fe=/^(?:GET|HEAD)$/,He=/^\/\//,qe={},We={},$e="*/".concat("*"),Ye=y.createElement("a");function addToPrefiltersOrTransports(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,a=0,i=t.toLowerCase().match(R)||[];if(v(n))for(;r=i[a++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function inspectPrefiltersOrTransports(e,t,n,r){var a={},i=e===We;function inspect(o){var s;return a[o]=!0,w.each(e[o]||[],function(e,o){var l=o(t,n,r);return"string"!=typeof l||i||a[l]?i?!(s=l):void 0:(t.dataTypes.unshift(l),inspect(l),!1)}),s}return inspect(t.dataTypes[0])||!a["*"]&&inspect("*")}function ajaxExtend(e,t){var n,r,a=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((a[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}Ye.href=Re.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Re.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Re.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$e,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ajaxExtend(ajaxExtend(e,w.ajaxSettings),t):ajaxExtend(w.ajaxSettings,e)},ajaxPrefilter:addToPrefiltersOrTransports(qe),ajaxTransport:addToPrefiltersOrTransports(We),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,a,i,o,s,l,u,c,f,h,d=w.ajaxSetup({},t),p=d.context||d,m=d.context&&(p.nodeType||p.jquery)?w(p):w.event,g=w.Deferred(),v=w.Callbacks("once memory"),b=d.statusCode||{},_={},x={},k="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(u){if(!o)for(o={};t=Ue.exec(i);)o[t[1].toLowerCase()+" "]=(o[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=o[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return u?i:null},setRequestHeader:function(e,t){return null==u&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,_[e]=t),this},overrideMimeType:function(e){return null==u&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)C.always(e[C.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||k;return r&&r.abort(t),done(0,t),this}};if(g.promise(C),d.url=((e||d.url||Re.href)+"").replace(He,Re.protocol+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(R)||[""],null==d.crossDomain){l=y.createElement("a");try{l.href=d.url,l.href=l.href,d.crossDomain=Ye.protocol+"//"+Ye.host!=l.protocol+"//"+l.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=w.param(d.data,d.traditional)),inspectPrefiltersOrTransports(qe,d,t,C),u)return C;for(f in(c=w.event&&d.global)&&0==w.active++&&w.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Fe.test(d.type),a=d.url.replace(Be,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(Ie,"+")):(h=d.url.slice(a.length),d.data&&(d.processData||"string"==typeof d.data)&&(a+=(De.test(a)?"&":"?")+d.data,delete d.data),!1===d.cache&&(a=a.replace(ze,"$1"),h=(De.test(a)?"&":"?")+"_="+Ne.guid+++h),d.url=a+h),d.ifModified&&(w.lastModified[a]&&C.setRequestHeader("If-Modified-Since",w.lastModified[a]),w.etag[a]&&C.setRequestHeader("If-None-Match",w.etag[a])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+$e+"; q=0.01":""):d.accepts["*"]),d.headers)C.setRequestHeader(f,d.headers[f]);if(d.beforeSend&&(!1===d.beforeSend.call(p,C,d)||u))return C.abort();if(k="abort",v.add(d.complete),C.done(d.success),C.fail(d.error),r=inspectPrefiltersOrTransports(We,d,t,C)){if(C.readyState=1,c&&m.trigger("ajaxSend",[C,d]),u)return C;d.async&&d.timeout>0&&(s=n.setTimeout(function(){C.abort("timeout")},d.timeout));try{u=!1,r.send(_,done)}catch(e){if(u)throw e;done(-1,e)}}else done(-1,"No Transport");function done(e,t,o,l){var f,h,y,_,x,k=t;u||(u=!0,s&&n.clearTimeout(s),r=void 0,i=l||"",C.readyState=e>0?4:0,f=e>=200&&e<300||304===e,o&&(_=function(e,t,n){for(var r,a,i,o,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){l.unshift(a);break}if(l[0]in n)i=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==l[0]&&l.unshift(i),n[i]}(d,C,o)),!f&&w.inArray("script",d.dataTypes)>-1&&(d.converters["text script"]=function(){}),_=function(e,t,n,r){var a,i,o,s,l,u={},c=e.dataTypes.slice();if(c[1])for(o in e.converters)u[o.toLowerCase()]=e.converters[o];for(i=c.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=c.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(o=u[l+" "+i]||u["* "+i]))for(a in u)if((s=a.split(" "))[1]===i&&(o=u[l+" "+s[0]]||u["* "+s[0]])){!0===o?o=u[a]:!0!==u[a]&&(i=s[0],c.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+l+" to "+i}}}return{state:"success",data:t}}(d,_,C,f),f?(d.ifModified&&((x=C.getResponseHeader("Last-Modified"))&&(w.lastModified[a]=x),(x=C.getResponseHeader("etag"))&&(w.etag[a]=x)),204===e||"HEAD"===d.type?k="nocontent":304===e?k="notmodified":(k=_.state,h=_.data,f=!(y=_.error))):(y=k,!e&&k||(k="error",e<0&&(e=0))),C.status=e,C.statusText=(t||k)+"",f?g.resolveWith(p,[h,k,C]):g.rejectWith(p,[C,k,y]),C.statusCode(b),b=void 0,c&&m.trigger(f?"ajaxSuccess":"ajaxError",[C,d,f?h:y]),v.fireWith(p,[C,k]),c&&(m.trigger("ajaxComplete",[C,d]),--w.active||w.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,a){return v(n)&&(a=a||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:a,data:n,success:r},w.isPlainObject(e)&&e))}}),w.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return v(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ge={0:200,1223:204},Xe=w.ajaxSettings.xhr();g.cors=!!Xe&&"withCredentials"in Xe,g.ajax=Xe=!!Xe,w.ajaxTransport(function(e){var t,r;if(g.cors||Xe&&!e.crossDomain)return{send:function(a,i){var o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)s[o]=e.xhrFields[o];for(o in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||a["X-Requested-With"]||(a["X-Requested-With"]="XMLHttpRequest"),a)s.setRequestHeader(o,a[o]);t=function(e){return function(){t&&(t=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(Ge[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),r=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){t&&r()})},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,a){t=w("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&a("error"===e.type?404:200,e.type)}),y.head.appendChild(t[0])},abort:function(){n&&n()}}});var Ke,Ze=[],Je=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ze.pop()||w.expando+"_"+Ne.guid++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(e,t,r){var a,i,o,s=!1!==e.jsonp&&(Je.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Je.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return a=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Je,"$1"+a):!1!==e.jsonp&&(e.url+=(De.test(e.url)?"&":"?")+e.jsonp+"="+a),e.converters["script json"]=function(){return o||w.error(a+" was not called"),o[0]},e.dataTypes[0]="json",i=n[a],n[a]=function(){o=arguments},r.always(function(){void 0===i?w(n).removeProp(a):n[a]=i,e[a]&&(e.jsonpCallback=t.jsonpCallback,Ze.push(a)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),g.createHTMLDocument=((Ke=y.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ke.childNodes.length),w.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=y.implementation.createHTMLDocument("")).createElement("base")).href=y.location.href,t.head.appendChild(r)):t=y),i=!n&&[],(a=T.exec(e))?[t.createElement(a[1])]:(a=buildFragment([e],t,i),i&&i.length&&w(i).remove(),w.merge([],a.childNodes)));var r,a,i},w.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return s>-1&&(r=stripAndCollapse(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(a="POST"),o.length>0&&w.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,a,i,o,s,l,u=w.css(e,"position"),c=w(e),f={};"static"===u&&(e.style.position="relative"),s=c.offset(),i=w.css(e,"top"),l=w.css(e,"left"),("absolute"===u||"fixed"===u)&&(i+l).indexOf("auto")>-1?(o=(r=c.position()).top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(l)||0),v(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),a.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-w.css(r,"marginTop",!0),left:t.left-a.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===w.css(e,"position");)e=e.offsetParent;return e||W})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return V(this,function(e,r,a){var i;if(b(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===a)return i?i[t]:e[r];i?i.scrollTo(n?i.pageXOffset:a,n?a:i.pageYOffset):e[r]=a},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=addGetHookIf(g.pixelPosition,function(e,n){if(n)return n=curCSS(e,t),ue.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(a,i){var o=arguments.length&&(n||"boolean"!=typeof a),s=n||(!0===a||!0===i?"margin":"border");return V(this,function(t,n,a){var i;return b(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===a?w.css(t,n,s):w.style(t,n,a,s)},t,o?a:void 0,o)}})}),w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}});var Qe=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.proxy=function(e,t){var n,r,a;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=s.call(arguments,2),(a=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||w.guid++,a},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=nodeName,w.isFunction=v,w.isWindow=b,w.camelCase=camelCase,w.type=toType,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},w.trim=function(e){return null==e?"":(e+"").replace(Qe,"")},void 0===(r=function(){return w}.apply(t,[]))||(e.exports=r);var et=n.jQuery,tt=n.$;return w.noConflict=function(e){return n.$===w&&(n.$=tt),e&&n.jQuery===w&&(n.jQuery=et),w},void 0===a&&(n.jQuery=n.$=w),w})},function(e,t,n){"use strict";var r=n(3),a=n.n(r),i=n(6),o=n.n(i),s=n(4),l=n.n(s),u=n(0),c=n.n(u),f=n(5),h=n.n(f),d=n(2),p=n.n(d),m=n(8),g=n.n(m),v=n(14),b=n(13),y=n(46),_=n.n(y),w=function(e){function AppRouter(){var e;return a()(this,AppRouter),e=l()(this,c()(AppRouter).call(this,{routes:{"testresult/:uid(/)(:tabName)":"testresultPage","*default":"notFound"}})),g()(p()(p()(e)),"currentUrl",null),e.on("route",e.onRouteChange,p()(p()(e))),e}return h()(AppRouter,e),o()(AppRouter,[{key:"onRouteChange",value:function(){this.previousUrl=this.currentUrl,this.currentUrl=this.getCurrentUrl()}},{key:"getCurrentUrl",value:function(){return b.history.getFragment()}},{key:"reload",value:function(){b.history.loadUrl(this.getCurrentUrl())}},{key:"to",value:function(e,t,n){t=Object(v.omit)(t,function(e){return null===e});var r=_.a.format({pathname:e,query:t});return this.toUrl(r,n)}},{key:"toUrl",value:function(e,t){return this.navigate(e,Object.assign({trigger:!0},t))}},{key:"setSearch",value:function(e){var t=_.a.parse(this.getCurrentUrl()).pathname;return this.to(t,e)}},{key:"getUrlParams",value:function(){var e=_.a.parse(this.getCurrentUrl(),!0);return e?e.query:{}}}]),AppRouter}(b.Router);t.a=new w},function(e,t,n){n(0);var r=n(153);function _get(t,n,a){return"undefined"!=typeof Reflect&&Reflect.get?e.exports=_get=Reflect.get:e.exports=_get=function(e,t,n){var a=r(e,t);if(a){var i=Object.getOwnPropertyDescriptor(a,t);return i.get?i.get.call(n):i.value}},_get(t,n,a||t)}e.exports=_get},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=["failed","broken","passed","skipped","unknown"]},function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var a={type:"logger",log:function(e){this.output("log",e)},warn:function(e){this.output("warn",e)},error:function(e){this.output("error",e)},output:function(e,t){var n;console&&console[e]&&(n=console)[e].apply(n,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t))}},i=new(function(){function Logger(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Logger),this.init(e,t)}return Logger.prototype.init=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||a,this.options=t,this.debug=t.debug},Logger.prototype.setDebug=function(e){this.debug=e},Logger.prototype.log=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,"log","",!0)},Logger.prototype.warn=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,"warn","",!0)},Logger.prototype.error=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,"error","")},Logger.prototype.deprecate=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.forward(t,"warn","WARNING DEPRECATED: ",!0)},Logger.prototype.forward=function(e,t,n,r){return r&&!this.debug?null:("string"==typeof e[0]&&(e[0]=""+n+this.prefix+" "+e[0]),this.logger[t](e))},Logger.prototype.create=function(e){return new Logger(this.logger,r({prefix:this.prefix+":"+e+":"},this.options))},Logger}());var o=function(){function EventEmitter(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,EventEmitter),this.observers={}}return EventEmitter.prototype.on=function(e,t){var n=this;e.split(" ").forEach(function(e){n.observers[e]=n.observers[e]||[],n.observers[e].push(t)})},EventEmitter.prototype.off=function(e,t){var n=this;this.observers[e]&&this.observers[e].forEach(function(){if(t){var r=n.observers[e].indexOf(t);r>-1&&n.observers[e].splice(r,1)}else delete n.observers[e]})},EventEmitter.prototype.emit=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];this.observers[e]&&[].concat(this.observers[e]).forEach(function(e){e.apply(void 0,n)});this.observers["*"]&&[].concat(this.observers["*"]).forEach(function(t){var r;t.apply(t,(r=[e]).concat.apply(r,n))})},EventEmitter}();function makeString(e){return null==e?"":""+e}function getLastOfPath(e,t,n){function cleanKey(e){return e&&e.indexOf("###")>-1?e.replace(/###/g,"."):e}function canNotTraverseDeeper(){return!e||"string"==typeof e}for(var r="string"!=typeof t?[].concat(t):t.split(".");r.length>1;){if(canNotTraverseDeeper())return{};var a=cleanKey(r.shift());!e[a]&&n&&(e[a]=new n),e=e[a]}return canNotTraverseDeeper()?{}:{obj:e,k:cleanKey(r.shift())}}function setPath(e,t,n){var r=getLastOfPath(e,t,Object);r.obj[r.k]=n}function getPath(e,t){var n=getLastOfPath(e,t),r=n.obj,a=n.k;if(r)return r[a]}function regexEscape(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var s={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function utils_escape(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,function(e){return s[e]}):e}var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var a=n[r],i=Object.getOwnPropertyDescriptor(t,a);i&&i.configurable&&void 0===e[a]&&Object.defineProperty(e,a,i)}}(e,t))}var u=function(e){function ResourceStore(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,ResourceStore);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this));return r.data=t,r.options=n,r}return _inherits(ResourceStore,e),ResourceStore.prototype.addNamespaces=function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)},ResourceStore.prototype.removeNamespaces=function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)},ResourceStore.prototype.getResource=function(e,t,n){var r=(arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}).keySeparator||this.options.keySeparator;void 0===r&&(r=".");var a=[e,t];return n&&"string"!=typeof n&&(a=a.concat(n)),n&&"string"==typeof n&&(a=a.concat(r?n.split(r):n)),e.indexOf(".")>-1&&(a=e.split(".")),getPath(this.data,a)},ResourceStore.prototype.addResource=function(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},i=this.options.keySeparator;void 0===i&&(i=".");var o=[e,t];n&&(o=o.concat(i?n.split(i):n)),e.indexOf(".")>-1&&(r=t,t=(o=e.split("."))[1]),this.addNamespaces(t),setPath(this.data,o,r),a.silent||this.emit("added",e,t,n,r)},ResourceStore.prototype.addResources=function(e,t,n){for(var r in n)"string"==typeof n[r]&&this.addResource(e,t,r,n[r],{silent:!0});this.emit("added",e,t,n)},ResourceStore.prototype.addResourceBundle=function(e,t,n,r,a){var i=[e,t];e.indexOf(".")>-1&&(r=n,n=t,t=(i=e.split("."))[1]),this.addNamespaces(t);var o=getPath(this.data,i)||{};r?function deepExtend(e,t,n){for(var r in t)r in e?"string"==typeof e[r]||e[r]instanceof String||"string"==typeof t[r]||t[r]instanceof String?n&&(e[r]=t[r]):deepExtend(e[r],t[r],n):e[r]=t[r];return e}(o,n,a):o=l({},o,n),setPath(this.data,i,o),this.emit("added",e,t,n)},ResourceStore.prototype.removeResourceBundle=function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)},ResourceStore.prototype.hasResourceBundle=function(e,t){return void 0!==this.getResource(e,t)},ResourceStore.prototype.getResourceBundle=function(e,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?l({},this.getResource(e,t)):this.getResource(e,t)},ResourceStore.prototype.toJSON=function(){return this.data},ResourceStore}(o),c={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,a){var i=this;return e.forEach(function(e){i.processors[e]&&(t=i.processors[e].process(t,n,r,a))}),t}};function convertInterpolation(e){return e.interpolation={unescapeSuffix:"HTML"},e.interpolation.prefix=e.interpolationPrefix||"__",e.interpolation.suffix=e.interpolationSuffix||"__",e.interpolation.escapeValue=e.escapeInterpolation||!1,e.interpolation.nestingPrefix=e.reusePrefix||"$t(",e.interpolation.nestingSuffix=e.reuseSuffix||")",e}function convertTOptions(e){return(e.interpolationPrefix||e.interpolationSuffix||void 0!==e.escapeInterpolation)&&(e=convertInterpolation(e)),e.nsSeparator=e.nsseparator,e.keySeparator=e.keyseparator,e.returnObjects=e.returnObjectTrees,e}var f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function Translator_inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var a=n[r],i=Object.getOwnPropertyDescriptor(t,a);i&&i.configurable&&void 0===e[a]&&Object.defineProperty(e,a,i)}}(e,t))}var d=function(e){function Translator(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Translator);var r,a,o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this));return r=t,a=o,["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector"].forEach(function(e){r[e]&&(a[e]=r[e])}),o.options=n,o.logger=i.create("translator"),o}return Translator_inherits(Translator,e),Translator.prototype.changeLanguage=function(e){e&&(this.language=e)},Translator.prototype.exists=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};return"v1"===this.options.compatibilityAPI&&(t=convertTOptions(t)),void 0!==this.resolve(e,t)},Translator.prototype.extractFromKey=function(e,t){var n=t.nsSeparator||this.options.nsSeparator;void 0===n&&(n=":");var r=t.keySeparator||this.options.keySeparator||".",a=t.ns||this.options.defaultNS;if(n&&e.indexOf(n)>-1){var i=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(i[0])>-1)&&(a=i.shift()),e=i.join(r)}return"string"==typeof a&&(a=[a]),{key:e,namespaces:a}},Translator.prototype.translate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("object"!==(void 0===t?"undefined":h(t))?t=this.options.overloadTranslationOptionHandler(arguments):"v1"===this.options.compatibilityAPI&&(t=convertTOptions(t)),null==e||""===e)return"";"number"==typeof e&&(e=String(e)),"string"==typeof e&&(e=[e]);var n=t.keySeparator||this.options.keySeparator||".",r=this.extractFromKey(e[e.length-1],t),a=r.key,i=r.namespaces,o=i[i.length-1],s=t.lng||this.language,l=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(s&&"cimode"===s.toLowerCase())return l?o+(t.nsSeparator||this.options.nsSeparator)+a:a;var u=this.resolve(e,t),c=Object.prototype.toString.apply(u),d=void 0!==t.joinArrays?t.joinArrays:this.options.joinArrays;if(u&&"string"!=typeof u&&["[object Number]","[object Function]","[object RegExp]"].indexOf(c)<0&&(!d||"[object Array]"!==c)){if(!t.returnObjects&&!this.options.returnObjects)return this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(a,u,t):"key '"+a+" ("+this.language+")' returned an object instead of string.";if(t.keySeparator||this.options.keySeparator){var p="[object Array]"===c?[]:{};for(var m in u)Object.prototype.hasOwnProperty.call(u,m)&&(p[m]=this.translate(""+a+n+m,f({},t,{joinArrays:!1,ns:i})));u=p}}else if(d&&"[object Array]"===c)(u=u.join(d))&&(u=this.extendTranslation(u,a,t));else{var g=!1,v=!1;if(this.isValidLookup(u)||void 0===t.defaultValue||(g=!0,u=t.defaultValue),this.isValidLookup(u)||(v=!0,u=a),v||g){this.logger.log("missingKey",s,o,a,u);var b=[],y=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if("fallback"===this.options.saveMissingTo&&y&&y[0])for(var _=0;_<y.length;_++)b.push(y[_]);else"all"===this.options.saveMissingTo?b=this.languageUtils.toResolveHierarchy(t.lng||this.language):b.push(t.lng||this.language);this.options.saveMissing&&(this.options.missingKeyHandler?this.options.missingKeyHandler(b,o,a,u):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(b,o,a,u)),this.emit("missingKey",b,o,a,u)}u=this.extendTranslation(u,a,t),v&&u===a&&this.options.appendNamespaceToMissingKey&&(u=o+":"+a),v&&this.options.parseMissingKeyHandler&&(u=this.options.parseMissingKeyHandler(u))}return u},Translator.prototype.extendTranslation=function(e,t,n){var r=this;n.interpolation&&this.interpolator.init(f({},n,{interpolation:f({},this.options.interpolation,n.interpolation)}));var a=n.replace&&"string"!=typeof n.replace?n.replace:n;this.options.interpolation.defaultVariables&&(a=f({},this.options.interpolation.defaultVariables,a)),e=this.interpolator.interpolate(e,a,n.lng||this.language),!1!==n.nest&&(e=this.interpolator.nest(e,function(){return r.translate.apply(r,arguments)},n)),n.interpolation&&this.interpolator.reset();var i=n.postProcess||this.options.postProcess,o="string"==typeof i?[i]:i;return void 0!==e&&o&&o.length&&!1!==n.applyPostProcessor&&(e=c.handle(o,e,t,n,this)),e},Translator.prototype.resolve=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0;return"string"==typeof e&&(e=[e]),e.forEach(function(e){if(!t.isValidLookup(r)){var a=t.extractFromKey(e,n),i=a.key,o=a.namespaces;t.options.fallbackNS&&(o=o.concat(t.options.fallbackNS));var s=void 0!==n.count&&"string"!=typeof n.count,l=void 0!==n.context&&"string"==typeof n.context&&""!==n.context,u=n.lngs?n.lngs:t.languageUtils.toResolveHierarchy(n.lng||t.language);o.forEach(function(e){t.isValidLookup(r)||u.forEach(function(a){if(!t.isValidLookup(r)){var o=i,u=[o],c=void 0;s&&(c=t.pluralResolver.getSuffix(a,n.count)),s&&l&&u.push(o+c),l&&u.push(o+=""+t.options.contextSeparator+n.context),s&&u.push(o+=c);for(var f=void 0;f=u.pop();)t.isValidLookup(r)||(r=t.getResource(a,e,f,n))}})})}}),r},Translator.prototype.isValidLookup=function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)},Translator.prototype.getResource=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.resourceStore.getResource(e,t,n,r)},Translator}(o);function capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}var p=function(){function LanguageUtil(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,LanguageUtil),this.options=e,this.whitelist=this.options.whitelist||!1,this.logger=i.create("languageUtils")}return LanguageUtil.prototype.getScriptPartFromCode=function(e){if(!e||e.indexOf("-")<0)return null;var t=e.split("-");return 2===t.length?null:(t.pop(),this.formatLanguageCode(t.join("-")))},LanguageUtil.prototype.getLanguagePartFromCode=function(e){if(!e||e.indexOf("-")<0)return e;var t=e.split("-");return this.formatLanguageCode(t[0])},LanguageUtil.prototype.formatLanguageCode=function(e){if("string"==typeof e&&e.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],n=e.split("-");return this.options.lowerCaseLng?n=n.map(function(e){return e.toLowerCase()}):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=capitalize(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),"sgn"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=capitalize(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=capitalize(n[2].toLowerCase()))),n.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e},LanguageUtil.prototype.isWhitelisted=function(e){return("languageOnly"===this.options.load||this.options.nonExplicitWhitelist)&&(e=this.getLanguagePartFromCode(e)),!this.whitelist||!this.whitelist.length||this.whitelist.indexOf(e)>-1},LanguageUtil.prototype.getFallbackCodes=function(e,t){if(!e)return[];if("string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e.default),n||[]},LanguageUtil.prototype.toResolveHierarchy=function(e,t){var n=this,r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),a=[],i=function(e){e&&(n.isWhitelisted(e)?a.push(e):n.logger.warn("rejecting non-whitelisted language code: "+e))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&i(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&i(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&i(this.getLanguagePartFromCode(e))):"string"==typeof e&&i(this.formatLanguageCode(e)),r.forEach(function(e){a.indexOf(e)<0&&i(n.formatLanguageCode(e))}),a},LanguageUtil}();var m=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","tg","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","es_ar","et","eu","fi","fo","fur","fy","gl","gu","ha","he","hi","hu","hy","ia","it","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt","pt_br","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","id","ja","jbo","ka","kk","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21}],g={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0===e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0===e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)}};var v=function(){function PluralResolver(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,PluralResolver),this.languageUtils=e,this.options=n,this.logger=i.create("pluralResolver"),this.rules=(t={},m.forEach(function(e){e.lngs.forEach(function(n){t[n]={numbers:e.nr,plurals:g[e.fc]}})}),t)}return PluralResolver.prototype.addRule=function(e,t){this.rules[e]=t},PluralResolver.prototype.getRule=function(e){return this.rules[this.languageUtils.getLanguagePartFromCode(e)]},PluralResolver.prototype.needsPlural=function(e){var t=this.getRule(e);return t&&t.numbers.length>1},PluralResolver.prototype.getSuffix=function(e,t){var n=this,r=this.getRule(e);if(r){if(1===r.numbers.length)return"";var a=r.noAbs?r.plurals(t):r.plurals(Math.abs(t)),i=r.numbers[a];this.options.simplifyPluralSuffix&&2===r.numbers.length&&1===r.numbers[0]&&(2===i?i="plural":1===i&&(i=""));var o=function(){return n.options.prepend&&i.toString()?n.options.prepend+i.toString():i.toString()};return"v1"===this.options.compatibilityJSON?1===i?"":"number"==typeof i?"_plural_"+i.toString():o():"v2"===this.options.compatibilityJSON||2===r.numbers.length&&1===r.numbers[0]?o():2===r.numbers.length&&1===r.numbers[0]?o():this.options.prepend&&a.toString()?this.options.prepend+a.toString():a.toString()}return this.logger.warn("no plural rule found for: "+e),""},PluralResolver}(),b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var y=function(){function Interpolator(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Interpolator),this.logger=i.create("interpolator"),this.init(e,!0)}return Interpolator.prototype.init=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};arguments[1]&&(this.options=e,this.format=e.interpolation&&e.interpolation.format||function(e){return e},this.escape=e.interpolation&&e.interpolation.escape||utils_escape),e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.prefix=t.prefix?regexEscape(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?regexEscape(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?regexEscape(t.nestingPrefix):t.nestingPrefixEscaped||regexEscape("$t("),this.nestingSuffix=t.nestingSuffix?regexEscape(t.nestingSuffix):t.nestingSuffixEscaped||regexEscape(")"),this.resetRegExp()},Interpolator.prototype.reset=function(){this.options&&this.init(this.options)},Interpolator.prototype.resetRegExp=function(){var e=this.prefix+"(.+?)"+this.suffix;this.regexp=new RegExp(e,"g");var t=""+this.prefix+this.unescapePrefix+"(.+?)"+this.unescapeSuffix+this.suffix;this.regexpUnescape=new RegExp(t,"g");var n=this.nestingPrefix+"(.+?)"+this.nestingSuffix;this.nestingRegexp=new RegExp(n,"g")},Interpolator.prototype.interpolate=function(e,t,n){var r=this,a=void 0,i=void 0;function regexSafe(e){return e.replace(/\$/g,"$$$$")}var o=function(e){if(e.indexOf(r.formatSeparator)<0)return getPath(t,e);var a=e.split(r.formatSeparator),i=a.shift().trim(),o=a.join(r.formatSeparator).trim();return r.format(getPath(t,i),o,n)};for(this.resetRegExp();a=this.regexpUnescape.exec(e);)i=o(a[1].trim()),e=e.replace(a[0],i),this.regexpUnescape.lastIndex=0;for(;a=this.regexp.exec(e);)"string"!=typeof(i=o(a[1].trim()))&&(i=makeString(i)),i||(this.logger.warn("missed to pass in variable "+a[1]+" for interpolating "+e),i=""),i=this.escapeValue?regexSafe(this.escape(i)):regexSafe(i),e=e.replace(a[0],i),this.regexp.lastIndex=0;return e},Interpolator.prototype.nest=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=void 0,a=void 0,i=b({},n);function handleHasOptions(e){if(e.indexOf(",")<0)return e;var t=e.split(",");e=t.shift();var n=t.join(",");n=(n=this.interpolate(n,i)).replace(/'/g,'"');try{i=JSON.parse(n)}catch(t){this.logger.error("failed parsing options string in nesting for key "+e,t)}return e}for(i.applyPostProcessor=!1;r=this.nestingRegexp.exec(e);){if((a=t(handleHasOptions.call(this,r[1].trim()),i))&&r[0]===e&&"string"!=typeof a)return a;"string"!=typeof a&&(a=makeString(a)),a||(this.logger.warn("missed to resolve "+r[1]+" for nesting "+e),a=""),e=e.replace(r[0],a),this.regexp.lastIndex=0}return e},Interpolator}(),_=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},w=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();function BackendConnector_inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var a=n[r],i=Object.getOwnPropertyDescriptor(t,a);i&&i.configurable&&void 0===e[a]&&Object.defineProperty(e,a,i)}}(e,t))}var x=function(e){function Connector(t,n,r){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Connector);var o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this));return o.backend=t,o.store=n,o.services=r,o.options=a,o.logger=i.create("backendConnector"),o.state={},o.queue=[],o.backend&&o.backend.init&&o.backend.init(r,a.backend,a),o}return BackendConnector_inherits(Connector,e),Connector.prototype.queueLoad=function(e,t,n){var r=this,a=[],i=[],o=[],s=[];return e.forEach(function(e){var n=!0;t.forEach(function(t){var o=e+"|"+t;r.store.hasResourceBundle(e,t)?r.state[o]=2:r.state[o]<0||(1===r.state[o]?i.indexOf(o)<0&&i.push(o):(r.state[o]=1,n=!1,i.indexOf(o)<0&&i.push(o),a.indexOf(o)<0&&a.push(o),s.indexOf(t)<0&&s.push(t)))}),n||o.push(e)}),(a.length||i.length)&&this.queue.push({pending:i,loaded:{},errors:[],callback:n}),{toLoad:a,pending:i,toLoadLanguages:o,toLoadNamespaces:s}},Connector.prototype.loaded=function(e,t,n){var r=this,a=e.split("|"),i=w(a,2),o=i[0],s=i[1];t&&this.emit("failedLoading",o,s,t),n&&this.store.addResourceBundle(o,s,n),this.state[e]=t?-1:2,this.queue.forEach(function(n){var a,i,l,u,c,f;a=n.loaded,i=s,u=getLastOfPath(a,[o],Object),c=u.obj,f=u.k,c[f]=c[f]||[],l&&(c[f]=c[f].concat(i)),l||c[f].push(i),function(e,t){for(var n=e.indexOf(t);-1!==n;)e.splice(n,1),n=e.indexOf(t)}(n.pending,e),t&&n.errors.push(t),0!==n.pending.length||n.done||(r.emit("loaded",n.loaded),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.queue=this.queue.filter(function(e){return!e.done})},Connector.prototype.read=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,a=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:250,o=arguments[5];return e.length?this.backend[n](e,t,function(s,l){s&&l&&r<5?setTimeout(function(){a.read.call(a,e,t,n,r+1,2*i,o)},i):o(s,l)}):o(null,{})},Connector.prototype.load=function(e,t,n){var r=this;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),n&&n();var a=_({},this.backend.options,this.options.backend);"string"==typeof e&&(e=this.services.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);var i=this.queueLoad(e,t,n);if(!i.toLoad.length)return i.pending.length||n(),null;a.allowMultiLoading&&this.backend.readMulti?this.read(i.toLoadLanguages,i.toLoadNamespaces,"readMulti",null,null,function(e,t){e&&r.logger.warn("loading namespaces "+i.toLoadNamespaces.join(", ")+" for languages "+i.toLoadLanguages.join(", ")+" via multiloading failed",e),!e&&t&&r.logger.log("successfully loaded namespaces "+i.toLoadNamespaces.join(", ")+" for languages "+i.toLoadLanguages.join(", ")+" via multiloading",t),i.toLoad.forEach(function(n){var a=n.split("|"),i=w(a,2),o=i[0],s=i[1],l=getPath(t,[o,s]);if(l)r.loaded(n,e,l);else{var u="loading namespace "+s+" for language "+o+" via multiloading failed";r.loaded(n,u),r.logger.error(u)}})}):i.toLoad.forEach(function(e){r.loadOne(e)})},Connector.prototype.reload=function(e,t){var n=this;this.backend||this.logger.warn("No backend was added via i18next.use. Will not load resources.");var r=_({},this.backend.options,this.options.backend);"string"==typeof e&&(e=this.services.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]),r.allowMultiLoading&&this.backend.readMulti?this.read(e,t,"readMulti",null,null,function(r,a){r&&n.logger.warn("reloading namespaces "+t.join(", ")+" for languages "+e.join(", ")+" via multiloading failed",r),!r&&a&&n.logger.log("successfully reloaded namespaces "+t.join(", ")+" for languages "+e.join(", ")+" via multiloading",a),e.forEach(function(e){t.forEach(function(t){var i=getPath(a,[e,t]);if(i)n.loaded(e+"|"+t,r,i);else{var o="reloading namespace "+t+" for language "+e+" via multiloading failed";n.loaded(e+"|"+t,o),n.logger.error(o)}})})}):e.forEach(function(e){t.forEach(function(t){n.loadOne(e+"|"+t,"re")})})},Connector.prototype.loadOne=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=e.split("|"),a=w(r,2),i=a[0],o=a[1];this.read(i,o,"read",null,null,function(r,a){r&&t.logger.warn(n+"loading namespace "+o+" for language "+i+" failed",r),!r&&a&&t.logger.log(n+"loaded namespace "+o+" for language "+i,a),t.loaded(e,r,a)})},Connector.prototype.saveMissing=function(e,t,n,r){this.backend&&this.backend.create&&this.backend.create(e,t,n,r),e&&e[0]&&this.store.addResource(e[0],t,n,r)},Connector}(o),k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function CacheConnector_inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var a=n[r],i=Object.getOwnPropertyDescriptor(t,a);i&&i.configurable&&void 0===e[a]&&Object.defineProperty(e,a,i)}}(e,t))}var C=function(e){function Connector(t,n,r){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,Connector);var o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this));return o.cache=t,o.store=n,o.services=r,o.options=a,o.logger=i.create("cacheConnector"),o.cache&&o.cache.init&&o.cache.init(r,a.cache,a),o}return CacheConnector_inherits(Connector,e),Connector.prototype.load=function(e,t,n){var r=this;if(!this.cache)return n&&n();var a=k({},this.cache.options,this.options.cache),i="string"==typeof e?this.services.languageUtils.toResolveHierarchy(e):e;a.enabled?this.cache.load(i,function(e,t){if(e&&r.logger.error("loading languages "+i.join(", ")+" from cache failed",e),t)for(var a in t)if(Object.prototype.hasOwnProperty.call(t,a))for(var o in t[a])if(Object.prototype.hasOwnProperty.call(t[a],o)&&"i18nStamp"!==o){var s=t[a][o];s&&r.store.addResourceBundle(a,o,s)}n&&n()}):n&&n()},Connector.prototype.save=function(){this.cache&&this.options.cache&&this.options.cache.enabled&&this.cache.save(this.store.data)},Connector}(o);function transformOptions(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.whitelist&&e.whitelist.indexOf("cimode")<0&&e.whitelist.push("cimode"),e}var S=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function i18next_possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i18next_inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):function(e,t){for(var n=Object.getOwnPropertyNames(t),r=0;r<n.length;r++){var a=n[r],i=Object.getOwnPropertyDescriptor(t,a);i&&i.configurable&&void 0===e[a]&&Object.defineProperty(e,a,i)}}(e,t))}function noop(){}var T=new(function(e){function I18n(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments[1];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,I18n);var r=i18next_possibleConstructorReturn(this,e.call(this));if(r.options=transformOptions(t),r.services={},r.logger=i,r.modules={external:[]},n&&!r.isInitialized&&!t.isClone){var a;if(!r.options.initImmediate)return a=r.init(t,n),i18next_possibleConstructorReturn(r,a);setTimeout(function(){r.init(t,n)},0)}return r}return i18next_inherits(I18n,e),I18n.prototype.init=function(e,t){var n=this;function createClassOnDemand(e){return e?"function"==typeof e?new e:e:null}if("function"==typeof e&&(t=e,e={}),e||(e={}),"v1"===e.compatibilityAPI?this.options=S({},{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",saveMissing:!1,saveMissingTo:"fallback",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",defaultVariables:void 0}},transformOptions(function(e){return e.resStore&&(e.resources=e.resStore),e.ns&&e.ns.defaultNs?(e.defaultNS=e.ns.defaultNs,e.ns=e.ns.namespaces):e.defaultNS=e.ns||"translation",e.fallbackToDefaultNS&&e.defaultNS&&(e.fallbackNS=e.defaultNS),e.saveMissing=e.sendMissing,e.saveMissingTo=e.sendMissingTo||"current",e.returnNull=!e.fallbackOnNull,e.returnEmptyString=!e.fallbackOnEmpty,e.returnObjects=e.returnObjectTrees,e.joinArrays="\n",e.returnedObjectHandler=e.objectTreeKeyHandler,e.parseMissingKeyHandler=e.parseMissingKey,e.appendNamespaceToMissingKey=!0,e.nsSeparator=e.nsseparator||":",e.keySeparator=e.keyseparator||".","sprintf"===e.shortcutFunction&&(e.overloadTranslationOptionHandler=function(e){for(var t=[],n=1;n<e.length;n++)t.push(e[n]);return{postProcess:"sprintf",sprintf:t}}),e.whitelist=e.lngWhitelist,e.preload=e.preload,"current"===e.load&&(e.load="currentOnly"),"unspecific"===e.load&&(e.load="languageOnly"),e.backend=e.backend||{},e.backend.loadPath=e.resGetPath||"locales/__lng__/__ns__.json",e.backend.addPath=e.resPostPath||"locales/add/__lng__/__ns__",e.backend.allowMultiLoading=e.dynamicLoad,e.cache=e.cache||{},e.cache.prefix="res_",e.cache.expirationTime=6048e5,e.cache.enabled=e.useLocalStorage,(e=convertInterpolation(e)).defaultVariables&&(e.interpolation.defaultVariables=e.defaultVariables),e}(e)),{}):"v1"===e.compatibilityJSON?this.options=S({},{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",saveMissing:!1,saveMissingTo:"fallback",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",defaultVariables:void 0}},transformOptions(function(e){return(e=convertInterpolation(e)).joinArrays="\n",e}(e)),{}):this.options=S({},{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",saveMissing:!1,saveMissingTo:"fallback",missingKeyHandler:!1,postProcess:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:function(){},parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(e){return{defaultValue:e[1]}},interpolation:{escapeValue:!0,format:function(e,t,n){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",defaultVariables:void 0}},this.options,transformOptions(e)),this.format=this.options.interpolation.format,t||(t=noop),!this.options.isClone){this.modules.logger?i.init(createClassOnDemand(this.modules.logger),this.options):i.init(null,this.options);var r=new p(this.options);this.store=new u(this.options.resources,this.options);var a=this.services;a.logger=i,a.resourceStore=this.store,a.resourceStore.on("added removed",function(e,t){a.cacheConnector.save()}),a.languageUtils=r,a.pluralResolver=new v(r,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),a.interpolator=new y(this.options),a.backendConnector=new x(createClassOnDemand(this.modules.backend),a.resourceStore,a,this.options),a.backendConnector.on("*",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),a=1;a<t;a++)r[a-1]=arguments[a];n.emit.apply(n,[e].concat(r))}),a.backendConnector.on("loaded",function(e){a.cacheConnector.save()}),a.cacheConnector=new C(createClassOnDemand(this.modules.cache),a.resourceStore,a,this.options),a.cacheConnector.on("*",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),a=1;a<t;a++)r[a-1]=arguments[a];n.emit.apply(n,[e].concat(r))}),this.modules.languageDetector&&(a.languageDetector=createClassOnDemand(this.modules.languageDetector),a.languageDetector.init(a,this.options.detection,this.options)),this.translator=new d(this.services,this.options),this.translator.on("*",function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),a=1;a<t;a++)r[a-1]=arguments[a];n.emit.apply(n,[e].concat(r))}),this.modules.external.forEach(function(e){e.init&&e.init(n)})}var o;["getResource","addResource","addResources","addResourceBundle","removeResourceBundle","hasResourceBundle","getResourceBundle"].forEach(function(e){n[e]=function(){var t;return(t=n.store)[e].apply(t,arguments)}}),"v1"===this.options.compatibilityAPI&&((o=this).lng=function(){return i.deprecate("i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup."),o.services.languageUtils.toResolveHierarchy(o.language)[0]},o.preload=function(e,t){i.deprecate("i18next.preload() can be replaced with i18next.loadLanguages()"),o.loadLanguages(e,t)},o.setLng=function(e,t,n){return i.deprecate("i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace."),"function"==typeof t&&(n=t,t={}),t||(t={}),!0===t.fixLng&&n?n(null,o.getFixedT(e)):o.changeLanguage(e,n)},o.addPostProcessor=function(e,t){i.deprecate("i18next.addPostProcessor() can be replaced by i18next.use({ type: 'postProcessor', name: 'name', process: fc })"),o.use({type:"postProcessor",name:e,process:t})});var s=function(){n.changeLanguage(n.options.lng,function(e,r){n.isInitialized=!0,n.logger.log("initialized",n.options),n.emit("initialized",n.options),t(e,r)})};return this.options.resources||!this.options.initImmediate?s():setTimeout(s,0),this},I18n.prototype.loadResources=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:noop;if(this.options.resources)t(null);else{if(this.language&&"cimode"===this.language.toLowerCase())return t();var n=[],r=function(t){t&&e.services.languageUtils.toResolveHierarchy(t).forEach(function(e){n.indexOf(e)<0&&n.push(e)})};if(this.language)r(this.language);else this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(e){return r(e)});this.options.preload&&this.options.preload.forEach(function(e){return r(e)}),this.services.cacheConnector.load(n,this.options.ns,function(){e.services.backendConnector.load(n,e.options.ns,t)})}},I18n.prototype.reloadResources=function(e,t){e||(e=this.languages),t||(t=this.options.ns),this.services.backendConnector.reload(e,t)},I18n.prototype.use=function(e){return"backend"===e.type&&(this.modules.backend=e),"cache"===e.type&&(this.modules.cache=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"postProcessor"===e.type&&c.addPostProcessor(e),"3rdParty"===e.type&&this.modules.external.push(e),this},I18n.prototype.changeLanguage=function(e,t){var n=this,r=function(e){e&&(n.language=e,n.languages=n.services.languageUtils.toResolveHierarchy(e),n.translator.changeLanguage(e),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage(e)),n.loadResources(function(r){!function(e,r){r&&(n.emit("languageChanged",r),n.logger.log("languageChanged",r)),t&&t(e,function(){return n.t.apply(n,arguments)})}(r,e)})};e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(r):r(e):r(this.services.languageDetector.detect())},I18n.prototype.getFixedT=function(e,t){var n=this,r=function fixedT(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=S({},t);return r.lng=r.lng||fixedT.lng,r.lngs=r.lngs||fixedT.lngs,r.ns=r.ns||fixedT.ns,n.t(e,r)};return"string"==typeof e?r.lng=e:r.lngs=e,r.ns=t,r},I18n.prototype.t=function(){var e;return this.translator&&(e=this.translator).translate.apply(e,arguments)},I18n.prototype.exists=function(){var e;return this.translator&&(e=this.translator).exists.apply(e,arguments)},I18n.prototype.setDefaultNamespace=function(e){this.options.defaultNS=e},I18n.prototype.loadNamespaces=function(e,t){var n=this;if(!this.options.ns)return t&&t();"string"==typeof e&&(e=[e]),e.forEach(function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)}),this.loadResources(t)},I18n.prototype.loadLanguages=function(e,t){"string"==typeof e&&(e=[e]);var n=this.options.preload||[],r=e.filter(function(e){return n.indexOf(e)<0});if(!r.length)return t();this.options.preload=n.concat(r),this.loadResources(t)},I18n.prototype.dir=function(e){if(e||(e=this.languages&&this.languages.length>0?this.languages[0]:this.language),!e)return"rtl";return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam"].indexOf(this.services.languageUtils.getLanguagePartFromCode(e))>=0?"rtl":"ltr"},I18n.prototype.createInstance=function(){return new I18n(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments[1])},I18n.prototype.cloneInstance=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:noop,r=S({},this.options,t,{isClone:!0}),a=new I18n(r,n);return["store","services","language"].forEach(function(t){a[t]=e[t]}),a.translator=new d(a.services,a.options),a.translator.on("*",function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];a.emit.apply(a,[e].concat(n))}),a.init(r,n),a},I18n}(o)),E=T,M=(T.changeLanguage.bind(T),T.cloneInstance.bind(T),T.createInstance.bind(T),T.dir.bind(T),T.exists.bind(T),T.getFixedT.bind(T),T.init.bind(T),T.loadLanguages.bind(T),T.loadNamespaces.bind(T),T.loadResources.bind(T),T.off.bind(T),T.on.bind(T),T.setDefaultNamespace.bind(T),T.t.bind(T),T.use.bind(T),n(24));n.d(t,"a",function(){return O}),n.d(t,"d",function(){return initTranslations}),n.d(t,"b",function(){return addTranslation});var O=[{id:"en",title:"English"},{id:"ru",title:"Русский"},{id:"zh",title:"中文"},{id:"de",title:"Deutsch"},{id:"nl",title:"Nederlands"},{id:"he",title:"Hebrew"},{id:"br",title:"Brazil"},{id:"pl",title:"Polski"},{id:"ja",title:"日本語"},{id:"es",title:"Español"},{id:"kr",title:"한국어"},{id:"fr",title:"Français"}];function initTranslations(){return new Promise(function(e,t){E.init({lng:M.a.get("language"),interpolation:{escapeValue:!1},fallbackLng:"en"},function(n){return n?t(n):e()})})}function addTranslation(e,t){E.on("initialized",function(){E.services.resourceStore.addResourceBundle(e,E.options.ns[0],t,!0,!0)})}O.map(function(e){return e.id}).forEach(function(e){return addTranslation(e,n(150)("./"+e))});t.c=E},function(e,t,n){"use strict";n.r(t);var r=n(39),a=n.n(r),i=n(14),o=[{suffix:"d",method:function(e){return Math.floor(e.valueOf()/864e5)}},{suffix:"h",method:"getUTCHours"},{suffix:"m",method:"getUTCMinutes"},{suffix:"s",method:"getUTCSeconds"},{pad:3,suffix:"ms",method:"getUTCMilliseconds"}];t.default=function(e,t){if(0===e)return"0s";if(!e)return"Unknown";var n=new Date(e);return"number"!=typeof t&&(t=2),o.map(function(e){var t=e.method,r=e.suffix,a=e.pad;return{value:Object(i.isFunction)(t)?t(n):n[t](),suffix:r,pad:a}}).reduce(function(e,t){var n=e.hasValue,r=e.out;return n=n||t.value>0,(t.value>0||n&&"ms"!==t.suffix)&&r.push(t),{hasValue:n,out:r}},{hasValue:!1,out:[]}).out.map(function(e,t){return(0===t?e.value:a()(e.value,e.pad||2,"0"))+e.suffix}).slice(0,t).join(" ")}},function(e,t,n){"use strict";var r=n(3),a=n.n(r),i=n(6),o=n.n(i),s=n(8),l=n.n(s),u=n(19),c=n(16),f=n(40),h=n(9),d=n(4),p=n.n(d),m=n(0),g=n.n(m),v=n(5),b=n.n(v),y=n(13),_=function(e){function WidgetsModel(){return a()(this,WidgetsModel),p()(this,g()(WidgetsModel).apply(this,arguments))}return b()(WidgetsModel,e),o()(WidgetsModel,[{key:"initialize",value:function(e,t){this.options=t}},{key:"url",value:function(){return"widgets/".concat(this.options.name,".json")}},{key:"parse",value:function(e){return Array.isArray(e)?{items:e}:e}},{key:"getWidgetData",value:function(e){var t=this.get(e);return new y.Model(Array.isArray(t)?{items:t}:t)}}]),WidgetsModel}(y.Model),w=function(){function AllurePluginsRegistry(){a()(this,AllurePluginsRegistry),l()(this,"tabs",[]),l()(this,"testResultTabs",[]),l()(this,"attachmentViews",{}),l()(this,"testResultBlocks",{tag:[],before:[],after:[]}),l()(this,"widgets",{})}return o()(AllurePluginsRegistry,[{key:"addTab",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.title,r=t.icon,a=t.route,i=t.onEnter,o=void 0===i?f.b:i;n=n||e,this.tabs.push({tabName:e,title:n,icon:r}),c.a.route(a,e),c.a.on("route:"+e,Object(f.c)(o))}},{key:"addWidget",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:_;this.widgets[e]||(this.widgets[e]={}),this.widgets[e][t]={widget:n,model:r}}},{key:"addTranslation",value:function(e,t){Object(u.b)(e,t)}},{key:"translate",value:function(e,t){return Object(h.default)(e,t)}},{key:"addTestResultBlock",value:function(e,t){var n=t.position;this.testResultBlocks[n].push(e)}},{key:"addAttachmentViewer",value:function(e,t){var n=t.View,r=t.icon,a=void 0===r?"fa fa-file-o":r;this.attachmentViews[e]={View:n,icon:a}}},{key:"addTestResultTab",value:function(e,t,n){this.testResultTabs.push({id:e,name:t,View:n})}}]),AllurePluginsRegistry}();t.a=new w},function(e,t,n){"use strict";var r,a,i,o=n(3),s=n.n(o),l=n(6),u=n.n(l),c=n(4),f=n.n(c),h=n(0),d=n.n(h),p=n(5),m=n.n(p),g=n(8),v=n.n(g),b=(n(133),n(13)),y=n(1),_=n(42),w=n.n(_),x=n(15),k=n.n(x),C=n(14),S={top:function(e,t,n){var r=e.top,a=e.left,i=e.width,o=t.offset;return{top:r-n.height-o,left:a+i/2-n.width/2}},center:function(e,t,n){var r=e.top,a=e.left;return{top:r+e.height/2,left:a+e.width/2-n.width/2}},right:function(e,t,n){var r=e.top,a=e.left,i=e.height,o=e.width,s=t.offset;return{top:r+i/2-n.height/2,left:a+o+s}},left:function(e,t,n){var r=e.top,a=e.left,i=e.height,o=t.offset;return{top:r+i/2-n.height/2,left:a-o-n.width}},bottom:function(e,t,n){var r=e.top,a=e.left,i=e.height,o=e.width;return{top:r+i+t.offset,left:a+o/2-n.width/2}},"bottom-left":function(e,t,n){var r=e.top,a=e.left,i=e.height,o=e.width;return{top:r+i+t.offset,left:a+o-n.width}}},T=Object(y.b)("tooltip")((i=a=function(e){function TooltipView(){return s()(this,TooltipView),f()(this,d()(TooltipView).apply(this,arguments))}return m()(TooltipView,e),u()(TooltipView,[{key:"initialize",value:function(e){this.options=e,Object(C.defaults)(this.options,{offset:10})}},{key:"render",value:function(){this.constructor.container.append(this.$el)}},{key:"isVisible",value:function(){return this.$el.is(":visible")}},{key:"setContent",value:function(e){this.$el.html(e)}},{key:"show",value:function(e,t){var n=this.options.position;this.setContent(e),this.$el.addClass(w()(this.className,{position:n})),this.render(),"rtl"===document.dir&&"right"===n?this.$el.css(S.left(t[0].getBoundingClientRect(),{offset:this.options.offset},this.$el[0].getBoundingClientRect())):"rtl"===document.dir&&"left"===n?this.$el.css(S.right(t[0].getBoundingClientRect(),{offset:this.options.offset},this.$el[0].getBoundingClientRect())):this.$el.css(S[n](t[0].getBoundingClientRect(),{offset:this.options.offset},this.$el[0].getBoundingClientRect()))}},{key:"hide",value:function(){this.$el.remove()}}]),TooltipView}(b.View),v()(a,"container",k()(document.body)),r=i))||r;t.a=T},function(e,t,n){"use strict";var r,a,i,o,s,l,u,c,f,h,d,p,m,g=n(3),v=n.n(g),b=n(6),y=n.n(b),_=n(4),w=n.n(_),x=n(0),k=n.n(x),C=n(5),S=n.n(C),T=n(2),E=n.n(T),M=n(8),O=n.n(M),A=(n(151),n(10)),R=n(1),N=n(74),D=n.n(N),V=n(12),j=n.n(V),P=(n(152),n(14)),L=n(22),I=n(17),B=n.n(I),z=(n(154),n(36)),U=n(75),F=n.n(U),H=n(19),q=n(24),W=n(15),$=n.n(W),Y=(r=Object(R.b)("language-select popover"),a=Object(R.c)("click .language-select__item"),r((o=function(e){function LanguageSelectView(){return v()(this,LanguageSelectView),w()(this,k()(LanguageSelectView).apply(this,arguments))}return S()(LanguageSelectView,e),y()(LanguageSelectView,[{key:"initialize",value:function(){B()(k()(LanguageSelectView.prototype),"initialize",this).call(this,{position:"right"})}},{key:"setContent",value:function(){this.$el.html(F()({languages:H.a,currentLang:q.a.getLanguage()}))}},{key:"show",value:function(e){var t=this;B()(k()(LanguageSelectView.prototype),"show",this).call(this,null,e),this.delegateEvents(),setTimeout(function(){$()(document).one("click",function(){return t.hide()})})}},{key:"onLanguageClick",value:function(e){var t=this.$(e.currentTarget).data("id");q.a.setLanguage(t),H.c.changeLanguage(t)}}]),LanguageSelectView}(z.a),j()(o.prototype,"onLanguageClick",[a],Object.getOwnPropertyDescriptor(o.prototype,"onLanguageClick"),o.prototype),i=o))||i),G=n(21),X=n(76),K=n.n(X),Z=n(11),J=n(16),Q=(s=Object(R.b)("side-nav"),l=Object(R.c)("mouseenter [data-tooltip]"),u=Object(R.c)("mouseleave [data-tooltip]"),c=Object(R.c)("click .side-nav__collapse"),f=Object(R.c)("click .side-nav__language"),h=Object(R.c)("click .side-nav__language-small"),s((p=function(e){function SideNavView(){var e,t;v()(this,SideNavView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=w()(this,(e=k()(SideNavView)).call.apply(e,[this].concat(r))),O()(E()(E()(t)),"template",K.a),t}return S()(SideNavView,e),y()(SideNavView,[{key:"initialize",value:function(){var e=this;this.tabs=G.a.tabs.map(function(t){var n=t.tabName;return{tabName:n,icon:t.icon,title:t.title,active:e.isTabActive(n)}}),this.tooltip=new L.a({position:"right"}),this.langSelect=new Y}},{key:"onRender",value:function(){this.$el.toggleClass("side-nav_collapsed",q.a.isSidebarCollapsed())}},{key:"onDestroy",value:function(){this.tooltip.hide()}},{key:"serializeData",value:function(){return{language:Object(P.findWhere)(H.a,{id:q.a.getLanguage()}),tabs:this.tabs}}},{key:"isTabActive",value:function(e){var t=J.a.getCurrentUrl();return e?0===t.indexOf(e):t===e}},{key:"onSidelinkHover",value:function(e){if(this.$el.hasClass("side-nav_collapsed")){var t=this.$(e.currentTarget);this.tooltip.show(Object(Z.escapeExpression)(t.data("tooltip")),t)}}},{key:"onSidelinkLeave",value:function(){this.tooltip.hide()}},{key:"onCollapseClick",value:function(){this.$el.toggleClass("side-nav_collapsed"),q.a.setSidebarCollapsed(this.$el.hasClass("side-nav_collapsed")),this.tooltip.hide()}},{key:"onLanguageClick",value:function(e){this.langSelect.isVisible()?this.langSelect.hide():this.langSelect.show(this.$(e.currentTarget)),this.tooltip.hide()}}]),SideNavView}(A.View),j()(p.prototype,"onSidelinkHover",[l],Object.getOwnPropertyDescriptor(p.prototype,"onSidelinkHover"),p.prototype),j()(p.prototype,"onSidelinkLeave",[u],Object.getOwnPropertyDescriptor(p.prototype,"onSidelinkLeave"),p.prototype),j()(p.prototype,"onCollapseClick",[c],Object.getOwnPropertyDescriptor(p.prototype,"onCollapseClick"),p.prototype),j()(p.prototype,"onLanguageClick",[f,h],Object.getOwnPropertyDescriptor(p.prototype,"onLanguageClick"),p.prototype),d=p))||d),ee=n(31),te=n(9),ne=Object(R.b)("app")(m=Object(R.e)({content:".app__content",nav:".app__nav"})(m=function(e){function AppLayout(){var e,t;v()(this,AppLayout);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=w()(this,(e=k()(AppLayout)).call.apply(e,[this].concat(r))),O()(E()(E()(t)),"template",D.a),t}return S()(AppLayout,e),y()(AppLayout,[{key:"initialize",value:function(){}},{key:"onRender",value:function(){var e=this;this.showChildView("nav",new Q);var t=this.loadData();t?t.then(function(){e.showChildView("content",e.getContentView()),e.onViewReady()}).catch(function(){e.showChildView("content",new ee.a({code:404,message:Object(te.default)("errors.notFound")}))}):this.showChildView("content",this.getContentView())}},{key:"onViewReady",value:function(){}},{key:"loadData",value:function(){}},{key:"getContentView",value:function(){throw new Error("attempt to call abstract method")}},{key:"shouldKeepState",value:function(){return!0}}]),AppLayout}(A.View))||m)||m;t.a=ne},function(e,t,n){"use strict";var r=n(33),a=Object(r.a)();t.a=a},function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return e===t}},function(e,t,n){var r=n(8);e.exports=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.forEach(function(t){r(e,t,n[t])})}return e}},function(e,t,n){"use strict";function makeArray(e){return Array.isArray(e)?e:e?[e]:[]}n.d(t,"a",function(){return makeArray})},function(e,t,n){"use strict";t.__esModule=!0,t.extend=extend,t.indexOf=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},t.escapeExpression=function(e){if("string"!=typeof e){if(e&&e.toHTML)return e.toHTML();if(null==e)return"";if(!e)return e+"";e=""+e}if(!i.test(e))return e;return e.replace(a,escapeChar)},t.isEmpty=function(e){return!e&&0!==e||!(!l(e)||0!==e.length)},t.createFrame=function(e){var t=extend({},e);return t._parent=e,t},t.blockParams=function(e,t){return e.path=t,e},t.appendContextPath=function(e,t){return(e?e+".":"")+t};var r={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},a=/[&<>"'`=]/g,i=/[&<>"'`=]/;function escapeChar(e){return r[e]}function extend(e){for(var t=1;t<arguments.length;t++)for(var n in arguments[t])Object.prototype.hasOwnProperty.call(arguments[t],n)&&(e[n]=arguments[t][n]);return e}var o=Object.prototype.toString;t.toString=o;var s=function(e){return"function"==typeof e};s(/x/)&&(t.isFunction=s=function(e){return"function"==typeof e&&"[object Function]"===o.call(e)}),t.isFunction=s;var l=Array.isArray||function(e){return!(!e||"object"!=typeof e)&&"[object Array]"===o.call(e)};t.isArray=l},function(e,t,n){"use strict";n.r(t);var r=n(11),a=n(9),i={flaky:{className:"fa fa-bomb",tooltip:"status.flaky"},newFailed:{className:"fa fa-warning",tooltip:"status.newFailed"},failed:{className:"fa fa-times-circle fa-fw text_status_failed",tooltip:"status.failed"},broken:{className:"fa fa-exclamation-circle fa-fw text_status_broken",tooltip:"status.broken"},passed:{className:"fa fa-check-circle fa-fw text_status_passed",tooltip:"status.passed"},skipped:{className:"fa fa-minus-circle fa-fw text_status_skipped",tooltip:"status.skipped"},unknown:{className:"fa fa-question-circle fa-fw text_status_unknown",tooltip:"status.unknown"}};t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=i[e];return n?new r.SafeString('<span class="'.concat(n.className," ").concat(t,'" data-tooltip="').concat(Object(a.default)(n.tooltip),'"></span>')):""}},function(e,t,n){"use strict";n.r(t);var r=n(39),a=n.n(r);t.default=function(e,t){return e?(e instanceof Date||(e=new Date(e)),"boolean"!=typeof t&&(t=!1),[e.getHours(),a()(e.getMinutes(),2,"0"),a()(e.getSeconds(),2,"0")+(t?"."+e.getMilliseconds():"")].join(":")):"unknown"}},function(e,t,n){"use strict";var r,a=n(3),i=n.n(a),o=n(6),s=n.n(o),l=n(4),u=n.n(l),c=n(0),f=n.n(c),h=n(5),d=n.n(h),p=n(2),m=n.n(p),g=n(8),v=n.n(g),b=(n(156),n(10)),y=n(1),_=n(77),w=n.n(_),x=Object(y.b)("error-splash")(r=function(e){function ErrorSplashView(){var e,t;i()(this,ErrorSplashView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=u()(this,(e=f()(ErrorSplashView)).call.apply(e,[this].concat(r))),v()(m()(m()(t)),"template",w.a),t}return d()(ErrorSplashView,e),s()(ErrorSplashView,[{key:"serializeData",value:function(){return{cls:this.className,code:this.options.code,message:this.options.message}}}]),ErrorSplashView}(b.View))||r;t.a=x},function(e,t){e.exports=function(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}},function(e,t,n){"use strict";var r=n(3),a=n.n(r),i=n(6),o=n.n(i),s=n(4),l=n.n(s),u=n(0),c=n.n(u),f=n(5),h=n.n(f),d=function(e){function LocalStorageModel(){return a()(this,LocalStorageModel),l()(this,c()(LocalStorageModel).apply(this,arguments))}return h()(LocalStorageModel,e),o()(LocalStorageModel,[{key:"storageKey",value:function(){return"ALLURE_REPORT_SETTINGS"}},{key:"fetch",value:function(){var e=this;return new Promise(function(t){var n=window.localStorage.getItem(e.storageKey());n&&e.set(JSON.parse(n)),t()})}},{key:"save",value:function(e,t){this.set(e,t);var n=this.toJSON();window.localStorage.setItem(this.storageKey(),JSON.stringify(n))}}]),LocalStorageModel}(n(13).Model);n.d(t,"a",function(){return getGlobalSettings}),n.d(t,"b",function(){return getSettingsForPlugin}),n.d(t,"c",function(){return getSettingsForTreePlugin}),n.d(t,"d",function(){return getSettingsForWidgetGridPlugin});var p={language:"en",sidebarCollapsed:!1,sideBySidePosition:[50,50]},m={visibleStatuses:{failed:!0,broken:!0,skipped:!0,unknown:!0,passed:!0},visibleMarks:{flaky:!1,newFailed:!1},showGroupInfo:!1,treeSorting:{ascending:!0,sorter:"sorter.name"}},g={widgets:[[],[]]};function getGlobalSettings(){var e=new(d.extend({defaults:function(){return p},getLanguage:function(){return this.get("language")},setLanguage:function(e){return this.save("language",e)},isSidebarCollapsed:function(){return this.get("sidebarCollapsed")},setSidebarCollapsed:function(e){return this.save("sidebarCollapsed",e)},getSideBySidePosition:function(){return this.get("sideBySidePosition")},setSideBySidePosition:function(e){return this.save("sideBySidePosition",e)}}));return e.fetch(),e}function getSettingsForPlugin(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new(d.extend({storageKey:function(){return"ALLURE_REPORT_SETTINGS_".concat(e.toUpperCase())},defaults:function(){return t}}));return n.fetch(),n}function getSettingsForWidgetGridPlugin(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g,n=new(d.extend({storageKey:function(){return"ALLURE_REPORT_SETTINGS_".concat(e.toUpperCase())},defaults:function(){return t},getWidgetsArrangement:function(){return this.get("widgets")},setWidgetsArrangement:function(e){this.save("widgets",e)}}));return n.fetch(),n}function getSettingsForTreePlugin(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:m,n=new(d.extend({storageKey:function(){return"ALLURE_REPORT_SETTINGS_".concat(e.toUpperCase())},defaults:function(){return t},getVisibleStatuses:function(){return this.get("visibleStatuses")},setVisibleStatuses:function(e){return this.save("visibleStatuses",e)},getVisibleMarks:function(){return this.get("visibleMarks")},setVisibleMarks:function(e){return this.save("visibleMarks",e)},getTreeSorting:function(){return this.get("treeSorting")},setTreeSorting:function(e){this.save("treeSorting",e)},isShowGroupInfo:function(){return this.get("showGroupInfo")},setShowGroupInfo:function(e){this.save("showGroupInfo",e)}}));return n.fetch(),n}},function(e,t,n){!function(e){"object"==typeof window&&window||"object"==typeof self&&self;(function(e){var t=[],n=Object.keys,r={},a={},i=/^(no-?highlight|plain|text)$/i,o=/\blang(?:uage)?-([\w-]+)\b/i,s=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,l="</span>",u={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function escape(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function tag(e){return e.nodeName.toLowerCase()}function testRe(e,t){var n=e&&e.exec(t);return n&&0===n.index}function isNotHighlighted(e){return i.test(e)}function inherit(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach(function(e){for(t in e)n[t]=e[t]}),n}function nodeStream(e){var t=[];return function _nodeStream(e,n){for(var r=e.firstChild;r;r=r.nextSibling)3===r.nodeType?n+=r.nodeValue.length:1===r.nodeType&&(t.push({event:"start",offset:n,node:r}),n=_nodeStream(r,n),tag(r).match(/br|hr|img|input/)||t.push({event:"stop",offset:n,node:r}));return n}(e,0),t}function compileLanguage(e){function reStr(e){return e&&e.source||e}function langRe(t,n){return new RegExp(reStr(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}!function compileMode(t,r){if(t.compiled)return;t.compiled=!0;t.keywords=t.keywords||t.beginKeywords;if(t.keywords){var a={},i=function(t,n){e.case_insensitive&&(n=n.toLowerCase()),n.split(" ").forEach(function(e){var n=e.split("|");a[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof t.keywords?i("keyword",t.keywords):n(t.keywords).forEach(function(e){i(e,t.keywords[e])}),t.keywords=a}t.lexemesRe=langRe(t.lexemes||/\w+/,!0);r&&(t.beginKeywords&&(t.begin="\\b("+t.beginKeywords.split(" ").join("|")+")\\b"),t.begin||(t.begin=/\B|\b/),t.beginRe=langRe(t.begin),t.endSameAsBegin&&(t.end=t.begin),t.end||t.endsWithParent||(t.end=/\B|\b/),t.end&&(t.endRe=langRe(t.end)),t.terminator_end=reStr(t.end)||"",t.endsWithParent&&r.terminator_end&&(t.terminator_end+=(t.end?"|":"")+r.terminator_end));t.illegal&&(t.illegalRe=langRe(t.illegal));null==t.relevance&&(t.relevance=1);t.contains||(t.contains=[]);t.contains=Array.prototype.concat.apply([],t.contains.map(function(e){return function(e){e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(t){return inherit(e,{variants:null},t)}));return e.cached_variants||e.endsWithParent&&[inherit(e)]||[e]}("self"===e?t:e)}));t.contains.forEach(function(e){compileMode(e,t)});t.starts&&compileMode(t.starts,r);var o=t.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([t.terminator_end,t.illegal]).map(reStr).filter(Boolean);t.terminators=o.length?langRe(o.join("|"),!0):{exec:function(){return null}}}(e)}function highlight(e,t,n,a){function keywordMatch(e,t){var n=i.case_insensitive?t[0].toLowerCase():t[0];return e.keywords.hasOwnProperty(n)&&e.keywords[n]}function buildSpan(e,t,n,r){var a=r?"":u.classPrefix,i='<span class="'+a,o=n?"":l;return(i+=e+'">')+t+o}function processBuffer(){f+=null!=s.subLanguage?function(){var e="string"==typeof s.subLanguage;if(e&&!r[s.subLanguage])return escape(h);var t=e?highlight(s.subLanguage,h,!0,c[s.subLanguage]):highlightAuto(h,s.subLanguage.length?s.subLanguage:void 0);s.relevance>0&&(d+=t.relevance);e&&(c[s.subLanguage]=t.top);return buildSpan(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!s.keywords)return escape(h);r="",t=0,s.lexemesRe.lastIndex=0,n=s.lexemesRe.exec(h);for(;n;)r+=escape(h.substring(t,n.index)),(e=keywordMatch(s,n))?(d+=e[1],r+=buildSpan(e[0],escape(n[0]))):r+=escape(n[0]),t=s.lexemesRe.lastIndex,n=s.lexemesRe.exec(h);return r+escape(h.substr(t))}(),h=""}function startNewMode(e){f+=e.className?buildSpan(e.className,"",!0):"",s=Object.create(e,{parent:{value:s}})}function processLexeme(e,t){if(h+=e,null==t)return processBuffer(),0;var r=function(e,t){var n,r;for(n=0,r=t.contains.length;n<r;n++)if(testRe(t.contains[n].beginRe,e))return t.contains[n].endSameAsBegin&&(t.contains[n].endRe=(a=t.contains[n].beginRe.exec(e)[0],new RegExp(a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m"))),t.contains[n];var a}(t,s);if(r)return r.skip?h+=t:(r.excludeBegin&&(h+=t),processBuffer(),r.returnBegin||r.excludeBegin||(h=t)),startNewMode(r),r.returnBegin?0:t.length;var a=function endOfMode(e,t){if(testRe(e.endRe,t)){for(;e.endsParent&&e.parent;)e=e.parent;return e}if(e.endsWithParent)return endOfMode(e.parent,t)}(s,t);if(a){var i=s;i.skip?h+=t:(i.returnEnd||i.excludeEnd||(h+=t),processBuffer(),i.excludeEnd&&(h=t));do{s.className&&(f+=l),s.skip||s.subLanguage||(d+=s.relevance),s=s.parent}while(s!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),startNewMode(a.starts)),i.returnEnd?0:t.length}if(function(e,t){return!n&&testRe(t.illegalRe,e)}(t,s))throw new Error('Illegal lexeme "'+t+'" for mode "'+(s.className||"<unnamed>")+'"');return h+=t,t.length||1}var i=getLanguage(e);if(!i)throw new Error('Unknown language: "'+e+'"');compileLanguage(i);var o,s=a||i,c={},f="";for(o=s;o!==i;o=o.parent)o.className&&(f=buildSpan(o.className,"",!0)+f);var h="",d=0;try{for(var p,m,g=0;s.terminators.lastIndex=g,p=s.terminators.exec(t);)m=processLexeme(t.substring(g,p.index),p[0]),g=p.index+m;for(processLexeme(t.substr(g)),o=s;o.parent;o=o.parent)o.className&&(f+=l);return{relevance:d,value:f,language:e,top:s}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{relevance:0,value:escape(t)};throw e}}function highlightAuto(e,t){t=t||u.languages||n(r);var a={relevance:0,value:escape(e)},i=a;return t.filter(getLanguage).filter(autoDetection).forEach(function(t){var n=highlight(t,e,!1);n.language=t,n.relevance>i.relevance&&(i=n),n.relevance>a.relevance&&(i=a,a=n)}),i.language&&(a.second_best=i),a}function fixMarkup(e){return u.tabReplace||u.useBR?e.replace(s,function(e,t){return u.useBR&&"\n"===e?"<br>":u.tabReplace?t.replace(/\t/g,u.tabReplace):""}):e}function highlightBlock(e){var n,r,i,s,l,c=function(e){var t,n,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",n=o.exec(i))return getLanguage(n[1])?n[1]:"no-highlight";for(i=i.split(/\s+/),t=0,r=i.length;t<r;t++)if(isNotHighlighted(a=i[t])||getLanguage(a))return a}(e);isNotHighlighted(c)||(u.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):n=e,l=n.textContent,i=c?highlight(c,l,!0):highlightAuto(l),(r=nodeStream(n)).length&&((s=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=i.value,i.value=function(e,n,r){var a=0,i="",o=[];function selectStream(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function open(e){i+="<"+tag(e)+t.map.call(e.attributes,function(e){return" "+e.nodeName+'="'+escape(e.value).replace('"',""")+'"'}).join("")+">"}function close(e){i+="</"+tag(e)+">"}function render(e){("start"===e.event?open:close)(e.node)}for(;e.length||n.length;){var s=selectStream();if(i+=escape(r.substring(a,s[0].offset)),a=s[0].offset,s===e){o.reverse().forEach(close);do{render(s.splice(0,1)[0]),s=selectStream()}while(s===e&&s.length&&s[0].offset===a);o.reverse().forEach(open)}else"start"===s[0].event?o.push(s[0].node):o.pop(),render(s.splice(0,1)[0])}return i+escape(r.substr(a))}(r,nodeStream(s),l)),i.value=fixMarkup(i.value),e.innerHTML=i.value,e.className=function(e,t,n){var r=t?a[t]:n,i=[e.trim()];e.match(/\bhljs\b/)||i.push("hljs");-1===e.indexOf(r)&&i.push(r);return i.join(" ").trim()}(e.className,c,i.language),e.result={language:i.language,re:i.relevance},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.relevance}))}function initHighlighting(){if(!initHighlighting.called){initHighlighting.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,highlightBlock)}}function getLanguage(e){return e=(e||"").toLowerCase(),r[e]||r[a[e]]}function autoDetection(e){var t=getLanguage(e);return t&&!t.disableAutodetect}e.highlight=highlight,e.highlightAuto=highlightAuto,e.fixMarkup=fixMarkup,e.highlightBlock=highlightBlock,e.configure=function(e){u=inherit(u,e)},e.initHighlighting=initHighlighting,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",initHighlighting,!1),addEventListener("load",initHighlighting,!1)},e.registerLanguage=function(t,n){var i=r[t]=n(e);i.aliases&&i.aliases.forEach(function(e){a[e]=t})},e.listLanguages=function(){return n(r)},e.getLanguage=getLanguage,e.autoDetection=autoDetection,e.inherit=inherit,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var a=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return a.contains.push(e.PHRASAL_WORDS_MODE),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),a},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0}})(t)}()},function(e,t,n){"use strict";n.r(t);var r=n(19);t.default=function(e){return e?(e instanceof Date||(e=new Date(e)),new Intl.DateTimeFormat(r.c.language).format(e)):"unknown"}},function(e,t,n){"use strict";var r,a=n(3),i=n.n(a),o=n(4),s=n.n(o),l=n(0),u=n.n(l),c=n(5),f=n.n(c),h=(n(155),n(22)),d=n(1),p=Object(d.b)("popover")(r=function(e){function PopoverView(){return i()(this,PopoverView),s()(this,u()(PopoverView).apply(this,arguments))}return f()(PopoverView,e),PopoverView}(h.a))||r;t.a=p},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";t.__esModule=!0;var r=["description","fileName","lineNumber","message","name","number","stack"];function Exception(e,t){var n=t&&t.loc,a=void 0,i=void 0;n&&(e+=" - "+(a=n.start.line)+":"+(i=n.start.column));for(var o=Error.prototype.constructor.call(this,e),s=0;s<r.length;s++)this[r[s]]=o[r[s]];Error.captureStackTrace&&Error.captureStackTrace(this,Exception);try{n&&(this.lineNumber=a,Object.defineProperty?Object.defineProperty(this,"column",{value:i,enumerable:!0}):this.column=i)}catch(e){}}Exception.prototype=new Error,t.default=Exception,e.exports=t.default},function(e,t,n){var r=n(163),a=n(164);e.exports=function(e,t,n,i){e=r(e),t=~~t;var o=0;switch(n?n.length>1&&(n=n.charAt(0)):n=" ",i){case"right":return o=t-e.length,e+a(n,o);case"both":return o=t-e.length,a(n,Math.ceil(o/2))+e+a(n,Math.floor(o/2));default:return o=t-e.length,a(n,o)+e}}},function(e,t,n){"use strict";var r={};n.r(r),n.d(r,"LoadBehavior",function(){return C}),n.d(r,"TooltipBehavior",function(){return A}),n.d(r,"ClipboardBehavior",function(){return V});n(123),n(124);var a,i,o,s,l,u,c,f=n(10),h=n(13),d=n(16),p=n(3),m=n.n(p),g=n(6),v=n.n(g),b=n(4),y=n.n(b),_=n(0),w=n.n(_),x=n(5),k=n.n(x),C=function(e){function LoadBehavior(){return m()(this,LoadBehavior),y()(this,w()(LoadBehavior).apply(this,arguments))}return k()(LoadBehavior,e),v()(LoadBehavior,[{key:"initialize",value:function(){var e=this,t=this.view.render.bind(this.view);this.loaded=!1,this.view.render=function(){e.loaded?t():e.view.loadData().then(function(){e.loaded=!0,t()})}}}]),LoadBehavior}(f.Behavior),S=n(12),T=n.n(S),E=n(22),M=n(11),O=n(1),A=(a=Object(O.c)("mouseenter [data-tooltip]"),i=Object(O.c)("mouseleave [data-tooltip]"),o=function(e){function TooltipBehavior(){return m()(this,TooltipBehavior),y()(this,w()(TooltipBehavior).apply(this,arguments))}return k()(TooltipBehavior,e),v()(TooltipBehavior,[{key:"initialize",value:function(){this.tooltip=new E.a(this.options)}},{key:"onDestroy",value:function(){this.tooltip.hide()}},{key:"onTipHover",value:function(e){var t=this.$(e.currentTarget);this.tooltip.show(Object(M.escapeExpression)(t.data("tooltip")),t)}},{key:"onTipLeave",value:function(){this.tooltip.hide()}}]),TooltipBehavior}(f.Behavior),T()(o.prototype,"onTipHover",[a],Object.getOwnPropertyDescriptor(o.prototype,"onTipHover"),o.prototype),T()(o.prototype,"onTipLeave",[i],Object.getOwnPropertyDescriptor(o.prototype,"onTipLeave"),o.prototype),o),R=n(73),N=n.n(R),D=n(9),V=(s=Object(O.c)("mouseenter [data-copy]"),l=Object(O.c)("mouseleave [data-copy]"),u=Object(O.c)("click [data-copy]"),c=function(e){function ClipboardBehavior(){return m()(this,ClipboardBehavior),y()(this,w()(ClipboardBehavior).apply(this,arguments))}return k()(ClipboardBehavior,e),v()(ClipboardBehavior,[{key:"initialize",value:function(){this.tooltip=new E.a({position:"left"})}},{key:"onTipHover",value:function(e){var t=this.$(e.currentTarget);this.tooltip.show(Object(D.default)("controls.clipboard"),t)}},{key:"onTipLeave",value:function(){this.tooltip.hide()}},{key:"onCopyableClick",value:function(e){var t=this.$(e.currentTarget);N()(t.data("copy"))?this.tooltip.show(Object(D.default)("controls.clipboardSuccess"),t):this.tooltip.show(Object(D.default)("controls.clipboardError"),t)}}]),ClipboardBehavior}(f.Behavior),T()(c.prototype,"onTipHover",[s],Object.getOwnPropertyDescriptor(c.prototype,"onTipHover"),c.prototype),T()(c.prototype,"onTipLeave",[l],Object.getOwnPropertyDescriptor(c.prototype,"onTipLeave"),c.prototype),T()(c.prototype,"onCopyableClick",[u],Object.getOwnPropertyDescriptor(c.prototype,"onCopyableClick"),c.prototype),c),j=n(23),P=n(31),L=function(e){function ErrorLayout(){return m()(this,ErrorLayout),y()(this,w()(ErrorLayout).apply(this,arguments))}return k()(ErrorLayout,e),v()(ErrorLayout,[{key:"getContentView",value:function(){var e=this.options,t=e.code,n=e.message;return new P.a({code:t,message:n})}}]),ErrorLayout}(j.a),I=n(17),B=n.n(I),z=n(44),U=n(43),F=function(e){function TestResultLayout(){return m()(this,TestResultLayout),y()(this,w()(TestResultLayout).apply(this,arguments))}return k()(TestResultLayout,e),v()(TestResultLayout,[{key:"initialize",value:function(e){var t=e.uid;B()(w()(TestResultLayout.prototype),"initialize",this).call(this),this.uid=t,this.model=new U.a({uid:t}),this.routeState=new h.Model}},{key:"loadData",value:function(){return this.model.fetch()}},{key:"getContentView",value:function(){var e="#testresult/".concat(this.uid);return new z.a({baseUrl:e,model:this.model,routeState:this.routeState})}},{key:"onViewReady",value:function(){var e=this.options,t=e.uid,n=e.tabName;this.onRouteUpdate(t,n)}},{key:"onRouteUpdate",value:function(e,t){this.routeState.set("testResultTab",t);var n=d.a.getUrlParams().attachment;n?this.routeState.set("attachment",n):this.routeState.unset("attachment")}},{key:"shouldKeepState",value:function(e){return this.uid===e}}]),TestResultLayout}(j.a),H=n(19);function rootPath(e){return e.split("/")[0]}function showView(e){return function(){var t=q.getView();t&&rootPath(d.a.getCurrentUrl())===rootPath(d.a.currentUrl)&&t.shouldKeepState.apply(t,arguments)?t.onRouteUpdate.apply(t,arguments):q.showView(e.apply(void 0,arguments))}}function notFound(){return new L({code:404,message:Object(D.default)("errors.notFound")})}n.d(t,"c",function(){return showView}),n.d(t,"b",function(){return notFound}),"function"==typeof window.requestAnimationFrame&&(window.requestAnimationFrame=window.requestAnimationFrame.bind(window)),f.Behaviors.behaviorsLookup=r;var q=new f.Application({region:"#content"});q.on("start",function(){Object(H.d)().then(function(){h.history.start(),document.dir=H.c.dir(),H.c.on("languageChanged",function(){q.getRegion().reset(),d.a.reload(),document.dir=H.c.dir()})}),d.a.on("route:notFound",showView(notFound)),d.a.on("route:testresultPage",showView(function(e,t){return new F({uid:e,tabName:t})}))});t.a=q},function(e,t,n){var r=n(198),a=n(199),i=n(200);e.exports=function(e){return r(e)||a(e)||i()}},function(e,t,n){!function(t,n){"use strict";e.exports=function(){function BemFormatter(e){if(!(this instanceof BemFormatter))return createBemFormatter(e);e=e||{},this.tailSpace=e.tailSpace||"",this.elementSeparator=e.elementSeparator||"__",this.modSeparator=e.modSeparator||"_",this.modValueSeparator=e.modValueSeparator||"_",this.classSeparator=e.classSeparator||" ",this.isFullModifier=void 0===e.isFullModifier||e.isFullModifier,this.isFullBoolValue=void 0!==e.isFullBoolValue&&e.isFullBoolValue}function withMixin(e,t,n){return this.bind.apply(this,[null].concat(Array.prototype.slice.call(arguments)))}function createBemFormatter(e){var t=new BemFormatter(e),n=t.stringify.bind(t);return n.with=n.lock=withMixin,n}BemFormatter.prototype={_stringifyModifier:function(e,t,n){var r="";return void 0===n?r:this.isFullBoolValue||!1!==n?(r+=this.classSeparator+e+this.modSeparator+t,(this.isFullBoolValue||!0!==n)&&(r+=this.modValueSeparator+String(n)),r):r},_stringifyModifiers:function(e,t){var n="";for(var r in this.isFullModifier||(e=""),t)t.hasOwnProperty(r)&&(n+=this._stringifyModifier(e,r,t[r]));return n},stringify:function(e,t,n){var r=String(e);return t&&"object"==typeof t&&void 0===n&&(n=t,t=null),t&&(r+=this.elementSeparator+String(t)),n&&(r+=this._stringifyModifiers(r,n)),r+this.tailSpace}};var e=createBemFormatter();return e.B=BemFormatter,e}()}()},function(e,t,n){"use strict";n.d(t,"a",function(){return g});var r=n(3),a=n.n(r),i=n(6),o=n.n(i),s=n(4),l=n.n(s),u=n(0),c=n.n(u),f=n(5),h=n.n(f),d=n(14),p=n(13),m=n(27);var g=function(e){function TestResultModel(){return a()(this,TestResultModel),l()(this,c()(TestResultModel).apply(this,arguments))}return h()(TestResultModel,e),o()(TestResultModel,[{key:"parse",value:function(e){return this.allAttachments=Object(m.a)(e.beforeStages).concat(Object(m.a)(e.testStage)).concat(Object(m.a)(e.afterStages)).reduce(function(e,t){return e.concat(function collectAttachments(e){var t=e.steps,n=e.attachments;return Object(m.a)(t).reduce(function(e,t){return e.concat(collectAttachments(t))},[]).concat(Object(m.a)(n))}(t))},[]),e}},{key:"getAttachment",value:function(e){return Object(d.findWhere)(this.allAttachments,{uid:e.toString()})}},{key:"url",value:function(){return"data/test-cases/".concat(this.id,".json")}},{key:"idAttribute",get:function(){return"uid"}}]),TestResultModel}(p.Model)},function(e,t,n){"use strict";var r=n(3),a=n.n(r),i=n(6),o=n.n(i),s=n(4),l=n.n(s),u=n(0),c=n.n(u),f=n(5),h=n.n(f),d=n(2),p=n.n(d),m=n(8),g=n.n(m),v=n(12),b=n.n(v),y=(n(157),n(10)),_=n(1),w=n(78),x=n.n(w),k=(n(160),n(79)),C=n.n(k),S=n(21),T=n(15),E=n.n(T),M=(n(161),n(162),n(34)),O=n.n(M),A=n(80),R=n.n(A),N=n(81),D=n.n(N),V=n(82),j=n.n(V),P=n(83),L=n.n(P),I=n(84),B=n.n(I);O.a.registerLanguage("xml",R.a),O.a.registerLanguage("bash",D.a),O.a.registerLanguage("markdown",j.a),O.a.registerLanguage("diff",L.a),O.a.registerLanguage("json",B.a);var z,U,F,H,q,W,$,Y,G,X,K,Z,J,Q,ee,te,ne,re,ae,ie,oe,se,le,ue,ce,fe,he,de,pe,me,ge=O.a,ve=n(16),be=n(45),ye=n(85),_e=n.n(ye),we=(z=Object(_.b)("attachment"),U=Object(_.a)("TooltipBehavior",{position:"bottom"}),F=Object(_.e)({customView:".attachment__custom-view"}),H=Object(_.c)("click .attachment__media-container"),z(q=U(q=F((W=function(e){function AttachmentView(){var e,t;a()(this,AttachmentView);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return t=l()(this,(e=c()(AttachmentView)).call.apply(e,[this].concat(r))),g()(p()(p()(t)),"template",_e.a),t}return h()(AttachmentView,e),o()(AttachmentView,[{key:"initialize",value:function(){this.fullScreen=!!this.options.fullScreen,this.attachment=this.options.attachment,this.attachmentInfo=Object(be.a)(this.attachment.type),this.sourceUrl="data/attachments/"+this.attachment.source}},{key:"onRender",value:function(){if("custom"===this.attachmentInfo.type)this.showChildView("customView",new this.attachmentInfo.View({sourceUrl:this.sourceUrl,attachment:this.attachment}));else if(this.needsFetch()&&!this.content)this.loadContent().then(this.render);else if("code"===this.attachmentInfo.type){var e=this.$(".attachment__code");e.addClass("language-"+this.attachment.type.split("/").pop()),ge.highlightBlock(e[0])}}},{key:"onDestroy",value:function(){ve.a.setSearch({attachment:null})}},{key:"onImageClick",value:function(e){this.$(e.currentTarget).hasClass("attachment__media-container_fullscreen")?this.onDestroy():ve.a.setSearch({attachment:this.attachment.uid})}},{key:"loadContent",value:function(){var e=this;return E.a.ajax(this.sourceUrl,{dataType:"text"}).then(function(t){var n=e.attachmentInfo.parser;e.content=n(t)})}},{key:"needsFetch",value:function(){return"parser"in this.attachmentInfo}},{key:"serializeData",value:function(){return{type:this.attachmentInfo.type,content:this.content,sourceUrl:this.sourceUrl,attachment:this.attachment,fullScreen:this.fullScreen}}}]),AttachmentView}(y.View),b()(W.prototype,"onImageClick",[H],Object.getOwnPropertyDescriptor(W.prototype,"onImageClick"),W.prototype),q=W))||q)||q)||q),xe=n(86),ke=n.n(xe),Ce=n(27),Se=n(13),Te=($=Object(_.b)("test-result-execution"),Y=Object(_.c)("click .step__title_hasContent"),G=Object(_.c)("click .attachment-row"),X=Object(_.c)("click .attachment-row__fullscreen"),K=Object(_.c)("click .attachment-row__link"),Z=Object(_.c)("click .parameters-table__cell"),$((Q=function(e){function TestResultExecutionView(){var e,t;a()(this,TestResultExecutionView);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return t=l()(this,(e=c()(TestResultExecutionView)).call.apply(e,[this].concat(r))),g()(p()(p()(t)),"template",ke.a),t}return h()(TestResultExecutionView,e),o()(TestResultExecutionView,[{key:"initialize",value:function(){this.state=new Se.Model,this.routeState=this.options.routeState,this.listenTo(this.state,"change:attachment",this.highlightSelectedAttachment,this)}},{key:"onRender",value:function(){var e=this.routeState.get("attachment");e&&this.highlightSelectedAttachment(e)}},{key:"highlightSelectedAttachment",value:function(e){this.$(".attachment-row").removeClass("attachment-row_selected");var t=this.$('.attachment-row[data-uid="'.concat(e,'"]'));t.addClass("attachment-row_selected"),t.parents(".step").addClass("step_expanded")}},{key:"serializeData",value:function(){var e=Object(Ce.a)(this.model.get("beforeStages")),t=Object(Ce.a)(this.model.get("testStage")),n=Object(Ce.a)(this.model.get("afterStages"));return{hasContent:e.length+t.length+n.length>0,before:e,test:t,after:n,baseUrl:this.options.baseUrl}}},{key:"onStepClick",value:function(e){this.$(e.currentTarget).parent().toggleClass("step_expanded")}},{key:"onAttachmentClick",value:function(e){var t=E()(e.currentTarget).data("uid"),n="attachment__".concat(t);E()(e.currentTarget).hasClass("attachment-row_selected")&&this.getRegion(n)?this.getRegion(n).destroy():(this.addRegion(n,{el:this.$(".".concat(n))}),this.getRegion(n).show(new we({attachment:this.model.getAttachment(t)}))),this.$(e.currentTarget).toggleClass("attachment-row_selected")}},{key:"onAttachmnetFullScrennClick",value:function(e){var t=E()(e.currentTarget).closest(".attachment-row").data("uid");ve.a.setSearch({attachment:t}),e.stopPropagation()}},{key:"onAttachmentFileClick",value:function(e){e.stopPropagation()}},{key:"onParameterClick",value:function(e){this.$(e.target).siblings().addBack().toggleClass("line-ellipsis")}}]),TestResultExecutionView}(y.View),b()(Q.prototype,"onStepClick",[Y],Object.getOwnPropertyDescriptor(Q.prototype,"onStepClick"),Q.prototype),b()(Q.prototype,"onAttachmentClick",[G],Object.getOwnPropertyDescriptor(Q.prototype,"onAttachmentClick"),Q.prototype),b()(Q.prototype,"onAttachmnetFullScrennClick",[X],Object.getOwnPropertyDescriptor(Q.prototype,"onAttachmnetFullScrennClick"),Q.prototype),b()(Q.prototype,"onAttachmentFileClick",[K],Object.getOwnPropertyDescriptor(Q.prototype,"onAttachmentFileClick"),Q.prototype),b()(Q.prototype,"onParameterClick",[Z],Object.getOwnPropertyDescriptor(Q.prototype,"onParameterClick"),Q.prototype),J=Q))||J),Ee=Object(_.b)("test-result-overview")(ee=Object(_.e)({execution:".test-result-overview__execution"})(ee=function(e){function TestResultOverviewView(){var e,t;a()(this,TestResultOverviewView);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return t=l()(this,(e=c()(TestResultOverviewView)).call.apply(e,[this].concat(r))),g()(p()(p()(t)),"template",C.a),t}return h()(TestResultOverviewView,e),o()(TestResultOverviewView,[{key:"initialize",value:function(){this.blocks=[]}},{key:"onRender",value:function(){this.showBlock(this.$(".test-result-overview__tags"),S.a.testResultBlocks.tag),this.showBlock(this.$(".test-result-overview__before"),S.a.testResultBlocks.before),this.showChildView("execution",new Te(this.options)),this.showBlock(this.$(".test-result-overview__after"),S.a.testResultBlocks.after)}},{key:"onDestroy",value:function(){this.blocks.forEach(function(e){return e.destroy()})}},{key:"showBlock",value:function(e,t){var n=this;t.forEach(function(t){var r=new t({model:n.model});r.$el.appendTo(e),n.blocks.push(r),r.render()})}},{key:"templateContext",value:function(){return{cls:this.className}}}]),TestResultOverviewView}(y.View))||ee)||ee,Me=n(31),Oe=(n(167),n(88)),Ae=n.n(Oe),Re=(te=Object(_.b)("modal"),ne=Object(_.e)({content:".modal__content"}),re=Object(_.c)("click .modal__content"),ae=Object(_.c)("click .modal__background, .modal__close"),te(ie=ne((le=se=function(e){function ModalView(){var e,t;a()(this,ModalView);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return t=l()(this,(e=c()(ModalView)).call.apply(e,[this].concat(r))),g()(p()(p()(t)),"template",Ae.a),t}return h()(ModalView,e),o()(ModalView,[{key:"show",value:function(){this.constructor.container.append(this.$el),this.showChildView("content",this.options.childView),E()("#content").toggleClass("blur",!0)}},{key:"onDestroy",value:function(){E()("#content").toggleClass("blur",!1)}},{key:"onKeepOpen",value:function(e){e.stopPropagation()}},{key:"onClose",value:function(){this.destroy()}},{key:"serializeData",value:function(){return{cls:this.className,title:this.options.title}}}]),ModalView}(y.View),g()(se,"container",E()(document.body)),oe=le,b()(oe.prototype,"onKeepOpen",[re],Object.getOwnPropertyDescriptor(oe.prototype,"onKeepOpen"),oe.prototype),b()(oe.prototype,"onClose",[ae],Object.getOwnPropertyDescriptor(oe.prototype,"onClose"),oe.prototype),ie=oe))||ie)||ie),Ne=n(9),De=n(14),Ve=[{id:"",name:"testResult.overview.name",View:Ee}],je=(ue=Object(_.b)("test-result"),ce=Object(_.a)("TooltipBehavior",{position:"left"}),fe=Object(_.a)("ClipboardBehavior"),he=Object(_.e)({content:".test-result__content"}),de=Object(_.c)("click .status-details__trace-toggle"),ue(pe=ce(pe=fe(pe=he((me=function(e){function TestResultView(){var e,t;a()(this,TestResultView);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return t=l()(this,(e=c()(TestResultView)).call.apply(e,[this].concat(r))),g()(p()(p()(t)),"template",x.a),t}return h()(TestResultView,e),o()(TestResultView,[{key:"initialize",value:function(e){var t=this,n=e.routeState;this.routeState=n,this.tabs=Ve.concat(S.a.testResultTabs),this.tabName=this.routeState.get("testResultTab")||"",this.listenTo(this.routeState,"change:testResultTab",function(e,n){return t.onTabChange(n)}),this.listenTo(this.routeState,"change:attachment",function(e,n){return t.onShowAttachment(n)})}},{key:"onRender",value:function(){var e=Object(De.findWhere)(this.tabs,{id:this.tabName});this.showChildView("content",e?new e.View(this.options):new Me.a({code:404,message:'Tab "'.concat(this.tabName,'" not found')}));var t=this.routeState.get("attachment");t&&this.onShowAttachment(t)}},{key:"onTabChange",value:function(e){this.tabName=e||"",this.render()}},{key:"onShowAttachment",value:function(e){if(!e&&this.modalView&&this.modalView.destroy(),e){var t=this.model.getAttachment(e);this.modalView=new Re({childView:t?new we({attachment:t,fullScreen:!0}):new Me.a({code:404,message:Object(Ne.default)("errors.missedAttachment")}),title:t?t.name||t.source:Object(Ne.default)("errors.notFound")}),this.modalView.show()}}},{key:"templateContext",value:function(){var e=this,t=this.options.baseUrl;return{cls:this.className,statusName:"status.".concat(this.model.get("status")),links:this.tabs.map(function(n){return{href:"".concat(t,"/").concat(n.id),name:n.name,active:n.id===e.tabName}})}}},{key:"onStacktraceClick",value:function(e){this.$(e.currentTarget).closest(".status-details").toggleClass("status-details__expanded")}}]),TestResultView}(y.View),b()(me.prototype,"onStacktraceClick",[de],Object.getOwnPropertyDescriptor(me.prototype,"onStacktraceClick"),me.prototype),pe=me))||pe)||pe)||pe)||pe);t.a=je},function(e,t,n){"use strict";var r=n(26),a=n.n(r),i={},o={},s=34,l=10,u=13;function objectConverter(e){return new Function("d","return {"+e.map(function(e,t){return JSON.stringify(e)+": d["+t+"]"}).join(",")+"}")}var c=function(e){var t=new RegExp('["'+e+"\n\r]"),n=e.charCodeAt(0);function parseRows(e,t){var r,a=[],c=e.length,f=0,h=0,d=c<=0,p=!1;function token(){if(d)return o;if(p)return p=!1,i;var t,r,a=f;if(e.charCodeAt(a)===s){for(;f++<c&&e.charCodeAt(f)!==s||e.charCodeAt(++f)===s;);return(t=f)>=c?d=!0:(r=e.charCodeAt(f++))===l?p=!0:r===u&&(p=!0,e.charCodeAt(f)===l&&++f),e.slice(a+1,t-1).replace(/""/g,'"')}for(;f<c;){if((r=e.charCodeAt(t=f++))===l)p=!0;else if(r===u)p=!0,e.charCodeAt(f)===l&&++f;else if(r!==n)continue;return e.slice(a,t)}return d=!0,e.slice(a,c)}for(e.charCodeAt(c-1)===l&&--c,e.charCodeAt(c-1)===u&&--c;(r=token())!==o;){for(var m=[];r!==i&&r!==o;)m.push(r),r=token();t&&null==(m=t(m,h++))||a.push(m)}return a}function formatRow(t){return t.map(formatValue).join(e)}function formatValue(e){return null==e?"":t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function(e,t){var n,r,a=parseRows(e,function(e,a){if(n)return n(e,a-1);r=e,n=t?function(e,t){var n=objectConverter(e);return function(r,a){return t(n(r),a,e)}}(e,t):objectConverter(e)});return a.columns=r||[],a},parseRows:parseRows,format:function(t,n){return null==n&&(n=function(e){var t=Object.create(null),n=[];return e.forEach(function(e){for(var r in e)r in t||n.push(t[r]=r)}),n}(t)),[n.map(formatValue).join(e)].concat(t.map(function(t){return n.map(function(e){return formatValue(t[e])}).join(e)})).join("\n")},formatRows:function(e){return e.map(formatRow).join("\n")}}},f=c(","),h=(f.parse,f.parseRows),d=(f.format,f.formatRows,c("\t")),p=(d.parse,d.parseRows),m=(d.format,d.formatRows,n(21));function typeByMime(e){if(m.a.attachmentViews[e])return a()({type:"custom"},m.a.attachmentViews[e]);switch(e){case"image/bmp":case"image/gif":case"image/tiff":case"image/jpeg":case"image/jpg":case"image/png":case"image/*":return{type:"image",icon:"fa fa-file-image-o"};case"text/xml":case"application/xml":case"application/json":case"text/json":case"text/yaml":case"application/yaml":case"application/x-yaml":case"text/x-yaml":return{type:"code",icon:"fa fa-file-code-o",parser:function(e){return e}};case"text/plain":case"text/*":return{type:"text",icon:"fa fa-file-text-o",parser:function(e){return e}};case"text/html":return{type:"html",icon:"fa fa-file-code-o"};case"text/csv":return{type:"table",icon:"fa fa-table",parser:function(e){return h(e)}};case"text/tab-separated-values":return{type:"table",icon:"fa fa-table",parser:function(e){return p(e)}};case"image/svg+xml":return{type:"svg",icon:"fa fa-file-image-o"};case"video/mp4":case"video/ogg":case"video/webm":return{type:"video",icon:"fa fa-file-video-o"};case"text/uri-list":return{type:"uri",icon:"fa fa-list-alt",parser:function(e){return e.split("\n").map(function(e){return e.trim()}).filter(function(e){return e.length>0}).map(function(e){return{comment:0===e.indexOf("#"),text:e}})}};case"application/x-tar":case"application/x-gtar":case"application/x-bzip2":case"application/gzip":case"application/zip":return{type:"archive",icon:"fa fa-file-archive-o"};default:return{type:null,icon:"fa fa-file-o"}}}n.d(t,"a",function(){return typeByMime})},function(e,t,n){"use strict";var r=n(128),a=n(129);function Url(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=urlParse,t.resolve=function(e,t){return urlParse(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?urlParse(e,!1,!0).resolveObject(t):t},t.format=function(e){a.isString(e)&&(e=urlParse(e));return e instanceof Url?e.format():Url.prototype.format.call(e)},t.Url=Url;var i=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),c=["%","/","?",";","#"].concat(u),f=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,p={javascript:!0,"javascript:":!0},m={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=n(130);function urlParse(e,t,n){if(e&&a.isObject(e)&&e instanceof Url)return e;var r=new Url;return r.parse(e,t,n),r}Url.prototype.parse=function(e,t,n){if(!a.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var o=e.indexOf("?"),l=-1!==o&&o<e.indexOf("#")?"?":"#",b=e.split(l);b[0]=b[0].replace(/\\/g,"/");var y=e=b.join(l);if(y=y.trim(),!n&&1===e.split("#").length){var _=s.exec(y);if(_)return this.path=y,this.href=y,this.pathname=_[1],_[2]?(this.search=_[2],this.query=t?v.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var w=i.exec(y);if(w){var x=(w=w[0]).toLowerCase();this.protocol=x,y=y.substr(w.length)}if(n||w||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var k="//"===y.substr(0,2);!k||w&&m[w]||(y=y.substr(2),this.slashes=!0)}if(!m[w]&&(k||w&&!g[w])){for(var C,S,T=-1,E=0;E<f.length;E++){-1!==(M=y.indexOf(f[E]))&&(-1===T||M<T)&&(T=M)}-1!==(S=-1===T?y.lastIndexOf("@"):y.lastIndexOf("@",T))&&(C=y.slice(0,S),y=y.slice(S+1),this.auth=decodeURIComponent(C)),T=-1;for(E=0;E<c.length;E++){var M;-1!==(M=y.indexOf(c[E]))&&(-1===T||M<T)&&(T=M)}-1===T&&(T=y.length),this.host=y.slice(0,T),y=y.slice(T),this.parseHost(),this.hostname=this.hostname||"";var O="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!O)for(var A=this.hostname.split(/\./),R=(E=0,A.length);E<R;E++){var N=A[E];if(N&&!N.match(h)){for(var D="",V=0,j=N.length;V<j;V++)N.charCodeAt(V)>127?D+="x":D+=N[V];if(!D.match(h)){var P=A.slice(0,E),L=A.slice(E+1),I=N.match(d);I&&(P.push(I[1]),L.unshift(I[2])),L.length&&(y="/"+L.join(".")+y),this.hostname=P.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),O||(this.hostname=r.toASCII(this.hostname));var B=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+B,this.href+=this.host,O&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!p[x])for(E=0,R=u.length;E<R;E++){var U=u[E];if(-1!==y.indexOf(U)){var F=encodeURIComponent(U);F===U&&(F=escape(U)),y=y.split(U).join(F)}}var H=y.indexOf("#");-1!==H&&(this.hash=y.substr(H),y=y.slice(0,H));var q=y.indexOf("?");if(-1!==q?(this.search=y.substr(q),this.query=y.substr(q+1),t&&(this.query=v.parse(this.query)),y=y.slice(0,q)):t&&(this.search="",this.query={}),y&&(this.pathname=y),g[x]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){B=this.pathname||"";var W=this.search||"";this.path=B+W}return this.href=this.format(),this},Url.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",i=!1,o="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&a.isObject(this.query)&&Object.keys(this.query).length&&(o=v.stringify(this.query));var s=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),s&&"?"!==s.charAt(0)&&(s="?"+s),t+i+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(s=s.replace("#","%23"))+r},Url.prototype.resolve=function(e){return this.resolveObject(urlParse(e,!1,!0)).format()},Url.prototype.resolveObject=function(e){if(a.isString(e)){var t=new Url;t.parse(e,!1,!0),e=t}for(var n=new Url,r=Object.keys(this),i=0;i<r.length;i++){var o=r[i];n[o]=this[o]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var s=Object.keys(e),l=0;l<s.length;l++){var u=s[l];"protocol"!==u&&(n[u]=e[u])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var c=Object.keys(e),f=0;f<c.length;f++){var h=c[f];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||m[e.protocol])n.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),n.pathname=d.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var p=n.pathname||"",v=n.search||"";n.path=p+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var b=n.pathname&&"/"===n.pathname.charAt(0),y=e.host||e.pathname&&"/"===e.pathname.charAt(0),_=y||b||n.host&&e.pathname,w=_,x=n.pathname&&n.pathname.split("/")||[],k=(d=e.pathname&&e.pathname.split("/")||[],n.protocol&&!g[n.protocol]);if(k&&(n.hostname="",n.port=null,n.host&&(""===x[0]?x[0]=n.host:x.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),_=_&&(""===d[0]||""===x[0])),y)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,x=d;else if(d.length)x||(x=[]),x.pop(),x=x.concat(d),n.search=e.search,n.query=e.query;else if(!a.isNullOrUndefined(e.search)){if(k)n.hostname=n.host=x.shift(),(M=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=M.shift(),n.host=n.hostname=M.shift());return n.search=e.search,n.query=e.query,a.isNull(n.pathname)&&a.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!x.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var C=x.slice(-1)[0],S=(n.host||e.host||x.length>1)&&("."===C||".."===C)||""===C,T=0,E=x.length;E>=0;E--)"."===(C=x[E])?x.splice(E,1):".."===C?(x.splice(E,1),T++):T&&(x.splice(E,1),T--);if(!_&&!w)for(;T--;T)x.unshift("..");!_||""===x[0]||x[0]&&"/"===x[0].charAt(0)||x.unshift(""),S&&"/"!==x.join("/").substr(-1)&&x.push("");var M,O=""===x[0]||x[0]&&"/"===x[0].charAt(0);k&&(n.hostname=n.host=O?"":x.length?x.shift():"",(M=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=M.shift(),n.host=n.hostname=M.shift()));return(_=_||n.host&&x.length)&&!O&&x.unshift(""),x.length?n.pathname=x.join("/"):(n.pathname=null,n.path=null),a.isNull(n.pathname)&&a.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},Url.prototype.parseHost=function(){var e=this.host,t=o.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return' <div class="'+l(__default(n(7)).call(s,"status-details","trace-toggle",{name:"b",hash:{status:null!=t?t.status:t},data:i}))+' clickable" data-tooltip="'+l(__default(n(9)).call(s,"testResult.status.trace",{name:"t",hash:{},data:i}))+'">\n <pre class="status-details__message"><code>'+l(e.lambda(null!=t?t.statusMessage:t,t))+'</code></pre>\n </div>\n\n <pre class="'+l(__default(n(7)).call(s,"status-details","trace",{name:"b",hash:{},data:i}))+'"><code>'+(null!=(o=r.if.call(s,null!=t?t.statusTrace:t,{name:"if",hash:{},fn:e.program(2,i,0),inverse:e.program(4,i,0),data:i}))?o:"")+"</code></pre>\n"},2:function(e,t,n,r,a){return e.escapeExpression(e.lambda(null!=t?t.statusTrace:t,t))},4:function(e,t,r,a,i){return e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.status.empty",{name:"t",hash:{},data:i}))},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return'<div class="'+e.escapeExpression(__default(n(7)).call(s,"status-details",{name:"b",hash:{status:null!=t?t.status:t},data:i}))+'">\n <div class="status-details__content">\n'+(null!=(o=r.if.call(s,null!=t?t.statusMessage:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+" </div>\n</div>\n"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return' <div class="'+c(__default(n(7)).call(u,"step",{name:"b",hash:{expanded:null!=t?t.expanded:t},data:i}))+'">\n <div class="'+c(__default(n(7)).call(u,"step","title",{name:"b",hash:{stage:!0,hasContent:!0},data:i}))+'">\n <span class="step__arrow block__arrow">'+c(__default(n(49)).call(u,{name:"angle",hash:{},data:i}))+"</span>\n "+c(e.lambda(null!=t?t.name:t,t))+'\n </div>\n <div class="'+c(__default(n(7)).call(u,"step","content",{name:"b",hash:{},data:i}))+'">\n'+(null!=(l=r.each.call(u,null!=t?t.stages:t,{name:"each",hash:{},fn:e.program(2,i,0,o,s),inverse:e.noop,data:i}))?l:"")+" </div>\n </div>\n"},2:function(e,t,n,r,a,i,o){var s;return null!=(s=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.name:t,{name:"if",hash:{},fn:e.program(3,a,0,i,o),inverse:e.program(12,a,0,i,o),data:a}))?s:""},3:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return' <div class="'+c(__default(n(7)).call(u,"step",{name:"b",hash:{},data:i}))+'">\n <div class="'+c(__default(n(7)).call(u,"step","title",{name:"b",hash:{stage:!0,hasContent:null!=t?t.hasContent:t},data:i}))+'">\n'+(null!=(l=r.if.call(u,null!=t?t.hasContent:t,{name:"if",hash:{},fn:e.program(4,i,0,o,s),inverse:e.program(6,i,0,o,s),data:i}))?l:"")+" "+c(e.lambda(null!=t?t.name:t,t))+"\n"+(null!=(l=e.invokePartial(n(68),t,{name:"../../blocks/step-stats/step-stats",hash:{baseUrl:null!=s[2]?s[2].baseUrl:s[2]},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:"")+' </div>\n <div class="'+c(__default(n(7)).call(u,"step","content",{name:"b",hash:{},data:i}))+'">\n'+(null!=(l=e.invokePartial(n(69),t,{name:"../../blocks/parameters-table/parameters-table",hash:{parameters:null!=t?t.parameters:t},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:"")+(null!=(l=e.invokePartial(n(50),t,{name:"steps-list",hash:{baseUrl:null!=s[1]?s[1].baseUrl:s[1],steps:null!=t?t.steps:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:"")+(null!=(l=r.each.call(u,null!=t?t.attachments:t,{name:"each",hash:{},fn:e.program(8,i,0,o,s),inverse:e.noop,data:i}))?l:"")+(null!=(l=r.if.call(u,null!=t?t.shouldDisplayMessage:t,{name:"if",hash:{},fn:e.program(10,i,0,o,s),inverse:e.noop,data:i}))?l:"")+" </div>\n </div>\n"},4:function(e,t,r,a,i){return' <span class="step__arrow block__arrow">'+e.escapeExpression(__default(n(70)).call(null!=t?t:e.nullContext||{},null!=t?t.status:t,{name:"arrow",hash:{},data:i}))+"</span>\n"},6:function(e,t,r,a,i){return' <span class="step__status">'+e.escapeExpression(__default(n(29)).call(null!=t?t:e.nullContext||{},null!=t?t.status:t,{name:"allure-icon",hash:{},data:i}))+"</span>\n"},8:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(51),t,{name:"../../blocks/attachment-row/attachment-row",hash:{baseUrl:null!=s[2]?s[2].baseUrl:s[2]},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:""},10:function(e,t,r,a,i){var o;return null!=(o=e.invokePartial(n(47),t,{name:"../../blocks/status-details/status-details",data:i,helpers:r,partials:a,decorators:e.decorators}))?o:""},12:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{};return(null!=(l=e.invokePartial(n(50),t,{name:"steps-list",hash:{baseUrl:null!=s[1]?s[1].baseUrl:s[1],steps:null!=t?t.steps:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:"")+(null!=(l=r.each.call(u,null!=t?t.attachments:t,{name:"each",hash:{},fn:e.program(13,i,0,o,s),inverse:e.noop,data:i}))?l:"")+(null!=(l=r.if.call(u,null!=t?t.shouldDisplayMessage:t,{name:"if",hash:{},fn:e.program(10,i,0,o,s),inverse:e.noop,data:i}))?l:"")},13:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(51),t,{name:"../../blocks/attachment-row/attachment-row",hash:{baseUrl:null!=s[2]?s[2].baseUrl:s[2]},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:""},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a,i,o){var s;return null!=(s=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.stages:t,{name:"if",hash:{},fn:e.program(1,a,0,i,o),inverse:e.noop,data:a}))?s:""},usePartial:!0,useData:!0,useDepths:!0})},function(e,t,n){"use strict";n.r(t);var r=n(11);t.default=function(){return new r.SafeString('<span class="angle fa fa-angle-right fa-fw fa-lg"></span>')}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return' <div class="step">\n <div class="'+c(__default(n(7)).call(u,"step","title",{name:"b",hash:{hasContent:null!=t?t.hasContent:t},data:i}))+' long-line">\n'+(null!=(l=r.if.call(u,null!=t?t.hasContent:t,{name:"if",hash:{},fn:e.program(2,i,0,o,s),inverse:e.program(4,i,0,o,s),data:i}))?l:"")+' <div class="step__name">\n '+c(e.lambda(null!=t?t.name:t,t))+"\n </div>\n"+(null!=(l=e.invokePartial(n(68),t,{name:"../../blocks/step-stats/step-stats",hash:{baseUrl:null!=s[2]?s[2].baseUrl:s[2]},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:"")+' </div>\n <div class="step__content">\n'+(null!=(l=e.invokePartial(n(69),t,{name:"../../blocks/parameters-table/parameters-table",hash:{parameters:null!=t?t.parameters:t},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:"")+(null!=(l=e.invokePartial(n(50),t,{name:"steps-list",hash:{baseUrl:null!=s[1]?s[1].baseUrl:s[1],steps:null!=t?t.steps:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:"")+(null!=(l=r.each.call(u,null!=t?t.attachments:t,{name:"each",hash:{},fn:e.program(6,i,0,o,s),inverse:e.noop,data:i}))?l:"")+(null!=(l=r.if.call(u,null!=t?t.shouldDisplayMessage:t,{name:"if",hash:{},fn:e.program(8,i,0,o,s),inverse:e.noop,data:i}))?l:"")+" </div>\n </div>\n"},2:function(e,t,r,a,i){return' <span class="step__arrow block__arrow">'+e.escapeExpression(__default(n(70)).call(null!=t?t:e.nullContext||{},null!=t?t.status:t,{name:"arrow",hash:{},data:i}))+"</span>\n"},4:function(e,t,r,a,i){return' <span class="step__status">'+e.escapeExpression(__default(n(29)).call(null!=t?t:e.nullContext||{},null!=t?t.status:t,{name:"allure-icon",hash:{},data:i}))+"</span>\n"},6:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(51),t,{name:"../../blocks/attachment-row/attachment-row",hash:{baseUrl:null!=s[2]?s[2].baseUrl:s[2]},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?l:""},8:function(e,t,n,r,a,i,o){var s;return null!=(s=n.with.call(null!=t?t:e.nullContext||{},null!=t?t.statusDetails:t,{name:"with",hash:{},fn:e.program(9,a,0,i,o),inverse:e.noop,data:a}))?s:""},9:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(47),t,{name:"../../blocks/status-details/status-details",hash:{status:null!=s[1]?s[1].status:s[1]},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:""},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a,i,o){var s;return null!=(s=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.steps:t,{name:"each",hash:{},fn:e.program(1,a,0,i,o),inverse:e.noop,data:a}))?s:""},usePartial:!0,useData:!0,useDepths:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){return" "+e.escapeExpression(e.lambda(null!=t?t.name:t,t))+"\n"},3:function(e,t,n,r,a){return" "+e.escapeExpression(e.lambda(null!=t?t.source:t,t))+"\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=e.lambda,l=e.escapeExpression,u=null!=t?t:e.nullContext||{};return'<div>\n <div class="attachment-row" data-uid="'+l(s(null!=t?t.uid:t,t))+'">\n <span class="attachment-row__arrow block__arrow">'+l(__default(n(49)).call(u,{name:"angle",hash:{},data:i}))+'</span>\n <div class="attachment-row__icon">\n <span class="'+l(__default(n(165)).call(u,null!=t?t.type:t,{name:"fileicon",hash:{},data:i}))+'" data-tooltip="'+l(s(null!=t?t.type:t,t))+'"></span>\n </div>\n <div class="attachment-row__name long-line">\n'+(null!=(o=r.if.call(u,null!=t?t.name:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(3,i,0),data:i}))?o:"")+' </div>\n <div class="attachment-row__control attachment-row__link">\n <a class="link" href="data/attachments/'+l(s(null!=t?t.source:t,t))+'" target="_blank"\n data-tooltip="Open attachment in new tab">\n <span class="fa fa-save"></span> '+l(__default(n(166)).call(u,null!=t?t.size:t,{name:"filesize",hash:{},data:i}))+'\n </a>\n </div>\n <div class="attachment-row__control attachment-row__fullscreen">\n <a class="link">\n <span class="fa fa-arrows-alt"></span>\n </a>\n </div>\n </div>\n <div class="attachment-row__preview">\n <div class="attachment-row__content '+l(__default(n(7)).call(u,"attachment",null!=t?t.uid:t,{name:"b",hash:{},data:i}))+'"></div>\n </div>\n</div>'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression;return' <span class="node__time" data-tooltip="'+s(o(null!=t?t.tooltip:t,t))+'">\n '+s(o(null!=t?t.name:t,t))+":\n <b>"+s(__default(n(20)).call(null!=t?t:e.nullContext||{},null!=t?t.value:t,{name:"duration",hash:{},data:i}))+"</b>\n </span>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(184)).call(s,null!=t?t.value:t,{name:"is-def",hash:{},data:i}),{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:""},useData:!0})},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){!function(e,t,n){"use strict";t="default"in t?t.default:t,n="default"in n?n.default:n,e.on=function(e){return function(n,r,a){if(n.events&&!t.has(n,"events")&&(n.events=t.clone(n.events)),n.events||(n.events={}),t.isFunction(n.events))throw new Error("The on decorator is not compatible with an events method");if(!e)throw new Error("The on decorator requires an eventName argument");return n.events[e]=r,a}},e.tagName=function(e){return function(t){t.prototype.tagName=e}},e.model=function(e){return function(t){if(!(e.prototype instanceof n.Model))throw new Error("The model decorator takes either a single argument that should be an instance of Backbone.Model");t.prototype.model=e}},e.comparator=function(e){return function(n){if(!t.isString(e))throw new Error("The comparator decorator takes either a single argument that should be a string");n.prototype.comparator=e}},e.defaults=function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return function(e){var r=e.prototype.defaults||{},a=n[0],i=n[1];if(t.isObject(a))t.extend(r,a);else{if(!t.isString(a)||t.isUndefined(i))throw new Error("The defaults decorator takes either a single object as an argument or a key and value");r[a]=i}e.prototype.defaults=r}},e.route=function(e){return function(n,r,a){if(n.routes||(n.routes={}),t.isFunction(n.routes))throw new Error("The route decorator is not compatible with a route method");if(!e)throw new Error("The route decorator requires an route string argument");return n.routes[e]=r,a}},e.onModel=function(e){return function(n,r,a){if(n.modelEvents||(n.modelEvents={}),t.isFunction(n.modelEvents))throw new Error("The onModel decorator is not compatible with a modelEvents method");if(!e)throw new Error("The onModel decorator requires an eventName argument");return n.modelEvents[e]=r,a}},e.onCollection=function(e){return function(n,r,a){if(n.collectionEvents||(n.collectionEvents={}),t.isFunction(n.collectionEvents))throw new Error("The onCollection decorator is not compatible with a collectionEvents method");if(!e)throw new Error("The onCollection decorator requires an eventName argument");return n.collectionEvents[e]=r,a}},e.template=function(e){return function(t){t.prototype.template=e}},e.childView=function(e){return function(t){t.prototype.childView=e}},e.childViewContainer=function(e){return function(t){t.prototype.childViewContainer=e}},e.ui=function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return function(e){var r=e.prototype.ui||{},a=n[0],i=n[1];if(t.isObject(a))t.extend(r,n[0]);else{if(!t.isString(a)||!t.isString(i))throw new Error("The ui decorator takes either a single object as an argument or a key and value string");r[a]=i}e.prototype.ui=r}},e.useSuper=function(e,n,r){var a=Object.getPrototypeOf(e)[n];if(!t.isFunction(a))throw new Error("The useSuper method requires the parent class to implement this function somewhere on its prototype chain");return r.value=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.apply(this,t)},r},e.localStorage=function(e){return function(r){if(!n.LocalStorage)throw new Error("The localStorage decorator requires Backbone.LocalStorage to have been loaded before use");if(!t.isString(e))throw new Error("The localStorage decorator requires a single string argument which will serve as the localStorage key");r.prototype.localStorage=new n.LocalStorage(e)}},e.replyRadio=function(e,n){return function(r,a,i){if(r.radioRequests||(r.radioRequests={}),t.isFunction(r.radioRequests))throw new Error("The replyRadio decorator is not compatible with a radioRequests method");if(!t.isString(e)||!t.isString(n))throw new Error("The replyRadio decorator requires 2 arguments, a channel and a request string.");return r.radioRequests[e+" "+n]=a,i}}}(t,n(134),n(13))},function(e,t,n){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.HandlebarsEnvironment=HandlebarsEnvironment;var r=n(28),a=_interopRequireDefault(n(38)),i=n(136),o=n(144),s=_interopRequireDefault(n(146));t.VERSION="4.1.2";t.COMPILER_REVISION=7;t.REVISION_CHANGES={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};function HandlebarsEnvironment(e,t,n){this.helpers=e||{},this.partials=t||{},this.decorators=n||{},i.registerDefaultHelpers(this),o.registerDefaultDecorators(this)}HandlebarsEnvironment.prototype={constructor:HandlebarsEnvironment,logger:s.default,log:s.default.log,registerHelper:function(e,t){if("[object Object]"===r.toString.call(e)){if(t)throw new a.default("Arg not supported with multiple helpers");r.extend(this.helpers,e)}else this.helpers[e]=t},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,t){if("[object Object]"===r.toString.call(e))r.extend(this.partials,e);else{if(void 0===t)throw new a.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=t}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,t){if("[object Object]"===r.toString.call(e)){if(t)throw new a.default("Arg not supported with multiple decorators");r.extend(this.decorators,e)}else this.decorators[e]=t},unregisterDecorator:function(e){delete this.decorators[e]}};var l=s.default.log;t.log=l,t.createFrame=r.createFrame,t.logger=s.default},function(e){e.exports={status:{failed:"Falhou",broken:"Quebrado",passed:"Passou",skipped:"Ignorado",unknown:"Desconhecido",flaky:"Teste é inconsistente"},sorter:{order:"ordem",name:"nome",duration:"duração",status:"situação"},tab:{overview:{name:"Visão geral"},categories:{name:"Categorias"},suites:{name:"Suítes"},graph:{name:"Gráficos"},timeline:{name:"Linha do tempo",selected:"Selecionado {{count}} teste ({{percent}}%) com duração acima de {{duration}}",selected_plural:"Selecionados {{count}} testes ({{percent}}%) com duração acima de {{duration}}"}},widget:{summary:{aggregatedName:"Relatório agregado",launches:"execução",launches_plural:"execuções",testResults:"caso de teste",testResults_plural:"casos de teste"},trend:{name:"Tendência"},categoriesTrend:{name:"Tendência das categorias"},durationTrend:{name:"Tendência das durações"},retryTrend:{name:"Tendência das tentativas"},executors:{name:"Executores",unknown:"Desconhecido",empty:"Não há informação sobre os executores dos testes."},launches:{name:"Execuções",empty:"Não há informações sobre execuções"},environment:{name:"Ambiente",empty:"Não há variáveis de ambiente.",showAll:"Mostrar tudo"},suites:{name:"Suítes"},categories:{name:"Categorias"}},chart:{duration:{name:"Duração",empty:"Não há nada para mostrar"},trend:{empty:"Não há nada para mostrar"},severity:{name:"Severidade"},status:{name:"Situação"}},testResult:{status:{empty:"Detalhes da situação vazio.",trace:"Mostrar trace"},overview:{name:"Visão geral"},categories:{name:"Categorias"},description:{name:"Descrição"},duration:{name:"Duração"},history:{name:"Histórico",successRate:"Taxa de sucesso"},owner:{name:"Proprietário"},retries:{name:"Tentativas",empty:"Não há informação disponível sobre as tentativas de testes."},parameters:{name:"Parâmetros"},links:{name:"Links"},severity:{name:"Severidade"},execution:{name:"Execução",setup:"Pré-execução",teardown:"Pós-execução",body:"Corpo do teste"},stats:{count:{steps:"{{count}} sub-passo",steps_plural:"{{count}} sub-passos",attachments:"{{count}} anexo",attachments_plural:"{{count}} anexos",parameters:"{{count}} parâmetro",parameters_plural:"{{count}} parâmetros"}}},controls:{collapse:"Reduzir",expand:"Expandir",fullscreen:"Tela cheia",language:"Mudar a linguagem",clipboard:"Copiar para área de transferência",clipboardSuccess:"Copiado com sucesso",clipboardError:"Não é possível copiar o valor para área de transferência. Parece que está funcionalidade não é suportada pelo seu browser",backto:"Voltar para"},errors:{missedAttachment:"Anexo não encontrado",notFound:"Não encontrado"},component:{tree:{filter:"Filtrar por situação",groups:"Alternar informações do grupo",download:"Download CSV",empty:"Não há itens",time:{total:{name:"Total",tooltip:"Duração de inicio do primeiro teste até o ultimo teste finalizar"},max:{name:"Max",tooltip:"Teste mais demorado"},sum:{name:"Soma",tooltip:"Soma da duração de todos os testes"}},filtered:{total:"resultado do teste {{count}}",total_plural:"resultados dos testes {{count}}",shown:"mostrar {{count}}"}},widgetStatus:{showAll:"Mostrar tudo",total:"total de item {{count}}",total_plural:"total de itens {{count}}"},statusToggle:{showCases:"Mostrar resultados dos testes com situação {{status}}",hideCases:"Ocultar resultados dos testes com situação {{status}}"}}}},function(e){e.exports={status:{failed:"Fehlgeschlagen",broken:"Defekt",passed:"Erfolgreich",skipped:"Übersprungen",unknown:"Unbekannt",flaky:"Instabil"},sorter:{order:"Reihenfolge",name:"Name",duration:"Dauer",status:"Status"},tab:{overview:{name:"Übersicht"},categories:{name:"Kategorien"},suites:{name:"Suiten"},graph:{name:"Grafiken"},timeline:{name:"Zeitstrahl",selected:"{{count}} Test ausgewählt ({{percent}}%) mit einer Dauer von über {{duration}}",selected_plural:"{{count}} Tests ausgewählt ({{percent}}%) mit einer Dauer von über {{duration}}"}},widget:{summary:{aggregatedName:"Aggregierter Report",launches:"Durchlauf",launches_plural:"Durchläufe",testResults:"Testfall",testResults_plural:"Testfälle"},trend:{name:"Trend"},categoriesTrend:{name:"Kategorien Trend"},durationTrend:{name:"Dauer Trend"},retryTrend:{name:"Wiederholungen Trend"},executors:{name:"Durchführer",unknown:"Unbekannt",empty:"Keine Informationen zu Testdurchführern verfügbar"},launches:{name:"Durchläufe",empty:"Keine Informationen zu Durchläufen verfügbar"},environment:{name:"Umgebung",empty:"Keine Umgebungsvariablen verfügbar",showAll:"Zeige alle"},suites:{name:"Suiten"},categories:{name:"Kategorien"}},chart:{duration:{name:"Dauer",empty:"Hier gibt es nichts zu zeigen"},trend:{empty:"Hier gibt es nichts zu zeigen"},severity:{name:"Ausmaß"},status:{name:"Status"}},testResult:{status:{empty:"Keine Status Details",trace:"Zeige Stracktrace"},overview:{name:"Übersicht"},categories:{name:"Kategorien"},description:{name:"Beschreibung"},duration:{name:"Dauer"},history:{name:"Historie",successRate:"Erfolgsrate"},owner:{name:"Besitzer"},retries:{name:"Wiederholungen",empty:"Keine Informationen zu Wiederholungen verfügbar"},parameters:{name:"Parameter"},links:{name:"Links"},severity:{name:"Ausmaß"},execution:{name:"Durchführung",setup:"Vorbereitung",teardown:"Aufräumung",body:"Test"},stats:{count:{steps:"{{count}} Unterschritt",steps_plural:"{{count}} Unterschritte",attachments:"{{count}} Anhang",attachments_plural:"{{count}} Anhänge",parameters:"{{count}} Parameter",parameters_plural:"{{count}} Parameter"}}},controls:{collapse:"Verkleinern",expand:"Vergrößern",fullscreen:"Vollbild",language:"Sprache ändern",clipboard:"In Zwischenablage kopieren",clipboardSuccess:"Erfolgreich in Zwischenablage kopiert",clipboardError:"Wert konnte nicht in Zwischenablage kopiert werden. Ihr Browser scheint dieses Feature nicht zu unterstützen",backto:"Zurück zu"},errors:{missedAttachment:"Anhang nicht gefunden",notFound:"Nicht gefunden"},component:{tree:{filter:"Filtere Testfälle nach Status",groups:"Gruppeninformationen an- / ausschalten",download:"CSV herunterladen",empty:"Keine Einträge verfügbar",time:{total:{name:"Gesamt",tooltip:"Dauer vom Start des ersten bis zum Ende des letzten Tests"},max:{name:"Max",tooltip:"Längste Testdauer"},sum:{name:"Summe",tooltip:"Summe aller Testdauern"}},filtered:{total:"{{count}} Testergebnis",total_plural:"{{count}} Testergebnisse",shown:"{{count}} angezeigt"}},widgetStatus:{showAll:"Zeige alle",total:"{{count}} Eintrag insgesamt",total_plural:"{{count}} Einträge insgesamt"},statusToggle:{showCases:"Zeige Testergebnisse mit Status {{status}}",hideCases:"Verstecke Testergebnisse mit Status {{status}}"}}}},function(e){e.exports={status:{failed:"Failed",broken:"Broken",passed:"Passed",skipped:"Skipped",unknown:"Unknown",flaky:"Test is flaky",newFailed:"Test is new failed."},marks:{flaky:"Flaky",newFailed:"New Failed"},sorter:{order:"order",name:"name",duration:"duration",status:"status"},tab:{overview:{name:"Overview"},categories:{name:"Categories"},suites:{name:"Suites"},graph:{name:"Graphs"},timeline:{name:"Timeline",selected:"Selected {{count}} test ({{percent}}%) with duration above {{duration}}",selected_plural:"Selected {{count}} tests ({{percent}}%) with duration above {{duration}}"}},widget:{summary:{aggregatedName:"Aggregated report",launches:"launch",launches_plural:"launches",testResults:"test case",testResults_plural:"test cases"},trend:{name:"Trend"},categoriesTrend:{name:"Categories trend"},durationTrend:{name:"Duration trend"},retryTrend:{name:"Retries trend"},executors:{name:"Executors",unknown:"Unknown",empty:"There is no information about tests executors"},launches:{name:"Launches",empty:"There is no information about launches"},environment:{name:"Environment",empty:"There are no environment variables",showAll:"Show all"},suites:{name:"Suites"},categories:{name:"Categories"}},chart:{duration:{name:"Duration",empty:"There is nothing to show"},trend:{empty:"There is nothing to show"},severity:{name:"Severity"},status:{name:"Status"}},testResult:{status:{empty:"Empty status details",trace:"Show trace"},overview:{name:"Overview"},categories:{name:"Categories"},description:{name:"Description"},duration:{name:"Duration"},history:{name:"History",successRate:"Success rate",statistic:"{{passed}} of {{total}}",time:"{{date}} at {{time}}",empty:"No history information available."},owner:{name:"Owner"},retries:{name:"Retries",time:"{{date}} at {{time}}",empty:"There is no information available about test retries"},parameters:{name:"Parameters"},links:{name:"Links"},severity:{name:"Severity"},execution:{name:"Execution",setup:"Set up",teardown:"Tear down",body:"Test body",downloadAttachment:{tooltip:"Open attachment in new tab"}},stats:{count:{steps:"{{count}} sub-step",steps_plural:"{{count}} sub-steps",attachments:"{{count}} attachment",attachments_plural:"{{count}} attachments",parameters:"{{count}} parameter",parameters_plural:"{{count}} parameters"}}},controls:{collapse:"Collapse",expand:"Expand",fullscreen:"Full screen",language:"Change language",clipboard:"Copy to clipboard",clipboardSuccess:"Successfully copied",clipboardError:"Can not copy value to clipboard. Seems like this feature is not supported for your browser",backto:"Back to"},errors:{missedAttachment:"Attachment not found",notFound:"Not found"},component:{tree:{filter:"Status","filter-marks":"Marks",groups:"Toggle groups info",download:"Download CSV",empty:"There are no items",time:{total:{name:"Total",tooltip:"Duration from first test started to last test finished"},max:{name:"Max",tooltip:"Longest test duration"},sum:{name:"Sum",tooltip:"Sum of all tests durations"}},filtered:{total:"{{count}} test result",total_plural:"{{count}} test results",shown:"{{count}} shown"}},widgetStatus:{showAll:"Show all",total:"{{count}} item total",total_plural:"{{count}} items total"},statusToggle:{showCases:"Show test results with {{status}} status",hideCases:"Hide test results with {{status}} status"},markToggle:{showCases:"Show {{mark}} test results",hideCases:"Hide {{mark}} test results"}}}},function(e){e.exports={status:{failed:"Fallido",broken:"Roto",passed:"Exitoso",skipped:"Ignorado",unknown:"Desconocido",flaky:"Inestable"},sorter:{order:"orden",name:"nombre",duration:"duración",status:"estado"},tab:{overview:{name:"Visión General"},categories:{name:"Categorías"},suites:{name:"Suites"},graph:{name:"Gráficos"},timeline:{name:"Línea de Tiempo",selected:"Selecionada {{count}} prueba ({{percent}}%) con duración arriba de {{duration}}",selected_plural:"Selecionadas {{count}} pruebas ({{percent}}%) con duración arriba de {{duration}}"}},widget:{summary:{aggregatedName:"Reporte agregado",launches:"ejecución",launches_plural:"ejecuciones",testResults:"caso de prueba",testResults_plural:"casos de prueba"},trend:{name:"Tendencia"},categoriesTrend:{name:"Tendencia de categorías"},durationTrend:{name:"Tendencia de duraciones"},retryTrend:{name:"Tendencia de reintentos"},executors:{name:"Ejecutores",unknown:"Desconocido",empty:"No hay información sobre los ejecutores de pruebas"},launches:{name:"Ejecutores",empty:"No hay información sobre ejecutores"},environment:{name:"Ambiente",empty:"No hay variables de ambiente definidas",showAll:"Mostrar todo"},suites:{name:"Suites"},categories:{name:"Categorías"}},chart:{duration:{name:"Duración",empty:"No hay nada para mostrar"},trend:{empty:"No hay nada para mostrar"},severity:{name:"Severidad"},status:{name:"Estado"}},testResult:{status:{empty:"Detalles de estado no existente",trace:"Mostrar trace"},overview:{name:"Visión general"},categories:{name:"Categorías"},description:{name:"Descripción"},duration:{name:"Duración"},history:{name:"Histórico",successRate:"Tasa de éxito"},owner:{name:"Propietario"},retries:{name:"Reintentos",empty:"No hay información disponible sobre los reintentos de la prueba"},parameters:{name:"Parámetros"},links:{name:"Links"},severity:{name:"Severidad"},execution:{name:"Ejecución",setup:"Pre-ejecución",teardown:"Post-ejecución",body:"Contenido de la prueba"},stats:{count:{steps:"{{count}} sub-paso",steps_plural:"{{count}} sub-pasos",attachments:"{{count}} adjunto",attachments_plural:"{{count}} adjuntos",parameters:"{{count}} parámetro",parameters_plural:"{{count}} parámetros"}}},controls:{collapse:"Colapsar",expand:"Expandir",fullscreen:"Pantalla completa",language:"Cambiar lenguaje",clipboard:"Copiar a portapapeles",clipboardSuccess:"Copiado exitosamente",clipboardError:"No es posible utilizar el portapapeles. Parece ser que esta funcionalidad no es soportada por tu navegador",backto:"Volver a"},errors:{missedAttachment:"Adjunto no encontrado",notFound:"No encontrado"},component:{tree:{filter:"Estado",groups:"Alternar información del grupo",download:"Descargar CSV",empty:"No hay ítems",time:{total:{name:"Total",tooltip:"Duración desde el primer test iniciado hasta el último finalizado"},max:{name:"Max",tooltip:"Prueba con mayor duración"},sum:{name:"Suma",tooltip:"Suma de todas las pruebas"}},filtered:{total:"{{count}} resultado",total_plural:"{{count}} resultados",shown:"{{count}} mostrados"}},widgetStatus:{showAll:"Mostrar todo",total:"total de ítems {{count}}",total_plural:"total de ítems {{count}}"},statusToggle:{showCases:"Mostrar resultados de pruebas con estado {{status}}",hideCases:"Ocultar resultados de pruebas con estado {{status}}"},markToggle:{showCases:"Mostrar {{mark}} resultados de prueba",hideCases:"Ocultar {{mark}} resultados de prueba"}}}},function(e){e.exports={status:{failed:"Échoué",broken:"Cassé",passed:"Passé",skipped:"Ignoré",unknown:"Inconnu",flaky:"Le test est instable",newFailed:"Le test a échoué (nouveau)."},marks:{flaky:"Instable",newFailed:"Échoué (nouveau)"},sorter:{order:"ordre",name:"nom",duration:"durée",status:"statut"},tab:{overview:{name:"Aperçu"},categories:{name:"Catégories"},suites:{name:"Suites"},graph:{name:"Graphiques"},timeline:{name:"Chronologie",selected:"{{count}} test sélectionné ({{percent}}%) avec une durée supérieure à {{duration}}",selected_plural:"{{count}} tests sélectionnés ({{percent}}%) avec une durée supérieure à {{duration}}"}},widget:{summary:{aggregatedName:"Rapport agrégé",launches:"lancement",launches_plural:"lancements",testResults:"cas de test",testResults_plural:"cas de test"},trend:{name:"Tendance"},categoriesTrend:{name:"Tendance des catégories"},durationTrend:{name:"Tendance de la durée"},retryTrend:{name:"Tendance des tentatives"},executors:{name:"Exécuteurs",unknown:"Inconnu",empty:"Aucune information à propos des exécuteurs des tests"},launches:{name:"Lancements",empty:"Aucune information à propos des lancements"},environment:{name:"Environnement",empty:"Aucune variable d'environnement",showAll:"Afficher tout"},suites:{name:"Suites"},categories:{name:"Catégories"}},chart:{duration:{name:"Durée",empty:"Il n'y a rien à montrer"},trend:{empty:"Il n'y a rien à montrer"},severity:{name:"Sévérité"},status:{name:"Statut"}},testResult:{status:{empty:"Détails du statut vide",trace:"Afficher la trace"},overview:{name:"Aperçu"},categories:{name:"Catégories"},description:{name:"Description"},duration:{name:"Durée"},history:{name:"Historique",successRate:"Taux de succès",statistic:"{{passed}} sur {{total}}",time:"{{date}} à {{time}}",empty:"Aucune information à propos de l'historique."},owner:{name:"Propriétaire"},retries:{name:"Tentatives",time:"{{date}} à {{time}}",empty:"Aucune information à propos des tentatives"},parameters:{name:"Paramètres"},links:{name:"Liens"},severity:{name:"Sévérité"},execution:{name:"Exécution",setup:"Pré exécution",teardown:"Post exécution",body:"Contenu du test",downloadAttachment:{tooltip:"Ouvrir la pièce jointe dans un nouvel onglet"}},stats:{count:{steps:"{{count}} sous-étape",steps_plural:"{{count}} sous-étapes",attachments:"{{count}} pièce jointe",attachments_plural:"{{count}} pièces jointes",parameters:"{{count}} paramètre",parameters_plural:"{{count}} paramètres"}}},controls:{collapse:"Plier",expand:"Déplier",fullscreen:"Plein écran",language:"Changer de langue",clipboard:"Copier dans le presse-papier",clipboardSuccess:"Copié avec succès",clipboardError:"Impossible de copier vers le presse-papier. Cette fonction ne semble pas être supportée par votre navigateur",backto:"Retour vers"},errors:{missedAttachment:"Pièce jointe non trouvée",notFound:"Non trouvé"},component:{tree:{filter:"Statut","filter-marks":"Marques",groups:"Basculer les informations des groupes",download:"Télécharger le fichier CSV",empty:"Il n'y a aucun article",time:{total:{name:"Total",tooltip:"Durée depuis le premier test démarré jusqu'au dernier test terminé"},max:{name:"Maximum",tooltip:"Durée la plus longue"},sum:{name:"Somme",tooltip:"Somme de toutes les durées"}},filtered:{total:"{{count}} résultat de test",total_plural:"{{count}} résultats de test",shown:"{{count}} montré"}},widgetStatus:{showAll:"Montrer tout",total:"{{count}} article au total",total_plural:"{{count}} articles au total"},statusToggle:{showCases:"Montrer les résultats de test avec le statut {{status}}",hideCases:"Cacher les résultats de test avec le statut {{status}}"},markToggle:{showCases:"Montrer les résultats de test marqués {{mark}}",hideCases:"Cacher les résultats de test marqués {{mark}}"}}}},function(e){e.exports={status:{failed:"נכשל",broken:"שבור",passed:"עבר",skipped:"דולג",unknown:"לא ידוע",flaky:"לא יציב"},sorter:{order:"סדר",name:"שם מקרה הבדיקה",duration:"זמן ריצה",status:"סטטוס"},tab:{overview:{name:"סקירה כללית"},categories:{name:"קטגוריות"},suites:{name:"קבוצות מקרי בדיקה"},graph:{name:"גרפים"},timeline:{name:"ציר זמן",selected:"נבחר מקרה בדיקה {{count}} ({{percent}}%) עם זמן ריצה מעל {{duration}}",selected_plural:"נבחרו {{count}} מקרי בדיקה ({{percent}}%) עם זמן ריצה מעל {{duration}}"}},widget:{summary:{aggregatedName:"דוח",launches:"חבילת הרצה",launches_plural:"חבילות הרצה",testResults:"תוצאת בדיקה",testResults_plural:"תוצאות בדיקה"},trend:{name:"מגמת ריצות"},categoriesTrend:{name:"מגמת ריצה על קטגוריות"},durationTrend:{name:"מגמת זמן ריצה"},retryTrend:{name:"מגמת חזרות על ריצה"},executors:{name:"כלי הרצה",unknown:"לא ידוע",empty:"לא קיים מידע על כלי הרצת מקרי הבדיקה"},launches:{name:"חבילות הרצה",empty:"לא קיים מידע על חבילות הרצה"},environment:{name:"משתני סביבה",empty:"לא קיימים משתני סביבה",showAll:"הצג את כל משתני הסביבה"},suites:{name:"קבוצות מקרי בדיקה"},categories:{name:"קטגוריות"}},chart:{duration:{name:"זמן ריצה",empty:"אין דבר להציג"},trend:{empty:"אין דבר להציג"},severity:{name:"חומרה"},status:{name:"סטטוס"}},testResult:{status:{empty:"לא קיימים פרטים על מצב מקרה הבדיקה",trace:"הצג מידע נוסף"},overview:{name:"סקירה כללית"},categories:{name:"קטגוריות"},description:{name:"תיאור"},duration:{name:"זמן ריצה"},history:{name:"היסטוריה",successRate:"שיעור הצלחה"},owner:{name:"האחראי למקרה הבדיקה"},retries:{name:"ניסיונות ריצה חוזרים",empty:"אין מידע זמין על ניסיונות ריצה חוזרים"},parameters:{name:"פרמטרים"},links:{name:"קישורים"},severity:{name:"חומרה"},execution:{name:"הרצה",setup:"הכנת הריצה",teardown:"סיום הריצה",body:"תוכן מקרה הבדיקה"},stats:{count:{steps:"צעד משנה {{count}}",steps_plural:"{{count}} צעדי משנה",attachments:"תוכן מצורף {{count}}",attachments_plural:"{{count}} תכנים מצורפים",parameters:"פרמטר {{count}}",parameters_plural:"{{count}} פרמטרים"}}},controls:{collapse:"כווץ",expand:"הרחב",fullscreen:"מסך מלא",language:"שנה שפה",clipboard:"העתק אל מגש המערכת",clipboardSuccess:"הועתק בהצלחה",clipboardError:"לא ניתן להעתיק את הערך אל מגש המערכת. נראה שהתכונה הזאת לא נתמכת על ידי הדפדפן שלך",backto:"חזור ל"},errors:{missedAttachment:"התוכן המצורף לא נמצא",notFound:"לא נמצא"},component:{tree:{filter:"מיין מקרי בדיקה על ידי סטטוס",groups:"הצג/הסתר את המידע על הקבוצות",download:"הורד קובץ CSV",empty:"לא קיימים פריטים",time:{total:{name:"סך הכול",tooltip:"משך זמן הריצה מתחילת ריצת מקרה הבדיקה הראשון עד סיום ריצת מקרה הבדיקה האחרון"},max:{name:"מקסימלי",tooltip:"זמן הריצה הכי ארוך"},sum:{name:"סכום",tooltip:"סכום כל זמני תוצאות הריצה"}},filtered:{total:"תוצאת ריצה {{count}}",total_plural:"{{count}} תוצאות ריצה",shown:"מופיעים {{count}}"}},widgetStatus:{showAll:"הצג את כל הפריטים",total:"סך הכול פריט {{count}}",total_plural:"סך הכול {{count}} פריטים"},statusToggle:{showCases:"הצג תוצאות ריצה עם הסטטוס {{status}}",hideCases:"הסתר תוצאות ריצה עם הסטטוס {{status}}"}}}},function(e){e.exports={status:{failed:"失敗",broken:"故障",passed:"成功",skipped:"スキップ",unknown:"不明",flaky:"テストが不安定です",newFailed:"新しく失敗したテストです"},marks:{flaky:"不安定",newFailed:"新しい失敗"},sorter:{order:"順序",name:"名前",duration:"期間",status:"ステータス"},tab:{overview:{name:"概要"},categories:{name:"カテゴリー"},suites:{name:"スイート"},graph:{name:"グラフ"},timeline:{name:"タイムライン",selected:"{{duration}} の期間で選択された {{count}} 件のテスト ({{percent}}%)",selected_plural:"{{duration}} の期間で選択された {{count}} 件のテスト ({{percent}}%)"}},widget:{summary:{aggregatedName:"集計レポート",launches:"開始",launches_plural:"開始",testResults:"テストケース",testResults_plural:"テストケース"},trend:{name:"傾向"},categoriesTrend:{name:"カテゴリーの傾向"},durationTrend:{name:"期間の傾向"},retryTrend:{name:"再実行の傾向"},executors:{name:"実行者",unknown:"不明",empty:"テスト実行者に関する情報はありません"},launches:{name:"開始",empty:"開始に関する情報はありません"},environment:{name:"環境",empty:"環境変数がありません",showAll:"全て表示する"},suites:{name:"スイート"},categories:{name:"カテゴリー"}},chart:{duration:{name:"期間",empty:"何も表示するものがありません"},trend:{empty:"何も表示するものがありません"},severity:{name:"重大度"},status:{name:"ステータス"}},testResult:{status:{empty:"ステータスに関する詳細はありません",trace:"トレースを表示"},overview:{name:"概要"},categories:{name:"カテゴリー"},description:{name:"説明"},duration:{name:"期間"},history:{name:"履歴",successRate:"成功率"},owner:{name:"オーナー"},retries:{name:"再実行",empty:"テストの再実行に関する情報がありません"},parameters:{name:"パラメータ"},links:{name:"リンク"},severity:{name:"重大度"},execution:{name:"実行",setup:"セットアップ作業",teardown:"仕上げ作業",body:"テスト本体"},stats:{count:{steps:"{{count}} サブステップ",steps_plural:"{{count}} サブステップ",attachments:"{{count}} 添付ファイル",attachments_plural:"{{count}} 添付ファイル",parameters:"{{count}} パラメータ",parameters_plural:"{{count}} パラメータ"}}},controls:{collapse:"折り畳む",expand:"拡大",fullscreen:"フルスクリーン",language:"言語を変更",clipboard:"クリップボードにコピー",clipboardSuccess:"コピーされました",clipboardError:"クリップボードにコピーできませんでした。ブラウザがサポートしていないようです。",backto:"戻る"},errors:{missedAttachment:"添付ファイルは見つかりませんでした",notFound:"見つかりませんでした"},component:{tree:{filter:"ステータス","filter-marks":"マーク",groups:"グループ情報を表示・非表示",download:"CSVをダウンロード",empty:"何もありません",time:{total:{name:"全体",tooltip:"最初のテストが始まってから最後のテストが終わるまでの期間"},max:{name:"最長",tooltip:"一番長い実行期間"},sum:{name:"合計",tooltip:"全てのテスト実行期間の合計"}},filtered:{total:"{{count}} 件のテスト結果",total_plural:"{{count}} 件のテスト結果",shown:"{{count}} 件を表示"}},widgetStatus:{showAll:"全て表示",total:"計 {{count}} 件",total_plural:"計 {{count}} 件"},statusToggle:{showCases:"ステータスが {{status}} のテスト結果を表示",hideCases:"ステータスが {{status}} のテスト結果を隠す"},markToggle:{showCases:"{{mark}} 件のテスト結果を表示",hideCases:"{{mark}} 件のテスト結果を隠す"}}}},function(e){e.exports={status:{failed:"실패",broken:"고장",passed:"통과",skipped:"건너뜀",unknown:"알수없음",flaky:"불안정한 테스트",newFailed:"새로 실패한 테스트"},marks:{flaky:"불안정함",newFailed:"새로 실패함"},sorter:{order:"순서",name:"이름",duration:"소요시간",status:"상태"},tab:{overview:{name:"요약"},categories:{name:"카테고리"},suites:{name:"스위트"},graph:{name:"그래프"},timeline:{name:"타임라인",selected:"{{duration}} 이상의 시간이 소요된 {{count}} 개 테스트 ({{percent}}%)",selected_plural:"{{duration}} 이상의 시간이 소요된 {{count}} 개 테스트 ({{percent}}%)"}},widget:{summary:{aggregatedName:"전체 리포트",launches:"시작",launches_plural:"시작",testResults:"테스트 케이스",testResults_plural:"테스트 케이스"},trend:{name:"트렌드"},categoriesTrend:{name:"카테고리 트렌드"},durationTrend:{name:"소요시간 트렌드"},retryTrend:{name:"재시도 트렌드"},executors:{name:"실행 주체",unknown:"알 수 없음",empty:"실행 정보가 없습니다."},launches:{name:"시작",empty:"시작정보가 없습니다."},environment:{name:"환경",empty:"환경변수가 없습니다.",showAll:"전체 보기"},suites:{name:"스위트"},categories:{name:"카테고리"}},chart:{duration:{name:"시간",empty:"정보가 없습니다."},trend:{empty:"정보가 없습니다."},severity:{name:"중요도"},status:{name:"상태"}},testResult:{status:{empty:"상태 정보가 없습니다.",trace:"추적 정보 보기"},overview:{name:"요약"},categories:{name:"카테고리"},description:{name:"설명"},duration:{name:"시간"},history:{name:"히스토리",successRate:"성공률"},owner:{name:"소유자"},retries:{name:"재시도",empty:"테스트 재시도에 대한 정보가 없습니다."},parameters:{name:"패러미터"},links:{name:"링크"},severity:{name:"중요도"},execution:{name:"실행",setup:"준비 작업",teardown:"종료 작업",body:"테스트 내용"},stats:{count:{steps:"하위 스텝 {{count}} 개",steps_plural:"하위 스텝 {{count}} 개",attachments:"첨부파일 {{count}} 개",attachments_plural:"첨부파일 {{count}} 개",parameters:"패러미터 {{count}} 개",parameters_plural:"패러미터 {{count}} 개"}}},controls:{collapse:"접기",expand:"펼치기",fullscreen:"전체화면",language:"언어 변경",clipboard:"클립보드에 복사",clipboardSuccess:"성공적으로 복사되었습니다.",clipboardError:"클립보드에 복사가 되지 않습니다. 브러우저에 지원되지 않는 기능입니다.",backto:"돌아가기"},errors:{missedAttachment:"첨부파일을 찾을 수 없습니다.",notFound:"찾을 수 없음"},component:{tree:{filter:"상태","filter-marks":"마크",groups:"그룹 정보 표시",download:"CSV 다운로드",empty:"내용이 없습니다.",time:{total:{name:"전체",tooltip:"첫번째 테스트부터 마지막 테스트까지의 소요시간"},max:{name:"최대",tooltip:"가장 긴 테스트 소요시간"},sum:{name:"합계",tooltip:"테스트 소요시간 총 합"}},filtered:{total:"{{count}} 개의 테스트 결과",total_plural:"{{count}} 개의 테스트 결과",shown:"{{count}} 개 표시"}},widgetStatus:{showAll:"전체보기",total:"총 {{count}} 개",total_plural:"총 {{count}} 개"},statusToggle:{showCases:"{{status}} 상태의 테스트 결과 보기",hideCases:"{{status}} 상태의 테스트 결과 감추기"},markToggle:{showCases:"{{mark}} 보기",hideCases:"{{mark}} 감추기"}}}},function(e){e.exports={status:{failed:"Gefaald",broken:"Defect",passed:"Succes",skipped:"Overgeslagen",unknown:"Onbekend",flaky:"Test is instabiel",newFailed:"Test is nieuw gefaald"},marks:{flaky:"Instabiel",newFailed:"Nieuw gefaald"},sorter:{order:"volgorde",name:"naam",duration:"duur",status:"status"},tab:{overview:{name:"Overzicht"},categories:{name:"Categorieën"},suites:{name:"Suites"},graph:{name:"Grafieken"},timeline:{name:"Tijdlijn",selected:"{{count}} test ({{percent}}%) geselecteerd met een duur van meer dan {{duration}}",selected_plural:"{{count}} tests ({{percent}}%) geselecteerd met een duur van meer dan {{duration}}"}},widget:{summary:{aggregatedName:"Geaggregeerd rapport",launches:"start",launches_plural:"starts",testResults:"testgeval",testResults_plural:"testgevallen"},trend:{name:"Trend"},categoriesTrend:{name:"Trend categorieën"},durationTrend:{name:"Trend duur"},retryTrend:{name:"Trend nieuwe pogingen"},executors:{name:"Uitvoerders",unknown:"Onbekend",empty:"Er is geen informatie over testuitvoerders"},launches:{name:"Start",empty:"Er is geen informatie over starts"},environment:{name:"Omgeving",empty:"Er zijn geen omgevingsvariabelen",showAll:"Toon alles"},suites:{name:"Suites"},categories:{name:"Categorieën"}},chart:{duration:{name:"Duur",empty:"Er is niets te tonen"},trend:{empty:"Er is niets te tonen"},severity:{name:"Ernst"},status:{name:"Status"}},testResult:{status:{empty:"Lege statusdetails",trace:"Toon trace"},overview:{name:"Overzicht"},categories:{name:"Categorieën"},description:{name:"Omschrijving"},duration:{name:"Duur"},history:{name:"Geschiedenis",successRate:"Slagingsratio",statistic:"{{passed}} van {{total}}",time:"{{date}} om {{time}}",empty:"Geen historische gegevens beschikbaar."},owner:{name:"Eigenaar"},retries:{name:"Pogingen",time:"{{date}} om {{time}}",empty:"Geen informatie beschikbaar."},parameters:{name:"Parameters"},links:{name:"Links"},severity:{name:"Ernst"},execution:{name:"Uitvoering",setup:"Set up",teardown:"Tear down",body:"Test body",downloadAttachment:{tooltip:"Bijlage in een nieuw tabblad openen"}},stats:{count:{steps:"{{count}} substap",steps_plural:"{{count}} substappen",attachments:"{{count}} bijlage",attachments_plural:"{{count}} bijlagen",parameters:"{{count}} parameter",parameters_plural:"{{count}} parameters"}}},controls:{collapse:"Inklappen",expand:"Uitklappen",fullscreen:"Volledig scherm",language:"Taal wijzigen",clipboard:"Kopieer naar klembord",clipboardSuccess:"Gekopieerd naar klembord",clipboardError:"Kan niet kopiëren naar klembord. De browser lijkt deze functionaliteit niet te ondersteunen.",backto:"Terug naar"},errors:{missedAttachment:"Bijlage niet gevonden",notFound:"Niet gevonden"},component:{tree:{filter:"Status","filter-marks":"Markeringen",groups:"Groepsinformatie tonen/verbergen",download:"Download CSV",empty:"Er zijn geen items",time:{total:{name:"Totaal",tooltip:"Doorloop van eerste test gestart tot laatste test beëindigd"},max:{name:"Langste",tooltip:"Duur van de langste test"},sum:{name:"Som",tooltip:"Opgetelde duur van alle tests"}},filtered:{total:"{{count}} testresultaat",total_plural:"{{count}} testresultaten",shown:"{{count}} getoond"}},widgetStatus:{showAll:"Toon alle",total:"{{count}} item in totaal",total_plural:"{{count}} items in totaal"},statusToggle:{showCases:"Toon testresultaten met status ‘{{status}}’",hideCases:"Verberg testresultaten met status ‘{{status}}’"},markToggle:{showCases:"Toon testresultaten gemarkeerd als ‘{{mark}}’",hideCases:"Verberg testresultaten gemarkeerd als ‘{{mark}}’"}}}},function(e){e.exports={status:{failed:"Nieudany",broken:"Uszkodzony",passed:"Pomyślny",skipped:"Pominięty",unknown:"Nieznany",flaky:"Niestabilny"},sorter:{order:"kolejność",name:"nazwa",duration:"czas trwania",status:"status"},tab:{overview:{name:"Podsumowanie"},categories:{name:"Kategorie"},suites:{name:"Zestawy"},graph:{name:"Wykresy"},timeline:{name:"Oś czasowa",selected_0:"{{count}} wybrany test({{percent}}%) z czasem trwania powyżej {{duration}}",selected_1:"{{count}} wybrane testy ({{percent}}%) z czasem trwania powyżej {{duration}}",selected_2:"{{count}} wybranych testów ({{percent}}%) z czasem trwania powyżej {{duration}}"}},widget:{summary:{aggregatedName:"Raport zbiorczy",launches_0:"uruchomienie",launches_1:"uruchomienia",launches_3:"uruchomień",testResults_0:"przypadek testowy",testResults_1:"przypadki testowe",testResults_3:"przypadków testowych"},trend:{name:"Trend"},categoriesTrend:{name:"Trend kategorii"},durationTrend:{name:"Trend czasu trwania"},retryTrend:{name:"Tend powtórzeń"},executors:{name:"Wykonawcy",unknown:"Nieznany",empty:"Brak informacji o wykonawcach testów"},launches:{name:"Uruchomienia",empty:"Brak informacji o uruchomieniach"},environment:{name:"Środowisko",empty:"Brak zmiennych środowiskowych",showAll:"Pokaż wszystkie"},suites:{name:"Zestawy"},categories:{name:"Kategorie"}},chart:{duration:{name:"Czas trwania",empty:"Brak czegokolwiek do pokazania"},trend:{empty:"Brak czegokolwiek do pokazania"},severity:{name:"Ważność"},status:{name:"Status"}},testResult:{status:{empty:"Puste szczegóły statusu",trace:"Pokaż ślady"},overview:{name:"Podsumowanie"},categories:{name:"Kategorie"},description:{name:"Opis"},duration:{name:"Czas trwania"},history:{name:"Historia",successRate:"Współczynnik powodzenia"},owner:{name:"Właściciel"},retries:{name:"Powtórzenia",empty:"Brak dostępnych informacji o powtórzeniach testów"},parameters:{name:"Parametery"},links:{name:"Odnośniki"},severity:{name:"Ważność"},execution:{name:"Wykonanie",setup:"Przygotowanie",teardown:"Zakończenie",body:"Ciało testu"},stats:{count:{steps:"{{count}} sub-step",steps_plural:"{{count}} sub-steps",attachments_0:"{{count}} załącznik",attachments_1:"{{count}} załączniki",attachments_2:"{{count}} załączników",parameters_0:"{{count}} parametr",parameters_1:"{{count}} parametry",parameters_2:"{{count}} parametrów"}}},controls:{collapse:"Zwiń",expand:"Rozwiń",fullscreen:"Pełny ekran",language:"Zmień język",clipboard:"Zapisz do schowka",clipboardSuccess:"Skopiowano pomyślnie",clipboardError:"Nie można skopiować do schowka. Najprawdopodobniej twoja przeglądarka nie obsługuje tej funkcji",backto:"Powrót do"},errors:{missedAttachment:"Nie znaleziono załącznika",notFound:"Nie znaleziono"},component:{tree:{filter:"Filtrowanie według statusu",groups:"Przełącz informacje o grupach",download:"Pobierz CSV",empty:"Brak elementów",time:{total:{name:"Całkowity",tooltip:"Czas od uruchomienia pierwszego testu do zakończenia ostatniego testu"},max:{name:"Najdłuższy",tooltip:"Najdłuższy czas trwania"},sum:{name:"Suma",tooltip:"Suma czasów trwania wszystkich testów"}},filtered:{total_0:"{{count}} rezultat testu",total_1:"{{count}} rezultaty testów",total_2:"{{count}} rezultatów testów",shown_0:"{{count}} pokazany",shown_1:"{{count}} pokazane",shown_2:"{{count}} pokazanych"}},widgetStatus:{showAll:"Pokaż wszystko",total_0:"Razem {{count}} pozycja",total_1:"Razem {{count}} pozycje",total_2:"Razem {{count}} pozycji"},statusToggle:{showCases:"Pokaż rezultaty testów ze statusem {{status}}",hideCases:"Ukryj rezultaty testów ze statusem {{status}}"}}}},function(e){e.exports={status:{failed:"Не прошло",broken:"Сломалось",passed:"Прошло",skipped:"Пропущено",unknown:"Неизвестно",flaky:"Нестабильный тест",newFailed:"Новый упавший тест"},marks:{flaky:"Нестабильный",newFailed:"Новый упавший"},sorter:{order:"порядок",name:"имя",duration:"длительность",status:"статус"},tab:{overview:{name:"Обзор"},categories:{name:"Категории"},suites:{name:"Тест сюиты"},graph:{name:"Графики"},timeline:{name:"Временная шкала",selected_0:"Выбран {{count}} тест ({{percent}}%) с длительностью выше {{duration}}",selected_1:"Выбрано {{count}} теста ({{percent}}%) с длительностью выше {{duration}}",selected_2:"Выбрано {{count}} тестов ({{percent}}%) с длительностью выше {{duration}}"}},widget:{summary:{aggregatedName:"Агрегированый отчет",launches_0:"запуск тестов",launches_1:"запуска тестов",launches_2:"запусков тестов",testResults_0:"тестовый сценарий",testResults_1:"тестовых сценария",testResults_2:"тестовых сценариев"},trend:{name:"Тренд"},executors:{name:"Система выполнения тестов",unknown:"Неизвестно",empty:"Данные о системе выполнения тестов отсутствуют"},launches:{name:"Запуски тестов",empty:"Отсутствует информация про запуски"},environment:{name:"Окружение",empty:"Отсутствует информация про окружение",showAll:"Показать все"},suites:{name:"Тест сюиты"},categories:{name:"Категории"}},chart:{duration:{name:"Длительность тестов",empty:"Нет данных"},trend:{empty:"Нет данных"},severity:{name:"Важность тестов"},status:{name:"Статусы тестов"}},testResult:{status:{empty:"Дополнительная информация о статусе отсутствует",trace:"Показать трейс"},overview:{name:"Обзор"},categories:{name:"Категории"},description:{name:"Описание"},duration:{name:"Длительность"},history:{name:"История",successRate:"Success rate"},owner:{name:"Ответственный"},retries:{name:"Перезапуски",empty:"Нет информации о перезапусках теста"},parameters:{name:"Параметры"},links:{name:"Ссылки"},severity:{name:"Важность"},execution:{name:"Выполнение",setup:"Подготовка",teardown:"Завершение",body:"Тело теста"},stats:{count:{steps_0:"{{count}} вложенный шаг",steps_1:"{{count}} вложенных шага",steps_2:"{{count}} вложенных шагов",attachments_0:"{{count}} вложение",attachments_1:"{{count}} вложения",attachments_2:"{{count}} вложений",parameters_0:"{{count}} параметр",parameters_1:"{{count}} параметра",parameters_2:"{{count}} параметров"}}},controls:{collapse:"Свернуть",expand:"Развернуть",fullscreen:"На весь экран",language:"Сменить язык",clipboard:"Скопировать в буфер обмена",clipboardSuccess:"Значение успешно скопировано",clipboardError:"Ошибка. Скорее всего ваш браузер не поддерживает данную функциональность",backto:"Вернуться на"},errors:{missedAttachment:"Вложение не найдено",notFound:"Не найдено"},component:{tree:{filter:"Статусы","filter-marks":"Метки",groups:"Показывать информацию о группах",empty:"Нет данных",unknown:"Неизвестная группа",time:{total:{name:"Итого",tooltip:"Время с начала первого теста до конца последнего"},max:{name:"Самый долгий",tooltip:"Длительность самого долгого теста в группе"},sum:{name:"Суммарно",tooltip:"Сумма длительностей всех тестов в группе"}},filtered:{total_0:"всего {{count}} тест",total_1:"всего {{count}} теста",total_2:"всего {{count}} тестов",shown_0:"{{count}} показан",shown_1:"{{count}} показано",shown_2:"{{count}} показано"}},widgetStatus:{showAll:"Показать все",total_0:"Всего {{count}} элемент",total_1:"Всего {{count}} элемента",total_2:"Всего {{count}} элементов"},statusToggle:{showCases:'Показать результаты со статусом "{{status}}"',hideCases:'Скрыть результаты со статусом "{{status}}"'},markToggle:{showCases:"Показать {{mark}} результаты",hideCases:"Скрыть {{mark}} результаты"}}}},function(e){e.exports={status:{failed:"失败",broken:"故障",passed:"通过",skipped:"跳过",unknown:"未知",flaky:"不稳定"},sorter:{name:"名称",duration:"用时",status:"状态"},tab:{overview:{name:"总览"},categories:{name:"类别"},suites:{name:"测试套"},graph:{name:"图表"},timeline:{name:"时间刻度",selected:"{{count}}个测试用例({{percent}}%)执行时间超过{{duration}}",selected_plural:"{{count}}个测试用例({{percent}}%)执行时间超过{{duration}}"}},widget:{summary:{aggregatedName:"汇总报告",launches:"启动",launches_plural:"启动",testResults:"测试用例",testResults_plural:"测试用例"},trend:{name:"趋势"},executors:{name:"运行器",unknown:"未知",empty:"没有运行器的信息"},launches:{name:"启动",empty:"没有用例启动执行的信息"},environment:{name:"环境",empty:"没有环境变量",showAll:"显示所有"},suites:{name:"测试套"},categories:{name:"类别"}},chart:{duration:{name:"耗时",empty:"没有信息"},trend:{empty:"没有信息"},severity:{name:"优先级"},status:{name:"状态"}},testResult:{status:{empty:"状态详情为空",trace:"展示堆栈"},overview:{name:"总览"},categories:{name:"类别"},description:{name:"描述"},duration:{name:"耗时"},history:{name:"历史",successRate:"成功率"},owner:{name:"作者"},retries:{name:"重试次数"},parameters:{name:"参数"},links:{name:"链接"},severity:{name:"优先级"},execution:{name:"执行",setup:"前置",teardown:"后置",body:"测试步骤"},stats:{count:{steps:"{{count}}个步骤",steps_plural:"{{count}}个步骤",attachments:"{{count}}个附件",attachments_plural:"{{count}}个附件",parameters:"{{count}}个参数",parameters_plural:"{{count}}个参数"}}},controls:{collapse:"折叠",expand:"展开",fullscreen:"全屏",language:"切换地区语言",clipboard:"复制到剪贴板",backto:"返回"},errors:{missedAttachment:"没有找到附件",notFound:"没有找到"},component:{tree:{filter:"通过用例状态过滤",groups:"开关测试套信息",empty:"没有记录",time:{total:{name:"整体",tooltip:"从首个用例的开始时间到最后一个用例的结束时间"},max:{name:"最长",tooltip:"好使最长的用例"},sum:{name:"合并",tooltip:"所有用例耗时之和"}},filtered:{total:"共{{count}}个用例",total_plural:"共{{count}}个用例",shown:"显示{{count}}个"}},widgetStatus:{showAll:"显示所有",total:"总共{{count}}项",total_plural:"总共{{count}}项"},statusToggle:{showCases:"显示{{status}}状态的用例",hideCases:"隐藏{{status}}状态的用例"}}}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o;return e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.stats.count.parameters",{name:"t",hash:{count:null!=(o=null!=t?t.parameters:t)?o.length:o},data:i}))+'<span class="step-stats__info_separator">, </span>'},3:function(e,t,r,a,i){return e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.stats.count.steps",{name:"t",hash:{count:null!=t?t.stepsCount:t},data:i}))+'<span class="step-stats__info_separator">, </span>'},5:function(e,t,r,a,i){return e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.stats.count.attachments",{name:"t",hash:{count:null!=t?t.attachmentsCount:t},data:i}))+'<span class="step-stats__info_separator">, </span>'},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<span class="step-stats__info">\n <span>'+(null!=(o=r.if.call(s,null!=(o=null!=t?t.parameters:t)?o.length:o,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(s,null!=t?t.stepsCount:t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(s,null!=t?t.attachmentsCount:t,{name:"if",hash:{},fn:e.program(5,i,0),inverse:e.noop,data:i}))?o:"")+'</span>\n <span class="step-stats__info_time" data-tooltip="'+l(__default(n(35)).call(s,null!=(o=null!=t?t.time:t)?o.start:o,{name:"date",hash:{},data:i}))+" "+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.start:o,!0,{name:"time",hash:{},data:i}))+" – "+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.stop:o,!0,{name:"time",hash:{},data:i}))+'">'+l(__default(n(20)).call(s,null!=(o=null!=t?t.time:t)?o.duration:o,{name:"duration",hash:{},data:i}))+"</span>\n</span>\n"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i;return' <div class="parameters-table">\n'+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.parameters:t,{name:"each",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a}))?i:"")+" </div>\n"},2:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression,l=e.lambda;return' <div class="'+s(__default(n(7)).call(o,"parameters-table","row",{name:"b",hash:{},data:i}))+'">\n <div class="'+s(__default(n(7)).call(o,"parameters-table","cell",{name:"b",hash:{name:!0},data:i}))+' line-ellipsis">'+s(l(null!=t?t.name:t,t))+'</div>\n <div class="'+s(__default(n(7)).call(o,"parameters-table","cell",{name:"b",hash:{value:!0},data:i}))+' line-ellipsis">'+s(l(null!=t?t.value:t,t))+"</div>\n </div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.parameters:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){"use strict";n.r(t);var r=n(11);t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"unknown";return new r.SafeString('<span class="fa fa-chevron-right fa-fw text_status_'.concat(e,'"></span>'))}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l,u=e.escapeExpression,c=null!=t?t:e.nullContext||{};return' <div class="node">\n <div class="node__title long-line" data-uid="'+u(e.lambda(null!=t?t.uid:t,t))+'">\n <span class="node__arrow block__arrow">'+u(__default(n(49)).call(c,{name:"angle",hash:{},data:i}))+"</span>\n"+(null!=(l=r.if.call(c,null!=t?t.name:t,{name:"if",hash:{},fn:e.program(2,i,0,o,s),inverse:e.program(4,i,0,o,s),data:i}))?l:"")+' <div class="tree__strut"> </div>\n <span class="node__stats">\n '+u(__default(n(183)).call(c,null!=t?t.statistic:t,{name:"statistic-bar",hash:{},data:i}))+'\n </span>\n </div>\n\n <div class="node__children">\n'+(null!=(l=r.if.call(c,null!=t?t.showGroupInfo:t,{name:"if",hash:{},fn:e.program(6,i,0,o,s),inverse:e.noop,data:i}))?l:"")+(null!=(l=r.each.call(c,null!=t?t.children:t,{name:"each",hash:{},fn:e.program(8,i,0,o,s),inverse:e.noop,data:i}))?l:"")+" </div>\n </div>\n"},2:function(e,t,n,r,a){return' <div class="node__name">\n '+e.escapeExpression(e.lambda(null!=t?t.name:t,t))+"\n </div>\n"},4:function(e,t,r,a,i){return" "+e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"component.tree.unknown",{name:"t",hash:{},data:i}))+"\n"},6:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="node">\n <div class="node__info long-line" data-uid="'+e.escapeExpression(e.lambda(null!=t?t.uid:t,t))+'">\n <span class="fa fa-clock-o"></span>\n'+(null!=(o=e.invokePartial(n(52),t,{name:"tree-time",hash:{tooltip:__default(n(9)).call(s,"component.tree.time.total.tooltip",{name:"t",hash:{},data:i}),name:__default(n(9)).call(s,"component.tree.time.total.name",{name:"t",hash:{},data:i}),value:null!=(o=null!=t?t.time:t)?o.duration:o},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?o:"")+(null!=(o=e.invokePartial(n(52),t,{name:"tree-time",hash:{tooltip:__default(n(9)).call(s,"component.tree.time.max.tooltip",{name:"t",hash:{},data:i}),name:__default(n(9)).call(s,"component.tree.time.max.name",{name:"t",hash:{},data:i}),value:null!=(o=null!=t?t.time:t)?o.maxDuration:o},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?o:"")+(null!=(o=e.invokePartial(n(52),t,{name:"tree-time",hash:{tooltip:__default(n(9)).call(s,"component.tree.time.sum.tooltip",{name:"t",hash:{},data:i}),name:__default(n(9)).call(s,"component.tree.time.sum.name",{name:"t",hash:{},data:i}),value:null!=(o=null!=t?t.time:t)?o.sumDuration:o},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?o:"")+" </div>\n </div>\n"},8:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(71),t,{name:"tree-group",hash:{testResultTab:null!=s[1]?s[1].testResultTab:s[1],tabName:null!=s[1]?s[1].tabName:s[1],showGroupInfo:null!=s[1]?s[1].showGroupInfo:s[1],baseUrl:null!=s[1]?s[1].baseUrl:s[1]},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:""},10:function(e,t,r,a,i){var o;return null!=(o=e.invokePartial(n(185),t,{name:"tree-leaf",hash:{testResultTab:null!=t?t.testResultTab:t,baseUrl:null!=t?t.baseUrl:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?o:""},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a,i,o){var s;return null!=(s=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.children:t,{name:"if",hash:{},fn:e.program(1,a,0,i,o),inverse:e.program(10,a,0,i,o),data:a}))?s:""},usePartial:!0,useData:!0,useDepths:!0})},function(e,t,n){"use strict";n.r(t);var r=n(11),a=/^(\w)+:\/\/.*/;t.default=function(e){return a.test(e)?new r.SafeString('<a href="'.concat(e,'" class="link" target="_blank">').concat(e,"</a>")):e}},function(e,t,n){"use strict";e.exports=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";var n=getSelection(),r=!1;n.rangeCount>0&&(r=n.getRangeAt(0)),document.body.appendChild(t),t.select();var a=!1;try{a=document.execCommand("copy")}catch(e){}return document.body.removeChild(t),r&&(n.removeAllRanges(),n.addRange(r)),a}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return'<div class="'+s(__default(n(7)).call(o,"app","nav",{name:"b",hash:{},data:i}))+'"></div>\n<div class="'+s(__default(n(7)).call(o,"app","content",{name:"b",hash:{},data:i}))+'"></div>\n'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l=null!=t?t:e.nullContext||{},u=e.escapeExpression,c=e.lambda;return' <li class="'+u(__default(n(7)).call(l,"language-select","item",{name:"b",hash:{active:__default(n(25)).call(l,null!=t?t.id:t,null!=s[1]?s[1].currentLang:s[1],{name:"eq",hash:{},data:i})},data:i}))+'" data-id="'+u(c(null!=t?t.id:t,t))+'">'+u(c(null!=t?t.title:t,t))+"</li>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{};return'<ul class="'+e.escapeExpression(__default(n(7)).call(u,"language-select","menu",{name:"b",hash:{},data:i}))+'">\n'+(null!=(l=r.each.call(u,null!=t?t.languages:t,{name:"each",hash:{},fn:e.program(1,i,0,o,s),inverse:e.noop,data:i}))?l:"")+"</ul>\n"},useData:!0,useDepths:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression,l=e.lambda;return' <li class="'+s(__default(n(7)).call(o,"side-nav","item",{name:"b",hash:{},data:i}))+'" data-tooltip="'+s(__default(n(9)).call(o,null!=t?t.title:t,{name:"t",hash:{},data:i}))+'">\n <a href="#'+s(l(null!=t?t.tabName:t,t))+'" class="'+s(__default(n(7)).call(o,"side-nav","link",{name:"b",hash:{active:null!=t?t.active:t},data:i}))+'">\n <span class="'+s(__default(n(7)).call(o,"side-nav","icon",{name:"b",hash:{},data:i}))+" "+s(l(null!=t?t.icon:t,t))+'"></span>\n <div class="'+s(__default(n(7)).call(o,"side-nav","text",{name:"b",hash:{},data:i}))+'">'+s(__default(n(9)).call(o,null!=t?t.title:t,{name:"t",hash:{},data:i}))+"</div>\n </a>\n </li>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"side-nav","head",{name:"b",hash:{},data:i}))+'">\n <a href="." class="'+l(__default(n(7)).call(s,"side-nav","brand",{name:"b",hash:{},data:i}))+'">\n <span class="'+l(__default(n(7)).call(s,"side-nav","brand-text",{name:"b",hash:{},data:i}))+'">Allure</span>\n </a>\n</div>\n<ul class="'+l(__default(n(7)).call(s,"side-nav","menu",{name:"b",hash:{},data:i}))+'">\n'+(null!=(o=r.each.call(s,null!=t?t.tabs:t,{name:"each",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+'</ul>\n<div class="'+l(__default(n(7)).call(s,"side-nav","strut",{name:"b",hash:{},data:i}))+'"></div>\n<div class="'+l(__default(n(7)).call(s,"side-nav","footer",{name:"b",hash:{},data:i}))+'">\n <div class="'+l(__default(n(7)).call(s,"side-nav","item",{name:"b",hash:{},data:i}))+'" data-tooltip="'+l(__default(n(9)).call(s,"controls.language",{name:"t",hash:{},data:i}))+'">\n <button class="'+l(__default(n(7)).call(s,"button",{name:"b",hash:{},data:i}))+" "+l(__default(n(7)).call(s,"button",{name:"b",hash:{inverse:!0},data:i}))+" "+l(__default(n(7)).call(s,"side-nav","language-small",{name:"b",hash:{lang:null!=(o=null!=t?t.language:t)?o.id:o},data:i}))+'">\n '+l(e.lambda(null!=(o=null!=t?t.language:t)?o.id:o,t))+'\n </button>\n </div>\n\n <div class="'+l(__default(n(7)).call(s,"side-nav","item",{name:"b",hash:{},data:i}))+' " data-tooltip="'+l(__default(n(9)).call(s,"controls.expand",{name:"t",hash:{},data:i}))+'">\n <div class="'+l(__default(n(7)).call(s,"side-nav","collapse",{name:"b",hash:{},data:i}))+'">\n <span class="'+l(__default(n(7)).call(s,"side-nav","icon",{name:"b",hash:{},data:i}))+' fa fa-angle-left"></span>\n <span class="'+l(__default(n(7)).call(s,"side-nav","text",{name:"b",hash:{},data:i}))+'">'+l(__default(n(9)).call(s,"controls.collapse",{name:"t",hash:{},data:i}))+"</span>\n </div>\n </div>\n</div>\n"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression,l=null!=t?t:e.nullContext||{};return'<div class="'+s(o(null!=t?t.cls:t,t))+'">\n <h1 class="'+s(__default(n(7)).call(l,null!=t?t.cls:t,"title",{name:"b",hash:{},data:i}))+'">'+s(o(null!=t?t.code:t,t))+'</h1>\n <p class="'+s(__default(n(7)).call(l,null!=t?t.cls:t,"message",{name:"b",hash:{},data:i}))+'">'+s(o(null!=t?t.message:t,t))+"</p>\n</div>"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o;return' <div class="pane__subtitle long-line line-ellipsis">\n'+(null!=(o=e.invokePartial(n(158),t,{name:"../../blocks/clipboard-copy/clipboard-copy",hash:{value:null!=t?t.fullName:t},data:i,indent:" ",helpers:r,partials:a,decorators:e.decorators}))?o:"")+' <span class="fullname__body">'+e.escapeExpression(e.lambda(null!=t?t.fullName:t,t))+"</span>\n </div>\n"},3:function(e,t,r,a,i){return" "+e.escapeExpression(__default(n(29)).call(null!=t?t:e.nullContext||{},"flaky",{name:"allure-icon",hash:{},data:i}))+"\n"},5:function(e,t,r,a,i){return" "+e.escapeExpression(__default(n(29)).call(null!=t?t:e.nullContext||{},"newFailed",{name:"allure-icon",hash:{},data:i}))+"\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression,u=e.lambda;return(null!=(o=r.if.call(s,null!=t?t.fullName:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+'<h2 class="'+l(__default(n(7)).call(s,"pane","title",{name:"b",hash:{borderless:!0},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.flaky:t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(s,null!=t?t.newFailed:t,{name:"if",hash:{},fn:e.program(5,i,0),inverse:e.noop,data:i}))?o:"")+' <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"status",{name:"b",hash:{},data:i}))+'">\n <span class="label label_status_'+l(u(null!=t?t.status:t,t))+'">'+l(__default(n(9)).call(s,null!=t?t.statusName:t,{name:"t",hash:{},data:i}))+'</span>\n </div>\n <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"name",{name:"b",hash:{},data:i}))+'">\n <span class="long-line">'+l(u(null!=t?t.name:t,t))+"</span>\n </div>\n</h2>\n\n"+(null!=(o=e.invokePartial(n(159),t,{name:"../../blocks/tabs/tabs",data:i,helpers:r,partials:a,decorators:e.decorators}))?o:"")+'<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"content",{name:"b",hash:{},data:i}))+'"></div>\n'},usePartial:!0,useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"alert","wide",{name:"b",hash:{status:null!=t?t.status:t},data:i}))+'">'+(null!=(o=e.invokePartial(n(47),t,{name:"../../blocks/status-details/status-details",data:i,helpers:r,partials:a,decorators:e.decorators}))?o:"")+'</div>\n\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"tags",{name:"b",hash:{},data:i}))+'"></div>\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"before",{name:"b",hash:{},data:i}))+'"></div>\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"execution",{name:"b",hash:{},data:i}))+'"></div>\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"after",{name:"b",hash:{},data:i}))+'"></div>'},usePartial:!0,useData:!0})},function(e,t){e.exports=function(e){var t={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],case_insensitive:!0,contains:[{className:"meta",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{name:"style"},contains:[t],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{name:"script"},contains:[t],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},t]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,n,{className:"string",begin:/'/,end:/'/},t]}}},function(e,t){e.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```w*s*$",end:"^```s*$"},{begin:"`.+?`"},{begin:"^( {4}|\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},function(e,t){e.exports=function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}},function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],r={end:",",endsWithParent:!0,excludeEnd:!0,contains:n,keywords:t},a={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(r,{begin:/:/})],illegal:"\\S"},i={begin:"\\[",end:"\\]",contains:[e.inherit(r)],illegal:"\\S"};return n.splice(n.length,0,a,i),{contains:n,keywords:t,illegal:"\\S"}}},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){return' <div class="attachment__custom-view"></div>\n'},3:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"code",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(4,i,0),inverse:e.program(6,i,0),data:i}))?o:""},4:function(e,t,r,a,i){var o=e.escapeExpression;return' <div class="'+o(__default(n(7)).call(null!=t?t:e.nullContext||{},"attachment__text-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'">\n <pre class="attachment__code">'+o(e.lambda(null!=t?t.content:t,t))+"</pre>\n </div>\n"},6:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"text",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(7,i,0),inverse:e.program(9,i,0),data:i}))?o:""},7:function(e,t,r,a,i){var o=e.escapeExpression;return' <div class="'+o(__default(n(7)).call(null!=t?t:e.nullContext||{},"attachment__text-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'">\n <pre class="attachment__text">'+o(e.lambda(null!=t?t.content:t,t))+"</pre>\n </div>\n"},9:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"table",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(10,i,0),inverse:e.program(14,i,0),data:i}))?o:""},10:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="'+e.escapeExpression(__default(n(7)).call(s,"attachment__table-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'">\n <table class="table attachment__table">\n <tbody>\n'+(null!=(o=r.each.call(s,null!=t?t.content:t,{name:"each",hash:{},fn:e.program(11,i,0),inverse:e.noop,data:i}))?o:"")+" </tbody>\n </table>\n </div>\n"},11:function(e,t,n,r,a){var i;return" <tr>\n"+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},t,{name:"each",hash:{},fn:e.program(12,a,0),inverse:e.noop,data:a}))?i:"")+" </tr>\n"},12:function(e,t,n,r,a){return" <td>"+e.escapeExpression(e.lambda(t,t))+"</td>\n"},14:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"image",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(15,i,0),inverse:e.program(17,i,0),data:i}))?o:""},15:function(e,t,r,a,i){var o=e.escapeExpression;return' <div class="'+o(__default(n(7)).call(null!=t?t:e.nullContext||{},"attachment__media-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'"><img class="attachment__media" src="'+o(e.lambda(null!=t?t.sourceUrl:t,t))+'"/>\n </div>\n'},17:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"svg",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(18,i,0),inverse:e.program(20,i,0),data:i}))?o:""},18:function(e,t,n,r,a){return' <object class="attachment__embed" type="image/svg+xml" data="'+e.escapeExpression(e.lambda(null!=t?t.sourceUrl:t,t))+'">\n Your browser does not support SVG\n </object>\n'},20:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"video",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(21,i,0),inverse:e.program(23,i,0),data:i}))?o:""},21:function(e,t,n,r,a){var i,o=e.lambda,s=e.escapeExpression;return' <div class="attachment__media-container">\n <video class="attachment__media" controls>\n <source src="'+s(o(null!=t?t.sourceUrl:t,t))+'" type="'+s(o(null!=(i=null!=t?t.attachment:t)?i.type:i,t))+'">\n Your browser does not support video tag\n </video>\n </div>\n'},23:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"uri",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(24,i,0),inverse:e.program(30,i,0),data:i}))?o:""},24:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="'+e.escapeExpression(__default(n(7)).call(s,"attachment__text-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'">\n'+(null!=(o=r.each.call(s,null!=t?t.content:t,{name:"each",hash:{},fn:e.program(25,i,0),inverse:e.noop,data:i}))?o:"")+" </div>\n"},25:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <p class="'+e.escapeExpression(__default(n(7)).call(s,"attachment","url",{name:"b",hash:{comment:null!=t?t.comment:t},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.comment:t,{name:"if",hash:{},fn:e.program(26,i,0),inverse:e.program(28,i,0),data:i}))?o:"")+" </p>\n"},26:function(e,t,n,r,a){return" "+e.escapeExpression(e.lambda(null!=t?t.text:t,t))+"\n"},28:function(e,t,n,r,a){var i=e.lambda,o=e.escapeExpression;return' <a href="'+o(i(null!=t?t.text:t,t))+'" target="_blank" class="link">'+o(i(null!=t?t.text:t,t))+"</a>\n"},30:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"html",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(31,i,0),inverse:e.program(33,i,0),data:i}))?o:""},31:function(e,t,r,a,i){var o=e.escapeExpression;return' <iframe class="'+o(__default(n(7)).call(null!=t?t:e.nullContext||{},"attachment__iframe",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'" frameborder="0" src="'+o(e.lambda(null!=t?t.sourceUrl:t,t))+'"></iframe>\n'},33:function(e,t,r,a,i){var o=e.escapeExpression;return' <div class="'+o(__default(n(7)).call(null!=t?t:e.nullContext||{},"attachment__text-container",{name:"b",hash:{fullscreen:null!=t?t.fullScreen:t},data:i}))+'">\n <span class="fa fa-download"></span>\n <a class="link" href="'+o(e.lambda(null!=t?t.sourceUrl:t,t))+'" download>Click to download attachment</a>\n </div>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"custom",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(3,i,0),data:i}))?o:""},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="execution__content">'+(null!=(o=e.invokePartial(n(48),t,{name:"stages-block",hash:{expanded:!1,baseUrl:null!=t?t.baseUrl:t,name:__default(n(9)).call(s,"testResult.execution.setup",{name:"t",hash:{},data:i}),stages:null!=t?t.before:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?o:"")+(null!=(o=e.invokePartial(n(48),t,{name:"stages-block",hash:{expanded:!0,baseUrl:null!=t?t.baseUrl:t,name:__default(n(9)).call(s,"testResult.execution.body",{name:"t",hash:{},data:i}),stages:null!=t?t.test:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?o:"")+(null!=(o=e.invokePartial(n(48),t,{name:"stages-block",hash:{expanded:!1,baseUrl:null!=t?t.baseUrl:t,name:__default(n(9)).call(s,"testResult.execution.teardown",{name:"t",hash:{},data:i}),stages:null!=t?t.after:t},data:i,helpers:r,partials:a,decorators:e.decorators}))?o:"")+" </div>\n"},3:function(e,t,r,a,i){return' <div class="'+e.escapeExpression(__default(n(7)).call(null!=t?t:e.nullContext||{},"pane","section",{name:"b",hash:{},data:i}))+'">\n No information about test execution is available.\n </div>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return'<h3 class="test-result-execution__title">'+e.escapeExpression(__default(n(9)).call(s,"testResult.execution.name",{name:"t",hash:{},data:i}))+"</h3>\n\n"+(null!=(o=r.if.call(s,null!=t?t.hasContent:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(3,i,0),data:i}))?o:"")},usePartial:!0,useData:!0})},function(e,t,n){"use strict";(function(t){ +/** + * filesize + * + * @copyright 2018 Jason Mulligan <jason.mulligan@avoidwork.com> + * @license BSD-3-Clause + * @version 3.6.1 + */ +!function(t){var n=/^(b|B)$/,r={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},a={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function filesize(e){var t,i,o,s,l,u,c,f,h,d,p,m,g,v=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},b=[],y=0,_=void 0,w=void 0;if(isNaN(e))throw new Error("Invalid arguments");return i=!0===v.bits,h=!0===v.unix,t=v.base||2,f=void 0!==v.round?v.round:h?1:2,d=void 0!==v.separator&&v.separator||"",p=void 0!==v.spacer?v.spacer:h?"":" ",g=v.symbols||v.suffixes||{},m=2===t&&v.standard||"jedec",c=v.output||"string",s=!0===v.fullform,l=v.fullforms instanceof Array?v.fullforms:[],_=void 0!==v.exponent?v.exponent:-1,o=t>2?1e3:1024,(u=(w=Number(e))<0)&&(w=-w),(-1===_||isNaN(_))&&(_=Math.floor(Math.log(w)/Math.log(o)))<0&&(_=0),_>8&&(_=8),0===w?(b[0]=0,b[1]=h?"":r[m][i?"bits":"bytes"][_]):(y=w/(2===t?Math.pow(2,10*_):Math.pow(1e3,_)),i&&(y*=8)>=o&&_<8&&(y/=o,_++),b[0]=Number(y.toFixed(_>0?f:0)),b[1]=10===t&&1===_?i?"kb":"kB":r[m][i?"bits":"bytes"][_],h&&(b[1]="jedec"===m?b[1].charAt(0):_>0?b[1].replace(/B$/,""):b[1],n.test(b[1])&&(b[0]=Math.floor(b[0]),b[1]=""))),u&&(b[0]=-b[0]),b[1]=g[b[1]]||b[1],"array"===c?b:"exponent"===c?_:"object"===c?{value:b[0],suffix:b[1],symbol:b[1]}:(s&&(b[1]=l[_]?l[_]:a[m][_]+(i?"bit":"byte")+(1===b[0]?"":"s")),d.length>0&&(b[0]=b[0].toString().replace(".",d)),b.join(p))}filesize.partial=function(e){return function(t){return filesize(t,e)}},e.exports=filesize}("undefined"!=typeof window&&window)}).call(this,n(37))},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return'<div class="modal__background">\n <div class="modal__window">\n <h2 class="'+s(__default(n(7)).call(o,null!=t?t.cls:t,"title",{name:"b",hash:{},data:i}))+'">\n <span>'+s(e.lambda(null!=t?t.title:t,t))+'</span>\n <span class="'+s(__default(n(7)).call(o,null!=t?t.cls:t,"close",{name:"b",hash:{},data:i}))+' fa fa-close" data-tooltip="Close"></span>\n </h2>\n <div class="modal__content"></div>\n <br>\n </div>\n\n</div>\n'},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){return'<div class="side-by-side__left"></div>\n<div class="side-by-side__right"></div>'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <span class="'+s(__default(n(7)).call(o,"pane","subtitle",{name:"b",hash:{},data:i}))+'">\n '+s(__default(n(9)).call(o,"component.tree.filtered.total",{name:"t",hash:{count:null!=t?t.totalCases:t},data:i}))+",\n "+s(__default(n(9)).call(o,"component.tree.filtered.shown",{name:"t",hash:{count:null!=t?t.shownCases:t},data:i}))+"\n </span>\n"},3:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <a class="fa fa-download '+s(__default(n(7)).call(o,null!=t?t.cls:t,"control",{name:"b",hash:{},data:i}))+" "+s(__default(n(7)).call(o,null!=t?t.cls:t,"download",{name:"b",hash:{},data:i}))+'" data-tooltip="'+s(__default(n(9)).call(o,"component.tree.download",{name:"t",hash:{},data:i}))+'"\n href="'+s(e.lambda(null!=t?t.csvUrl:t,t))+'" download></a>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"pane","title",{name:"b",hash:{borderless:!0},data:i}))+'">\n <span class="'+l(__default(n(7)).call(s,"pane","title-text",{name:"b",hash:{},data:i}))+'">'+l(__default(n(9)).call(s,null!=t?t.tabName:t,{name:"t",hash:{},data:i}))+"</span>\n"+(null!=(o=r.if.call(s,null!=t?t.filtered:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+' <div class="'+l(__default(n(7)).call(s,"pane","search",{name:"b",hash:{},data:i}))+'"></div>\n <span class="pane__controls">\n <a class="fa fa-info-circle '+l(__default(n(7)).call(s,null!=t?t.cls:t,"control",{name:"b",hash:{},data:i}))+" "+l(__default(n(7)).call(s,null!=t?t.cls:t,"info",{name:"b",hash:{},data:i}))+'" data-tooltip="'+l(__default(n(9)).call(s,"component.tree.groups",{name:"t",hash:{},data:i}))+'"></a>\n'+(null!=(o=r.if.call(s,null!=t?t.csvUrl:t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+' </span>\n</div>\n\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"ctrl",{name:"b",hash:{},data:i}))+'">\n <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"sorter",{name:"b",hash:{},data:i}))+'"></div>\n <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"strut",{name:"b",hash:{},data:i}))+'"></div>\n <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"filter",{name:"b",hash:{},data:i}))+'"></div>\n <div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"filter-marks",{name:"b",hash:{},data:i}))+'"></div>\n</div>\n\n<div class="'+l(__default(n(7)).call(s,null!=t?t.cls:t,"content",{name:"b",hash:{},data:i}))+'" ></div>'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression,l=e.lambda;return' <div class="'+s(__default(n(7)).call(o,"sorter","item",{name:"b",hash:{},data:i}))+'" data-name="'+s(l(null!=t?t.name:t,t))+'" data-asc='+s(l(null!=t?t.asc:t,t))+'>\n <span class="'+s(__default(n(7)).call(o,"sorter",{name:"b",hash:{enabled:__default(n(178)).call(o,null!=t?t.asc:t,null!=t?t.desc:t,{name:"or",hash:{},data:i})},data:i}))+" "+s(__default(n(7)).call(o,"sorter","name",{name:"b",hash:{},data:i}))+'">'+s(__default(n(9)).call(o,null!=t?t.name:t,{name:"t",hash:{},data:i}))+'</span>\n <span class="fa-stack '+s(__default(n(7)).call(o,"sorter","icon",{name:"b",hash:{},data:i}))+'">\n <i class="fa fa-sort-asc fa-stack-1x '+s(__default(n(7)).call(o,"sorter",{name:"b",hash:{enabled:null!=t?t.asc:t},data:i}))+'"></i>\n <i class="fa fa-sort-desc fa-stack-1x '+s(__default(n(7)).call(o,"sorter",{name:"b",hash:{enabled:null!=t?t.desc:t},data:i}))+'"></i>\n </span>\n </div>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return'<div class="sorter">\n'+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.sorters:t,{name:"each",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:"")+"</div>\n"},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){return'<div class="search__container">\n <input class="search__input"\n type="text" />\n</div>\n'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="'+e.escapeExpression(__default(n(7)).call(s,"status-toggle","item",{name:"b",hash:{},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.active:t,{name:"if",hash:{},fn:e.program(2,i,0),inverse:e.program(4,i,0),data:i}))?o:"")+" </div>\n"},2:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression;return' <span class="y-label y-label_status_'+s(o(null!=t?t.status:t,t))+'" data-status="'+s(o(null!=t?t.status:t,t))+'"\n data-tooltip="'+s(__default(n(9)).call(null!=t?t:e.nullContext||{},"component.statusToggle.hideCases",{name:"t",hash:{status:null!=t?t.statusName:t},data:i}))+'">'+s(o(null!=t?t.count:t,t))+"</span>\n"},4:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression;return' <span class="n-label n-label_status_'+s(o(null!=t?t.status:t,t))+'" data-status="'+s(o(null!=t?t.status:t,t))+'"\n data-tooltip="'+s(__default(n(9)).call(null!=t?t:e.nullContext||{},"component.statusToggle.showCases",{name:"t",hash:{status:null!=t?t.statusName:t},data:i}))+'">'+s(o(null!=t?t.count:t,t))+"</span>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"status-toggle","items",{name:"b",hash:{},data:i}))+'">\n '+l(__default(n(9)).call(s,"component.tree.filter",{name:"t",hash:{},data:i}))+":\n"+(null!=(o=r.each.call(s,null!=t?t.statuses:t,{name:"each",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+"</div>"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="'+e.escapeExpression(__default(n(7)).call(s,"marks-toggle","item",{name:"b",hash:{},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.active:t,{name:"if",hash:{},fn:e.program(2,i,0),inverse:e.program(4,i,0),data:i}))?o:"")+" </div>\n"},2:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression,l=null!=t?t:e.nullContext||{};return' <span class="y-label-mark y-label_mark_'+s(o(null!=t?t.mark:t,t))+'" data-mark="'+s(o(null!=t?t.mark:t,t))+'"\n data-tooltip="'+s(__default(n(9)).call(l,"component.markToggle.hideCases",{name:"t",hash:{mark:null!=t?t.markName:t},data:i}))+'">'+s(__default(n(29)).call(l,null!=t?t.mark:t,{name:"allure-icon",hash:{tooltip:""},data:i}))+"</span>\n"},4:function(e,t,r,a,i){var o=e.lambda,s=e.escapeExpression,l=null!=t?t:e.nullContext||{};return' <span class="n-label-mark n-label_mark_'+s(o(null!=t?t.mark:t,t))+'" data-mark="'+s(o(null!=t?t.mark:t,t))+'"\n data-tooltip="'+s(__default(n(9)).call(l,"component.markToggle.showCases",{name:"t",hash:{mark:null!=t?t.markName:t},data:i}))+'">'+s(__default(n(29)).call(l,null!=t?t.mark:t,{name:"allure-icon",hash:{tooltip:""},data:i}))+"</span>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"marks-toggle","items",{name:"b",hash:{},data:i}))+'">\n '+l(__default(n(9)).call(s,"component.tree.filter-marks",{name:"t",hash:{},data:i}))+":\n"+(null!=(o=r.each.call(s,null!=t?t.marks:t,{name:"each",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+"</div>"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a,i,o){var s;return null!=(s=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.items:t,{name:"each",hash:{},fn:e.program(2,a,0,i,o),inverse:e.noop,data:a}))?s:""},2:function(e,t,r,a,i,o,s){var l;return null!=(l=e.invokePartial(n(71),t,{name:"tree-group",hash:{testResultTab:null!=s[1]?s[1].testResultTab:s[1],tabName:null!=s[1]?s[1].tabName:s[1],showGroupInfo:null!=s[1]?s[1].showGroupInfo:s[1],baseUrl:null!=s[1]?s[1].baseUrl:s[1]},data:i,helpers:r,partials:a,decorators:e.decorators}))?l:""},4:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <div class="'+s(__default(n(7)).call(o,null!=t?t.cls:t,"empty",{name:"b",hash:{},data:i}))+'">'+s(__default(n(9)).call(o,"component.tree.empty",{name:"t",hash:{},data:i}))+"</div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return'<div class="'+c(__default(n(7)).call(u,null!=t?t.cls:t,"content",{name:"b",hash:{},data:i}))+'" data-uid="'+c(e.lambda(null!=t?t.uid:t,t))+'">\n'+(null!=(l=r.if.call(u,null!=t?t.items:t,{name:"if",hash:{},fn:e.program(1,i,0,o,s),inverse:e.program(4,i,0,o,s),data:i}))?l:"")+"</div>\n"},usePartial:!0,useData:!0,useDepths:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=e.lambda,l=e.escapeExpression;return'<div class="'+l(s(null!=t?t.cls:t,t))+'">\n <p class="'+l((o=n(7),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},null!=t?t.cls:t,"message",{name:"b",hash:{},data:i}))+'">'+l(s(null!=t?t.message:t,t))+"</p>\n</div>"},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l=e.lambda,u=e.escapeExpression;return" <"+u(l(null!=s[1]?s[1].rowTag:s[1],t))+' class="table__row" href="#'+u(l(null!=s[1]?s[1].baseUrl:s[1],t))+"/"+u(l(null!=t?t.uid:t,t))+'">\n <div class="table__col">'+u(l(null!=t?t.name:t,t))+'</div>\n <div class="table__col">\n '+u(__default(n(187)).call(null!=t?t:e.nullContext||{},null!=t?t.statistic:t,{name:"status-bar",hash:{},data:i}))+"\n </div>\n </"+u(l(null!=s[1]?s[1].rowTag:s[1],t))+">\n"},3:function(e,t,r,a,i){var o=e.escapeExpression;return' <a class="table__row" href="#'+o(e.lambda(null!=t?t.baseUrl:t,t))+'">\n <div class="table__col table__col_center">\n '+o(__default(n(9)).call(null!=t?t:e.nullContext||{},"component.widgetStatus.showAll",{name:"t",hash:{},data:i}))+"\n </div>\n </a>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return'<h2 class="widget__title">\n '+c(__default(n(9)).call(u,null!=t?t.title:t,{name:"t",hash:{},data:i}))+'\n <span class="widget__subtitle">'+c(__default(n(9)).call(u,"component.widgetStatus.total",{name:"t",hash:{count:null!=t?t.total:t},data:i}))+'</span>\n</h2>\n<div class="table table_hover widget__table">\n'+(null!=(l=r.each.call(u,null!=t?t.items:t,{name:"each",hash:{},fn:e.program(1,i,0,o,s),inverse:e.noop,data:i}))?l:"")+(null!=(l=r.if.call(u,null!=t?t.showAll:t,{name:"if",hash:{},fn:e.program(3,i,0,o,s),inverse:e.noop,data:i}))?l:"")+"</div>\n"},useData:!0,useDepths:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{},s=n.helperMissing,l=e.escapeExpression;return'<svg class="chart__svg">\n <g class="chart__plot" transform="translate('+l("function"==typeof(i=null!=(i=n.PAD_LEFT||(null!=t?t.PAD_LEFT:t))?i:s)?i.call(o,{name:"PAD_LEFT",hash:{},data:a}):i)+", "+l("function"==typeof(i=null!=(i=n.PAD_TOP||(null!=t?t.PAD_TOP:t))?i:s)?i.call(o,{name:"PAD_TOP",hash:{},data:a}):i)+')"></g>\n <g class="chart__axis chart__axis_x"></g>\n <g class="chart__axis chart__axis_y"></g>\n</svg>'},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{},s=n.helperMissing,l=e.escapeExpression;return' <div class="trend__tooltip_label">\n <span class="label" style="background-color: '+l("function"==typeof(i=null!=(i=n.color||(null!=t?t.color:t))?i:s)?i.call(o,{name:"color",hash:{},data:a}):i)+'">'+l("function"==typeof(i=null!=(i=n.num||(null!=t?t.num:t))?i:s)?i.call(o,{name:"num",hash:{},data:a}):i)+'</span>\n <span class="trend__tooltip_name">'+l("function"==typeof(i=null!=(i=n.key||(null!=t?t.key:t))?i:s)?i.call(o,{name:"key",hash:{},data:a}):i)+"</span>\n </div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i,o,s=null!=t?t:e.nullContext||{};return e.escapeExpression("function"==typeof(o=null!=(o=n.name||(null!=t?t.name:t))?o:n.helperMissing)?o.call(s,{name:"name",hash:{},data:a}):o)+'\n<div class="trend__tooltip">\n'+(null!=(i=n.each.call(s,null!=t?t.data:t,{name:"each",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:"")+"</div>\n"},useData:!0})},function(e,t,n){var r=n(190),a=n(191),i=n(192);e.exports=function(e,t){return r(e)||a(e,t)||i()}},function(e,t,n){var r,a; +/**! + * Sortable + * @author RubaXa <trash@rubaxa.org> + * @author owenm <owen23355@gmail.com> + * @license MIT + */ +/**! + * Sortable + * @author RubaXa <trash@rubaxa.org> + * @author owenm <owen23355@gmail.com> + * @license MIT + */ +!function(i){"use strict";void 0===(a="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=a)}(function(){"use strict";if("undefined"==typeof window||!window.document)return function(){throw new Error("Sortable.js requires a window with a document")};var e,t,n,r,a,i,o,s,l,u,c,f,h,d,p,m,g,v,b,y,_,w,x,k,C,S=[],T=!1,E=!1,M=!1,O=[],A=!1,R=!1,N=/\s+/g,D="Sortable"+(new Date).getTime(),V=window,j=V.document,P=V.parseInt,L=V.setTimeout,I=V.jQuery||V.Zepto,B=V.Polymer,z={capture:!1,passive:!1},U=!!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie|iemobile)/i),F=!!navigator.userAgent.match(/Edge/i),H=F||U?"cssFloat":"float",q="draggable"in j.createElement("div"),W=function(){if(U)return!1;var e=j.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}(),$=!1,Y=!1,G=Math.abs,X=Math.min,K=[],Z=function(e,t){var n=_css(e),r=P(n.width),a=_getChild(e,0,t),i=_getChild(e,1,t),o=a&&_css(a),s=i&&_css(i),l=o&&P(o.marginLeft)+P(o.marginRight)+_getRect(a).width,u=s&&P(s.marginLeft)+P(s.marginRight)+_getRect(i).width;return"flex"===n.display?"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal":a&&("block"===o.display||"flex"===o.display||"table"===o.display||"grid"===o.display||l>=r&&"none"===n[H]||i&&"none"===n[H]&&l+u>r)?"vertical":"horizontal"},J=function(e,t){if(!e||!e.getBoundingClientRect)return V;var n=e,r=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var a=_css(n);if(n.clientWidth<n.scrollWidth&&("auto"==a.overflowX||"scroll"==a.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==a.overflowY||"scroll"==a.overflowY)){if(!n||!n.getBoundingClientRect||n===j.body)return V;if(r||t)return n;r=!0}}}while(n=n.parentNode);return V},Q=_throttle(function(e,t,n,r){if(t.scroll){var a=n?n[D]:window,i=t.scrollSensitivity,o=t.scrollSpeed,c=e.clientX,f=e.clientY,h=(window.innerWidth,window.innerHeight,!1);l!==n&&(ee(),s=t.scroll,u=t.scrollFn,!0===s&&(s=J(n,!0),l=s));var d=0,p=s;do{var m,g,v,y,_,w,x,k,C,E=p,M=_getRect(E),O=M.top,A=M.bottom,R=M.left,N=M.right,P=M.width,L=M.height;if(E!==V?(m=E.scrollWidth,g=E.scrollHeight,v=_css(E),w=P<m&&("auto"===v.overflowX||"scroll"===v.overflowX),x=L<g&&("auto"===v.overflowY||"scroll"===v.overflowY),k=E.scrollLeft,C=E.scrollTop):(m=j.documentElement.scrollWidth,g=j.documentElement.scrollHeight,v=_css(j.documentElement),w=P<m&&("auto"===v.overflowX||"scroll"===v.overflowX||"visible"===v.overflowX),x=L<g&&("auto"===v.overflowY||"scroll"===v.overflowY||"visible"===v.overflowY),k=j.documentElement.scrollLeft,C=j.documentElement.scrollTop),y=w&&(G(N-c)<=i&&k+P<m)-(G(R-c)<=i&&!!k),_=x&&(G(A-f)<=i&&C+L<g)-(G(O-f)<=i&&!!C),!S[d])for(var I=0;I<=d;I++)S[I]||(S[I]={});S[d].vx==y&&S[d].vy==_&&S[d].el===E||(S[d].el=E,S[d].vx=y,S[d].vy=_,clearInterval(S[d].pid),!E||0==y&&0==_||(h=!0,S[d].pid=setInterval(function(){r&&0===this.layer&&Sortable.active._emulateDragOver(!0);var t=S[this.layer].vy?S[this.layer].vy*o:0,n=S[this.layer].vx?S[this.layer].vx*o:0;"function"==typeof u&&"continue"!==u.call(a,n,t,e,b,S[this.layer].el)||(S[this.layer].el===V?V.scrollTo(V.pageXOffset+n,V.pageYOffset+t):(S[this.layer].el.scrollTop+=t,S[this.layer].el.scrollLeft+=n))}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&p!==V&&(p=J(p,!1)));T=h}},30),ee=function(){S.forEach(function(e){clearInterval(e.pid)}),S=[]},te=function(e){function toFn(e,t){return function(n,r,a,i){var o=n.options.group.name&&r.options.group.name&&n.options.group.name===r.options.group.name;if(null==e&&(t||o))return!0;if(null==e||!1===e)return!1;if(t&&"clone"===e)return e;if("function"==typeof e)return toFn(e(n,r,a,i));var s=(t?n:r).options.group.name;return!0===e||"string"==typeof e&&e===s||e.join&&e.indexOf(s)>-1}}var t={},n=e.group;n&&"object"==typeof n||(n={name:n}),t.name=n.name,t.checkPull=toFn(n.pull,!0),t.checkPut=toFn(n.put),t.revertClone=n.revertClone,e.group=t},ne=function(t){e&&e.parentNode&&e.parentNode[D]&&e.parentNode[D]._computeIsAligned(t)},re=function(e,t){for(var n=t;!n[D];)n=n.parentNode;return e===n},ae=function(e,t,n){for(var r=e.parentNode;r&&!r[D];)r=r.parentNode;r&&r[D][n](_extend(t,{artificialBubble:!0}))},ie=function(){!W&&n&&_css(n,"display","none")},oe=function(){!W&&n&&_css(n,"display","")};j.addEventListener("click",function(e){if(M)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),M=!1,!1},!0);var se,le=function(t){if(e){var n=function(e,t){for(var n=0;n<O.length;n++)if(!O[n].children.length){var r=_getRect(O[n]),a=O[n][D].options.emptyInsertThreshold,i=e>=r.left-a&&e<=r.right+a,o=t>=r.top-a&&t<=r.bottom+a;if(i&&o)return O[n]}}(t.clientX,t.clientY);n&&n[D]._onDragOver({clientX:t.clientX,clientY:t.clientY,target:n,rootEl:n})}};function Sortable(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be HTMLElement, not "+{}.toString.call(e);this.el=e,this.options=t=_extend({},t),e[D]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0,draggable:/[uo]l/i.test(e.nodeName)?"li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Z(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,touchStartThreshold:P(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Sortable.supportPointer&&("PointerEvent"in window||window.navigator&&"msPointerEnabled"in window.navigator),emptyInsertThreshold:5};for(var r in n)!(r in t)&&(t[r]=n[r]);for(var a in te(t),this)"_"===a.charAt(0)&&"function"==typeof this[a]&&(this[a]=this[a].bind(this));this.nativeDraggable=!t.forceFallback&&q,t.supportPointer?_on(e,"pointerdown",this._onTapStart):(_on(e,"mousedown",this._onTapStart),_on(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(_on(e,"dragover",this),_on(e,"dragenter",this)),O.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[])}function _closest(e,t,n,r){if(e){n=n||j;do{if(">*"===t&&e.parentNode===n||_matches(e,t)||r&&e===n)return e;if(e===n)break}while(e=_getParentOrHost(e))}return null}function _getParentOrHost(e){return e.host&&e!==j&&e.host.nodeType?e.host:e.parentNode}function _on(e,t,n){e.addEventListener(t,n,z)}function _off(e,t,n){e.removeEventListener(t,n,z)}function _toggleClass(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var r=(" "+e.className+" ").replace(N," ").replace(" "+t+" "," ");e.className=(r+(n?" "+t:"")).replace(N," ")}}function _css(e,t,n){var r=e&&e.style;if(r){if(void 0===n)return j.defaultView&&j.defaultView.getComputedStyle?n=j.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),void 0===t?n:n[t];t in r||-1!==t.indexOf("webkit")||(t="-webkit-"+t),r[t]=n+("string"==typeof n?"":"px")}}function _matrix(e){var t="";do{var n=_css(e,"transform");n&&"none"!==n&&(t=n+" "+t)}while(e=e.parentNode);return window.DOMMatrix?new DOMMatrix(t):window.WebKitCSSMatrix?new WebKitCSSMatrix(t):window.CSSMatrix?new CSSMatrix(t):void 0}function _find(e,t,n){if(e){var r=e.getElementsByTagName(t),a=0,i=r.length;if(n)for(;a<i;a++)n(r[a],a);return r}return[]}function _dispatchEvent(e,t,n,a,i,o,s,l,u){var c,f=(e=e||t[D]).options,h="on"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||U||F?(c=j.createEvent("Event")).initEvent(n,!0,!0):c=new CustomEvent(n,{bubbles:!0,cancelable:!0}),c.to=i||t,c.from=o||t,c.item=a||t,c.clone=r,c.oldIndex=s,c.newIndex=l,c.originalEvent=u,t&&t.dispatchEvent(c),f[h]&&f[h].call(e,c)}function _onMove(e,t,n,r,a,i,o,s){var l,u,c=e[D],f=c.options.onMove;return!window.CustomEvent||U||F?(l=j.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=n,l.draggedRect=r,l.related=a||t,l.relatedRect=i||_getRect(t),l.willInsertAfter=s,l.originalEvent=o,e.dispatchEvent(l),f&&(u=f.call(c,l,o)),u}function _disableDraggable(e){e.draggable=!1}function _unsilent(){$=!1}function _getChild(t,r,a){for(var i=0,o=0,s=t.children;o<s.length;){if("none"!==s[o].style.display&&s[o]!==n&&s[o]!==e&&_closest(s[o],a.draggable,t,!1)){if(i===r)return s[o];i++}o++}return null}function _lastChild(e){var t=e.lastElementChild;return t===n&&(t=e.children[e.childElementCount-2]),t||null}function _generateId(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,r=0;n--;)r+=t.charCodeAt(n);return r.toString(36)}function _index(e,t){var n=0;if(!e||!e.parentNode)return-1;for(;e&&(e=e.previousElementSibling);)"TEMPLATE"!==e.nodeName.toUpperCase()&&e!==r&&n++;return n}function _matches(e,t){if(e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}function _throttle(e,t){return function(){if(!se){var n=arguments,r=this;se=L(function(){1===n.length?e.call(r,n[0]):e.apply(r,n),se=void 0},t)}}}function _extend(e,t){if(e&&t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function _clone(e){return B&&B.dom?B.dom(e).cloneNode(!0):I?I(e).clone(!0)[0]:e.cloneNode(!0)}function _nextTick(e){return L(e,0)}function _cancelNextTick(e){return clearTimeout(e)}function _preventScroll(e){(Sortable.active||E)&&e.cancelable&&e.preventDefault()}function _getRect(e,t,n){if(e.getBoundingClientRect||e===V){var r,a,i,o,s,l,u;if(e!==V?(a=(r=e.getBoundingClientRect()).top,i=r.left,o=r.bottom,s=r.right,l=r.height,u=r.width):(a=0,i=0,o=window.innerHeight,s=window.innerWidth,l=window.innerHeight,u=window.innerWidth),n&&e!==V){if(t=t||e.parentNode,!U)do{if(t&&t.getBoundingClientRect&&"none"!==_css(t,"transform")){var c=t.getBoundingClientRect();a-=c.top+P(_css(t,"border-top-width")),i-=c.left+P(_css(t,"border-left-width")),o=a+r.height,s=i+r.width;break}}while(t=t.parentNode);var f=_matrix(e),h=f&&f.a,d=f&&f.d;f&&(o=(a/=d)+(l/=d),s=(i/=h)+(u/=h))}return{top:a,left:i,bottom:o,right:s,width:u,height:l}}}return j.addEventListener("dragover",le),j.addEventListener("mousemove",le),Sortable.prototype={constructor:Sortable,_computeIsAligned:function(t){var r;if(n&&!W?(ie(),r=j.elementFromPoint(t.clientX,t.clientY),oe()):r=t.target,r=_closest(r,this.options.draggable,this.el,!1),!Y&&e&&e.parentNode===this.el){for(var a,i,o,s,l,u,c,f,h=this.el.children,d=0;d<h.length;d++)_closest(h[d],this.options.draggable,this.el,!1)&&h[d]!==r&&(h[d].sortableMouseAligned=(a=t.clientX,i=t.clientY,o=h[d],s=this._getDirection(t,null),this.options,l=void 0,u=void 0,c=void 0,f=void 0,l=_getRect(o),u="vertical"===s?l.left:l.top,c="vertical"===s?l.right:l.bottom,u<(f="vertical"===s?a:i)&&f<c));_closest(r,this.options.draggable,this.el,!0)||(_=null),Y=!0,L(function(){Y=!1},30)}},_getDirection:function(t,n){return"function"==typeof this.options.direction?this.options.direction.call(this,t,n,e):this.options.direction},_onTapStart:function(t){if(t.cancelable){var n,r=this,a=this.el,i=this.options,s=i.preventOnFilter,l=t.type,u=t.touches&&t.touches[0],c=(u||t).target,f=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||c,h=i.filter;if(function(e){K.length=0;var t=e.getElementsByTagName("input"),n=t.length;for(;n--;){var r=t[n];r.checked&&K.push(r)}}(a),(!U||t.artificialBubble||re(a,c))&&!e&&!(/mousedown|pointerdown/.test(l)&&0!==t.button||i.disabled||f.isContentEditable))if(c=_closest(c,i.draggable,a,!1)){if(o!==c){if(n=_index(c,i.draggable),"function"==typeof h){if(h.call(this,t,c,this))return _dispatchEvent(r,f,"filter",c,a,a,n),void(s&&t.cancelable&&t.preventDefault())}else if(h&&(h=h.split(",").some(function(e){if(e=_closest(f,e.trim(),a,!1))return _dispatchEvent(r,e,"filter",c,a,a,n),!0})))return void(s&&t.cancelable&&t.preventDefault());i.handle&&!_closest(f,i.handle,a,!1)||this._prepareDragStart(t,u,c,n)}}else U&&ae(a,t,"_onTapStart")}},_handleAutoScroll:function(t,n){if(e&&this.options.scroll){var r=t.clientX,a=t.clientY,i=j.elementFromPoint(r,a),o=this;if(n||F||U){Q(t,o.options,i,n);var s=J(i,!0);!T||p&&r===m&&a===g||(p&&clearInterval(p),p=setInterval(function(){if(e){var i=J(j.elementFromPoint(r,a),!0);i!==s&&(s=i,ee(),Q(t,o.options,s,n))}},10),m=r,g=a)}else{if(!o.options.bubbleScroll||J(i,!0)===window)return void ee();Q(t,o.options,J(i,!1),!1)}}},_prepareDragStart:function(n,r,s,l){var u,f=this,d=f.el,p=f.options,m=d.ownerDocument;s&&!e&&s.parentNode===d&&(a=d,t=(e=s).parentNode,i=e.nextSibling,o=s,h=p.group,c=l,v={target:e,clientX:(r||n).clientX,clientY:(r||n).clientY},this._lastX=(r||n).clientX,this._lastY=(r||n).clientY,e.style["will-change"]="all",e.style.transition="",e.style.transform="",u=function(){f._disableDelayedDrag(),e.draggable=f.nativeDraggable,f._triggerDragStart(n,r),_dispatchEvent(f,a,"choose",e,a,a,c),_toggleClass(e,p.chosenClass,!0)},p.ignore.split(",").forEach(function(t){_find(e,t.trim(),_disableDraggable)}),p.supportPointer?(_on(m,"pointerup",f._onDrop),_on(m,"pointercancel",f._onDrop)):(_on(m,"mouseup",f._onDrop),_on(m,"touchend",f._onDrop),_on(m,"touchcancel",f._onDrop)),p.delay?(_on(m,"mouseup",f._disableDelayedDrag),_on(m,"touchend",f._disableDelayedDrag),_on(m,"touchcancel",f._disableDelayedDrag),_on(m,"mousemove",f._delayedDragTouchMoveHandler),_on(m,"touchmove",f._delayedDragTouchMoveHandler),p.supportPointer&&_on(m,"pointermove",f._delayedDragTouchMoveHandler),f._dragStartTimer=L(u,p.delay)):u())},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;X(G(t.clientX-this._lastX),G(t.clientY-this._lastY))>=this.options.touchStartThreshold&&this._disableDelayedDrag()},_disableDelayedDrag:function(){var e=this.el.ownerDocument;clearTimeout(this._dragStartTimer),_off(e,"mouseup",this._disableDelayedDrag),_off(e,"touchend",this._disableDelayedDrag),_off(e,"touchcancel",this._disableDelayedDrag),_off(e,"mousemove",this._delayedDragTouchMoveHandler),_off(e,"touchmove",this._delayedDragTouchMoveHandler),_off(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,n){n=n||("touch"==t.pointerType?t:null),!this.nativeDraggable||n?this.options.supportPointer?(n&&_on(j,"touchmove",_preventScroll),_on(j,"pointermove",this._onTouchMove)):n?(_on(j,"touchmove",_preventScroll),_on(j,"touchmove",this._onTouchMove)):_on(j,"mousemove",this._onTouchMove):(_on(e,"dragend",this),_on(a,"dragstart",this._onDragStart));try{j.selection?_nextTick(function(){j.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(t){if(E=!1,a&&e){this.nativeDraggable&&(_on(j,"dragover",this._handleAutoScroll),_on(j,"dragover",ne));var n=this.options;!t&&_toggleClass(e,n.dragClass,!1),_toggleClass(e,n.ghostClass,!0),_css(e,"transform",""),Sortable.active=this,t&&this._appendGhost(),_dispatchEvent(this,a,"start",e,a,a,c)}else this._nulling()},_emulateDragOver:function(t){if(b){if(this._lastX===b.clientX&&this._lastY===b.clientY&&!t)return;this._lastX=b.clientX,this._lastY=b.clientY,ie();for(var n=j.elementFromPoint(b.clientX,b.clientY),r=n;n&&n.shadowRoot;)r=n=n.shadowRoot.elementFromPoint(b.clientX,b.clientY);if(r)do{if(r[D])if(r[D]._onDragOver({clientX:b.clientX,clientY:b.clientY,target:n,rootEl:r})&&!this.options.dragoverBubble)break;n=r}while(r=r.parentNode);e.parentNode[D]._computeIsAligned(b),oe()}},_onTouchMove:function(e){if(v){if(!e.cancelable)return;var t=this.options,r=t.fallbackTolerance,a=t.fallbackOffset,i=e.touches?e.touches[0]:e,o=n&&_matrix(n),s=n&&o&&o.a,l=n&&o&&o.d,u=(i.clientX-v.clientX+a.x)/(s||1),c=(i.clientY-v.clientY+a.y)/(l||1),f=e.touches?"translate3d("+u+"px,"+c+"px,0)":"translate("+u+"px,"+c+"px)";if(!Sortable.active&&!E){if(r&&X(G(i.clientX-this._lastX),G(i.clientY-this._lastY))<r)return;this._onDragStart(e,!0)}this._handleAutoScroll(i,!0),y=!0,b=i,_css(n,"webkitTransform",f),_css(n,"mozTransform",f),_css(n,"msTransform",f),_css(n,"transform",f),e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!n){var t=_getRect(e,this.options.fallbackOnBody?j.body:a,!0),r=(_css(e),this.options);_toggleClass(n=e.cloneNode(!0),r.ghostClass,!1),_toggleClass(n,r.fallbackClass,!0),_toggleClass(n,r.dragClass,!0),_css(n,"box-sizing","border-box"),_css(n,"margin",0),_css(n,"top",t.top),_css(n,"left",t.left),_css(n,"width",t.width),_css(n,"height",t.height),_css(n,"opacity","0.8"),_css(n,"position","fixed"),_css(n,"zIndex","100000"),_css(n,"pointerEvents","none"),r.fallbackOnBody&&j.body.appendChild(n)||a.appendChild(n)}},_onDragStart:function(t,n){var i=this,o=t.dataTransfer,s=i.options;(r=_clone(e)).draggable=!1,r.style["will-change"]="",this._hideClone(),_toggleClass(r,i.options.chosenClass,!1),i._cloneId=_nextTick(function(){i.options.removeCloneOnHide||a.insertBefore(r,e),_dispatchEvent(i,a,"clone",e)}),!n&&_toggleClass(e,s.dragClass,!0),n?(M=!0,i._loopId=setInterval(i._emulateDragOver,50)):(_off(j,"mouseup",i._onDrop),_off(j,"touchend",i._onDrop),_off(j,"touchcancel",i._onDrop),_off(j,"pointercancel",i._onDrop),o&&(o.effectAllowed="move",s.setData&&s.setData.call(i,o,e)),_on(j,"drop",i),_css(e,"transform","translateZ(0)")),E=!0,i._dragStartId=_nextTick(i._dragStarted.bind(i,n)),_on(j,"selectstart",i)},_onDragOver:function(r){var o,s,l,u=this.el,f=r.target,p=this.options,m=p.group,g=Sortable.active,v=h===m,b=p.sort,S=this;if(!$&&(!U||r.rootEl||r.artificialBubble||re(u,f))){if(void 0!==r.preventDefault&&r.cancelable&&r.preventDefault(),y=!0,f=_closest(f,p.draggable,u,!0),_closest(r.target,null,e,!0)||f.animated)return completed();if(f!==e&&(M=!1),g&&!p.disabled&&(v?b||(l=!a.contains(e)):d===this||(this.lastPutMode=h.checkPull(this,g,e,r))&&m.checkPut(this,g,e,r))){var E=this._getDirection(r,f);if(o=_getRect(e),l)return this._hideClone(),t=a,i?a.insertBefore(e,i):a.appendChild(e),completed();if(0===u.children.length||u.children[0]===n||function(e,t,n){var r=_getRect(_lastChild(n)),a="vertical"===t?e.clientY:e.clientX,i="vertical"===t?e.clientX:e.clientY,o="vertical"===t?r.bottom:r.right,s="vertical"===t?r.left:r.top,l="vertical"===t?r.right:r.bottom;return i>s&&i<l&&a>o}(r,E,u)&&!e.animated){if(0!==u.children.length&&u.children[0]!==n&&u===r.target&&(f=_lastChild(u)),f&&(s=_getRect(f)),v?g._hideClone():g._showClone(this),!1!==_onMove(a,u,e,o,f,s,r,!!f))return u.appendChild(e),t=u,C=null,changed(),this._animate(o,e),f&&this._animate(s,f),completed()}else if(f&&f!==e&&void 0!==f.parentNode[D]&&f!==u){var O,N=0,P=f.sortableMouseAligned,I=e.parentNode!==u,B=function(e,t){var n=J(n,!0),r=_getRect(e)[t];for(;n;){var a=_getRect(n)[t];if(!("top"===t||"left"===t?r>=a:r<=a))return!0;if(n===V)break;n=J(n,!1)}return!1}(f,"vertical"===E?"top":"left");if(_!==f&&(x=null,O=_getRect(f)["vertical"===E?"top":"left"],A=!1),function(t,n,r){var a=t===e&&C||_getRect(t),i=n===e&&C||_getRect(n),o="vertical"===r?a.left:a.top,s="vertical"===r?a.right:a.bottom,l="vertical"===r?a.width:a.height,u="vertical"===r?i.left:i.top,c="vertical"===r?i.right:i.bottom,f="vertical"===r?i.width:i.height;return o===u||s===c||o+l/2===u+f/2}(e,f,E)&&P||I||B||p.invertSwap||"insert"===x||"swap"===x?("swap"!==x&&(R=p.invertSwap||I||T||B),N=function(t,n,r,a,i,o,s){var l=_getRect(n),u="vertical"===r?t.clientY:t.clientX,c="vertical"===r?l.height:l.width,f="vertical"===r?l.top:l.left,h="vertical"===r?l.bottom:l.right,d=_getRect(e),p=!1;if(!o)if(s&&k<c*a)if(!A&&(1===w?u>f+c*i/2:u<h-c*i/2)&&(A=!0),A)p=!0;else{"vertical"===r?d.top:d.left,"vertical"===r?d.bottom:d.right;if(1===w?u<f+k:u>h-k)return-1*w}else if(u>f+c*(1-a)/2&&u<h-c*(1-a)/2)return u>f+c/2?-1:1;if((p=p||o)&&(u<f+c*i/2||u>h-c*i/2))return u>f+c/2?1:-1;return 0}(r,f,E,p.swapThreshold,null==p.invertedSwapThreshold?p.swapThreshold:p.invertedSwapThreshold,R,_===f),x="swap"):(N=function(t,n){var r=_index(e,n.draggable),a=_index(t,n.draggable);return r<a?1:-1}(f,p),x="insert"),0===N)return completed();C=null,_=f,w=N,s=_getRect(f);var z=f.nextElementSibling,F=!1,H=_onMove(a,u,e,o,f,s,r,F=1===N);if(!1!==H)return 1!==H&&-1!==H||(F=1===H),$=!0,L(_unsilent,30),v?g._hideClone():g._showClone(this),F&&!z?u.appendChild(e):f.parentNode.insertBefore(e,F?z:f),t=e.parentNode,void 0===O||R||(k=G(O-_getRect(f)["vertical"===E?"top":"left"])),changed(),!I&&this._animate(s,f),this._animate(o,e),completed()}if(u.contains(e))return completed()}return U&&!r.rootEl&&ae(u,r,"_onDragOver"),!1}function completed(){return g&&(_toggleClass(e,d?d.options.ghostClass:g.options.ghostClass,!1),_toggleClass(e,p.ghostClass,!0)),d!==S&&S!==Sortable.active?d=S:S===Sortable.active&&(d=null),(f===e&&!e.animated||f===u&&!f.animated)&&(_=null),p.dragoverBubble||r.rootEl||f===j||(S._handleAutoScroll(r),e.parentNode[D]._computeIsAligned(r)),!p.dragoverBubble&&r.stopPropagation&&r.stopPropagation(),!0}function changed(){_dispatchEvent(S,a,"change",f,u,a,c,_index(e,p.draggable),r)}},_animate:function(t,n){var r=this.options.animation;if(r){var a=_getRect(n);if(n===e&&(C=a),1===t.nodeType&&(t=_getRect(t)),t.left+t.width/2!==a.left+a.width/2||t.top+t.height/2!==a.top+a.height/2){var i=_matrix(this.el),o=i&&i.a,s=i&&i.d;_css(n,"transition","none"),_css(n,"transform","translate3d("+(t.left-a.left)/(o||1)+"px,"+(t.top-a.top)/(s||1)+"px,0)"),n.offsetWidth,_css(n,"transition","transform "+r+"ms"+(this.options.easing?" "+this.options.easing:"")),_css(n,"transform","translate3d(0,0,0)")}"number"==typeof n.animated&&clearTimeout(n.animated),n.animated=L(function(){_css(n,"transition",""),_css(n,"transform",""),n.animated=!1},r)}},_offUpEvents:function(){var e=this.el.ownerDocument;_off(j,"touchmove",_preventScroll),_off(j,"pointermove",_preventScroll),_off(j,"touchmove",this._onTouchMove),_off(j,"pointermove",this._onTouchMove),_off(e,"mouseup",this._onDrop),_off(e,"touchend",this._onDrop),_off(e,"pointerup",this._onDrop),_off(e,"touchcancel",this._onDrop),_off(e,"pointercancel",this._onDrop),_off(j,"selectstart",this)},_onDrop:function(o){var s=this.el,l=this.options;E=!1,T=!1,R=!1,A=!1,clearInterval(this._loopId),clearInterval(p),ee(),clearTimeout(se),se=void 0,clearTimeout(this._dragStartTimer),_cancelNextTick(this._cloneId),_cancelNextTick(this._dragStartId),_off(j,"mousemove",this._onTouchMove),this.nativeDraggable&&(_off(j,"drop",this),_off(s,"dragstart",this._onDragStart),_off(j,"dragover",this._handleAutoScroll),_off(j,"dragover",ne)),this._offUpEvents(),o&&(y&&(o.cancelable&&o.preventDefault(),!l.dropBubble&&o.stopPropagation()),n&&n.parentNode&&n.parentNode.removeChild(n),(a===t||d&&"clone"!==d.lastPutMode)&&r&&r.parentNode&&r.parentNode.removeChild(r),e&&(this.nativeDraggable&&_off(e,"dragend",this),_disableDraggable(e),e.style["will-change"]="",_toggleClass(e,d?d.options.ghostClass:this.options.ghostClass,!1),_toggleClass(e,this.options.chosenClass,!1),_dispatchEvent(this,a,"unchoose",e,t,a,c,null,o),a!==t?((f=_index(e,l.draggable))>=0&&(_dispatchEvent(null,t,"add",e,t,a,c,f,o),_dispatchEvent(this,a,"remove",e,t,a,c,f,o),_dispatchEvent(null,t,"sort",e,t,a,c,f,o),_dispatchEvent(this,a,"sort",e,t,a,c,f,o)),d&&d.save()):e.nextSibling!==i&&(f=_index(e,l.draggable))>=0&&(_dispatchEvent(this,a,"update",e,t,a,c,f,o),_dispatchEvent(this,a,"sort",e,t,a,c,f,o)),Sortable.active&&(null!=f&&-1!==f||(f=c),_dispatchEvent(this,a,"end",e,t,a,c,f,o),this.save()))),this._nulling()},_nulling:function(){a=e=t=n=i=r=o=s=l=S.length=p=m=g=v=b=y=f=c=_=w=C=d=h=Sortable.active=null,K.forEach(function(e){e.checked=!0}),K.length=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":e&&(this._onDragOver(t),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move");e.cancelable&&e.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,r=0,a=n.length,i=this.options;r<a;r++)_closest(e=n[r],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||_generateId(e));return t},sort:function(e){var t={},n=this.el;this.toArray().forEach(function(e,r){var a=n.children[r];_closest(a,this.options.draggable,n,!1)&&(t[e]=a)},this),e.forEach(function(e){t[e]&&(n.removeChild(t[e]),n.appendChild(t[e]))})},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return _closest(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var n=this.options;if(void 0===t)return n[e];n[e]=t,"group"===e&&te(n)},destroy:function(){var e=this.el;e[D]=null,_off(e,"mousedown",this._onTapStart),_off(e,"touchstart",this._onTapStart),_off(e,"pointerdown",this._onTapStart),this.nativeDraggable&&(_off(e,"dragover",this),_off(e,"dragenter",this)),Array.prototype.forEach.call(e.querySelectorAll("[draggable]"),function(e){e.removeAttribute("draggable")}),this._onDrop(),O.splice(O.indexOf(this.el),1),this.el=e=null},_hideClone:function(){r.cloneHidden||(_css(r,"display","none"),r.cloneHidden=!0,r.parentNode&&this.options.removeCloneOnHide&&r.parentNode.removeChild(r))},_showClone:function(t){"clone"===t.lastPutMode?r.cloneHidden&&(a.contains(e)&&!this.options.group.revertClone?a.insertBefore(r,e):i?a.insertBefore(r,i):a.appendChild(r),this.options.group.revertClone&&this._animate(e,r),_css(r,"display",""),r.cloneHidden=!1):this._hideClone()}},Sortable.utils={on:_on,off:_off,css:_css,find:_find,is:function(e,t){return!!_closest(e,t,e,!1)},extend:_extend,throttle:_throttle,closest:_closest,toggleClass:_toggleClass,clone:_clone,index:_index,nextTick:_nextTick,cancelNextTick:_cancelNextTick,detectDirection:Z,getChild:_getChild},Sortable.create=function(e,t){return new Sortable(e,t)},Sortable.version="1.8.0",Sortable})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{},s=n.helperMissing,l=e.escapeExpression;return'<div class="loader__mask">\n <div class="loader">\n '+l("function"==typeof(i=null!=(i=n.spinner||(null!=t?t.spinner:t))?i:s)?i.call(o,{name:"spinner",hash:{},data:a}):i)+'\n <p class="loader__text">'+l("function"==typeof(i=null!=(i=n.text||(null!=t?t.text:t))?i:s)?i.call(o,{name:"text",hash:{},data:a}):i)+"</p>\n </div>\n</div>\n"},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{},s=n.helperMissing,l=e.escapeExpression;return'<div class="timeline__body">\n <div class=\'timeline__chart\'>\n <svg class="timeline__chart_svg">\n <g transform="translate('+l("function"==typeof(i=null!=(i=n.PADDING||(null!=t?t.PADDING:t))?i:s)?i.call(o,{name:"PADDING",hash:{},data:a}):i)+', 15)">\n <g class="timeline__slider"/>\n <g class="timeline__plot" transform="translate(0, '+l("function"==typeof(i=null!=(i=n.PADDING||(null!=t?t.PADDING:t))?i:s)?i.call(o,{name:"PADDING",hash:{},data:a}):i)+')">\n <g class="timeline__chart__axis timeline__chart__axis_x"/>\n </g>\n </g>\n </svg>\n </div>\n <div class=\'timeline__brush\'>\n <svg class="timeline__brush_svg">\n <g class="timeline__brush__axis timeline__brush__axis_x"/>\n </svg>\n </div>\n</div>'},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"chart.status.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="status-widget__content chart__body"></div>\n';var o},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"chart.severity.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="severity-widget__content chart__body"></div>';var o},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"chart.duration.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="duration-widget__content chart__body"></div>';var o},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"widget.durationTrend.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="duration-trend__chart"></div>\n';var o},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"widget.retryTrend.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="retry-trend__chart"></div>\n';var o},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"widget.categoriesTrend.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="categories-trend__chart"></div>\n';var o},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return" "+s(__default(n(9)).call(o,"widget.summary.aggregatedName",{name:"t",hash:{},data:i}))+'\n <span class="'+s(__default(n(7)).call(o,"widget","subtitle",{name:"b",hash:{},data:i}))+'">'+s(e.lambda(null!=t?t.launchesCount:t,t))+" "+s(__default(n(9)).call(o,"widget.summary.launches",{name:"t",hash:{count:null!=t?t.launchesCount:t},data:i}))+"</span>\n"},3:function(e,t,r,a,i){var o,s=e.escapeExpression;return" "+s(e.lambda(null!=t?t.reportName:t,t))+" "+s(__default(n(35)).call(null!=t?t:e.nullContext||{},null!=(o=null!=t?t.time:t)?o.stop:o,{name:"date",hash:{},data:i}))+"\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return'<div class="'+l(__default(n(7)).call(s,"widget","flex-line",{name:"b",hash:{},data:i}))+'">\n <div class="'+l(__default(n(7)).call(s,"widget","column",{name:"b",hash:{},data:i}))+'">\n <h2 class="'+l(__default(n(7)).call(s,"widget","title",{name:"b",hash:{},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.isAggregated:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(3,i,0),data:i}))?o:"")+' <div class="'+l(__default(n(7)).call(s,"widget","subtitle",{name:"b",hash:{},data:i}))+'">\n '+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.start:o,{name:"time",hash:{},data:i}))+" - "+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.stop:o,{name:"time",hash:{},data:i}))+" ("+l(__default(n(20)).call(s,null!=(o=null!=t?t.time:t)?o.duration:o,2,{name:"duration",hash:{},data:i}))+')\n </div>\n </h2>\n <div class="'+l(__default(n(7)).call(s,"summary-widget","stats",{name:"b",hash:{},data:i}))+' splash">\n <div class="'+l(__default(n(7)).call(s,"splash","title",{name:"b",hash:{},data:i}))+'">'+l(e.lambda(null!=(o=null!=t?t.statistic:t)?o.total:o,t))+'</div>\n <div class="'+l(__default(n(7)).call(s,"splash","subtitle",{name:"b",hash:{},data:i}))+'">'+l(__default(n(9)).call(s,"widget.summary.testResults",{name:"t",hash:{count:null!=(o=null!=t?t.statistic:t)?o.total:o},data:i}))+'</div>\n </div>\n </div>\n <div class="'+l(__default(n(7)).call(s,"widget","column",{name:"b",hash:{},data:i}))+" "+l(__default(n(7)).call(s,"summary-widget","chart",{name:"b",hash:{},data:i}))+'"></div>\n</div>\n'},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){return'<h2 class="widget__title">\n '+e.escapeExpression((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"widget.trend.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="history-trend__chart"></div>\n';var o},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{};return' <div class="table table_hover widget__table">\n'+(null!=(i=n.each.call(o,null!=t?t.items:t,{name:"each",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a}))?i:"")+(null!=(i=n.if.call(o,null!=t?t.overLimit:t,{name:"if",hash:{},fn:e.program(6,a,0),inverse:e.noop,data:a}))?i:"")+" </div>\n\n"},2:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return' <div class="'+l(__default(n(7)).call(s,"table","row",{name:"b",hash:{},data:i}))+'" disabled>\n <div class="'+l(__default(n(7)).call(s,"table","col",{name:"b",hash:{},data:i}))+' long-line">\n '+l(e.lambda(null!=t?t.name:t,t))+'\n </div>\n <div class="'+l(__default(n(7)).call(s,"table","col",{name:"b",hash:{},data:i}))+' long-line">\n'+(null!=(o=r.each.call(s,null!=t?t.values:t,{name:"each",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+" </div>\n </div>\n"},3:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return" "+e.escapeExpression(__default(n(72)).call(s,t,{name:"linky",hash:{},data:i}))+(null!=(o=r.unless.call(s,i&&i.last,{name:"unless",hash:{},fn:e.program(4,i,0),inverse:e.noop,data:i}))?o:"")+"\n"},4:function(e,t,n,r,a){return",<br>"},6:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <a class="'+s(__default(n(7)).call(o,"table","row",{name:"b",hash:{},data:i}))+' clickable environment-widget__expand">\n <div class="'+s(__default(n(7)).call(o,"table","col",{name:"b",hash:{center:!0},data:i}))+'">'+s(__default(n(9)).call(o,"widget.environment.showAll",{name:"t",hash:{},data:i}))+"</div>\n </a>\n"},8:function(e,t,r,a,i){return' <div class="widget__noitems">'+e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"widget.environment.empty",{name:"t",hash:{},data:i}))+"</div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return'<h2 class="widget__title">\n '+e.escapeExpression(__default(n(9)).call(s,"widget.environment.name",{name:"t",hash:{},data:i}))+"\n</h2>\n"+(null!=(o=r.if.call(s,null!=t?t.items:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(8,i,0),data:i}))?o:"")},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i;return null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.items:t,{name:"each",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a}))?i:""},2:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression,u=e.lambda;return' <span class="table__row">\n <div class="'+l(__default(n(7)).call(s,"table","col",{name:"b",hash:{},data:i}))+' executor">\n <span class="executor-icon executor-icon__'+l(u(null!=t?t.type:t,t))+'"> </span>\n '+l(u(null!=t?t.name:t,t))+"\n </div>\n"+(null!=(o=r.if.call(s,null!=t?t.buildName:t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.program(8,i,0),data:i}))?o:"")+" </span>\n"},3:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <div class="'+e.escapeExpression(__default(n(7)).call(s,"table","col",{name:"b",hash:{right:!0},data:i}))+' executor">\n'+(null!=(o=r.if.call(s,null!=t?t.buildUrl:t,{name:"if",hash:{},fn:e.program(4,i,0),inverse:e.program(6,i,0),data:i}))?o:"")+"\n </div>\n"},4:function(e,t,n,r,a){var i=e.lambda,o=e.escapeExpression;return' <a class="link" href="'+o(i(null!=t?t.buildUrl:t,t))+'">\n '+o(i(null!=t?t.buildName:t,t))+'\n <span class="fa fa-external-link"></span>\n </a>\n'},6:function(e,t,n,r,a){return" "+e.escapeExpression(e.lambda(null!=t?t.buildName:t,t))+"\n"},8:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <div class="'+s(__default(n(7)).call(o,"table","col",{name:"b",hash:{right:!0},data:i}))+'">\n '+s(__default(n(9)).call(o,"widget.executors.unknown",{name:"t",hash:{},data:i}))+"\n </div>\n"},10:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <div class="table__row">\n <div class="'+s(__default(n(7)).call(o,"table","col",{name:"b",hash:{center:!0},data:i}))+'">\n '+s(__default(n(9)).call(o,"widget.executors.empty",{name:"t",hash:{},data:i}))+"\n </div>\n </div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return'<h2 class="widget__title">\n '+e.escapeExpression(__default(n(9)).call(s,"widget.executors.name",{name:"t",hash:{},data:i}))+'\n</h2>\n<div class="table table_hover widget__table">\n'+(null!=(o=r.if.call(s,null!=t?t.items:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(10,i,0),data:i}))?o:"")+"</div>\n"},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s;return' <h3 class="pane__section-title">'+e.escapeExpression((s=n(9),s&&(s.__esModule?s.default:s)).call(null!=t?t:e.nullContext||{},"testResult.description.name",{name:"t",hash:{},data:i}))+'</h3>\n <div class="description__text">'+(null!=(o=e.lambda(null!=t?t.descriptionHtml:t,t))?o:"")+"</div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.descriptionHtml:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i;return" Tags: "+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.tags:t,{name:"each",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a}))?i:"")},2:function(e,t,n,r,a){var i;return'\n <span class="label label__info">'+(null!=(i=n.if.call(null!=t?t:e.nullContext||{},t,{name:"if",hash:{},fn:e.program(3,a,0),inverse:e.program(5,a,0),data:a}))?i:"")+"</span>\n"},3:function(e,t,n,r,a){return e.escapeExpression(e.lambda(t,t))},5:function(e,t,n,r,a){return"null"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.tags:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s,l=null!=t?t:e.nullContext||{};return" "+e.escapeExpression((s=n(9),s&&(s.__esModule?s.default:s)).call(l,"testResult.categories.name",{name:"t",hash:{},data:i}))+":\n"+(null!=(o=r.each.call(l,null!=t?t.categories:t,{name:"each",hash:{},fn:e.program(2,i,0),inverse:e.noop,data:i}))?o:"")},2:function(e,t,n,r,a){return" <span>"+e.escapeExpression(e.lambda(null!=t?t.name:t,t))+" </span>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.categories:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression;return' <div class="'+c(__default(n(7)).call(u,null!=t?t.cls:t,"success-rate",{name:"b",hash:{},data:i}))+'">\n '+c(__default(n(9)).call(u,"testResult.history.successRate",{name:"t",hash:{},data:i}))+" "+c(e.lambda(null!=t?t.successRate:t,t))+"\n"+(null!=(l=r.if.call(u,null!=(l=null!=(l=null!=t?t.history:t)?l.statistic:l)?l.total:l,{name:"if",hash:{},fn:e.program(2,i,0,o,s),inverse:e.noop,data:i}))?l:"")+" </div>\n"+(null!=(l=r.each.call(u,null!=(l=null!=t?t.history:t)?l.items:l,{name:"each",hash:{},fn:e.program(4,i,0,o,s),inverse:e.noop,data:i}))?l:"")},2:function(e,t,r,a,i){var o;return" ("+e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.history.statistic",{name:"t",hash:{total:null!=(o=null!=(o=null!=t?t.history:t)?o.statistic:o)?o.total:o,passed:null!=(o=null!=(o=null!=t?t.history:t)?o.statistic:o)?o.passed:o},data:i}))+")\n"},4:function(e,t,n,r,a,i,o){var s;return null!=(s=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.reportUrl:t,{name:"if",hash:{},fn:e.program(5,a,0,i,o),inverse:e.program(7,a,0,i,o),data:a}))?s:""},5:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{},c=e.escapeExpression,f=e.lambda;return' <div class="'+c(__default(n(7)).call(u,null!=s[1]?s[1].cls:s[1],"row",{name:"b",hash:{},data:i}))+'">\n <a class="link" href="'+c(f(null!=t?t.reportUrl:t,t))+'" target="_blank">\n <span class="label label_status_'+c(f(null!=t?t.status:t,t))+'">'+c(f(null!=t?t.status:t,t))+"</span>\n <span>"+c(__default(n(9)).call(u,"testResult.history.time",{name:"t",hash:{time:__default(n(30)).call(u,null!=(l=null!=t?t.time:t)?l.start:l,{name:"time",hash:{},data:i}),date:__default(n(35)).call(u,null!=(l=null!=t?t.time:t)?l.start:l,{name:"date",hash:{},data:i})},data:i}))+"</span>\n </a>\n </div>\n"},7:function(e,t,r,a,i){var o,s=e.lambda,l=e.escapeExpression,u=null!=t?t:e.nullContext||{};return' <div>\n <span class="label label_status_'+l(s(null!=t?t.status:t,t))+'">'+l(s(null!=t?t.status:t,t))+"</span>\n <span>"+l(__default(n(9)).call(u,"testResult.history.time",{name:"t",hash:{time:__default(n(30)).call(u,null!=(o=null!=t?t.time:t)?o.start:o,{name:"time",hash:{},data:i}),date:__default(n(35)).call(u,null!=(o=null!=t?t.time:t)?o.start:o,{name:"date",hash:{},data:i})},data:i}))+"</span>\n </div>\n"},9:function(e,t,r,a,i){return" "+e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.history.empty",{name:"t",hash:{},data:i}))+"\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i,o,s){var l,u=null!=t?t:e.nullContext||{};return'<div class="'+e.escapeExpression(__default(n(7)).call(u,"pane","section",{name:"b",hash:{},data:i}))+'">\n'+(null!=(l=r.if.call(u,null!=t?t.history:t,{name:"if",hash:{},fn:e.program(1,i,0,o,s),inverse:e.program(9,i,0,o,s),data:i}))?l:"")+"</div>"},useData:!0,useDepths:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,n,r,a){var i;return null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.retries:t,{name:"each",hash:{},fn:e.program(2,a,0),inverse:e.noop,data:a}))?i:""},2:function(e,t,r,a,i){var o,s=e.lambda,l=e.escapeExpression,u=null!=t?t:e.nullContext||{};return' <a class="link" href="#/testresult/'+l(s(null!=t?t.uid:t,t))+'">\n <span class="label label_status_'+l(s(null!=t?t.status:t,t))+'">'+l(s(null!=t?t.status:t,t))+"</span>\n <span>"+l(__default(n(9)).call(u,"testResult.retries.time",{name:"t",hash:{date:__default(n(30)).call(u,null!=(o=null!=t?t.time:t)?o.start:o,{name:"time",hash:{},data:i}),time:__default(n(35)).call(u,null!=(o=null!=t?t.time:t)?o.start:o,{name:"date",hash:{},data:i})},data:i}))+'</span>\n <pre class="preformated-text"><code>'+l(s(null!=t?t.statusDetails:t,t))+"</code></pre>\n </a>\n"},4:function(e,t,r,a,i){return" "+e.escapeExpression(__default(n(9)).call(null!=t?t:e.nullContext||{},"testResult.retries.empty",{name:"t",hash:{},data:i}))+"\n"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return'<div class="'+e.escapeExpression(__default(n(7)).call(s,"pane","section",{name:"b",hash:{},data:i}))+'">\n'+(null!=(o=r.if.call(s,null!=t?t.retries:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(4,i,0),data:i}))?o:"")+"</div>"},useData:!0})},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=e.escapeExpression;return' <h3 class="pane__section-title">'+s((o=n(9),o&&(o.__esModule?o.default:o)).call(null!=t?t:e.nullContext||{},"testResult.owner.name",{name:"t",hash:{},data:i}))+"</h3>\n <div>"+s(e.lambda(null!=t?t.owner:t,t))+"</div>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.owner:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.escapeExpression;return' <span data-tooltip="'+l(__default(n(35)).call(s,null!=(o=null!=t?t.time:t)?o.start:o,{name:"date",hash:{},data:i}))+" "+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.start:o,{name:"time",hash:{},data:i}))+" – "+l(__default(n(30)).call(s,null!=(o=null!=t?t.time:t)?o.stop:o,{name:"time",hash:{},data:i}))+'">\n '+l(__default(n(9)).call(s,"testResult.duration.name",{name:"t",hash:{},data:i}))+':\n <span class="fa fa-clock-o"></span>\n '+l(__default(n(20)).call(s,null!=(o=null!=t?t.time:t)?o.duration:o,2,{name:"duration",hash:{},data:i}))+"\n </span>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.time:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return"<h3>"+e.escapeExpression(__default(n(9)).call(s,"testResult.parameters.name",{name:"t",hash:{},data:i}))+"</h3>\n"+(null!=(o=r.each.call(s,null!=t?t.parameters:t,{name:"each",hash:{},fn:e.program(2,i,0),inverse:e.noop,data:i}))?o:"")},2:function(e,t,n,r,a){var i,o=null!=t?t:e.nullContext||{};return' <div class="environment long-line line-ellipsis">\n <span class="environment__key">'+(null!=(i=n.if.call(o,null!=t?t.name:t,{name:"if",hash:{},fn:e.program(3,a,0),inverse:e.program(5,a,0),data:a}))?i:"")+"</span>:\n"+(null!=(i=n.if.call(o,null!=t?t.value:t,{name:"if",hash:{},fn:e.program(7,a,0),inverse:e.program(9,a,0),data:a}))?i:"")+" </div>\n"},3:function(e,t,n,r,a){return e.escapeExpression(e.lambda(null!=t?t.name:t,t))},5:function(e,t,n,r,a){return"<null>"},7:function(e,t,r,a,i){return" <span>"+e.escapeExpression(__default(n(72)).call(null!=t?t:e.nullContext||{},null!=t?t.value:t,{name:"linky",hash:{},data:i}))+"</span>\n"},9:function(e,t,n,r,a){return" null\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=(i=null!=t?t.parameters:t)?i.length:i,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{};return' <h3 class="pane__section-title">'+e.escapeExpression(__default(n(9)).call(s,"testResult.links.name",{name:"t",hash:{},data:i}))+"</h3>\n"+(null!=(o=r.each.call(s,null!=t?t.links:t,{name:"each",hash:{},fn:e.program(2,i,0),inverse:e.noop,data:i}))?o:"")},2:function(e,t,r,a,i){var o,s=null!=t?t:e.nullContext||{},l=e.lambda,u=e.escapeExpression;return' <span class="testresult-link">\n'+(null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"issue",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(s,__default(n(25)).call(s,null!=t?t.type:t,"tms",{name:"eq",hash:{},data:i}),{name:"if",hash:{},fn:e.program(5,i,0),inverse:e.noop,data:i}))?o:"")+' <a class="link" href="'+u(l(null!=t?t.url:t,t))+'" target="_blank">'+u(l(null!=t?t.name:t,t))+"</a>\n </span>\n"},3:function(e,t,n,r,a){return' <span class="fa fa-bug"></span>\n'},5:function(e,t,n,r,a){return' <span class="fa fa-database"></span>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return null!=(i=n.if.call(null!=t?t:e.nullContext||{},null!=t?t.links:t,{name:"if",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:""},useData:!0})},function(e,t,n){},function(e,t,n){},function(e,t,n){e.exports=function(e,t){"use strict";e="default"in e?e.default:e,t="default"in t?t.default:t;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},r=t.Radio,a=t.Radio={};a.VERSION="2.0.0",a.noConflict=function(){return t.Radio=r,this},a.DEBUG=!1,a._debugText=function(e,t,n){return e+(n?" on the "+n+" channel":"")+': "'+t+'"'},a.debugLog=function(e,t,n){a.DEBUG&&console&&console.warn&&console.warn(a._debugText(e,t,n))};var i=/\s+/;function removeHandler(e,t,n,r){var a=e[t];if(!(n&&n!==a.callback&&n!==a.callback._callback||r&&r!==a.context))return delete e[t],!0}a._eventsApi=function(t,r,a,o){if(!a)return!1;var s={};if("object"===(void 0===a?"undefined":n(a))){for(var l in a){var u=t[r].apply(t,[l,a[l]].concat(o));i.test(l)?e.extend(s,u):s[l]=u}return s}if(i.test(a)){for(var c=a.split(i),f=0,h=c.length;f<h;f++)s[c[f]]=t[r].apply(t,[c[f]].concat(o));return s}return!1},a._callHandler=function(e,t,n){var r=n[0],a=n[1],i=n[2];switch(n.length){case 0:return e.call(t);case 1:return e.call(t,r);case 2:return e.call(t,r,a);case 3:return e.call(t,r,a,i);default:return e.apply(t,n)}};var o,s,l={};function _partial(t){return l[t]||(l[t]=e.bind(a.log,a,t))}function makeCallback(t){return e.isFunction(t)?t:function(){return t}}e.extend(a,{log:function(t,n){if("undefined"!=typeof console){var r=e.toArray(arguments).slice(2);console.log("["+t+'] "'+n+'"',r)}},tuneIn:function(e){var t=a.channel(e);return t._tunedIn=!0,t.on("all",_partial(e)),this},tuneOut:function(e){var t=a.channel(e);return t._tunedIn=!1,t.off("all",_partial(e)),delete l[e],this}}),a.Requests={request:function(t){var n=e.toArray(arguments).slice(1),r=a._eventsApi(this,"request",t,n);if(r)return r;var i=this.channelName,o=this._requests;if(i&&this._tunedIn&&a.log.apply(this,[i,t].concat(n)),o&&(o[t]||o.default)){var s=o[t]||o.default;return n=o[t]?n:arguments,a._callHandler(s.callback,s.context,n)}a.debugLog("An unhandled request was fired",t,i)},reply:function(e,t,n){return a._eventsApi(this,"reply",e,[t,n])?this:(this._requests||(this._requests={}),this._requests[e]&&a.debugLog("A request was overwritten",e,this.channelName),this._requests[e]={callback:makeCallback(t),context:n||this},this)},replyOnce:function(t,n,r){if(a._eventsApi(this,"replyOnce",t,[n,r]))return this;var i=this,o=e.once(function(){return i.stopReplying(t),makeCallback(n).apply(this,arguments)});return this.reply(t,o,r)},stopReplying:function(t,n,r){return a._eventsApi(this,"stopReplying",t)?this:(t||n||r?function(t,n,r,a){t||(t={});for(var i=n?[n]:e.keys(t),o=!1,s=0,l=i.length;s<l;s++)n=i[s],t[n]&&removeHandler(t,n,r,a)&&(o=!0);return o}(this._requests,t,n,r)||a.debugLog("Attempted to remove the unregistered request",t,this.channelName):delete this._requests,this)}},a._channels={},a.channel=function(e){if(!e)throw new Error("You must provide a name for the channel.");return a._channels[e]?a._channels[e]:a._channels[e]=new a.Channel(e)},a.Channel=function(e){this.channelName=e},e.extend(a.Channel.prototype,t.Events,a.Requests,{reset:function(){return this.off(),this.stopListening(),this.stopReplying(),this}});var u=[t.Events,a.Requests];return e.each(u,function(t){e.each(t,function(t,n){a[n]=function(t){return s=e.toArray(arguments).slice(1),(o=this.channel(t))[n].apply(o,s)}})}),a.reset=function(t){var n=t?[this._channels[t]]:this._channels;e.each(n,function(e){e.reset()})},a}(n(14),n(13))},function(e,t){function _typeof2(e){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _typeof(t){return"function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?e.exports=_typeof=function(e){return _typeof2(e)}:e.exports=_typeof=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":_typeof2(e)},_typeof(t)}e.exports=_typeof},function(e,t){function _setPrototypeOf(t,n){return e.exports=_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_setPrototypeOf(t,n)}e.exports=_setPrototypeOf},function(e,t,n){(function(e,r){var a;/*! https://mths.be/punycode v1.4.1 by @mathias */!function(i){t&&t.nodeType,e&&e.nodeType;var o="object"==typeof r&&r;o.global!==o&&o.window!==o&&o.self;var s,l=2147483647,u=36,c=1,f=26,h=38,d=700,p=72,m=128,g="-",v=/^xn--/,b=/[^\x20-\x7E]/,y=/[\x2E\u3002\uFF0E\uFF61]/g,_={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},w=u-c,x=Math.floor,k=String.fromCharCode;function error(e){throw new RangeError(_[e])}function map(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function mapDomain(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+map((e=e.replace(y,".")).split("."),t).join(".")}function ucs2decode(e){for(var t,n,r=[],a=0,i=e.length;a<i;)(t=e.charCodeAt(a++))>=55296&&t<=56319&&a<i?56320==(64512&(n=e.charCodeAt(a++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),a--):r.push(t);return r}function ucs2encode(e){return map(e,function(e){var t="";return e>65535&&(t+=k((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=k(e)}).join("")}function digitToBasic(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function adapt(e,t,n){var r=0;for(e=n?x(e/d):e>>1,e+=x(e/t);e>w*f>>1;r+=u)e=x(e/w);return x(r+(w+1)*e/(e+h))}function decode(e){var t,n,r,a,i,o,s,h,d,v,b,y=[],_=e.length,w=0,k=m,C=p;for((n=e.lastIndexOf(g))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&error("not-basic"),y.push(e.charCodeAt(r));for(a=n>0?n+1:0;a<_;){for(i=w,o=1,s=u;a>=_&&error("invalid-input"),((h=(b=e.charCodeAt(a++))-48<10?b-22:b-65<26?b-65:b-97<26?b-97:u)>=u||h>x((l-w)/o))&&error("overflow"),w+=h*o,!(h<(d=s<=C?c:s>=C+f?f:s-C));s+=u)o>x(l/(v=u-d))&&error("overflow"),o*=v;C=adapt(w-i,t=y.length+1,0==i),x(w/t)>l-k&&error("overflow"),k+=x(w/t),w%=t,y.splice(w++,0,k)}return ucs2encode(y)}function encode(e){var t,n,r,a,i,o,s,h,d,v,b,y,_,w,C,S=[];for(y=(e=ucs2decode(e)).length,t=m,n=0,i=p,o=0;o<y;++o)(b=e[o])<128&&S.push(k(b));for(r=a=S.length,a&&S.push(g);r<y;){for(s=l,o=0;o<y;++o)(b=e[o])>=t&&b<s&&(s=b);for(s-t>x((l-n)/(_=r+1))&&error("overflow"),n+=(s-t)*_,t=s,o=0;o<y;++o)if((b=e[o])<t&&++n>l&&error("overflow"),b==t){for(h=n,d=u;!(h<(v=d<=i?c:d>=i+f?f:d-i));d+=u)C=h-v,w=u-v,S.push(k(digitToBasic(v+C%w,0))),h=x(C/w);S.push(k(digitToBasic(h,0))),i=adapt(n,_,r==a),n=0,++r}++n,++t}return S.join("")}s={version:"1.4.1",ucs2:{decode:ucs2decode,encode:ucs2encode},decode:decode,encode:encode,toASCII:function(e){return mapDomain(e,function(e){return b.test(e)?"xn--"+encode(e):e})},toUnicode:function(e){return mapDomain(e,function(e){return v.test(e)?decode(e.slice(4).toLowerCase()):e})}},void 0===(a=function(){return s}.call(t,n,t,e))||(e.exports=a)}()}).call(this,n(53)(e),n(37))},function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(131),t.encode=t.stringify=n(132)},function(e,t,n){"use strict";function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,a){t=t||"&",n=n||"=";var i={};if("string"!=typeof e||0===e.length)return i;var o=/\+/g;e=e.split(t);var s=1e3;a&&"number"==typeof a.maxKeys&&(s=a.maxKeys);var l=e.length;s>0&&l>s&&(l=s);for(var u=0;u<l;++u){var c,f,h,d,p=e[u].replace(o,"%20"),m=p.indexOf(n);m>=0?(c=p.substr(0,m),f=p.substr(m+1)):(c=p,f=""),h=decodeURIComponent(c),d=decodeURIComponent(f),hasOwnProperty(i,h)?r(i[h])?i[h].push(d):i[h]=[i[h],d]:i[h]=d}return i};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,o){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?map(i(e),function(i){var o=encodeURIComponent(r(i))+n;return a(e[i])?map(e[i],function(e){return o+encodeURIComponent(r(e))}).join(t):o+encodeURIComponent(r(e[i]))}).join(t):o?encodeURIComponent(r(o))+n+encodeURIComponent(r(e)):""};var a=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function map(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var i=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},function(e,t,n){},function(e,t,n){var r;(function(){var n=this,a=n._,i=Array.prototype,o=Object.prototype,s=Function.prototype,l=i.push,u=i.slice,c=o.toString,f=o.hasOwnProperty,h=Array.isArray,d=Object.keys,p=s.bind,m=Object.create,g=function(){},v=function(e){return e instanceof v?e:this instanceof v?void(this._wrapped=e):new v(e)};e.exports&&(t=e.exports=v),t._=v,v.VERSION="1.8.3";var b=function(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)};case 4:return function(n,r,a,i){return e.call(t,n,r,a,i)}}return function(){return e.apply(t,arguments)}},y=function(e,t,n){return null==e?v.identity:v.isFunction(e)?b(e,t,n):v.isObject(e)?v.matcher(e):v.property(e)};v.iteratee=function(e,t){return y(e,t,1/0)};var _=function(e,t){return function(n){var r=arguments.length;if(r<2||null==n)return n;for(var a=1;a<r;a++)for(var i=arguments[a],o=e(i),s=o.length,l=0;l<s;l++){var u=o[l];t&&void 0!==n[u]||(n[u]=i[u])}return n}},w=function(e){if(!v.isObject(e))return{};if(m)return m(e);g.prototype=e;var t=new g;return g.prototype=null,t},x=function(e){return function(t){return null==t?void 0:t[e]}},k=Math.pow(2,53)-1,C=x("length"),S=function(e){var t=C(e);return"number"==typeof t&&t>=0&&t<=k};function createReduce(e){return function(t,n,r,a){n=b(n,a,4);var i=!S(t)&&v.keys(t),o=(i||t).length,s=e>0?0:o-1;return arguments.length<3&&(r=t[i?i[s]:s],s+=e),function(t,n,r,a,i,o){for(;i>=0&&i<o;i+=e){var s=a?a[i]:i;r=n(r,t[s],s,t)}return r}(t,n,r,i,s,o)}}v.each=v.forEach=function(e,t,n){var r,a;if(t=b(t,n),S(e))for(r=0,a=e.length;r<a;r++)t(e[r],r,e);else{var i=v.keys(e);for(r=0,a=i.length;r<a;r++)t(e[i[r]],i[r],e)}return e},v.map=v.collect=function(e,t,n){t=y(t,n);for(var r=!S(e)&&v.keys(e),a=(r||e).length,i=Array(a),o=0;o<a;o++){var s=r?r[o]:o;i[o]=t(e[s],s,e)}return i},v.reduce=v.foldl=v.inject=createReduce(1),v.reduceRight=v.foldr=createReduce(-1),v.find=v.detect=function(e,t,n){var r;if(void 0!==(r=S(e)?v.findIndex(e,t,n):v.findKey(e,t,n))&&-1!==r)return e[r]},v.filter=v.select=function(e,t,n){var r=[];return t=y(t,n),v.each(e,function(e,n,a){t(e,n,a)&&r.push(e)}),r},v.reject=function(e,t,n){return v.filter(e,v.negate(y(t)),n)},v.every=v.all=function(e,t,n){t=y(t,n);for(var r=!S(e)&&v.keys(e),a=(r||e).length,i=0;i<a;i++){var o=r?r[i]:i;if(!t(e[o],o,e))return!1}return!0},v.some=v.any=function(e,t,n){t=y(t,n);for(var r=!S(e)&&v.keys(e),a=(r||e).length,i=0;i<a;i++){var o=r?r[i]:i;if(t(e[o],o,e))return!0}return!1},v.contains=v.includes=v.include=function(e,t,n,r){return S(e)||(e=v.values(e)),("number"!=typeof n||r)&&(n=0),v.indexOf(e,t,n)>=0},v.invoke=function(e,t){var n=u.call(arguments,2),r=v.isFunction(t);return v.map(e,function(e){var a=r?t:e[t];return null==a?a:a.apply(e,n)})},v.pluck=function(e,t){return v.map(e,v.property(t))},v.where=function(e,t){return v.filter(e,v.matcher(t))},v.findWhere=function(e,t){return v.find(e,v.matcher(t))},v.max=function(e,t,n){var r,a,i=-1/0,o=-1/0;if(null==t&&null!=e)for(var s=0,l=(e=S(e)?e:v.values(e)).length;s<l;s++)(r=e[s])>i&&(i=r);else t=y(t,n),v.each(e,function(e,n,r){((a=t(e,n,r))>o||a===-1/0&&i===-1/0)&&(i=e,o=a)});return i},v.min=function(e,t,n){var r,a,i=1/0,o=1/0;if(null==t&&null!=e)for(var s=0,l=(e=S(e)?e:v.values(e)).length;s<l;s++)(r=e[s])<i&&(i=r);else t=y(t,n),v.each(e,function(e,n,r){((a=t(e,n,r))<o||a===1/0&&i===1/0)&&(i=e,o=a)});return i},v.shuffle=function(e){for(var t,n=S(e)?e:v.values(e),r=n.length,a=Array(r),i=0;i<r;i++)(t=v.random(0,i))!==i&&(a[i]=a[t]),a[t]=n[i];return a},v.sample=function(e,t,n){return null==t||n?(S(e)||(e=v.values(e)),e[v.random(e.length-1)]):v.shuffle(e).slice(0,Math.max(0,t))},v.sortBy=function(e,t,n){return t=y(t,n),v.pluck(v.map(e,function(e,n,r){return{value:e,index:n,criteria:t(e,n,r)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),"value")};var T=function(e){return function(t,n,r){var a={};return n=y(n,r),v.each(t,function(r,i){var o=n(r,i,t);e(a,r,o)}),a}};v.groupBy=T(function(e,t,n){v.has(e,n)?e[n].push(t):e[n]=[t]}),v.indexBy=T(function(e,t,n){e[n]=t}),v.countBy=T(function(e,t,n){v.has(e,n)?e[n]++:e[n]=1}),v.toArray=function(e){return e?v.isArray(e)?u.call(e):S(e)?v.map(e,v.identity):v.values(e):[]},v.size=function(e){return null==e?0:S(e)?e.length:v.keys(e).length},v.partition=function(e,t,n){t=y(t,n);var r=[],a=[];return v.each(e,function(e,n,i){(t(e,n,i)?r:a).push(e)}),[r,a]},v.first=v.head=v.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:v.initial(e,e.length-t)},v.initial=function(e,t,n){return u.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))},v.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:v.rest(e,Math.max(0,e.length-t))},v.rest=v.tail=v.drop=function(e,t,n){return u.call(e,null==t||n?1:t)},v.compact=function(e){return v.filter(e,v.identity)};var E=function(e,t,n,r){for(var a=[],i=0,o=r||0,s=C(e);o<s;o++){var l=e[o];if(S(l)&&(v.isArray(l)||v.isArguments(l))){t||(l=E(l,t,n));var u=0,c=l.length;for(a.length+=c;u<c;)a[i++]=l[u++]}else n||(a[i++]=l)}return a};function createPredicateIndexFinder(e){return function(t,n,r){n=y(n,r);for(var a=C(t),i=e>0?0:a-1;i>=0&&i<a;i+=e)if(n(t[i],i,t))return i;return-1}}function createIndexFinder(e,t,n){return function(r,a,i){var o=0,s=C(r);if("number"==typeof i)e>0?o=i>=0?i:Math.max(i+s,o):s=i>=0?Math.min(i+1,s):i+s+1;else if(n&&i&&s)return r[i=n(r,a)]===a?i:-1;if(a!=a)return(i=t(u.call(r,o,s),v.isNaN))>=0?i+o:-1;for(i=e>0?o:s-1;i>=0&&i<s;i+=e)if(r[i]===a)return i;return-1}}v.flatten=function(e,t){return E(e,t,!1)},v.without=function(e){return v.difference(e,u.call(arguments,1))},v.uniq=v.unique=function(e,t,n,r){v.isBoolean(t)||(r=n,n=t,t=!1),null!=n&&(n=y(n,r));for(var a=[],i=[],o=0,s=C(e);o<s;o++){var l=e[o],u=n?n(l,o,e):l;t?(o&&i===u||a.push(l),i=u):n?v.contains(i,u)||(i.push(u),a.push(l)):v.contains(a,l)||a.push(l)}return a},v.union=function(){return v.uniq(E(arguments,!0,!0))},v.intersection=function(e){for(var t=[],n=arguments.length,r=0,a=C(e);r<a;r++){var i=e[r];if(!v.contains(t,i)){for(var o=1;o<n&&v.contains(arguments[o],i);o++);o===n&&t.push(i)}}return t},v.difference=function(e){var t=E(arguments,!0,!0,1);return v.filter(e,function(e){return!v.contains(t,e)})},v.zip=function(){return v.unzip(arguments)},v.unzip=function(e){for(var t=e&&v.max(e,C).length||0,n=Array(t),r=0;r<t;r++)n[r]=v.pluck(e,r);return n},v.object=function(e,t){for(var n={},r=0,a=C(e);r<a;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},v.findIndex=createPredicateIndexFinder(1),v.findLastIndex=createPredicateIndexFinder(-1),v.sortedIndex=function(e,t,n,r){for(var a=(n=y(n,r,1))(t),i=0,o=C(e);i<o;){var s=Math.floor((i+o)/2);n(e[s])<a?i=s+1:o=s}return i},v.indexOf=createIndexFinder(1,v.findIndex,v.sortedIndex),v.lastIndexOf=createIndexFinder(-1,v.findLastIndex),v.range=function(e,t,n){null==t&&(t=e||0,e=0),n=n||1;for(var r=Math.max(Math.ceil((t-e)/n),0),a=Array(r),i=0;i<r;i++,e+=n)a[i]=e;return a};var M=function(e,t,n,r,a){if(!(r instanceof t))return e.apply(n,a);var i=w(e.prototype),o=e.apply(i,a);return v.isObject(o)?o:i};v.bind=function(e,t){if(p&&e.bind===p)return p.apply(e,u.call(arguments,1));if(!v.isFunction(e))throw new TypeError("Bind must be called on a function");var n=u.call(arguments,2),r=function(){return M(e,r,t,this,n.concat(u.call(arguments)))};return r},v.partial=function(e){var t=u.call(arguments,1),n=function(){for(var r=0,a=t.length,i=Array(a),o=0;o<a;o++)i[o]=t[o]===v?arguments[r++]:t[o];for(;r<arguments.length;)i.push(arguments[r++]);return M(e,n,this,this,i)};return n},v.bindAll=function(e){var t,n,r=arguments.length;if(r<=1)throw new Error("bindAll must be passed function names");for(t=1;t<r;t++)e[n=arguments[t]]=v.bind(e[n],e);return e},v.memoize=function(e,t){var n=function(r){var a=n.cache,i=""+(t?t.apply(this,arguments):r);return v.has(a,i)||(a[i]=e.apply(this,arguments)),a[i]};return n.cache={},n},v.delay=function(e,t){var n=u.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},v.defer=v.partial(v.delay,v,1),v.throttle=function(e,t,n){var r,a,i,o=null,s=0;n||(n={});var l=function(){s=!1===n.leading?0:v.now(),o=null,i=e.apply(r,a),o||(r=a=null)};return function(){var u=v.now();s||!1!==n.leading||(s=u);var c=t-(u-s);return r=this,a=arguments,c<=0||c>t?(o&&(clearTimeout(o),o=null),s=u,i=e.apply(r,a),o||(r=a=null)):o||!1===n.trailing||(o=setTimeout(l,c)),i}},v.debounce=function(e,t,n){var r,a,i,o,s,l=function(){var u=v.now()-o;u<t&&u>=0?r=setTimeout(l,t-u):(r=null,n||(s=e.apply(i,a),r||(i=a=null)))};return function(){i=this,a=arguments,o=v.now();var u=n&&!r;return r||(r=setTimeout(l,t)),u&&(s=e.apply(i,a),i=a=null),s}},v.wrap=function(e,t){return v.partial(t,e)},v.negate=function(e){return function(){return!e.apply(this,arguments)}},v.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},v.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},v.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},v.once=v.partial(v.before,2);var O=!{toString:null}.propertyIsEnumerable("toString"),A=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function collectNonEnumProps(e,t){var n=A.length,r=e.constructor,a=v.isFunction(r)&&r.prototype||o,i="constructor";for(v.has(e,i)&&!v.contains(t,i)&&t.push(i);n--;)(i=A[n])in e&&e[i]!==a[i]&&!v.contains(t,i)&&t.push(i)}v.keys=function(e){if(!v.isObject(e))return[];if(d)return d(e);var t=[];for(var n in e)v.has(e,n)&&t.push(n);return O&&collectNonEnumProps(e,t),t},v.allKeys=function(e){if(!v.isObject(e))return[];var t=[];for(var n in e)t.push(n);return O&&collectNonEnumProps(e,t),t},v.values=function(e){for(var t=v.keys(e),n=t.length,r=Array(n),a=0;a<n;a++)r[a]=e[t[a]];return r},v.mapObject=function(e,t,n){t=y(t,n);for(var r,a=v.keys(e),i=a.length,o={},s=0;s<i;s++)o[r=a[s]]=t(e[r],r,e);return o},v.pairs=function(e){for(var t=v.keys(e),n=t.length,r=Array(n),a=0;a<n;a++)r[a]=[t[a],e[t[a]]];return r},v.invert=function(e){for(var t={},n=v.keys(e),r=0,a=n.length;r<a;r++)t[e[n[r]]]=n[r];return t},v.functions=v.methods=function(e){var t=[];for(var n in e)v.isFunction(e[n])&&t.push(n);return t.sort()},v.extend=_(v.allKeys),v.extendOwn=v.assign=_(v.keys),v.findKey=function(e,t,n){t=y(t,n);for(var r,a=v.keys(e),i=0,o=a.length;i<o;i++)if(t(e[r=a[i]],r,e))return r},v.pick=function(e,t,n){var r,a,i={},o=e;if(null==o)return i;v.isFunction(t)?(a=v.allKeys(o),r=b(t,n)):(a=E(arguments,!1,!1,1),r=function(e,t,n){return t in n},o=Object(o));for(var s=0,l=a.length;s<l;s++){var u=a[s],c=o[u];r(c,u,o)&&(i[u]=c)}return i},v.omit=function(e,t,n){if(v.isFunction(t))t=v.negate(t);else{var r=v.map(E(arguments,!1,!1,1),String);t=function(e,t){return!v.contains(r,t)}}return v.pick(e,t,n)},v.defaults=_(v.allKeys,!0),v.create=function(e,t){var n=w(e);return t&&v.extendOwn(n,t),n},v.clone=function(e){return v.isObject(e)?v.isArray(e)?e.slice():v.extend({},e):e},v.tap=function(e,t){return t(e),e},v.isMatch=function(e,t){var n=v.keys(t),r=n.length;if(null==e)return!r;for(var a=Object(e),i=0;i<r;i++){var o=n[i];if(t[o]!==a[o]||!(o in a))return!1}return!0};var R=function(e,t,n,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return e===t;e instanceof v&&(e=e._wrapped),t instanceof v&&(t=t._wrapped);var a=c.call(e);if(a!==c.call(t))return!1;switch(a){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0==+e?1/+e==1/t:+e==+t;case"[object Date]":case"[object Boolean]":return+e==+t}var i="[object Array]"===a;if(!i){if("object"!=typeof e||"object"!=typeof t)return!1;var o=e.constructor,s=t.constructor;if(o!==s&&!(v.isFunction(o)&&o instanceof o&&v.isFunction(s)&&s instanceof s)&&"constructor"in e&&"constructor"in t)return!1}r=r||[];for(var l=(n=n||[]).length;l--;)if(n[l]===e)return r[l]===t;if(n.push(e),r.push(t),i){if((l=e.length)!==t.length)return!1;for(;l--;)if(!R(e[l],t[l],n,r))return!1}else{var u,f=v.keys(e);if(l=f.length,v.keys(t).length!==l)return!1;for(;l--;)if(u=f[l],!v.has(t,u)||!R(e[u],t[u],n,r))return!1}return n.pop(),r.pop(),!0};v.isEqual=function(e,t){return R(e,t)},v.isEmpty=function(e){return null==e||(S(e)&&(v.isArray(e)||v.isString(e)||v.isArguments(e))?0===e.length:0===v.keys(e).length)},v.isElement=function(e){return!(!e||1!==e.nodeType)},v.isArray=h||function(e){return"[object Array]"===c.call(e)},v.isObject=function(e){var t=typeof e;return"function"===t||"object"===t&&!!e},v.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(e){v["is"+e]=function(t){return c.call(t)==="[object "+e+"]"}}),v.isArguments(arguments)||(v.isArguments=function(e){return v.has(e,"callee")}),"object"!=typeof Int8Array&&(v.isFunction=function(e){return"function"==typeof e||!1}),v.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},v.isNaN=function(e){return v.isNumber(e)&&e!==+e},v.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"===c.call(e)},v.isNull=function(e){return null===e},v.isUndefined=function(e){return void 0===e},v.has=function(e,t){return null!=e&&f.call(e,t)},v.noConflict=function(){return n._=a,this},v.identity=function(e){return e},v.constant=function(e){return function(){return e}},v.noop=function(){},v.property=x,v.propertyOf=function(e){return null==e?function(){}:function(t){return e[t]}},v.matcher=v.matches=function(e){return e=v.extendOwn({},e),function(t){return v.isMatch(t,e)}},v.times=function(e,t,n){var r=Array(Math.max(0,e));t=b(t,n,1);for(var a=0;a<e;a++)r[a]=t(a);return r},v.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},v.now=Date.now||function(){return(new Date).getTime()};var N={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},D=v.invert(N),V=function(e){var t=function(t){return e[t]},n="(?:"+v.keys(e).join("|")+")",r=RegExp(n),a=RegExp(n,"g");return function(e){return e=null==e?"":""+e,r.test(e)?e.replace(a,t):e}};v.escape=V(N),v.unescape=V(D),v.result=function(e,t,n){var r=null==e?void 0:e[t];return void 0===r&&(r=n),v.isFunction(r)?r.call(e):r};var j=0;v.uniqueId=function(e){var t=++j+"";return e?e+t:t},v.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var P=/(.)^/,L={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\u2028|\u2029/g,B=function(e){return"\\"+L[e]};v.template=function(e,t,n){!t&&n&&(t=n),t=v.defaults({},t,v.templateSettings);var r=RegExp([(t.escape||P).source,(t.interpolate||P).source,(t.evaluate||P).source].join("|")+"|$","g"),a=0,i="__p+='";e.replace(r,function(t,n,r,o,s){return i+=e.slice(a,s).replace(I,B),a=s+t.length,n?i+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?i+="'+\n((__t=("+r+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(e){throw e.source=i,e}var s=function(e){return o.call(this,e,v)},l=t.variable||"obj";return s.source="function("+l+"){\n"+i+"}",s},v.chain=function(e){var t=v(e);return t._chain=!0,t};var z=function(e,t){return e._chain?v(t).chain():t};v.mixin=function(e){v.each(v.functions(e),function(t){var n=v[t]=e[t];v.prototype[t]=function(){var e=[this._wrapped];return l.apply(e,arguments),z(this,n.apply(v,e))}})},v.mixin(v),v.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=i[e];v.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==e&&"splice"!==e||0!==n.length||delete n[0],z(this,n)}}),v.each(["concat","join","slice"],function(e){var t=i[e];v.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),v.prototype.value=function(){return this._wrapped},v.prototype.valueOf=v.prototype.toJSON=v.prototype.value,v.prototype.toString=function(){return""+this._wrapped},void 0===(r=function(){return v}.apply(t,[]))||(e.exports=r)}).call(this)},function(e,t,n){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}t.__esModule=!0;var r=_interopRequireWildcard(n(55)),a=_interopRequireDefault(n(147)),i=_interopRequireDefault(n(38)),o=_interopRequireWildcard(n(28)),s=_interopRequireWildcard(n(148)),l=_interopRequireDefault(n(149));function create(){var e=new r.HandlebarsEnvironment;return o.extend(e,r),e.SafeString=a.default,e.Exception=i.default,e.Utils=o,e.escapeExpression=o.escapeExpression,e.VM=s,e.template=function(t){return s.template(t,e)},e}var u=create();u.create=create,l.default(u),u.default=u,t.default=u,e.exports=t.default},function(e,t,n){"use strict";function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.registerDefaultHelpers=function(e){r.default(e),a.default(e),i.default(e),o.default(e),s.default(e),l.default(e),u.default(e)};var r=_interopRequireDefault(n(137)),a=_interopRequireDefault(n(138)),i=_interopRequireDefault(n(139)),o=_interopRequireDefault(n(140)),s=_interopRequireDefault(n(141)),l=_interopRequireDefault(n(142)),u=_interopRequireDefault(n(143))},function(e,t,n){"use strict";t.__esModule=!0;var r=n(28);t.default=function(e){e.registerHelper("blockHelperMissing",function(t,n){var a=n.inverse,i=n.fn;if(!0===t)return i(this);if(!1===t||null==t)return a(this);if(r.isArray(t))return t.length>0?(n.ids&&(n.ids=[n.name]),e.helpers.each(t,n)):a(this);if(n.data&&n.ids){var o=r.createFrame(n.data);o.contextPath=r.appendContextPath(n.data.contextPath,n.name),n={data:o}}return i(t,n)})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r,a=n(28),i=n(38),o=(r=i)&&r.__esModule?r:{default:r};t.default=function(e){e.registerHelper("each",function(e,t){if(!t)throw new o.default("Must pass iterator to #each");var n=t.fn,r=t.inverse,i=0,s="",l=void 0,u=void 0;function execIteration(t,r,i){l&&(l.key=t,l.index=r,l.first=0===r,l.last=!!i,u&&(l.contextPath=u+t)),s+=n(e[t],{data:l,blockParams:a.blockParams([e[t],t],[u+t,null])})}if(t.data&&t.ids&&(u=a.appendContextPath(t.data.contextPath,t.ids[0])+"."),a.isFunction(e)&&(e=e.call(this)),t.data&&(l=a.createFrame(t.data)),e&&"object"==typeof e)if(a.isArray(e))for(var c=e.length;i<c;i++)i in e&&execIteration(i,i,i===e.length-1);else{var f=void 0;for(var h in e)e.hasOwnProperty(h)&&(void 0!==f&&execIteration(f,i-1),f=h,i++);void 0!==f&&execIteration(f,i-1,!0)}return 0===i&&(s=r(this)),s})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r,a=n(38),i=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){e.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new i.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r=n(28);t.default=function(e){e.registerHelper("if",function(e,t){return r.isFunction(e)&&(e=e.call(this)),!t.hash.includeZero&&!e||r.isEmpty(e)?t.inverse(this):t.fn(this)}),e.registerHelper("unless",function(t,n){return e.helpers.if.call(this,t,{fn:n.inverse,inverse:n.fn,hash:n.hash})})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){e.registerHelper("log",function(){for(var t=[void 0],n=arguments[arguments.length-1],r=0;r<arguments.length-1;r++)t.push(arguments[r]);var a=1;null!=n.hash.level?a=n.hash.level:n.data&&null!=n.data.level&&(a=n.data.level),t[0]=a,e.log.apply(e,t)})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){e.registerHelper("lookup",function(e,t){return e?"constructor"!==t||e.propertyIsEnumerable(t)?e[t]:void 0:e})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r=n(28);t.default=function(e){e.registerHelper("with",function(e,t){r.isFunction(e)&&(e=e.call(this));var n=t.fn;if(r.isEmpty(e))return t.inverse(this);var a=t.data;return t.data&&t.ids&&((a=r.createFrame(t.data)).contextPath=r.appendContextPath(t.data.contextPath,t.ids[0])),n(e,{data:a,blockParams:r.blockParams([e],[a&&a.contextPath])})})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.registerDefaultDecorators=function(e){i.default(e)};var r,a=n(145),i=(r=a)&&r.__esModule?r:{default:r}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(28);t.default=function(e){e.registerDecorator("inline",function(e,t,n,a){var i=e;return t.partials||(t.partials={},i=function(a,i){var o=n.partials;n.partials=r.extend({},o,t.partials);var s=e(a,i);return n.partials=o,s}),t.partials[a.args[0]]=a.fn,i})},e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var r=n(28),a={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){if("string"==typeof e){var t=r.indexOf(a.methodMap,e.toLowerCase());e=t>=0?t:parseInt(e,10)}return e},log:function(e){if(e=a.lookupLevel(e),"undefined"!=typeof console&&a.lookupLevel(a.level)<=e){var t=a.methodMap[e];console[t]||(t="log");for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];console[t].apply(console,r)}}};t.default=a,e.exports=t.default},function(e,t,n){"use strict";function SafeString(e){this.string=e}t.__esModule=!0,SafeString.prototype.toString=SafeString.prototype.toHTML=function(){return""+this.string},t.default=SafeString,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.checkRevision=function(e){var t=e&&e[0]||1,n=s.COMPILER_REVISION;if(t!==n){if(t<n){var r=s.REVISION_CHANGES[n],a=s.REVISION_CHANGES[t];throw new o.default("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+r+") or downgrade your runtime to an older version ("+a+").")}throw new o.default("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+e[1]+").")}},t.template=function(e,t){if(!t)throw new o.default("No environment passed to template");if(!e||!e.main)throw new o.default("Unknown template object: "+typeof e);e.main.decorator=e.main_d,t.VM.checkRevision(e.compiler);var n={strict:function(e,t){if(!(t in e))throw new o.default('"'+t+'" not defined in '+e);return e[t]},lookup:function(e,t){for(var n=e.length,r=0;r<n;r++)if(e[r]&&null!=e[r][t])return e[r][t]},lambda:function(e,t){return"function"==typeof e?e.call(t):e},escapeExpression:a.escapeExpression,invokePartial:function(n,r,i){i.hash&&(r=a.extend({},r,i.hash),i.ids&&(i.ids[0]=!0));n=t.VM.resolvePartial.call(this,n,r,i);var s=t.VM.invokePartial.call(this,n,r,i);null==s&&t.compile&&(i.partials[i.name]=t.compile(n,e.compilerOptions,t),s=i.partials[i.name](r,i));if(null!=s){if(i.indent){for(var l=s.split("\n"),u=0,c=l.length;u<c&&(l[u]||u+1!==c);u++)l[u]=i.indent+l[u];s=l.join("\n")}return s}throw new o.default("The partial "+i.name+" could not be compiled when running in runtime-only mode")},fn:function(t){var n=e[t];return n.decorator=e[t+"_d"],n},programs:[],program:function(e,t,n,r,a){var i=this.programs[e],o=this.fn(e);return t||a||r||n?i=wrapProgram(this,e,o,t,n,r,a):i||(i=this.programs[e]=wrapProgram(this,e,o)),i},data:function(e,t){for(;e&&t--;)e=e._parent;return e},merge:function(e,t){var n=e||t;return e&&t&&e!==t&&(n=a.extend({},t,e)),n},nullContext:Object.seal({}),noop:t.VM.noop,compilerInfo:e.compiler};function ret(t){var r=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],a=r.data;ret._setup(r),!r.partial&&e.useData&&(a=function(e,t){t&&"root"in t||((t=t?s.createFrame(t):{}).root=e);return t}(t,a));var i=void 0,o=e.useBlockParams?[]:void 0;function main(t){return""+e.main(n,t,n.helpers,n.partials,a,o,i)}return e.useDepths&&(i=r.depths?t!=r.depths[0]?[t].concat(r.depths):r.depths:[t]),(main=executeDecorators(e.main,main,n,r.depths||[],a,o))(t,r)}return ret.isTop=!0,ret._setup=function(r){r.partial?(n.helpers=r.helpers,n.partials=r.partials,n.decorators=r.decorators):(n.helpers=n.merge(r.helpers,t.helpers),e.usePartial&&(n.partials=n.merge(r.partials,t.partials)),(e.usePartial||e.useDecorators)&&(n.decorators=n.merge(r.decorators,t.decorators)))},ret._child=function(t,r,a,i){if(e.useBlockParams&&!a)throw new o.default("must pass block params");if(e.useDepths&&!i)throw new o.default("must pass parent depths");return wrapProgram(n,t,e[t],r,0,a,i)},ret},t.wrapProgram=wrapProgram,t.resolvePartial=function(e,t,n){e?e.call||n.name||(n.name=e,e=n.partials[e]):e="@partial-block"===n.name?n.data["partial-block"]:n.partials[n.name];return e},t.invokePartial=function(e,t,n){var r=n.data&&n.data["partial-block"];n.partial=!0,n.ids&&(n.data.contextPath=n.ids[0]||n.data.contextPath);var i=void 0;n.fn&&n.fn!==noop&&function(){n.data=s.createFrame(n.data);var e=n.fn;i=n.data["partial-block"]=function(t){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return n.data=s.createFrame(n.data),n.data["partial-block"]=r,e(t,n)},e.partials&&(n.partials=a.extend({},n.partials,e.partials))}();void 0===e&&i&&(e=i);if(void 0===e)throw new o.default("The partial "+n.name+" could not be found");if(e instanceof Function)return e(t,n)},t.noop=noop;var r,a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(28)),i=n(38),o=(r=i)&&r.__esModule?r:{default:r},s=n(55);function wrapProgram(e,t,n,r,a,i,o){function prog(t){var a=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],s=o;return!o||t==o[0]||t===e.nullContext&&null===o[0]||(s=[t].concat(o)),n(e,t,e.helpers,e.partials,a.data||r,i&&[a.blockParams].concat(i),s)}return(prog=executeDecorators(n,prog,e,o,r,i)).program=t,prog.depth=o?o.length:0,prog.blockParams=a||0,prog}function noop(){return""}function executeDecorators(e,t,n,r,i,o){if(e.decorator){var s={};t=e.decorator(t,s,n,r&&r[0],i,o,r),a.extend(t,s)}return t}},function(e,t,n){"use strict";(function(n){t.__esModule=!0,t.default=function(e){var t=void 0!==n?n:window,r=t.Handlebars;e.noConflict=function(){return t.Handlebars===e&&(t.Handlebars=r),e}},e.exports=t.default}).call(this,n(37))},function(e,t,n){var r={"./br":56,"./br.json":56,"./de":57,"./de.json":57,"./en":58,"./en.json":58,"./es":59,"./es.json":59,"./fr":60,"./fr.json":60,"./he":61,"./he.json":61,"./ja":62,"./ja.json":62,"./kr":63,"./kr.json":63,"./nl":64,"./nl.json":64,"./pl":65,"./pl.json":65,"./ru":66,"./ru.json":66,"./zh":67,"./zh.json":67};function webpackContext(e){var t=webpackContextResolve(e);return n(t)}function webpackContextResolve(e){var t=r[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}webpackContext.keys=function(){return Object.keys(r)},webpackContext.resolve=webpackContextResolve,e.exports=webpackContext,webpackContext.id=150},function(e,t,n){},function(e,t,n){},function(e,t,n){var r=n(0);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=r(e)););return e}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){var r=n(11);e.exports=(r.default||r).template({compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return'<span class="fa fa-files-o fullname__copy" data-copy="'+e.escapeExpression("function"==typeof(i=null!=(i=n.value||(null!=t?t.value:t))?i:n.helperMissing)?i.call(null!=t?t:e.nullContext||{},{name:"value",hash:{},data:a}):i)+'"></span>'},useData:!0})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <li class="'+s(__default(n(7)).call(o,"tab",{name:"b",hash:{active:null!=t?t.active:t},data:i}))+'"><a class="link link__no-decoration" href="'+s(e.lambda(null!=t?t.href:t,t))+'">'+s(__default(n(9)).call(o,null!=t?t.name:t,{name:"t",hash:{},data:i}))+"</a></li>\n"},compiler:[7,">= 4.0.0"],main:function(e,t,n,r,a){var i;return'<ul class="tabs">\n'+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.links:t,{name:"each",hash:{},fn:e.program(1,a,0),inverse:e.noop,data:a}))?i:"")+"</ul>"},useData:!0})},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t){e.exports=function(e){return null==e?"":""+e}},function(e,t){e.exports=function(e,t){if(t<1)return"";for(var n="";t>0;)1&t&&(n+=e),t>>=1,e+=e;return n}},function(e,t,n){"use strict";n.r(t);var r=n(45);t.default=function(e){return Object(r.a)(e).icon}},function(e,t,n){"use strict";n.r(t);var r=n(87),a=n.n(r);t.default=function(e){return a()(e,{base:2,round:1})}},function(e,t,n){},function(e,t,n){e.exports=n.p+"favicon.ico"},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return!(!e&&!t)}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r=n(11),a=n(18);t.default=function(e){var t=a.a.map(function(t){var n=e&&void 0!==e[t]?e[t]:0;return 0===n?"":'<span class="label label_status_'.concat(t,'">').concat(n,"</span> ")}).join("");return new r.SafeString("".concat(t))}},function(e,t,n){"use strict";function isDef(e){return e||"number"==typeof e}n.r(t),n.d(t,"default",function(){return isDef})},function(e,t,n){var r=n(11);function __default(e){return e&&(e.__esModule?e.default:e)}e.exports=(r.default||r).template({1:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <div class="'+s(__default(n(7)).call(o,"node","flaky",{name:"b",hash:{shown:null!=t?t.flaky:t},data:i}))+'">\n '+s(__default(n(29)).call(o,"flaky",{name:"allure-icon",hash:{},data:i}))+"\n </div>\n"},3:function(e,t,r,a,i){var o=null!=t?t:e.nullContext||{},s=e.escapeExpression;return' <div class="'+s(__default(n(7)).call(o,"node","newFailed",{name:"b",hash:{shown:null!=t?t.newFailed:t},data:i}))+'">\n '+s(__default(n(29)).call(o,"newFailed",{name:"allure-icon",hash:{},data:i}))+"\n </div>\n"},5:function(e,t,n,r,a){var i;return'\n <div class="node__parameters long-line line-ellipsis">\n <span> </span>\n'+(null!=(i=n.each.call(null!=t?t:e.nullContext||{},null!=t?t.parameters:t,{name:"each",hash:{},fn:e.program(6,a,0),inverse:e.noop,data:a}))?i:"")+" </div>\n"},6:function(e,t,n,r,a){var i;return(null!=(i=n.if.call(null!=t?t:e.nullContext||{},t,{name:"if",hash:{},fn:e.program(7,a,0),inverse:e.program(9,a,0),data:a}))?i:"")+'<span class="node__parameters_separator">,</span>\n'},7:function(e,t,n,r,a){return" "+e.escapeExpression(e.lambda(t,t))},9:function(e,t,n,r,a){return" null"},compiler:[7,">= 4.0.0"],main:function(e,t,r,a,i){var o,s=e.lambda,l=e.escapeExpression,u=null!=t?t:e.nullContext||{};return'<a class="node node__leaf" href="#'+l(s(null!=t?t.baseUrl:t,t))+"/"+l(s(null!=t?t.parentUid:t,t))+"/"+l(s(null!=t?t.uid:t,t))+"/"+l(s(null!=t?t.testResultTab:t,t))+'">\n <div class="node__title" data-uid="'+l(s(null!=t?t.uid:t,t))+'" data-parentUid="'+l(s(null!=t?t.parentUid:t,t))+'">\n <div class="node__anchor">\n '+l(__default(n(29)).call(u,null!=t?t.status:t,"fa-lg",{name:"allure-icon",hash:{},data:i}))+'\n </div>\n <div class="node__order">#'+l(s(null!=t?t.order:t,t))+'</div>\n <div class="node__name">\n '+l(s(null!=t?t.name:t,t))+'\n </div>\n <div class="tree__strut"> </div>\n'+(null!=(o=r.if.call(u,null!=t?t.flaky:t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(u,null!=t?t.newFailed:t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i}))?o:"")+(null!=(o=r.if.call(u,null!=t?t.parameters:t,{name:"if",hash:{},fn:e.program(5,i,0),inverse:e.noop,data:i}))?o:"")+' <div class="node__stats">'+l(__default(n(20)).call(u,null!=(o=null!=t?t.time:t)?o.duration:o,{name:"duration",hash:{},data:i}))+"</div>\n </div>\n</a>\n"},useData:!0})},function(e,t,n){},function(e,t,n){"use strict";n.r(t),n.d(t,"default",function(){return statusBar});var r=n(11),a=n(18);function statusBar(e){var t=a.a.map(function(t){var n=void 0===e[t]?0:e[t];return 0===n?"":'<div class="bar__fill bar__fill_status_'.concat(t,'" style="flex-grow: ').concat(n,'">').concat(n,"</div>")}).join("");return new r.SafeString('<div class="bar">'.concat(t,"</div>"))}},function(e,t,n){},function(e,t,n){},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(a)throw i}}return n}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){},function(e,t,n){},function(e,t){allure.api.addTab("categories",{title:"tab.categories.name",icon:"fa fa-flag",route:"categories(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)",onEnter:function(e,t,n){return new allure.components.TreeLayout({testGroup:e,testResult:t,testResultTab:n,tabName:"tab.categories.name",baseUrl:"categories",url:"data/categories.json",csvUrl:"data/categories.csv"})}})},function(e,t){allure.api.addTab("suites",{title:"tab.suites.name",icon:"fa fa-briefcase",route:"suites(/)(:testGroup)(/)(:testResult)(/)(:testResultTab)(/)",onEnter:function(e,t,n){return new allure.components.TreeLayout({testGroup:e,testResult:t,testResultTab:n,tabName:"tab.suites.name",baseUrl:"suites",url:"data/suites.json",csvUrl:"data/suites.csv"})}})},function(e,t,n){},function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r=n(40),a=n(15),i=n.n(a),o=(n(168),n(169),n(170),n(171),n(172),n(173),n(174),n(21)),s=n(3),l=n.n(s),u=n(6),c=n.n(u),f=n(4),h=n.n(f),d=n(0),p=n.n(d),m=n(17),g=n.n(m),v=n(5),b=n.n(v),y=n(23),_=n(26),w=n.n(_),x=n(13),k=n(14),C=n(18);function updateTime(e,t,n,r){t&&t[n]&&(e[n]=r(e[n],t[n]))}var S,T,E,M,O,A,R,N,D,V,j,P,L,I,B,z,U,F,H,q,W,$,Y=function(e){function TreeCollection(){return l()(this,TreeCollection),h()(this,p()(TreeCollection).apply(this,arguments))}return b()(TreeCollection,e),c()(TreeCollection,[{key:"initialize",value:function(e,t){var n=t.url;this.url=n}},{key:"findLeaf",value:function(e,t){return Object(k.findWhere)(this.allResults,{parentUid:e,uid:t})}},{key:"getFlattenTestResults",value:function(e){var t=this;return Object(k.flatten)(e.map(function(e){return e.children?t.getFlattenTestResults(e.children):e}))}},{key:"parse",value:function(e){var t=e.uid,n=e.children||[];return this.uid=t,this.allResults=this.getFlattenTestResults(n),this.allNodes=n,this.time=this.calculateTime(this.allResults),this.statistic=this.calculateStatistic(this.allResults),n}},{key:"applyFilterAndSorting",value:function(e,t){var n=this.getFilteredAndSortedChildren(this.allNodes,e,t);this.reset(n),this.testResults=this.getFlattenTestResults(n)}},{key:"getFilteredAndSortedChildren",value:function(e,t,n){var r=this;return this.calculateOrder(e).map(function(e){if(e.children){var a=r.getFilteredAndSortedChildren(e.children,t,n);return w()({},e,{children:a,statistic:r.calculateStatistic(a),time:r.calculateTime(a)})}return e}).filter(t).sort(n)}},{key:"getFirstTestResult",value:function(){if(this.testResults.length>0)return this.testResults[0]}},{key:"getLastTestResult",value:function(){if(this.testResults.length>0)return this.testResults[this.testResults.length-1]}},{key:"getNextTestResult",value:function(e){var t=this.testResults.findIndex(function(t){return t.uid===e});if(t<this.testResults.length-1)return this.testResults[t+1]}},{key:"getPreviousTestResult",value:function(e){var t=this.testResults.findIndex(function(t){return t.uid===e});if(t>0)return this.testResults[t-1]}},{key:"calculateOrder",value:function(e){var t=this,n=0;return e.forEach(function(e){e.children?t.calculateOrder(e.children):e.order=++n}),e}},{key:"calculateStatistic",value:function(e){var t={};return C.a.forEach(function(e){t[e]=0}),e.forEach(function(e){e.children?C.a.forEach(function(n){t[n]+=e.statistic?e.statistic[n]:0}):t[e.status]++}),t}},{key:"calculateTime",value:function(e){var t={maxDuration:Number.MIN_VALUE,minDuration:Number.MAX_VALUE,sumDuration:0,duration:0,start:Number.MAX_VALUE,stop:Number.MIN_VALUE};return e.forEach(function(e){e.children?(updateTime(t,e.time,"maxDuration",Math.max),updateTime(t,e.time,"minDuration",Math.min),updateTime(t,e.time,"sumDuration",function(e,t){return e+t})):e.time&&isFinite(e.time.duration)&&(t.maxDuration=Math.max(t.maxDuration,e.time.duration),t.minDuration=Math.min(t.minDuration,e.time.duration),t.sumDuration=t.sumDuration+e.time.duration),updateTime(t,e.time,"start",Math.min),updateTime(t,e.time,"stop",Math.max),t.duration=t.stop-t.start}),t}}]),TreeCollection}(x.Collection),G=n(1),X=n(2),K=n.n(X),Z=n(8),J=n.n(Z),Q=(n(175),window),ee=Q.document,te="addEventListener",ne="removeEventListener",re="getBoundingClientRect",ae="_a",ie="_b",oe="_c",se="horizontal",le=function(){return!1},ue=Q.attachEvent&&!Q[te],ce=["","-webkit-","-moz-","-o-"].filter(function(e){var t=ee.createElement("div");return t.style.cssText="width:"+e+"calc(9px)",!!t.style.length}).shift()+"calc",fe=function(e){return"string"==typeof e||e instanceof String},he=function(e){if(fe(e)){var t=ee.querySelector(e);if(!t)throw new Error("Selector "+e+" did not match a DOM element");return t}return e},de=function(e,t,n){var r=e[t];return void 0!==r?r:n},pe=function(e,t,n,r){if(t){if("end"===r)return 0;if("center"===r)return e/2}else if(n){if("start"===r)return 0;if("center"===r)return e/2}return e},me=function(e,t){var n=ee.createElement("div");return n.className="gutter gutter-"+t,n},ge=function(e,t,n){var r={};return fe(t)?r[e]=t:r[e]=ue?t+"%":ce+"("+t+"% - "+n+"px)",r},ve=function(e,t){var n;return(n={})[e]=t+"px",n},be=function(e,t){void 0===t&&(t={});var n,r,a,i,o,s,l=e;Array.from&&(l=Array.from(l));var u=he(l[0]).parentNode,c=getComputedStyle?getComputedStyle(u):null,f=c?c.flexDirection:null,h=de(t,"sizes")||l.map(function(){return 100/l.length}),d=de(t,"minSize",100),p=Array.isArray(d)?d:l.map(function(){return d}),m=de(t,"expandToMin",!1),g=de(t,"gutterSize",10),v=de(t,"gutterAlign","center"),b=de(t,"snapOffset",30),y=de(t,"dragInterval",1),_=de(t,"direction",se),w=de(t,"cursor",_===se?"col-resize":"row-resize"),x=de(t,"gutter",me),k=de(t,"elementStyle",ge),C=de(t,"gutterStyle",ve);function setElementSize(e,t,r,a){var i=k(n,t,r,a);Object.keys(i).forEach(function(t){e.style[t]=i[t]})}function getSizes(){return s.map(function(e){return e.size})}function getMousePosition(e){return"touches"in e?e.touches[0][r]:e[r]}function adjust(e){var t=s[this.a],n=s[this.b],r=t.size+n.size;t.size=e/this.size*r,n.size=r-e/this.size*r,setElementSize(t.element,t.size,this[ie],t.i),setElementSize(n.element,n.size,this[oe],n.i)}function calculateSizes(){var e=s[this.a].element,t=s[this.b].element,r=e[re](),o=t[re]();this.size=r[n]+o[n]+this[ie]+this[oe],this.start=r[a],this.end=r[i]}function trimToMin(e){var t=function(e){if(!getComputedStyle)return null;var t=getComputedStyle(e);if(!t)return null;var n=e[o];return 0===n?null:n-=_===se?parseFloat(t.paddingLeft)+parseFloat(t.paddingRight):parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)}(u);if(null===t)return e;if(p.reduce(function(e,t){return e+t},0)>t)return e;var n=0,r=[],a=e.map(function(a,i){var o=t*a/100,s=pe(g,0===i,i===e.length-1,v),l=p[i]+s;return o<l?(n+=l-o,r.push(0),l):(r.push(o-l),o)});return 0===n?e:a.map(function(e,a){var i=e;if(n>0&&r[a]-n>0){var o=Math.min(n,r[a]-n);n-=o,i=e-o}return i/t*100})}function startDragging(e){if(!("button"in e&&0!==e.button)){var n=s[this.a].element,r=s[this.b].element;this.dragging||de(t,"onDragStart",le)(getSizes()),e.preventDefault(),this.dragging=!0,this.move=function(e){var n,r=s[this.a],a=s[this.b];this.dragging&&(n=getMousePosition(e)-this.start+(this[ie]-this.dragOffset),y>1&&(n=Math.round(n/y)*y),n<=r.minSize+b+this[ie]?n=r.minSize+this[ie]:n>=this.size-(a.minSize+b+this[oe])&&(n=this.size-(a.minSize+this[oe])),adjust.call(this,n),de(t,"onDrag",le)())}.bind(this),this.stop=function(){var e=s[this.a].element,n=s[this.b].element;this.dragging&&de(t,"onDragEnd",le)(getSizes()),this.dragging=!1,Q[ne]("mouseup",this.stop),Q[ne]("touchend",this.stop),Q[ne]("touchcancel",this.stop),Q[ne]("mousemove",this.move),Q[ne]("touchmove",this.move),this.stop=null,this.move=null,e[ne]("selectstart",le),e[ne]("dragstart",le),n[ne]("selectstart",le),n[ne]("dragstart",le),e.style.userSelect="",e.style.webkitUserSelect="",e.style.MozUserSelect="",e.style.pointerEvents="",n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",this.gutter.style.cursor="",this.parent.style.cursor="",ee.body.style.cursor=""}.bind(this),Q[te]("mouseup",this.stop),Q[te]("touchend",this.stop),Q[te]("touchcancel",this.stop),Q[te]("mousemove",this.move),Q[te]("touchmove",this.move),n[te]("selectstart",le),n[te]("dragstart",le),r[te]("selectstart",le),r[te]("dragstart",le),n.style.userSelect="none",n.style.webkitUserSelect="none",n.style.MozUserSelect="none",n.style.pointerEvents="none",r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",this.gutter.style.cursor=w,this.parent.style.cursor=w,ee.body.style.cursor=w,calculateSizes.call(this),this.dragOffset=getMousePosition(e)-this.end}}_===se?(n="width",r="clientX",a="left",i="right",o="clientWidth"):"vertical"===_&&(n="height",r="clientY",a="top",i="bottom",o="clientHeight"),h=trimToMin(h);var S=[];function adjustToMin(e){var t=e.i===S.length,n=t?S[e.i-1]:S[e.i];calculateSizes.call(n);var r=t?n.size-e.minSize-n[oe]:e.minSize+n[ie];adjust.call(n,r)}function setSizes(e){var t=trimToMin(e);t.forEach(function(e,n){if(n>0){var r=S[n-1],a=s[r.a],i=s[r.b];a.size=t[n-1],i.size=e,setElementSize(a.element,a.size,r[ie]),setElementSize(i.element,i.size,r[oe])}})}function destroy(e,t){S.forEach(function(r){if(!0!==t?r.parent.removeChild(r.gutter):(r.gutter[ne]("mousedown",r[ae]),r.gutter[ne]("touchstart",r[ae])),!0!==e){var a=k(n,r.a.size,r[ie]);Object.keys(a).forEach(function(e){s[r.a].element.style[e]="",s[r.b].element.style[e]=""})}})}return(s=l.map(function(e,t){var r,a={element:he(e),size:h[t],minSize:p[t],i:t};if(t>0&&((r={a:t-1,b:t,dragging:!1,direction:_,parent:u})[ie]=pe(g,t-1==0,!1,v),r[oe]=pe(g,!1,t===l.length-1,v),"row-reverse"===f||"column-reverse"===f)){var i=r.a;r.a=r.b,r.b=i}if(!ue&&t>0){var o=x(t,_,a.element);!function(e,t,r){var a=C(n,t,r);Object.keys(a).forEach(function(t){e.style[t]=a[t]})}(o,g,t),r[ae]=startDragging.bind(r),o[te]("mousedown",r[ae]),o[te]("touchstart",r[ae]),u.insertBefore(o,a.element),r.gutter=o}return setElementSize(a.element,a.size,pe(g,0===t,t===l.length-1,v)),t>0&&S.push(r),a})).forEach(function(e){var t=e.element[re]()[n];t<e.minSize&&(m?adjustToMin(e):e.minSize=t)}),ue?{setSizes:setSizes,destroy:destroy}:{setSizes:setSizes,getSizes:getSizes,collapse:function(e){adjustToMin(s[e])},destroy:destroy,parent:u,pairs:S}},ye=n(10),_e=n(89),we=n.n(_e),xe=n(24),ke=Object(G.b)("side-by-side")(S=Object(G.e)({left:".side-by-side__left",right:".side-by-side__right"})(S=function(e){function SideBySideView(){var e,t;l()(this,SideBySideView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(SideBySideView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",we.a),t}return b()(SideBySideView,e),c()(SideBySideView,[{key:"onAttach",value:function(){var e=be([".side-by-side__left",".side-by-side__right"],{gutterSize:7,sizes:xe.a.getSideBySidePosition(),onDragEnd:function(){xe.a.setSideBySidePosition(e.getSizes())}})}},{key:"onRender",value:function(){var e=this.options,t=e.left,n=e.right;this.showChildView("left",t),this.showChildView("right",n)}},{key:"templateContext",value:function(){return{cls:"side-by-side"}}}]),SideBySideView}(ye.View))||S)||S,Ce=n(12),Se=n.n(Ce),Te=(n(176),n(90)),Ee=n.n(Te),Me=(n(177),n(91)),Oe=n.n(Me),Ae=["sorter.order","sorter.name","sorter.duration","sorter.status"],Re=(T=Object(G.b)("sorter"),E=Object(G.c)("click .sorter__item"),T((O=function(e){function NodeSorterView(){var e,t;l()(this,NodeSorterView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(NodeSorterView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Oe.a),t}return b()(NodeSorterView,e),c()(NodeSorterView,[{key:"initialize",value:function(e){var t=e.settings;this.settings=t}},{key:"onChangeSorting",value:function(e){var t=this.$(e.currentTarget);this.settings.setTreeSorting({sorter:t.data("name"),ascending:!t.data("asc")});var n=t.data("asc");this.$(".sorter_enabled").toggleClass("sorter_enabled"),t.data("asc",!n),t.find(".sorter__name").toggleClass("sorter_enabled"),t.find(n?".fa-sort-asc":".fa-sort-desc").toggleClass("sorter_enabled")}},{key:"serializeData",value:function(){var e=this.settings.getTreeSorting();return{sorters:Ae.map(function(t){return{name:t,asc:e.sorter===t&&e.ascending,desc:e.sorter===t&&!e.ascending}})}}}]),NodeSorterView}(ye.View),Se()(O.prototype,"onChangeSorting",[E],Object.getOwnPropertyDescriptor(O.prototype,"onChangeSorting"),O.prototype),M=O))||M),Ne=(n(179),n(92)),De=n.n(Ne),Ve=(A=Object(G.b)("search"),R=Object(G.c)("input input"),A((D=function(e){function NodeSearchView(){var e,t;l()(this,NodeSearchView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(NodeSearchView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",De.a),t}return b()(NodeSearchView,e),c()(NodeSearchView,[{key:"initialize",value:function(e){var t=e.state;this.state=t}},{key:"onRender",value:function(){this.$("input").val(this.state.get("searchQuery"))}},{key:"onChangeSorting",value:function(e){this.state.set("searchQuery",e.target.value)}},{key:"close",value:function(){this.state.set("searchQuery","")}}]),NodeSearchView}(ye.View),Se()(D.prototype,"onChangeSorting",[R],Object.getOwnPropertyDescriptor(D.prototype,"onChangeSorting"),D.prototype),N=D))||N),je=(n(180),n(93)),Pe=n.n(je),Le=n(9),Ie=(V=Object(G.b)("status-toggle"),j=Object(G.c)("click .y-label, .n-label"),V((L=function(e){function StatusToggleView(){var e,t;l()(this,StatusToggleView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(StatusToggleView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Pe.a),t}return b()(StatusToggleView,e),c()(StatusToggleView,[{key:"initialize",value:function(e){var t=e.settings,n=e.statistic;this.settings=t,this.statistic=n,this.listenTo(t,"change",this.render)}},{key:"serializeData",value:function(){var e=this,t=this.settings.getVisibleStatuses();return{statuses:C.a.map(function(n){return{status:n,statusName:Object(Le.default)("status.".concat(n),{}),active:!!t[n],count:e.statistic?e.statistic[n.toLowerCase()]:0}})}}},{key:"onToggleStatus",value:function(e){var t=this.$(e.currentTarget),n=t.data("status"),r=t.hasClass("n-label"),a=this.settings.getVisibleStatuses();this.settings.setVisibleStatuses(Object.assign({},a,J()({},n,r)))}}]),StatusToggleView}(ye.View),Se()(L.prototype,"onToggleStatus",[j],Object.getOwnPropertyDescriptor(L.prototype,"onToggleStatus"),L.prototype),P=L))||P),Be=(n(181),n(94)),ze=n.n(Be),Ue=["flaky","newFailed"],Fe=(I=Object(G.b)("marks-toggle"),B=Object(G.c)("click .y-label-mark, .n-label-mark"),I((U=function(e){function MarksToggleView(){var e,t;l()(this,MarksToggleView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(MarksToggleView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ze.a),t}return b()(MarksToggleView,e),c()(MarksToggleView,[{key:"initialize",value:function(e){var t=e.settings;this.settings=t,this.listenTo(t,"change",this.render)}},{key:"serializeData",value:function(){var e=this,t=this.settings.getVisibleMarks();return{marks:Ue.map(function(n){return{mark:n,markName:Object(Le.default)("marks.".concat(n),{}),active:!!t[n],count:e.statistic?e.statistic[status.toLowerCase()]:0}})}}},{key:"onToggleMark",value:function(e){var t=this.$(e.currentTarget),n=t.data("mark"),r=t.hasClass("n-label-mark"),a=this.settings.getVisibleMarks();this.settings.setVisibleMarks(Object.assign({},a,J()({},n,r)))}}]),MarksToggleView}(ye.View),Se()(U.prototype,"onToggleMark",[B],Object.getOwnPropertyDescriptor(U.prototype,"onToggleMark"),U.prototype),z=U))||z),He=(n(182),{27:"esc",37:"left",38:"up",39:"right",40:"down"}),qe=new(function(e){function HotkeysService(){return l()(this,HotkeysService),h()(this,p()(HotkeysService).apply(this,arguments))}return b()(HotkeysService,e),c()(HotkeysService,[{key:"initialize",value:function(){i()(document).on("keydown",this.keyHandler.bind(this))}},{key:"keyHandler",value:function(e){var t=He[e.keyCode];t&&this.trigger("key:".concat(t),e)}}]),HotkeysService}(ye.Object)),We=n(95),$e=n.n(We),Ye=n(16);function byOrder(e,t){return e.order<t.order?-1:1}function byName(e,t){return e.name.toLowerCase()<t.name.toLowerCase()?-1:1}function byDuration(e,t){return e.time&&e.time.duration&&t.time&&t.time.duration&&e.time.duration<t.time.duration?-1:1}function byMaxDuration(e,t){return e.time&&e.time.maxDuration&&t.time&&t.time.maxDuration&&e.time.maxDuration<t.time.maxDuration?-1:1}function byNodeStatus(e,t){return C.a.indexOf(e.status)>C.a.indexOf(t.status)?-1:1}function byGroupStatuses(e,t){return C.a.reduce(function(n,r){return e.statistic[r]!==t.statistic[r]&&0===n?e.statistic[r]-t.statistic[r]:n},0)}function comparator_compare(e,t,n,r,a){return e.children&&!t.children?-1:!e.children&&t.children?1:e.children&&t.children?a*r(e,t):e.children||t.children?0:a*n(e,t)}function getComparator(e){var t=e.sorter,n=e.ascending?1:-1;switch(t){case"sorter.order":return function(e,t){return comparator_compare(e,t,byOrder,byName,n)};case"sorter.name":return function(e,t){return comparator_compare(e,t,byName,byName,n)};case"sorter.duration":return function(e,t){return comparator_compare(e,t,byDuration,byMaxDuration,n)};case"sorter.status":return function(e,t){return comparator_compare(e,t,byNodeStatus,byGroupStatuses,n)};default:return 0}}var Ge,Xe,Ke,Ze,Je,Qe,et,tt,nt=(F=Object(G.b)("tree"),H=Object(G.a)("TooltipBehavior",{position:"bottom"}),q=Object(G.c)("click .node__title"),F(W=H(($=function(e){function TreeView(){var e,t;l()(this,TreeView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(TreeView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",$e.a),J()(K()(K()(t)),"cachedQuery",""),t}return b()(TreeView,e),c()(TreeView,[{key:"initialize",value:function(e){var t=e.routeState,n=e.state,r=e.tabName,a=e.baseUrl,i=e.settings;this.state=n,this.routeState=t,this.baseUrl=a,this.tabName=r,this.setState(),this.listenTo(this.routeState,"change:treeNode",this.selectNode),this.listenTo(this.routeState,"change:testResultTab",this.render),this.settings=i,this.listenTo(this.settings,"change",this.render),this.listenTo(this.state,"change",this.handleStateChange),this.listenTo(qe,"key:up",this.onKeyUp,this),this.listenTo(qe,"key:down",this.onKeyDown,this),this.listenTo(qe,"key:esc",this.onKeyBack,this),this.listenTo(qe,"key:left",this.onKeyBack,this)}},{key:"applyFilters",value:function(){var e,t,n=this.settings.getVisibleStatuses(),r=this.settings.getVisibleMarks(),a=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){var n=!0;return t.forEach(function(t){n=n&&t(e)}),n}}(function byText(e){return e=e&&e.toLowerCase()||"",function(t){return!e||t.name.toLowerCase().indexOf(e)>-1||t.children&&t.children.some(byText(e))}}(this.state.get("searchQuery")),(t=n,function(e){return e.children?e.children.length>0:t[e.status]}),(e=r,function(t){return t.children?t.children.length>0:(!e.newFailed||t.newFailed)&&(!e.flaky||t.flaky)})),i=getComparator(this.settings.getTreeSorting());this.collection.applyFilterAndSorting(a,i)}},{key:"setState",value:function(){var e=this.routeState.get("treeNode");if(e&&e.testResult){var t=e.testResult;this.state.set(t,!0)}if(e&&e.testGroup){var n=e.testGroup;this.state.set(n,!0)}}},{key:"onBeforeRender",value:function(){this.applyFilters()}},{key:"handleStateChange",value:function(){var e=this.state.get("searchQuery");e!==this.cachedQuery&&(this.cachedQuery=e,this.render())}},{key:"onRender",value:function(){var e=this;this.selectNode(),this.state.get("searchQuery")?this.$(".node__title").each(function(t,n){e.$(n).parent().addClass("node__expanded")}):this.restoreState()}},{key:"selectNode",value:function(){var e=this.routeState.previous("treeNode");this.toggleNode(e,!1);var t=this.routeState.get("treeNode");this.toggleNode(t,!0),this.restoreState()}},{key:"toggleNode",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e&&(this.findElement(e).toggleClass("node__title_active",t),this.changeState(e.testResult),this.changeState(e.testGroup))}},{key:"changeState",value:function(e){!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?this.state.set(e,!0):this.state.unset(e)}},{key:"restoreState",value:function(){var e=this;this.$("[data-uid]").each(function(t,n){var r=e.$(n),a=r.data("uid");r.toggleClass("node__expanded",e.state.has(a))}),this.$(".node__title_active").parents(".node").toggleClass("node__expanded",!0),this.$(".node").parents(".node__expanded").length>0?this.$(".node__expanded").parents("div.node.node__expanded").toggleClass("node__expanded",!0):this.$(".node__expanded").parents(".node").toggleClass("node__expanded",!0)}},{key:"findElement",value:function(e){return e.testResult?this.$("[data-uid='".concat(e.testResult,"'][data-parentUid='").concat(e.testGroup,"']")):this.$("[data-uid='".concat(e.testGroup,"']"))}},{key:"onNodeClick",value:function(e){var t=this.$(e.currentTarget),n=t.data("uid");this.changeState(n,!this.state.has(n)),t.parent().toggleClass("node__expanded")}},{key:"onKeyUp",value:function(e){e.preventDefault();var t=this.routeState.get("treeNode");t&&t.testResult?this.selectTestResult(this.collection.getPreviousTestResult(t.testResult)):this.selectTestResult(this.collection.getLastTestResult())}},{key:"onKeyDown",value:function(e){e.preventDefault();var t=this.routeState.get("treeNode");t&&t.testResult?this.selectTestResult(this.collection.getNextTestResult(t.testResult)):this.selectTestResult(this.collection.getFirstTestResult())}},{key:"onKeyBack",value:function(e){e.preventDefault();var t=this.routeState.get("treeNode");t&&(t.testGroup&&t.testResult?this.routeState.get("attachment")?Ye.a.setSearch({attachment:null}):Ye.a.toUrl("".concat(this.baseUrl,"/").concat(t.testGroup)):t.testGroup&&Ye.a.toUrl("".concat(this.baseUrl)))}},{key:"selectTestResult",value:function(e){if(e){var t=this.routeState.get("testResultTab")||"";Ye.a.toUrl("".concat(this.baseUrl,"/").concat(e.parentUid,"/").concat(e.uid,"/").concat(t),{replace:!0})}}},{key:"templateContext",value:function(){return{cls:this.className,baseUrl:this.baseUrl,showGroupInfo:this.settings.isShowGroupInfo(),time:this.collection.time,statistic:this.collection.statistic,uid:this.collection.uid,tabName:this.tabName,items:this.collection.toJSON(),testResultTab:this.routeState.get("testResultTab")||""}}}]),TreeView}(ye.View),Se()($.prototype,"onNodeClick",[q],Object.getOwnPropertyDescriptor($.prototype,"onNodeClick"),$.prototype),W=$))||W)||W),rt=n(33),at=(Ge=Object(G.b)("tree"),Xe=Object(G.a)("TooltipBehavior",{position:"bottom"}),Ke=Object(G.e)({search:".pane__search",sorter:".tree__sorter",filter:".tree__filter",filterMarks:".tree__filter-marks",content:".tree__content"}),Ze=Object(G.c)("click .tree__info"),Ge(Je=Xe(Je=Ke((Qe=function(e){function TreeViewContainer(){var e,t;l()(this,TreeViewContainer);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(TreeViewContainer)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Ee.a),t}return b()(TreeViewContainer,e),c()(TreeViewContainer,[{key:"initialize",value:function(e){var t=e.routeState,n=e.state,r=void 0===n?new x.Model:n,a=e.tabName,i=e.baseUrl,o=e.csvUrl,s=void 0===o?null:o,l=e.settings,u=void 0===l?Object(rt.c)(i):l;this.state=r,this.routeState=t,this.baseUrl=i,this.csvUrl=s,this.tabName=a,this.listenTo(this.routeState,"change:testResultTab",this.render),this.settings=u}},{key:"onInfoClick",value:function(){var e=this.settings.isShowGroupInfo();this.settings.setShowGroupInfo(!e)}},{key:"onRender",value:function(){this.showChildView("content",new nt({state:this.state,routeState:this.routeState,tabName:this.tabName,baseUrl:this.baseUrl,settings:this.settings,collection:this.collection})),this.showChildView("search",new Ve({state:this.state})),this.showChildView("sorter",new Re({settings:this.settings})),this.showChildView("filter",new Ie({settings:this.settings,statistic:this.collection.statistic})),this.showChildView("filterMarks",new Fe({settings:this.settings}))}},{key:"templateContext",value:function(){return{cls:this.className,showGroupInfo:this.settings.isShowGroupInfo(),tabName:this.tabName,shownCases:0,totalCases:0,filtered:!1,csvUrl:this.csvUrl}}}]),TreeViewContainer}(ye.View),Se()(Qe.prototype,"onInfoClick",[Ze],Object.getOwnPropertyDescriptor(Qe.prototype,"onInfoClick"),Qe.prototype),Je=Qe))||Je)||Je)||Je),it=(n(186),n(96)),ot=n.n(it),st=Object(G.b)("empty-view")(et=function(e){function EmptyView(){var e,t;l()(this,EmptyView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(EmptyView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ot.a),t}return b()(EmptyView,e),c()(EmptyView,[{key:"serializeData",value:function(){return{cls:this.className,message:this.options.message}}}]),EmptyView}(ye.View))||et,lt=n(44),ut=n(43),ct=n(31),ft=Object(G.b)("side-by-side")(tt=function(e){function TestResultTreeView(){return l()(this,TestResultTreeView),h()(this,p()(TestResultTreeView).apply(this,arguments))}return b()(TestResultTreeView,e),c()(TestResultTreeView,[{key:"initialize",value:function(e){var t=this,n=e.tree,r=e.routeState,a=e.csvUrl;g()(p()(TestResultTreeView.prototype),"initialize",this).call(this),this.csvUrl=a,this.tree=n,this.routeState=r,this.listenTo(this.routeState,"change:treeNode",function(e,n){return t.showLeaf(n)})}},{key:"showLeaf",value:function(e){var t=this;if(e&&e.testResult){var n="#".concat(this.options.baseUrl,"/").concat(e.testGroup,"/").concat(e.testResult),r=new ut.a({uid:e.testResult});r.fetch({success:function(){return t.showChildView("right",new lt.a({baseUrl:n,model:r,routeState:t.routeState}))},error:function(){return t.showChildView("right",new ct.a({code:404,message:'Test result with uid "'.concat(e.testResult,'" not found')}))}})}else this.showChildView("right",new st({message:"No item selected"}))}},{key:"onRender",value:function(){var e=this.options,t=e.tabName,n=e.baseUrl,r=new at({collection:this.tree,routeState:this.routeState,treeSorters:[],tabName:t,baseUrl:n,csvUrl:this.csvUrl});this.showChildView("left",r)}},{key:"templateContext",value:function(){return{cls:"testresult-tree"}}}]),TestResultTreeView}(ke))||tt,ht=function(e){function TreeLayout(){return l()(this,TreeLayout),h()(this,p()(TreeLayout).apply(this,arguments))}return b()(TreeLayout,e),c()(TreeLayout,[{key:"initialize",value:function(e){var t=e.url;g()(p()(TreeLayout.prototype),"initialize",this).call(this),this.tree=new Y([],{url:t}),this.routeState=new x.Model}},{key:"loadData",value:function(){return this.tree.fetch()}},{key:"getContentView",value:function(){var e=this.options,t=e.baseUrl,n=e.tabName,r=e.csvUrl;return new ft({tree:this.tree,routeState:this.routeState,tabName:n,baseUrl:t,csvUrl:r})}},{key:"onViewReady",value:function(){var e=this.options,t=e.testGroup,n=e.testResult,r=e.testResultTab;this.onRouteUpdate(t,n,r)}},{key:"onRouteUpdate",value:function(e,t,n){this.routeState.set("treeNode",{testGroup:e,testResult:t}),this.routeState.set("testResultTab",n);var r=Ye.a.getUrlParams().attachment;r?this.routeState.set("attachment",r):this.routeState.unset("attachment")}}]),TreeLayout}(y.a),dt=n(97),pt=n.n(dt),mt=function(e){function WidgetStatusView(){var e,t;l()(this,WidgetStatusView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(WidgetStatusView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",pt.a),t}return b()(WidgetStatusView,e),c()(WidgetStatusView,[{key:"serializeData",value:function(){var e=void 0===this.showLinks||this.showLinks,t=void 0===this.showAll||this.showAll;return Object.assign(g()(p()(WidgetStatusView.prototype),"serializeData",this).call(this),{rowTag:e?"a":"span",title:this.title,showAll:t,baseUrl:this.baseUrl})}}]),WidgetStatusView}(ye.View),gt=(n(188),function(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}),vt=function(e){var t;return 1===e.length&&(t=e,e=function(e,n){return gt(t(e),n)}),{left:function(t,n,r,a){for(null==r&&(r=0),null==a&&(a=t.length);r<a;){var i=r+a>>>1;e(t[i],n)<0?r=i+1:a=i}return r},right:function(t,n,r,a){for(null==r&&(r=0),null==a&&(a=t.length);r<a;){var i=r+a>>>1;e(t[i],n)>0?a=i:r=i+1}return r}}};var bt=vt(gt),yt=bt.right,_t=(bt.left,yt);var wt=function(e,t){var n,r,a,i=e.length,o=-1;if(null==t){for(;++o<i;)if(null!=(n=e[o])&&n>=n)for(r=a=n;++o<i;)null!=(n=e[o])&&(r>n&&(r=n),a<n&&(a=n))}else for(;++o<i;)if(null!=(n=t(e[o],o,e))&&n>=n)for(r=a=n;++o<i;)null!=(n=t(e[o],o,e))&&(r>n&&(r=n),a<n&&(a=n));return[r,a]},xt=Array.prototype,kt=xt.slice,Ct=(xt.map,function(e){return function(){return e}}),St=function(e){return e},Tt=function(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=0|Math.max(0,Math.ceil((t-e)/n)),i=new Array(a);++r<a;)i[r]=e+r*n;return i},Et=Math.sqrt(50),Mt=Math.sqrt(10),Ot=Math.sqrt(2),At=function(e,t,n){var r,a,i,o,s=-1;if(n=+n,(e=+e)===(t=+t)&&n>0)return[e];if((r=t<e)&&(a=e,e=t,t=a),0===(o=tickIncrement(e,t,n))||!isFinite(o))return[];if(o>0)for(e=Math.ceil(e/o),t=Math.floor(t/o),i=new Array(a=Math.ceil(t-e+1));++s<a;)i[s]=(e+s)*o;else for(e=Math.floor(e*o),t=Math.ceil(t*o),i=new Array(a=Math.ceil(e-t+1));++s<a;)i[s]=(e-s)/o;return r&&i.reverse(),i};function tickIncrement(e,t,n){var r=(t-e)/Math.max(0,n),a=Math.floor(Math.log(r)/Math.LN10),i=r/Math.pow(10,a);return a>=0?(i>=Et?10:i>=Mt?5:i>=Ot?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=Et?10:i>=Mt?5:i>=Ot?2:1)}function tickStep(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/a;return i>=Et?a*=10:i>=Mt?a*=5:i>=Ot&&(a*=2),t<e?-a:a}var Rt=function(e){return Math.ceil(Math.log(e.length)/Math.LN2)+1},Nt=function(e,t){var n,r,a=e.length,i=-1;if(null==t){for(;++i<a;)if(null!=(n=e[i])&&n>=n)for(r=n;++i<a;)null!=(n=e[i])&&n>r&&(r=n)}else for(;++i<a;)if(null!=(n=t(e[i],i,e))&&n>=n)for(r=n;++i<a;)null!=(n=t(e[i],i,e))&&n>r&&(r=n);return r};function Map(){}function map_map(e,t){var n=new Map;if(e instanceof Map)e.each(function(e,t){n.set(t,e)});else if(Array.isArray(e)){var r,a=-1,i=e.length;if(null==t)for(;++a<i;)n.set(a,e[a]);else for(;++a<i;)n.set(t(r=e[a],a,e),r)}else if(e)for(var o in e)n.set(o,e[o]);return n}Map.prototype=map_map.prototype={constructor:Map,has:function(e){return"$"+e in this},get:function(e){return this["$"+e]},set:function(e,t){return this["$"+e]=t,this},remove:function(e){var t="$"+e;return t in this&&delete this[t]},clear:function(){for(var e in this)"$"===e[0]&&delete this[e]},keys:function(){var e=[];for(var t in this)"$"===t[0]&&e.push(t.slice(1));return e},values:function(){var e=[];for(var t in this)"$"===t[0]&&e.push(this[t]);return e},entries:function(){var e=[];for(var t in this)"$"===t[0]&&e.push({key:t.slice(1),value:this[t]});return e},size:function(){var e=0;for(var t in this)"$"===t[0]&&++e;return e},empty:function(){for(var e in this)if("$"===e[0])return!1;return!0},each:function(e){for(var t in this)"$"===t[0]&&e(this[t],t.slice(1),this)}};var Dt=map_map;function Set(){}var Vt=Dt.prototype;function set(e,t){var n=new Set;if(e instanceof Set)e.each(function(e){n.add(e)});else if(e){var r=-1,a=e.length;if(null==t)for(;++r<a;)n.add(e[r]);else for(;++r<a;)n.add(t(e[r],r,e))}return n}Set.prototype=set.prototype={constructor:Set,has:Vt.has,add:function(e){return this["$"+(e+="")]=e,this},remove:Vt.remove,clear:Vt.clear,values:Vt.keys,size:Vt.size,empty:Vt.empty,each:Vt.each};var jt=Array.prototype,Pt=jt.map,Lt=jt.slice,It={name:"implicit"};function ordinal(e){var t=Dt(),n=[],r=It;function scale(a){var i=a+"",o=t.get(i);if(!o){if(r!==It)return r;t.set(i,o=n.push(a))}return e[(o-1)%e.length]}return e=null==e?[]:Lt.call(e),scale.domain=function(e){if(!arguments.length)return n.slice();n=[],t=Dt();for(var r,a,i=-1,o=e.length;++i<o;)t.has(a=(r=e[i])+"")||t.set(a,n.push(r));return scale},scale.range=function(t){return arguments.length?(e=Lt.call(t),scale):e.slice()},scale.unknown=function(e){return arguments.length?(r=e,scale):r},scale.copy=function(){return ordinal().domain(n).range(e).unknown(r)},scale}function band(){var e,t,n=ordinal().unknown(void 0),r=n.domain,a=n.range,i=[0,1],o=!1,s=0,l=0,u=.5;function rescale(){var n=r().length,c=i[1]<i[0],f=i[c-0],h=i[1-c];e=(h-f)/Math.max(1,n-s+2*l),o&&(e=Math.floor(e)),f+=(h-f-e*(n-s))*u,t=e*(1-s),o&&(f=Math.round(f),t=Math.round(t));var d=Tt(n).map(function(t){return f+e*t});return a(c?d.reverse():d)}return delete n.unknown,n.domain=function(e){return arguments.length?(r(e),rescale()):r()},n.range=function(e){return arguments.length?(i=[+e[0],+e[1]],rescale()):i.slice()},n.rangeRound=function(e){return i=[+e[0],+e[1]],o=!0,rescale()},n.bandwidth=function(){return t},n.step=function(){return e},n.round=function(e){return arguments.length?(o=!!e,rescale()):o},n.padding=function(e){return arguments.length?(s=l=Math.max(0,Math.min(1,e)),rescale()):s},n.paddingInner=function(e){return arguments.length?(s=Math.max(0,Math.min(1,e)),rescale()):s},n.paddingOuter=function(e){return arguments.length?(l=Math.max(0,Math.min(1,e)),rescale()):l},n.align=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),rescale()):u},n.copy=function(){return band().domain(r()).range(i).round(o).paddingInner(s).paddingOuter(l).align(u)},rescale()}function band_point(){return function pointish(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return pointish(t())},e}(band().paddingInner(1))}var Bt=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e};function extend(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Color(){}var zt="\\s*([+-]?\\d+)\\s*",Ut="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ft="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ht=/^#([0-9a-f]{3})$/,qt=/^#([0-9a-f]{6})$/,Wt=new RegExp("^rgb\\("+[zt,zt,zt]+"\\)$"),$t=new RegExp("^rgb\\("+[Ft,Ft,Ft]+"\\)$"),Yt=new RegExp("^rgba\\("+[zt,zt,zt,Ut]+"\\)$"),Gt=new RegExp("^rgba\\("+[Ft,Ft,Ft,Ut]+"\\)$"),Xt=new RegExp("^hsl\\("+[Ut,Ft,Ft]+"\\)$"),Kt=new RegExp("^hsla\\("+[Ut,Ft,Ft,Ut]+"\\)$"),Zt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_color(e){var t;return e=(e+"").trim().toLowerCase(),(t=Ht.exec(e))?new Rgb((t=parseInt(t[1],16))>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):(t=qt.exec(e))?rgbn(parseInt(t[1],16)):(t=Wt.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=$t.exec(e))?new Rgb(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Yt.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=Gt.exec(e))?rgba(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Xt.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=Kt.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):Zt.hasOwnProperty(e)?rgbn(Zt[e]):"transparent"===e?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,255&e,1)}function rgba(e,t,n,r){return r<=0&&(e=t=n=NaN),new Rgb(e,t,n,r)}function rgbConvert(e){return e instanceof Color||(e=color_color(e)),e?new Rgb((e=e.rgb()).r,e.g,e.b,e.opacity):new Rgb}function color_rgb(e,t,n,r){return 1===arguments.length?rgbConvert(e):new Rgb(e,t,n,null==r?1:r)}function Rgb(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function hex(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function hsla(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Hsl(e,t,n,r)}function hsl(e,t,n,r){return 1===arguments.length?function(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(e instanceof Color||(e=color_color(e)),!e)return new Hsl;if(e instanceof Hsl)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),i=Math.max(t,n,r),o=NaN,s=i-a,l=(i+a)/2;return s?(o=t===i?(n-r)/s+6*(n<r):n===i?(r-t)/s+2:(t-n)/s+4,s/=l<.5?i+a:2-i-a,o*=60):s=l>0&&l<1?0:o,new Hsl(o,s,l,e.opacity)}(e):new Hsl(e,t,n,null==r?1:r)}function Hsl(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function hsl2rgb(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}Bt(Color,color_color,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),Bt(Rgb,color_rgb,extend(Color,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)},toString:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}})),Bt(Hsl,hsl,extend(Color,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Rgb(hsl2rgb(e>=240?e-240:e+120,a,r),hsl2rgb(e,a,r),hsl2rgb(e<120?e+240:e-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Jt=Math.PI/180,Qt=180/Math.PI,en=.96422,tn=1,nn=.82521,rn=4/29,an=6/29,on=3*an*an,sn=an*an*an;function labConvert(e){if(e instanceof Lab)return new Lab(e.l,e.a,e.b,e.opacity);if(e instanceof Hcl){if(isNaN(e.h))return new Lab(e.l,0,0,e.opacity);var t=e.h*Jt;return new Lab(e.l,Math.cos(t)*e.c,Math.sin(t)*e.c,e.opacity)}e instanceof Rgb||(e=rgbConvert(e));var n,r,a=rgb2lrgb(e.r),i=rgb2lrgb(e.g),o=rgb2lrgb(e.b),s=xyz2lab((.2225045*a+.7168786*i+.0606169*o)/tn);return a===i&&i===o?n=r=s:(n=xyz2lab((.4360747*a+.3850649*i+.1430804*o)/en),r=xyz2lab((.0139322*a+.0971045*i+.7141733*o)/nn)),new Lab(116*s-16,500*(n-s),200*(s-r),e.opacity)}function lab(e,t,n,r){return 1===arguments.length?labConvert(e):new Lab(e,t,n,null==r?1:r)}function Lab(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function xyz2lab(e){return e>sn?Math.pow(e,1/3):e/on+rn}function lab2xyz(e){return e>an?e*e*e:on*(e-rn)}function lrgb2rgb(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function rgb2lrgb(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function hclConvert(e){if(e instanceof Hcl)return new Hcl(e.h,e.c,e.l,e.opacity);if(e instanceof Lab||(e=labConvert(e)),0===e.a&&0===e.b)return new Hcl(NaN,0,e.l,e.opacity);var t=Math.atan2(e.b,e.a)*Qt;return new Hcl(t<0?t+360:t,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function hcl(e,t,n,r){return 1===arguments.length?hclConvert(e):new Hcl(e,t,n,null==r?1:r)}function Hcl(e,t,n,r){this.h=+e,this.c=+t,this.l=+n,this.opacity=+r}Bt(Lab,lab,extend(Color,{brighter:function(e){return new Lab(this.l+18*(null==e?1:e),this.a,this.b,this.opacity)},darker:function(e){return new Lab(this.l-18*(null==e?1:e),this.a,this.b,this.opacity)},rgb:function(){var e=(this.l+16)/116,t=isNaN(this.a)?e:e+this.a/500,n=isNaN(this.b)?e:e-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(t=en*lab2xyz(t))-1.6168667*(e=tn*lab2xyz(e))-.4906146*(n=nn*lab2xyz(n))),lrgb2rgb(-.9787684*t+1.9161415*e+.033454*n),lrgb2rgb(.0719453*t-.2289914*e+1.4052427*n),this.opacity)}})),Bt(Hcl,hcl,extend(Color,{brighter:function(e){return new Hcl(this.h,this.c,this.l+18*(null==e?1:e),this.opacity)},darker:function(e){return new Hcl(this.h,this.c,this.l-18*(null==e?1:e),this.opacity)},rgb:function(){return labConvert(this).rgb()}}));var ln=-.14861,un=1.78277,cn=-.29227,fn=-.90649,hn=1.97294,dn=hn*fn,pn=hn*un,mn=un*cn-fn*ln;function cubehelix_cubehelix(e,t,n,r){return 1===arguments.length?function(e){if(e instanceof Cubehelix)return new Cubehelix(e.h,e.s,e.l,e.opacity);e instanceof Rgb||(e=rgbConvert(e));var t=e.r/255,n=e.g/255,r=e.b/255,a=(mn*r+dn*t-pn*n)/(mn+dn-pn),i=r-a,o=(hn*(n-a)-cn*i)/fn,s=Math.sqrt(o*o+i*i)/(hn*a*(1-a)),l=s?Math.atan2(o,i)*Qt-120:NaN;return new Cubehelix(l<0?l+360:l,s,a,e.opacity)}(e):new Cubehelix(e,t,n,null==r?1:r)}function Cubehelix(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function basis(e,t,n,r,a){var i=e*e,o=i*e;return((1-3*e+3*i-o)*t+(4-6*i+3*o)*n+(1+3*e+3*i-3*o)*r+o*a)/6}Bt(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new Cubehelix(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*Jt,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),a=Math.sin(e);return new Rgb(255*(t+n*(ln*r+un*a)),255*(t+n*(cn*r+fn*a)),255*(t+n*(hn*r)),this.opacity)}}));var gn=function(e){return function(){return e}};function linear(e,t){return function(n){return e+n*t}}function color_hue(e,t){var n=t-e;return n?linear(e,n>180||n<-180?n-360*Math.round(n/360):n):gn(isNaN(e)?t:e)}function gamma(e){return 1==(e=+e)?nogamma:function(t,n){return n-t?function(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):gn(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear(e,n):gn(isNaN(e)?t:e)}var vn=function rgbGamma(e){var t=gamma(e);function rgb(e,n){var r=t((e=color_rgb(e)).r,(n=color_rgb(n)).r),a=t(e.g,n.g),i=t(e.b,n.b),o=nogamma(e.opacity,n.opacity);return function(t){return e.r=r(t),e.g=a(t),e.b=i(t),e.opacity=o(t),e+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(e){return function(t){var n,r,a=t.length,i=new Array(a),o=new Array(a),s=new Array(a);for(n=0;n<a;++n)r=color_rgb(t[n]),i[n]=r.r||0,o[n]=r.g||0,s[n]=r.b||0;return i=e(i),o=e(o),s=e(s),r.opacity=1,function(e){return r.r=i(e),r.g=o(e),r.b=s(e),r+""}}}var bn=rgbSpline(function(e){var t=e.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),a=e[r],i=e[r+1],o=r>0?e[r-1]:2*a-i,s=r<t-1?e[r+2]:2*i-a;return basis((n-r/t)*t,o,a,i,s)}}),yn=(rgbSpline(function(e){var t=e.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*t),a=e[(r+t-1)%t],i=e[r%t],o=e[(r+1)%t],s=e[(r+2)%t];return basis((n-r/t)*t,a,i,o,s)}}),function(e,t){return t-=e=+e,function(n){return e+t*n}}),_n=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,wn=new RegExp(_n.source,"g");var xn,kn,Cn,Sn,Tn=function(e,t){var n,r,a,i=_n.lastIndex=wn.lastIndex=0,o=-1,s=[],l=[];for(e+="",t+="";(n=_n.exec(e))&&(r=wn.exec(t));)(a=r.index)>i&&(a=t.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,l.push({i:o,x:yn(n,r)})),i=wn.lastIndex;return i<t.length&&(a=t.slice(i),s[o]?s[o]+=a:s[++o]=a),s.length<2?l[0]?function(e){return function(t){return e(t)+""}}(l[0].x):function(e){return function(){return e}}(t):(t=l.length,function(e){for(var n,r=0;r<t;++r)s[(n=l[r]).i]=n.x(e);return s.join("")})},En=function(e,t){var n,r=typeof t;return null==t||"boolean"===r?gn(t):("number"===r?yn:"string"===r?(n=color_color(t))?(t=n,vn):Tn:t instanceof color_color?vn:t instanceof Date?function(e,t){var n=new Date;return t-=e=+e,function(r){return n.setTime(e+t*r),n}}:Array.isArray(t)?function(e,t){var n,r=t?t.length:0,a=e?Math.min(r,e.length):0,i=new Array(a),o=new Array(r);for(n=0;n<a;++n)i[n]=En(e[n],t[n]);for(;n<r;++n)o[n]=t[n];return function(e){for(n=0;n<a;++n)o[n]=i[n](e);return o}}:"function"!=typeof t.valueOf&&"function"!=typeof t.toString||isNaN(t)?function(e,t){var n,r={},a={};for(n in null!==e&&"object"==typeof e||(e={}),null!==t&&"object"==typeof t||(t={}),t)n in e?r[n]=En(e[n],t[n]):a[n]=t[n];return function(e){for(n in r)a[n]=r[n](e);return a}}:yn)(e,t)},Mn=function(e,t){return t-=e=+e,function(n){return Math.round(e+t*n)}},On=180/Math.PI,An={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},Rn=function(e,t,n,r,a,i){var o,s,l;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(l=e*n+t*r)&&(n-=e*l,r-=t*l),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,l/=s),e*r<t*n&&(e=-e,t=-t,l=-l,o=-o),{translateX:a,translateY:i,rotate:Math.atan2(t,e)*On,skewX:Math.atan(l)*On,scaleX:o,scaleY:s}};function interpolateTransform(e,t,n,r){function pop(e){return e.length?e.pop()+" ":""}return function(a,i){var o=[],s=[];return a=e(a),i=e(i),function(e,r,a,i,o,s){if(e!==a||r!==i){var l=o.push("translate(",null,t,null,n);s.push({i:l-4,x:yn(e,a)},{i:l-2,x:yn(r,i)})}else(a||i)&&o.push("translate("+a+t+i+n)}(a.translateX,a.translateY,i.translateX,i.translateY,o,s),function(e,t,n,a){e!==t?(e-t>180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(pop(n)+"rotate(",null,r)-2,x:yn(e,t)})):t&&n.push(pop(n)+"rotate("+t+r)}(a.rotate,i.rotate,o,s),function(e,t,n,a){e!==t?a.push({i:n.push(pop(n)+"skewX(",null,r)-2,x:yn(e,t)}):t&&n.push(pop(n)+"skewX("+t+r)}(a.skewX,i.skewX,o,s),function(e,t,n,r,a,i){if(e!==n||t!==r){var o=a.push(pop(a)+"scale(",null,",",null,")");i.push({i:o-4,x:yn(e,n)},{i:o-2,x:yn(t,r)})}else 1===n&&1===r||a.push(pop(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,i.scaleX,i.scaleY,o,s),a=i=null,function(e){for(var t,n=-1,r=s.length;++n<r;)o[(t=s[n]).i]=t.x(e);return o.join("")}}}var Nn=interpolateTransform(function(e){return"none"===e?An:(xn||(xn=document.createElement("DIV"),kn=document.documentElement,Cn=document.defaultView),xn.style.transform=e,e=Cn.getComputedStyle(kn.appendChild(xn),null).getPropertyValue("transform"),kn.removeChild(xn),e=e.slice(7,-1).split(","),Rn(+e[0],+e[1],+e[2],+e[3],+e[4],+e[5]))},"px, ","px)","deg)"),Dn=interpolateTransform(function(e){return null==e?An:(Sn||(Sn=document.createElementNS("http://www.w3.org/2000/svg","g")),Sn.setAttribute("transform",e),(e=Sn.transform.baseVal.consolidate())?(e=e.matrix,Rn(e.a,e.b,e.c,e.d,e.e,e.f)):An)},", ",")",")");Math.SQRT2;function hsl_hsl(e){return function(t,n){var r=e((t=hsl(t)).h,(n=hsl(n)).h),a=nogamma(t.s,n.s),i=nogamma(t.l,n.l),o=nogamma(t.opacity,n.opacity);return function(e){return t.h=r(e),t.s=a(e),t.l=i(e),t.opacity=o(e),t+""}}}hsl_hsl(color_hue),hsl_hsl(nogamma);function hcl_hcl(e){return function(t,n){var r=e((t=hcl(t)).h,(n=hcl(n)).h),a=nogamma(t.c,n.c),i=nogamma(t.l,n.l),o=nogamma(t.opacity,n.opacity);return function(e){return t.h=r(e),t.c=a(e),t.l=i(e),t.opacity=o(e),t+""}}}hcl_hcl(color_hue),hcl_hcl(nogamma);function src_cubehelix_cubehelix(e){return function cubehelixGamma(t){function cubehelix(n,r){var a=e((n=cubehelix_cubehelix(n)).h,(r=cubehelix_cubehelix(r)).h),i=nogamma(n.s,r.s),o=nogamma(n.l,r.l),s=nogamma(n.opacity,r.opacity);return function(e){return n.h=a(e),n.s=i(e),n.l=o(Math.pow(e,t)),n.opacity=s(e),n+""}}return t=+t,cubehelix.gamma=cubehelixGamma,cubehelix}(1)}src_cubehelix_cubehelix(color_hue);var Vn=src_cubehelix_cubehelix(nogamma);var jn=function(e){return function(){return e}},Pn=function(e){return+e},Ln=[0,1];function deinterpolateLinear(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:jn(t)}function bimap(e,t,n,r){var a=e[0],i=e[1],o=t[0],s=t[1];return i<a?(a=n(i,a),o=r(s,o)):(a=n(a,i),o=r(o,s)),function(e){return o(a(e))}}function polymap(e,t,n,r){var a=Math.min(e.length,t.length)-1,i=new Array(a),o=new Array(a),s=-1;for(e[a]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++s<a;)i[s]=n(e[s],e[s+1]),o[s]=r(t[s],t[s+1]);return function(t){var n=_t(e,t,1,a)-1;return o[n](i[n](t))}}function copy(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp())}function continuous(e,t){var n,r,a,i=Ln,o=Ln,s=En,l=!1;function rescale(){return n=Math.min(i.length,o.length)>2?polymap:bimap,r=a=null,scale}function scale(t){return(r||(r=n(i,o,l?function(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=t?0:e>=n?1:r(e)}}}(e):e,s)))(+t)}return scale.invert=function(e){return(a||(a=n(o,i,deinterpolateLinear,l?function(e){return function(t,n){var r=e(t=+t,n=+n);return function(e){return e<=0?t:e>=1?n:r(e)}}}(t):t)))(+e)},scale.domain=function(e){return arguments.length?(i=Pt.call(e,Pn),rescale()):i.slice()},scale.range=function(e){return arguments.length?(o=Lt.call(e),rescale()):o.slice()},scale.rangeRound=function(e){return o=Lt.call(e),s=Mn,rescale()},scale.clamp=function(e){return arguments.length?(l=!!e,rescale()):l},scale.interpolate=function(e){return arguments.length?(s=e,rescale()):s},rescale()}var In=function(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]},Bn=function(e){return(e=In(Math.abs(e)))?e[1]:NaN},zn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){return new FormatSpecifier(e)}function FormatSpecifier(e){if(!(t=zn.exec(e)))throw new Error("invalid format: "+e);var t;this.fill=t[1]||" ",this.align=t[2]||">",this.sign=t[3]||"-",this.symbol=t[4]||"",this.zero=!!t[5],this.width=t[6]&&+t[6],this.comma=!!t[7],this.precision=t[8]&&+t[8].slice(1),this.trim=!!t[9],this.type=t[10]||""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Un,Fn,Hn,qn,Wn=function(e){e:for(var t,n=e.length,r=1,a=-1;r<n;++r)switch(e[r]){case".":a=t=r;break;case"0":0===a&&(a=r),t=r;break;default:if(a>0){if(!+e[r])break e;a=0}}return a>0?e.slice(0,a)+e.slice(t+1):e},$n=function(e,t){var n=In(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")},Yn={"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.round(e).toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return $n(100*e,t)},r:$n,s:function(e,t){var n=In(e,t);if(!n)return e+"";var r=n[0],a=n[1],i=a-(Un=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,o=r.length;return i===o?r:i>o?r+new Array(i-o+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+In(e,Math.max(0,t+i-1))[0]},X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}},Gn=function(e){return e},Xn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];Fn=function(e){var t,n,r=e.grouping&&e.thousands?(t=e.grouping,n=e.thousands,function(e,r){for(var a=e.length,i=[],o=0,s=t[0],l=0;a>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),i.push(e.substring(a-=s,a+s)),!((l+=s+1)>r));)s=t[o=(o+1)%t.length];return i.reverse().join(n)}):Gn,a=e.currency,i=e.decimal,o=e.numerals?function(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}(e.numerals):Gn,s=e.percent||"%";function newFormat(e){var t=(e=formatSpecifier(e)).fill,n=e.align,l=e.sign,u=e.symbol,c=e.zero,f=e.width,h=e.comma,d=e.precision,p=e.trim,m=e.type;"n"===m?(h=!0,m="g"):Yn[m]||(null==d&&(d=12),p=!0,m="g"),(c||"0"===t&&"="===n)&&(c=!0,t="0",n="=");var g="$"===u?a[0]:"#"===u&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",v="$"===u?a[1]:/[%p]/.test(m)?s:"",b=Yn[m],y=/[defgprs%]/.test(m);function format(e){var a,s,u,_=g,w=v;if("c"===m)w=b(e)+w,e="";else{var x=(e=+e)<0;if(e=b(Math.abs(e),d),p&&(e=Wn(e)),x&&0==+e&&(x=!1),_=(x?"("===l?l:"-":"-"===l||"("===l?"":l)+_,w=("s"===m?Xn[8+Un/3]:"")+w+(x&&"("===l?")":""),y)for(a=-1,s=e.length;++a<s;)if(48>(u=e.charCodeAt(a))||u>57){w=(46===u?i+e.slice(a+1):e.slice(a))+w,e=e.slice(0,a);break}}h&&!c&&(e=r(e,1/0));var k=_.length+e.length+w.length,C=k<f?new Array(f-k+1).join(t):"";switch(h&&c&&(e=r(C+e,C.length?f-w.length:1/0),C=""),n){case"<":e=_+e+w+C;break;case"=":e=_+C+e+w;break;case"^":e=C.slice(0,k=C.length>>1)+_+e+w+C.slice(k);break;default:e=C+_+e+w}return o(e)}return d=null==d?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),format.toString=function(){return e+""},format}return{format:newFormat,formatPrefix:function(e,t){var n=newFormat(((e=formatSpecifier(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(Bn(t)/3))),a=Math.pow(10,-r),i=Xn[8+r/3];return function(e){return n(a*e)+i}}}}({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),Hn=Fn.format,qn=Fn.formatPrefix;var Kn=function(e,t,n){var r,a=e[0],i=e[e.length-1],o=tickStep(a,i,null==t?10:t);switch((n=formatSpecifier(null==n?",f":n)).type){case"s":var s=Math.max(Math.abs(a),Math.abs(i));return null!=n.precision||isNaN(r=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Bn(t)/3)))-Bn(Math.abs(e)))}(o,s))||(n.precision=r),qn(n,s);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Bn(t)-Bn(e))+1}(o,Math.max(Math.abs(a),Math.abs(i))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=function(e){return Math.max(0,-Bn(Math.abs(e)))}(o))||(n.precision=r-2*("%"===n.type))}return Hn(n)};function linearish(e){var t=e.domain;return e.ticks=function(e){var n=t();return At(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){return Kn(t(),e,n)},e.nice=function(n){null==n&&(n=10);var r,a=t(),i=0,o=a.length-1,s=a[i],l=a[o];return l<s&&(r=s,s=l,l=r,r=i,i=o,o=r),(r=tickIncrement(s,l,n))>0?r=tickIncrement(s=Math.floor(s/r)*r,l=Math.ceil(l/r)*r,n):r<0&&(r=tickIncrement(s=Math.ceil(s*r)/r,l=Math.floor(l*r)/r,n)),r>0?(a[i]=Math.floor(s/r)*r,a[o]=Math.ceil(l/r)*r,t(a)):r<0&&(a[i]=Math.ceil(s*r)/r,a[o]=Math.floor(l*r)/r,t(a)),e},e}function linear_linear(){var e=continuous(deinterpolateLinear,yn);return e.copy=function(){return copy(e,linear_linear())},linearish(e)}function raise(e,t){return e<0?-Math.pow(-e,t):Math.pow(e,t)}function sqrt(){return function pow(){var e=1,t=continuous(function(t,n){return(n=raise(n,e)-(t=raise(t,e)))?function(r){return(raise(r,e)-t)/n}:jn(n)},function(t,n){return n=raise(n,e)-(t=raise(t,e)),function(r){return raise(t+n*r,1/e)}}),n=t.domain;return t.exponent=function(t){return arguments.length?(e=+t,n(n())):e},t.copy=function(){return copy(t,pow().exponent(e))},linearish(t)}().exponent(.5)}var Zn=new Date,Jn=new Date;function newInterval(e,t,n,r){function interval(t){return e(t=new Date(+t)),t}return interval.floor=interval,interval.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},interval.round=function(e){var t=interval(e),n=interval.ceil(e);return e-t<n-e?t:n},interval.offset=function(e,n){return t(e=new Date(+e),null==n?1:Math.floor(n)),e},interval.range=function(n,r,a){var i,o=[];if(n=interval.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return o;do{o.push(i=new Date(+n)),t(n,a),e(n)}while(i<n&&n<r);return o},interval.filter=function(n){return newInterval(function(t){if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})},n&&(interval.count=function(t,r){return Zn.setTime(+t),Jn.setTime(+r),e(Zn),e(Jn),Math.floor(n(Zn,Jn))},interval.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?interval.filter(r?function(t){return r(t)%e==0}:function(t){return interval.count(0,t)%e==0}):interval:null}),interval}var Qn=newInterval(function(){},function(e,t){e.setTime(+e+t)},function(e,t){return t-e});Qn.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?newInterval(function(t){t.setTime(Math.floor(t/e)*e)},function(t,n){t.setTime(+t+n*e)},function(t,n){return(n-t)/e}):Qn:null};Qn.range;var er=6e4,tr=6048e5,nr=newInterval(function(e){e.setTime(1e3*Math.floor(e/1e3))},function(e,t){e.setTime(+e+1e3*t)},function(e,t){return(t-e)/1e3},function(e){return e.getUTCSeconds()}),rr=(nr.range,newInterval(function(e){e.setTime(Math.floor(e/er)*er)},function(e,t){e.setTime(+e+t*er)},function(e,t){return(t-e)/er},function(e){return e.getMinutes()})),ar=(rr.range,newInterval(function(e){var t=e.getTimezoneOffset()*er%36e5;t<0&&(t+=36e5),e.setTime(36e5*Math.floor((+e-t)/36e5)+t)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getHours()})),ir=(ar.range,newInterval(function(e){e.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*er)/864e5},function(e){return e.getDate()-1})),or=ir;ir.range;function weekday(e){return newInterval(function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},function(e,t){e.setDate(e.getDate()+7*t)},function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*er)/tr})}var sr=weekday(0),lr=weekday(1),ur=weekday(2),cr=weekday(3),fr=weekday(4),hr=weekday(5),dr=weekday(6),pr=(sr.range,lr.range,ur.range,cr.range,fr.range,hr.range,dr.range,newInterval(function(e){e.setDate(1),e.setHours(0,0,0,0)},function(e,t){e.setMonth(e.getMonth()+t)},function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())},function(e){return e.getMonth()})),mr=(pr.range,newInterval(function(e){e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e,t){return t.getFullYear()-e.getFullYear()},function(e){return e.getFullYear()}));mr.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n*e)}):null};var gr=mr,vr=(mr.range,newInterval(function(e){e.setUTCSeconds(0,0)},function(e,t){e.setTime(+e+t*er)},function(e,t){return(t-e)/er},function(e){return e.getUTCMinutes()})),br=(vr.range,newInterval(function(e){e.setUTCMinutes(0,0,0)},function(e,t){e.setTime(+e+36e5*t)},function(e,t){return(t-e)/36e5},function(e){return e.getUTCHours()})),yr=(br.range,newInterval(function(e){e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+t)},function(e,t){return(t-e)/864e5},function(e){return e.getUTCDate()-1})),_r=yr;yr.range;function utcWeekday(e){return newInterval(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},function(e,t){e.setUTCDate(e.getUTCDate()+7*t)},function(e,t){return(t-e)/tr})}var wr=utcWeekday(0),xr=utcWeekday(1),kr=utcWeekday(2),Cr=utcWeekday(3),Sr=utcWeekday(4),Tr=utcWeekday(5),Er=utcWeekday(6),Mr=(wr.range,xr.range,kr.range,Cr.range,Sr.range,Tr.range,Er.range,newInterval(function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCMonth(e.getUTCMonth()+t)},function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())},function(e){return e.getUTCMonth()})),Or=(Mr.range,newInterval(function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)},function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()},function(e){return e.getUTCFullYear()}));Or.every=function(e){return isFinite(e=Math.floor(e))&&e>0?newInterval(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)}):null};var Ar=Or;Or.range;function localDate(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function utcDate(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function newYear(e){return{y:e,m:0,d:1,H:0,M:0,S:0,L:0}}var Rr,Nr,Dr,Vr={"-":"",_:" ",0:"0"},jr=/^\s*\d+/,Pr=/^%/,Lr=/[\\^$*+?|[\]().{}]/g;function pad(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",i=a.length;return r+(i<n?new Array(n-i+1).join(t)+a:a)}function requote(e){return e.replace(Lr,"\\$&")}function formatRe(e){return new RegExp("^(?:"+e.map(requote).join("|")+")","i")}function formatLookup(e){for(var t={},n=-1,r=e.length;++n<r;)t[e[n].toLowerCase()]=n;return t}function parseWeekdayNumberSunday(e,t,n){var r=jr.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function parseWeekdayNumberMonday(e,t,n){var r=jr.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function parseWeekNumberSunday(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function parseWeekNumberISO(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function parseWeekNumberMonday(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function parseFullYear(e,t,n){var r=jr.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function parseYear(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function parseZone(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function parseMonthNumber(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function parseDayOfMonth(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function parseDayOfYear(e,t,n){var r=jr.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function parseHour24(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function parseMinutes(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function parseSeconds(e,t,n){var r=jr.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function parseMilliseconds(e,t,n){var r=jr.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function parseMicroseconds(e,t,n){var r=jr.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function parseLiteralPercent(e,t,n){var r=Pr.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function parseUnixTimestamp(e,t,n){var r=jr.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function parseUnixTimestampSeconds(e,t,n){var r=jr.exec(t.slice(n));return r?(e.Q=1e3*+r[0],n+r[0].length):-1}function formatDayOfMonth(e,t){return pad(e.getDate(),t,2)}function formatHour24(e,t){return pad(e.getHours(),t,2)}function formatHour12(e,t){return pad(e.getHours()%12||12,t,2)}function formatDayOfYear(e,t){return pad(1+or.count(gr(e),e),t,3)}function formatMilliseconds(e,t){return pad(e.getMilliseconds(),t,3)}function formatMicroseconds(e,t){return formatMilliseconds(e,t)+"000"}function formatMonthNumber(e,t){return pad(e.getMonth()+1,t,2)}function formatMinutes(e,t){return pad(e.getMinutes(),t,2)}function formatSeconds(e,t){return pad(e.getSeconds(),t,2)}function formatWeekdayNumberMonday(e){var t=e.getDay();return 0===t?7:t}function formatWeekNumberSunday(e,t){return pad(sr.count(gr(e),e),t,2)}function formatWeekNumberISO(e,t){var n=e.getDay();return e=n>=4||0===n?fr(e):fr.ceil(e),pad(fr.count(gr(e),e)+(4===gr(e).getDay()),t,2)}function formatWeekdayNumberSunday(e){return e.getDay()}function formatWeekNumberMonday(e,t){return pad(lr.count(gr(e),e),t,2)}function locale_formatYear(e,t){return pad(e.getFullYear()%100,t,2)}function formatFullYear(e,t){return pad(e.getFullYear()%1e4,t,4)}function formatZone(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+pad(t/60|0,"0",2)+pad(t%60,"0",2)}function formatUTCDayOfMonth(e,t){return pad(e.getUTCDate(),t,2)}function formatUTCHour24(e,t){return pad(e.getUTCHours(),t,2)}function formatUTCHour12(e,t){return pad(e.getUTCHours()%12||12,t,2)}function formatUTCDayOfYear(e,t){return pad(1+_r.count(Ar(e),e),t,3)}function formatUTCMilliseconds(e,t){return pad(e.getUTCMilliseconds(),t,3)}function formatUTCMicroseconds(e,t){return formatUTCMilliseconds(e,t)+"000"}function formatUTCMonthNumber(e,t){return pad(e.getUTCMonth()+1,t,2)}function formatUTCMinutes(e,t){return pad(e.getUTCMinutes(),t,2)}function formatUTCSeconds(e,t){return pad(e.getUTCSeconds(),t,2)}function formatUTCWeekdayNumberMonday(e){var t=e.getUTCDay();return 0===t?7:t}function formatUTCWeekNumberSunday(e,t){return pad(wr.count(Ar(e),e),t,2)}function formatUTCWeekNumberISO(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Sr(e):Sr.ceil(e),pad(Sr.count(Ar(e),e)+(4===Ar(e).getUTCDay()),t,2)}function formatUTCWeekdayNumberSunday(e){return e.getUTCDay()}function formatUTCWeekNumberMonday(e,t){return pad(xr.count(Ar(e),e),t,2)}function formatUTCYear(e,t){return pad(e.getUTCFullYear()%100,t,2)}function formatUTCFullYear(e,t){return pad(e.getUTCFullYear()%1e4,t,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(e){return+e}function formatUnixTimestampSeconds(e){return Math.floor(+e/1e3)}!function(e){Rr=function(e){var t=e.dateTime,n=e.date,r=e.time,a=e.periods,i=e.days,o=e.shortDays,s=e.months,l=e.shortMonths,u=formatRe(a),c=formatLookup(a),f=formatRe(i),h=formatLookup(i),d=formatRe(o),p=formatLookup(o),m=formatRe(s),g=formatLookup(s),v=formatRe(l),b=formatLookup(l),y={a:function(e){return o[e.getDay()]},A:function(e){return i[e.getDay()]},b:function(e){return l[e.getMonth()]},B:function(e){return s[e.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function(e){return a[+(e.getHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},_={a:function(e){return o[e.getUTCDay()]},A:function(e){return i[e.getUTCDay()]},b:function(e){return l[e.getUTCMonth()]},B:function(e){return s[e.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function(e){return a[+(e.getUTCHours()>=12)]},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},w={a:function(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(e,t,n){var r=f.exec(t.slice(n));return r?(e.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function(e,t,n){var r=v.exec(t.slice(n));return r?(e.m=b[r[0].toLowerCase()],n+r[0].length):-1},B:function(e,t,n){var r=m.exec(t.slice(n));return r?(e.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(e,n,r){return parseSpecifier(e,t,n,r)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function(e,t,n){var r=u.exec(t.slice(n));return r?(e.p=c[r[0].toLowerCase()],n+r[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function(e,t,r){return parseSpecifier(e,n,t,r)},X:function(e,t,n){return parseSpecifier(e,r,t,n)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(e,t){return function(n){var r,a,i,o=[],s=-1,l=0,u=e.length;for(n instanceof Date||(n=new Date(+n));++s<u;)37===e.charCodeAt(s)&&(o.push(e.slice(l,s)),null!=(a=Vr[r=e.charAt(++s)])?r=e.charAt(++s):a="e"===r?" ":"0",(i=t[r])&&(r=i(n,a)),o.push(r),l=s+1);return o.push(e.slice(l,s)),o.join("")}}function newParse(e,t){return function(n){var r,a,i=newYear(1900);if(parseSpecifier(i,e,n+="",0)!=n.length)return null;if("Q"in i)return new Date(i.Q);if("p"in i&&(i.H=i.H%12+12*i.p),"V"in i){if(i.V<1||i.V>53)return null;"w"in i||(i.w=1),"Z"in i?(a=(r=utcDate(newYear(i.y))).getUTCDay(),r=a>4||0===a?xr.ceil(r):xr(r),r=_r.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(a=(r=t(newYear(i.y))).getDay(),r=a>4||0===a?lr.ceil(r):lr(r),r=or.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),a="Z"in i?utcDate(newYear(i.y)).getUTCDay():t(newYear(i.y)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(a+5)%7:i.w+7*i.U-(a+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,utcDate(i)):t(i)}}function parseSpecifier(e,t,n,r){for(var a,i,o=0,s=t.length,l=n.length;o<s;){if(r>=l)return-1;if(37===(a=t.charCodeAt(o++))){if(a=t.charAt(o++),!(i=w[a in Vr?t.charAt(o++):a])||(r=i(e,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}return y.x=newFormat(n,y),y.X=newFormat(r,y),y.c=newFormat(t,y),_.x=newFormat(n,_),_.X=newFormat(r,_),_.c=newFormat(t,_),{format:function(e){var t=newFormat(e+="",y);return t.toString=function(){return e},t},parse:function(e){var t=newParse(e+="",localDate);return t.toString=function(){return e},t},utcFormat:function(e){var t=newFormat(e+="",_);return t.toString=function(){return e},t},utcParse:function(e){var t=newParse(e,utcDate);return t.toString=function(){return e},t}}}(e),Rr.format,Rr.parse,Nr=Rr.utcFormat,Dr=Rr.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||Nr("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Dr("%Y-%m-%dT%H:%M:%S.%LZ");var Ir=function(e){return e.match(/.{6}/g).map(function(e){return"#"+e})},Br=(Ir("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Ir("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),Ir("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),Ir("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"));Vn(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),Vn(cubehelix_cubehelix(-100,.75,.35),cubehelix_cubehelix(80,1.5,.8)),Vn(cubehelix_cubehelix(260,.75,.35),cubehelix_cubehelix(80,1.5,.8)),cubehelix_cubehelix();function ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}ramp(Ir("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),ramp(Ir("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),ramp(Ir("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),ramp(Ir("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));var zr=Math.PI,Ur=2*zr,Fr=Ur-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function(e,t){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(e,t){this._+="L"+(this._x1=+e)+","+(this._y1=+t)},quadraticCurveTo:function(e,t,n,r){this._+="Q"+ +e+","+ +t+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(e,t,n,r,a,i){this._+="C"+ +e+","+ +t+","+ +n+","+ +r+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(e,t,n,r,a){e=+e,t=+t,n=+n,r=+r,a=+a;var i=this._x1,o=this._y1,s=n-e,l=r-t,u=i-e,c=o-t,f=u*u+c*c;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=e)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(c*s-l*u)>1e-6&&a){var h=n-i,d=r-o,p=s*s+l*l,m=h*h+d*d,g=Math.sqrt(p),v=Math.sqrt(f),b=a*Math.tan((zr-Math.acos((p+f-m)/(2*g*v)))/2),y=b/v,_=b/g;Math.abs(y-1)>1e-6&&(this._+="L"+(e+y*u)+","+(t+y*c)),this._+="A"+a+","+a+",0,0,"+ +(c*h>u*d)+","+(this._x1=e+_*s)+","+(this._y1=t+_*l)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function(e,t,n,r,a,i){e=+e,t=+t;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),l=e+o,u=t+s,c=1^i,f=i?r-a:a-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+l+","+u:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+l+","+u),n&&(f<0&&(f=f%Ur+Ur),f>Fr?this._+="A"+n+","+n+",0,1,"+c+","+(e-o)+","+(t-s)+"A"+n+","+n+",0,1,"+c+","+(this._x1=l)+","+(this._y1=u):f>1e-6&&(this._+="A"+n+","+n+",0,"+ +(f>=zr)+","+c+","+(this._x1=e+n*Math.cos(a))+","+(this._y1=t+n*Math.sin(a))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Hr=path_path,qr=function(e){return function(){return e}},Wr=Math.abs,$r=Math.atan2,Yr=Math.cos,Gr=Math.max,Xr=Math.min,Kr=Math.sin,Zr=Math.sqrt,Jr=1e-12,Qr=Math.PI,ea=Qr/2,ta=2*Qr;function asin(e){return e>=1?ea:e<=-1?-ea:Math.asin(e)}function arcInnerRadius(e){return e.innerRadius}function arcOuterRadius(e){return e.outerRadius}function arcStartAngle(e){return e.startAngle}function arcEndAngle(e){return e.endAngle}function arcPadAngle(e){return e&&e.padAngle}function cornerTangents(e,t,n,r,a,i,o){var s=e-n,l=t-r,u=(o?i:-i)/Zr(s*s+l*l),c=u*l,f=-u*s,h=e+c,d=t+f,p=n+c,m=r+f,g=(h+p)/2,v=(d+m)/2,b=p-h,y=m-d,_=b*b+y*y,w=a-i,x=h*m-p*d,k=(y<0?-1:1)*Zr(Gr(0,w*w*_-x*x)),C=(x*y-b*k)/_,S=(-x*b-y*k)/_,T=(x*y+b*k)/_,E=(-x*b+y*k)/_,M=C-g,O=S-v,A=T-g,R=E-v;return M*M+O*O>A*A+R*R&&(C=T,S=E),{cx:C,cy:S,x01:-c,y01:-f,x11:C*(a/w-1),y11:S*(a/w-1)}}var na=function(){var e=arcInnerRadius,t=arcOuterRadius,n=qr(0),r=null,a=arcStartAngle,i=arcEndAngle,o=arcPadAngle,s=null;function arc(){var l,u,c,f=+e.apply(this,arguments),h=+t.apply(this,arguments),d=a.apply(this,arguments)-ea,p=i.apply(this,arguments)-ea,m=Wr(p-d),g=p>d;if(s||(s=l=Hr()),h<f&&(u=h,h=f,f=u),h>Jr)if(m>ta-Jr)s.moveTo(h*Yr(d),h*Kr(d)),s.arc(0,0,h,d,p,!g),f>Jr&&(s.moveTo(f*Yr(p),f*Kr(p)),s.arc(0,0,f,p,d,g));else{var v,b,y=d,_=p,w=d,x=p,k=m,C=m,S=o.apply(this,arguments)/2,T=S>Jr&&(r?+r.apply(this,arguments):Zr(f*f+h*h)),E=Xr(Wr(h-f)/2,+n.apply(this,arguments)),M=E,O=E;if(T>Jr){var A=asin(T/f*Kr(S)),R=asin(T/h*Kr(S));(k-=2*A)>Jr?(w+=A*=g?1:-1,x-=A):(k=0,w=x=(d+p)/2),(C-=2*R)>Jr?(y+=R*=g?1:-1,_-=R):(C=0,y=_=(d+p)/2)}var N=h*Yr(y),D=h*Kr(y),V=f*Yr(x),j=f*Kr(x);if(E>Jr){var P=h*Yr(_),L=h*Kr(_),I=f*Yr(w),B=f*Kr(w);if(m<Qr){var z=k>Jr?function(e,t,n,r,a,i,o,s){var l=n-e,u=r-t,c=o-a,f=s-i,h=(c*(t-i)-f*(e-a))/(f*l-c*u);return[e+h*l,t+h*u]}(N,D,I,B,P,L,V,j):[V,j],U=N-z[0],F=D-z[1],H=P-z[0],q=L-z[1],W=1/Kr(((c=(U*H+F*q)/(Zr(U*U+F*F)*Zr(H*H+q*q)))>1?0:c<-1?Qr:Math.acos(c))/2),$=Zr(z[0]*z[0]+z[1]*z[1]);M=Xr(E,(f-$)/(W-1)),O=Xr(E,(h-$)/(W+1))}}C>Jr?O>Jr?(v=cornerTangents(I,B,N,D,h,O,g),b=cornerTangents(P,L,V,j,h,O,g),s.moveTo(v.cx+v.x01,v.cy+v.y01),O<E?s.arc(v.cx,v.cy,O,$r(v.y01,v.x01),$r(b.y01,b.x01),!g):(s.arc(v.cx,v.cy,O,$r(v.y01,v.x01),$r(v.y11,v.x11),!g),s.arc(0,0,h,$r(v.cy+v.y11,v.cx+v.x11),$r(b.cy+b.y11,b.cx+b.x11),!g),s.arc(b.cx,b.cy,O,$r(b.y11,b.x11),$r(b.y01,b.x01),!g))):(s.moveTo(N,D),s.arc(0,0,h,y,_,!g)):s.moveTo(N,D),f>Jr&&k>Jr?M>Jr?(v=cornerTangents(V,j,P,L,f,-M,g),b=cornerTangents(N,D,I,B,f,-M,g),s.lineTo(v.cx+v.x01,v.cy+v.y01),M<E?s.arc(v.cx,v.cy,M,$r(v.y01,v.x01),$r(b.y01,b.x01),!g):(s.arc(v.cx,v.cy,M,$r(v.y01,v.x01),$r(v.y11,v.x11),!g),s.arc(0,0,f,$r(v.cy+v.y11,v.cx+v.x11),$r(b.cy+b.y11,b.cx+b.x11),g),s.arc(b.cx,b.cy,M,$r(b.y11,b.x11),$r(b.y01,b.x01),!g))):s.arc(0,0,f,x,w,g):s.lineTo(V,j)}else s.moveTo(0,0);if(s.closePath(),l)return s=null,l+""||null}return arc.centroid=function(){var n=(+e.apply(this,arguments)+ +t.apply(this,arguments))/2,r=(+a.apply(this,arguments)+ +i.apply(this,arguments))/2-Qr/2;return[Yr(r)*n,Kr(r)*n]},arc.innerRadius=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),arc):e},arc.outerRadius=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),arc):t},arc.cornerRadius=function(e){return arguments.length?(n="function"==typeof e?e:qr(+e),arc):n},arc.padRadius=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:qr(+e),arc):r},arc.startAngle=function(e){return arguments.length?(a="function"==typeof e?e:qr(+e),arc):a},arc.endAngle=function(e){return arguments.length?(i="function"==typeof e?e:qr(+e),arc):i},arc.padAngle=function(e){return arguments.length?(o="function"==typeof e?e:qr(+e),arc):o},arc.context=function(e){return arguments.length?(s=null==e?null:e,arc):s},arc};function Linear(e){this._context=e}Linear.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var ra=function(e){return new Linear(e)};function point_x(e){return e[0]}function point_y(e){return e[1]}var aa=function(){var e=point_x,t=point_y,n=qr(!0),r=null,a=ra,i=null;function line(o){var s,l,u,c=o.length,f=!1;for(null==r&&(i=a(u=Hr())),s=0;s<=c;++s)!(s<c&&n(l=o[s],s,o))===f&&((f=!f)?i.lineStart():i.lineEnd()),f&&i.point(+e(l,s,o),+t(l,s,o));if(u)return i=null,u+""||null}return line.x=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),line):e},line.y=function(e){return arguments.length?(t="function"==typeof e?e:qr(+e),line):t},line.defined=function(e){return arguments.length?(n="function"==typeof e?e:qr(!!e),line):n},line.curve=function(e){return arguments.length?(a=e,null!=r&&(i=a(r)),line):a},line.context=function(e){return arguments.length?(null==e?r=i=null:i=a(r=e),line):r},line},ia=function(){var e=point_x,t=null,n=qr(0),r=point_y,a=qr(!0),i=null,o=ra,s=null;function area(l){var u,c,f,h,d,p=l.length,m=!1,g=new Array(p),v=new Array(p);for(null==i&&(s=o(d=Hr())),u=0;u<=p;++u){if(!(u<p&&a(h=l[u],u,l))===m)if(m=!m)c=u,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),f=u-1;f>=c;--f)s.point(g[f],v[f]);s.lineEnd(),s.areaEnd()}m&&(g[u]=+e(h,u,l),v[u]=+n(h,u,l),s.point(t?+t(h,u,l):g[u],r?+r(h,u,l):v[u]))}if(d)return s=null,d+""||null}function arealine(){return aa().defined(a).curve(o).context(i)}return area.x=function(n){return arguments.length?(e="function"==typeof n?n:qr(+n),t=null,area):e},area.x0=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),area):e},area.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:qr(+e),area):t},area.y=function(e){return arguments.length?(n="function"==typeof e?e:qr(+e),r=null,area):n},area.y0=function(e){return arguments.length?(n="function"==typeof e?e:qr(+e),area):n},area.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:qr(+e),area):r},area.lineX0=area.lineY0=function(){return arealine().x(e).y(n)},area.lineY1=function(){return arealine().x(e).y(r)},area.lineX1=function(){return arealine().x(t).y(n)},area.defined=function(e){return arguments.length?(a="function"==typeof e?e:qr(!!e),area):a},area.curve=function(e){return arguments.length?(o=e,null!=i&&(s=o(i)),area):o},area.context=function(e){return arguments.length?(null==e?i=s=null:s=o(i=e),area):i},area},oa=function(e,t){return t<e?-1:t>e?1:t>=e?0:NaN},sa=function(e){return e};curveRadial(ra);function Radial(e){this._curve=e}function curveRadial(e){function radial(t){return new Radial(e(t))}return radial._curve=e,radial}Radial.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};var la=Array.prototype.slice;Math.sqrt(1/3);var ua=Math.sin(Qr/10)/Math.sin(7*Qr/10),ca=(Math.sin(ta/10),Math.cos(ta/10),Math.sqrt(3),Math.sqrt(3),Math.sqrt(12),function(){});function basis_point(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Basis(e){this._context=e}Basis.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:basis_point(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:basis_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisClosed(e){this._context=e}BasisClosed.prototype={areaStart:ca,areaEnd:ca,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:basis_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function BasisOpen(e){this._context=e}BasisOpen.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:basis_point(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Bundle(e,t){this._basis=new Basis(e),this._beta=t}Bundle.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,a=e[0],i=t[0],o=e[n]-a,s=t[n]-i,l=-1;++l<=n;)r=l/n,this._basis.point(this._beta*e[l]+(1-this._beta)*(a+r*o),this._beta*t[l]+(1-this._beta)*(i+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}};(function custom(e){function bundle(t){return 1===e?new Basis(t):new Bundle(t,e)}return bundle.beta=function(e){return custom(+e)},bundle})(.85);function cardinal_point(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Cardinal(e,t){this._context=e,this._k=(1-t)/6}Cardinal.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:cardinal_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new Cardinal(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalClosed(e,t){this._context=e,this._k=(1-t)/6}CardinalClosed.prototype={areaStart:ca,areaEnd:ca,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalClosed(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function CardinalOpen(e,t){this._context=e,this._k=(1-t)/6}CardinalOpen.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:cardinal_point(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function cardinal(t){return new CardinalOpen(t,e)}return cardinal.tension=function(e){return custom(+e)},cardinal})(0);function catmullRom_point(e,t,n){var r=e._x1,a=e._y1,i=e._x2,o=e._y2;if(e._l01_a>Jr){var s=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,l=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*s-e._x0*e._l12_2a+e._x2*e._l01_2a)/l,a=(a*s-e._y0*e._l12_2a+e._y2*e._l01_2a)/l}if(e._l23_a>Jr){var u=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,c=3*e._l23_a*(e._l23_a+e._l12_a);i=(i*u+e._x1*e._l23_2a-t*e._l12_2a)/c,o=(o*u+e._y1*e._l23_2a-n*e._l12_2a)/c}e._context.bezierCurveTo(r,a,i,o,e._x2,e._y2)}function CatmullRom(e,t){this._context=e,this._alpha=t}CatmullRom.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRom(t,e):new Cardinal(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomClosed(e,t){this._context=e,this._alpha=t}CatmullRomClosed.prototype={areaStart:ca,areaEnd:ca,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomClosed(t,e):new CardinalClosed(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function CatmullRomOpen(e,t){this._context=e,this._alpha=t}CatmullRomOpen.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:catmullRom_point(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};(function custom(e){function catmullRom(t){return e?new CatmullRomOpen(t,e):new CardinalOpen(t,0)}return catmullRom.alpha=function(e){return custom(+e)},catmullRom})(.5);function LinearClosed(e){this._context=e}LinearClosed.prototype={areaStart:ca,areaEnd:ca,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function monotone_sign(e){return e<0?-1:1}function slope3(e,t,n){var r=e._x1-e._x0,a=t-e._x1,i=(e._y1-e._y0)/(r||a<0&&-0),o=(n-e._y1)/(a||r<0&&-0),s=(i*a+o*r)/(r+a);return(monotone_sign(i)+monotone_sign(o))*Math.min(Math.abs(i),Math.abs(o),.5*Math.abs(s))||0}function slope2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function monotone_point(e,t,n){var r=e._x0,a=e._y0,i=e._x1,o=e._y1,s=(i-r)/3;e._context.bezierCurveTo(r+s,a+s*t,i-s,o-s*n,i,o)}function MonotoneX(e){this._context=e}function MonotoneY(e){this._context=new ReflectContext(e)}function ReflectContext(e){this._context=e}function Natural(e){this._context=e}function controlPoints(e){var t,n,r=e.length-1,a=new Array(r),i=new Array(r),o=new Array(r);for(a[0]=0,i[0]=2,o[0]=e[0]+2*e[1],t=1;t<r-1;++t)a[t]=1,i[t]=4,o[t]=4*e[t]+2*e[t+1];for(a[r-1]=2,i[r-1]=7,o[r-1]=8*e[r-1]+e[r],t=1;t<r;++t)n=a[t]/i[t-1],i[t]-=n,o[t]-=n*o[t-1];for(a[r-1]=o[r-1]/i[r-1],t=r-2;t>=0;--t)a[t]=(o[t]-a[t+1])/i[t];for(i[r-1]=(e[r]+a[r-1])/2,t=0;t<r-1;++t)i[t]=2*e[t+1]-a[t+1];return[a,i]}MonotoneX.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:monotone_point(this,this._t0,slope2(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(t=+t,(e=+e)!==this._x1||t!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,monotone_point(this,slope2(this,n=slope3(this,e,t)),n);break;default:monotone_point(this,this._t0,n=slope3(this,e,t))}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}},(MonotoneY.prototype=Object.create(MonotoneX.prototype)).point=function(e,t){MonotoneX.prototype.point.call(this,t,e)},ReflectContext.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,i){this._context.bezierCurveTo(t,e,r,n,i,a)}},Natural.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),2===n)this._context.lineTo(e[1],t[1]);else for(var r=controlPoints(e),a=controlPoints(t),i=0,o=1;o<n;++i,++o)this._context.bezierCurveTo(r[0][i],a[0][i],r[1][i],a[1][i],e[o],t[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function Step(e,t){this._context=e,this._t=t}Step.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var fa=function(e,t){if((a=e.length)>1)for(var n,r,a,i=1,o=e[t[0]],s=o.length;i<a;++i)for(r=o,o=e[t[i]],n=0;n<s;++n)o[n][1]+=o[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]},ha=function(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n};function stackValue(e,t){return e[t]}n(189);var da=Array.prototype.slice,pa=function(e){return e},ma=1,ga=2,va=3,ba=4,ya=1e-6;function translateX(e){return"translate("+(e+.5)+",0)"}function translateY(e){return"translate(0,"+(e+.5)+")"}function entering(){return!this.__axis}function axis_axis(e,t){var n=[],r=null,a=null,i=6,o=6,s=3,l=e===ma||e===ba?-1:1,u=e===ba||e===ga?"x":"y",c=e===ma||e===va?translateX:translateY;function axis(f){var h=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,d=null==a?t.tickFormat?t.tickFormat.apply(t,n):pa:a,p=Math.max(i,0)+s,m=t.range(),g=+m[0]+.5,v=+m[m.length-1]+.5,b=(t.bandwidth?function(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}:function(e){return function(t){return+e(t)}})(t.copy()),y=f.selection?f.selection():f,_=y.selectAll(".domain").data([null]),w=y.selectAll(".tick").data(h,t).order(),x=w.exit(),k=w.enter().append("g").attr("class","tick"),C=w.select("line"),S=w.select("text");_=_.merge(_.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),w=w.merge(k),C=C.merge(k.append("line").attr("stroke","currentColor").attr(u+"2",l*i)),S=S.merge(k.append("text").attr("fill","currentColor").attr(u,l*p).attr("dy",e===ma?"0em":e===va?"0.71em":"0.32em")),f!==y&&(_=_.transition(f),w=w.transition(f),C=C.transition(f),S=S.transition(f),x=x.transition(f).attr("opacity",ya).attr("transform",function(e){return isFinite(e=b(e))?c(e):this.getAttribute("transform")}),k.attr("opacity",ya).attr("transform",function(e){var t=this.parentNode.__axis;return c(t&&isFinite(t=t(e))?t:b(e))})),x.remove(),_.attr("d",e===ba||e==ga?o?"M"+l*o+","+g+"H0.5V"+v+"H"+l*o:"M0.5,"+g+"V"+v:o?"M"+g+","+l*o+"V0.5H"+v+"V"+l*o:"M"+g+",0.5H"+v),w.attr("opacity",1).attr("transform",function(e){return c(b(e))}),C.attr(u+"2",l*i),S.attr(u,l*p).text(d),y.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===ga?"start":e===ba?"end":"middle"),y.each(function(){this.__axis=b})}return axis.scale=function(e){return arguments.length?(t=e,axis):t},axis.ticks=function(){return n=da.call(arguments),axis},axis.tickArguments=function(e){return arguments.length?(n=null==e?[]:da.call(e),axis):n.slice()},axis.tickValues=function(e){return arguments.length?(r=null==e?null:da.call(e),axis):r&&r.slice()},axis.tickFormat=function(e){return arguments.length?(a=e,axis):a},axis.tickSize=function(e){return arguments.length?(i=o=+e,axis):i},axis.tickSizeInner=function(e){return arguments.length?(i=+e,axis):i},axis.tickSizeOuter=function(e){return arguments.length?(o=+e,axis):o},axis.tickPadding=function(e){return arguments.length?(s=+e,axis):s},axis}function axisBottom(e){return axis_axis(va,e)}var _a="http://www.w3.org/1999/xhtml",wa={svg:"http://www.w3.org/2000/svg",xhtml:_a,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},xa=function(e){var t=e+="",n=t.indexOf(":");return n>=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),wa.hasOwnProperty(t)?{space:wa[t],local:e}:e};var ka=function(e){var t=xa(e);return(t.local?function(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}:function(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===_a&&t.documentElement.namespaceURI===_a?t.createElement(e):t.createElementNS(n,e)}})(t)};function selector_none(){}var Ca=function(e){return null==e?selector_none:function(){return this.querySelector(e)}};function selectorAll_empty(){return[]}var Sa=function(e){return null==e?selectorAll_empty:function(){return this.querySelectorAll(e)}},Ta=function(e){return function(){return this.matches(e)}};if("undefined"!=typeof document){var Ea=document.documentElement;if(!Ea.matches){var Ma=Ea.webkitMatchesSelector||Ea.msMatchesSelector||Ea.mozMatchesSelector||Ea.oMatchesSelector;Ta=function(e){return function(){return Ma.call(this,e)}}}}var Oa=Ta,Aa=function(e){return new Array(e.length)};function EnterNode(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};var Ra="$";function bindIndex(e,t,n,r,a,i){for(var o,s=0,l=t.length,u=i.length;s<u;++s)(o=t[s])?(o.__data__=i[s],r[s]=o):n[s]=new EnterNode(e,i[s]);for(;s<l;++s)(o=t[s])&&(a[s]=o)}function bindKey(e,t,n,r,a,i,o){var s,l,u,c={},f=t.length,h=i.length,d=new Array(f);for(s=0;s<f;++s)(l=t[s])&&(d[s]=u=Ra+o.call(l,l.__data__,s,t),u in c?a[s]=l:c[u]=l);for(s=0;s<h;++s)(l=c[u=Ra+o.call(e,i[s],s,i)])?(r[s]=l,l.__data__=i[s],c[u]=null):n[s]=new EnterNode(e,i[s]);for(s=0;s<f;++s)(l=t[s])&&c[d[s]]===l&&(a[s]=l)}function sort_ascending(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}var Na=function(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView};function styleValue(e,t){return e.style.getPropertyValue(t)||Na(e).getComputedStyle(e,null).getPropertyValue(t)}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e,this._names=classArray(e.getAttribute("class")||"")}function classedAdd(e,t){for(var n=classList(e),r=-1,a=t.length;++r<a;)n.add(t[r])}function classedRemove(e,t){for(var n=classList(e),r=-1,a=t.length;++r<a;)n.remove(t[r])}ClassList.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function constantNull(){return null}function remove(){var e=this.parentNode;e&&e.removeChild(this)}function selection_cloneShallow(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function selection_cloneDeep(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Da={},Va=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Da={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(e,t,n){return e=contextListener(e,t,n),function(t){var n=t.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||e.call(this,t)}}function contextListener(e,t,n){return function(r){var a=Va;Va=r;try{e.call(this,this.__data__,t,n)}finally{Va=a}}}function onRemove(e){return function(){var t=this.__on;if(t){for(var n,r=0,a=-1,i=t.length;r<i;++r)n=t[r],e.type&&n.type!==e.type||n.name!==e.name?t[++a]=n:this.removeEventListener(n.type,n.listener,n.capture);++a?t.length=a:delete this.__on}}}function onAdd(e,t,n){var r=Da.hasOwnProperty(e.type)?filterContextListener:contextListener;return function(a,i,o){var s,l=this.__on,u=r(t,i,o);if(l)for(var c=0,f=l.length;c<f;++c)if((s=l[c]).type===e.type&&s.name===e.name)return this.removeEventListener(s.type,s.listener,s.capture),this.addEventListener(s.type,s.listener=u,s.capture=n),void(s.value=t);this.addEventListener(e.type,u,n),s={type:e.type,name:e.name,value:t,listener:u,capture:n},l?l.push(s):this.__on=[s]}}function customEvent(e,t,n,r){var a=Va;e.sourceEvent=Va,Va=e;try{return t.apply(n,r)}finally{Va=a}}function dispatchEvent(e,t,n){var r=Na(e),a=r.CustomEvent;"function"==typeof a?a=new a(t,n):(a=r.document.createEvent("Event"),n?(a.initEvent(t,n.bubbles,n.cancelable),a.detail=n.detail):a.initEvent(t,!1,!1)),e.dispatchEvent(a)}var ja=[null];function Selection(e,t){this._groups=e,this._parents=t}function selection_selection(){return new Selection([[document.documentElement]],ja)}Selection.prototype=selection_selection.prototype={constructor:Selection,select:function(e){"function"!=typeof e&&(e=Ca(e));for(var t=this._groups,n=t.length,r=new Array(n),a=0;a<n;++a)for(var i,o,s=t[a],l=s.length,u=r[a]=new Array(l),c=0;c<l;++c)(i=s[c])&&(o=e.call(i,i.__data__,c,s))&&("__data__"in i&&(o.__data__=i.__data__),u[c]=o);return new Selection(r,this._parents)},selectAll:function(e){"function"!=typeof e&&(e=Sa(e));for(var t=this._groups,n=t.length,r=[],a=[],i=0;i<n;++i)for(var o,s=t[i],l=s.length,u=0;u<l;++u)(o=s[u])&&(r.push(e.call(o,o.__data__,u,s)),a.push(o));return new Selection(r,a)},filter:function(e){"function"!=typeof e&&(e=Oa(e));for(var t=this._groups,n=t.length,r=new Array(n),a=0;a<n;++a)for(var i,o=t[a],s=o.length,l=r[a]=[],u=0;u<s;++u)(i=o[u])&&e.call(i,i.__data__,u,o)&&l.push(i);return new Selection(r,this._parents)},data:function(e,t){if(!e)return p=new Array(this.size()),c=-1,this.each(function(e){p[++c]=e}),p;var n,r=t?bindKey:bindIndex,a=this._parents,i=this._groups;"function"!=typeof e&&(n=e,e=function(){return n});for(var o=i.length,s=new Array(o),l=new Array(o),u=new Array(o),c=0;c<o;++c){var f=a[c],h=i[c],d=h.length,p=e.call(f,f&&f.__data__,c,a),m=p.length,g=l[c]=new Array(m),v=s[c]=new Array(m);r(f,h,g,v,u[c]=new Array(d),p,t);for(var b,y,_=0,w=0;_<m;++_)if(b=g[_]){for(_>=w&&(w=_+1);!(y=v[w])&&++w<m;);b._next=y||null}}return(s=new Selection(s,a))._enter=l,s._exit=u,s},enter:function(){return new Selection(this._enter||this._groups.map(Aa),this._parents)},exit:function(){return new Selection(this._exit||this._groups.map(Aa),this._parents)},merge:function(e){for(var t=this._groups,n=e._groups,r=t.length,a=n.length,i=Math.min(r,a),o=new Array(r),s=0;s<i;++s)for(var l,u=t[s],c=n[s],f=u.length,h=o[s]=new Array(f),d=0;d<f;++d)(l=u[d]||c[d])&&(h[d]=l);for(;s<r;++s)o[s]=t[s];return new Selection(o,this._parents)},order:function(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r,a=e[t],i=a.length-1,o=a[i];--i>=0;)(r=a[i])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function compareNode(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=sort_ascending);for(var t=this._groups,n=t.length,r=new Array(n),a=0;a<n;++a){for(var i,o=t[a],s=o.length,l=r[a]=new Array(s),u=0;u<s;++u)(i=o[u])&&(l[u]=i);l.sort(compareNode)}return new Selection(r,this._parents).order()},call:function(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this},nodes:function(){var e=new Array(this.size()),t=-1;return this.each(function(){e[++t]=this}),e},node:function(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],a=0,i=r.length;a<i;++a){var o=r[a];if(o)return o}return null},size:function(){var e=0;return this.each(function(){++e}),e},empty:function(){return!this.node()},each:function(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var a,i=t[n],o=0,s=i.length;o<s;++o)(a=i[o])&&e.call(a,a.__data__,o,i);return this},attr:function(e,t){var n=xa(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==t?n.local?function(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function(e){return function(){this.removeAttribute(e)}}:"function"==typeof t?n.local?function(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}:function(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}:n.local?function(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}:function(e,t){return function(){this.setAttribute(e,t)}})(n,t))},style:function(e,t,n){return arguments.length>1?this.each((null==t?function(e){return function(){this.style.removeProperty(e)}}:"function"==typeof t?function(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}:function(e,t,n){return function(){this.style.setProperty(e,t,n)}})(e,t,null==n?"":n)):styleValue(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?function(e){return function(){delete this[e]}}:"function"==typeof t?function(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}:function(e,t){return function(){this[e]=t}})(e,t)):this.node()[e]},classed:function(e,t){var n=classArray(e+"");if(arguments.length<2){for(var r=classList(this.node()),a=-1,i=n.length;++a<i;)if(!r.contains(n[a]))return!1;return!0}return this.each(("function"==typeof t?function(e,t){return function(){(t.apply(this,arguments)?classedAdd:classedRemove)(this,e)}}:t?function(e){return function(){classedAdd(this,e)}}:function(e){return function(){classedRemove(this,e)}})(n,t))},text:function(e){return arguments.length?this.each(null==e?textRemove:("function"==typeof e?function(e){return function(){var t=e.apply(this,arguments);this.textContent=null==t?"":t}}:function(e){return function(){this.textContent=e}})(e)):this.node().textContent},html:function(e){return arguments.length?this.each(null==e?htmlRemove:("function"==typeof e?function(e){return function(){var t=e.apply(this,arguments);this.innerHTML=null==t?"":t}}:function(e){return function(){this.innerHTML=e}})(e)):this.node().innerHTML},raise:function(){return this.each(raise_raise)},lower:function(){return this.each(lower)},append:function(e){var t="function"==typeof e?e:ka(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})},insert:function(e,t){var n="function"==typeof e?e:ka(e),r=null==t?constantNull:"function"==typeof t?t:Ca(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})},remove:function(){return this.each(remove)},clone:function(e){return this.select(e?selection_cloneDeep:selection_cloneShallow)},datum:function(e){return arguments.length?this.property("__data__",e):this.node().__data__},on:function(e,t,n){var r,a,i=function(e){return e.trim().split(/^|\s+/).map(function(e){var t="",n=e.indexOf(".");return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}(e+""),o=i.length;if(!(arguments.length<2)){for(s=t?onAdd:onRemove,null==n&&(n=!1),r=0;r<o;++r)this.each(s(i[r],t,n));return this}var s=this.node().__on;if(s)for(var l,u=0,c=s.length;u<c;++u)for(r=0,l=s[u];r<o;++r)if((a=i[r]).type===l.type&&a.name===l.name)return l.value},dispatch:function(e,t){return this.each(("function"==typeof t?function(e,t){return function(){return dispatchEvent(this,e,t.apply(this,arguments))}}:function(e,t){return function(){return dispatchEvent(this,e,t)}})(e,t))}};var Pa=selection_selection,La=function(e){return"string"==typeof e?new Selection([[document.querySelector(e)]],[document.documentElement]):new Selection([[e]],ja)},Ia=0;function Local(){this._="@"+(++Ia).toString(36)}Local.prototype=function(){return new Local}.prototype={constructor:Local,get:function(e){for(var t=this._;!(t in e);)if(!(e=e.parentNode))return;return e[t]},set:function(e,t){return e[this._]=t},remove:function(e){return this._ in e&&delete e[this._]},toString:function(){return this._}};var Ba=function(){for(var e,t=Va;e=t.sourceEvent;)t=e;return t},za=function(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}var a=e.getBoundingClientRect();return[t.clientX-a.left-e.clientLeft,t.clientY-a.top-e.clientTop]},Ua=function(e){var t=Ba();return t.changedTouches&&(t=t.changedTouches[0]),za(e,t)},Fa=function(e,t,n){arguments.length<3&&(n=t,t=Ba().changedTouches);for(var r,a=0,i=t?t.length:0;a<i;++a)if((r=t[a]).identifier===n)return za(e,r);return null},Ha=n(98),qa=n.n(Ha),Wa=function(e){function BaseChartView(e){var t;return l()(this,BaseChartView),t=h()(this,p()(BaseChartView).call(this,e)),J()(K()(K()(t)),"PAD_LEFT",50),J()(K()(K()(t)),"PAD_RIGHT",15),J()(K()(K()(t)),"PAD_TOP",10),J()(K()(K()(t)),"PAD_BOTTOM",30),t.options=e,t.firstRender=!0,t}return b()(BaseChartView,e),c()(BaseChartView,[{key:"onRender",value:function(){La(window).on("resize."+this.cid,this.onAttach.bind(this))}},{key:"onDestroy",value:function(){La(window).on("resize."+this.cid,null)}},{key:"onAttach",value:function(){this.firstRender=!1}},{key:"setupViewport",value:function(){this.width=Math.floor(this.$el.outerWidth())-this.PAD_LEFT-this.PAD_RIGHT,this.height=Math.floor(this.$el.outerHeight())-this.PAD_BOTTOM-this.PAD_TOP,this.$el.html(qa()(this)),this.svg=La(this.$el[0]).select(".chart__svg"),this.plot=this.svg.select(".chart__plot")}},{key:"makeLeftAxis",value:function(e){var t,n=axis_axis(ba,t);return this.makeAxis(n,this.svg.select(".chart__axis_y"),e,{left:this.PAD_LEFT,top:this.PAD_TOP})}},{key:"makeBottomAxis",value:function(e){var t=axisBottom();return this.makeAxis(t,this.svg.select(".chart__axis_x"),e,{left:this.PAD_LEFT,top:this.PAD_TOP+this.height})}},{key:"makeAxis",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=r.left,i=void 0===a?0:a,o=r.top,s=void 0===o?0:o;return Object.keys(n).forEach(function(t){return e[t](n[t])}),t.call(e).attrs({transform:"translate(".concat(i,",").concat(s,")")}),e}},{key:"getTooltipContent",value:function(){}},{key:"onItemOver",value:function(e){this.showTooltip(e,Va.target)}},{key:"showTooltip",value:function(e,t){this.tooltip.show(this.getTooltipContent(e),this.$(t))}},{key:"hideTooltip",value:function(){this.tooltip.hide()}},{key:"bindTooltip",value:function(e){e.on("mouseenter",this.onItemOver.bind(this)).on("mouseleave",this.hideTooltip.bind(this))}}]),BaseChartView}(x.View),$a=n(22),Ya=n(99),Ga=n.n(Ya),Xa=function(e){function TrendChartView(){var e,t;l()(this,TrendChartView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(TrendChartView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"PAD_BOTTOM",50),t}return b()(TrendChartView,e),c()(TrendChartView,[{key:"initialize",value:function(e){this.x=band_point(),this.y=linear_linear(),this.tooltip=new $a.a({position:"top"}),this.keys=e.keys||this.model.keys(),this.stack=function(){var e=qr([]),t=ha,n=fa,r=stackValue;function stack(a){var i,o,s=e.apply(this,arguments),l=a.length,u=s.length,c=new Array(u);for(i=0;i<u;++i){for(var f,h=s[i],d=c[i]=new Array(l),p=0;p<l;++p)d[p]=f=[0,+r(a[p],h,p,a)],f.data=a[p];d.key=h}for(i=0,o=t(c);i<u;++i)c[o[i]].index=i;return n(c,o),c}return stack.keys=function(t){return arguments.length?(e="function"==typeof t?t:qr(la.call(t)),stack):e},stack.value=function(e){return arguments.length?(r="function"==typeof e?e:qr(+e),stack):r},stack.order=function(e){return arguments.length?(t=null==e?ha:"function"==typeof e?e:qr(la.call(e)),stack):t},stack.offset=function(e){return arguments.length?(n=null==e?fa:e,stack):n},stack}().keys(this.keys).value(function(e,t){return e.data[t]||0}),this.color=e.colors||ordinal(Br),e.notStacked&&this.stack.offset(function(){}),this.yTickFormat=e.yTickFormat||function(e){return e}}},{key:"onAttach",value:function(){var e=this.model.toJSON();e&&e.length>1?this.doShow(e):this.$el.html('<div class="widget__noitems">'.concat(Object(Le.default)("chart.trend.empty"),"</div>")),g()(p()(TrendChartView.prototype),"onAttach",this).call(this)}},{key:"doShow",value:function(e){this.setupViewport(),this.x.range([0,this.width]),this.y.range([this.height,0]),this.x.domain(e.map(function(e){return e.id})),this.y.domain([0,Nt(e,function(e){return e.total})]).nice();var t=this.stack(e);this.makeBottomAxis({scale:this.x,tickFormat:function(t,n){return e[n].name}}),this.makeLeftAxis({scale:this.y,tickFormat:this.yTickFormat}),"rtl"===document.dir?this.svg.selectAll(".chart__axis_x").selectAll("text").style("text-anchor","start"):this.svg.selectAll(".chart__axis_x").selectAll("text").style("text-anchor","end"),this.svg.selectAll(".chart__axis_x").selectAll("text").attr("dx","-.8em").attr("dy","-.6em").attr("transform","rotate(-90)"),this.options.hideAreas||this.showAreas(t),this.options.hideLines||this.showLines(t),this.options.hidePoints||this.showPoints(t),this.showSlices(e)}},{key:"showAreas",value:function(e){var t=this,n=ia().x(function(e){return t.x(e.data.id)}).y0(function(e){return t.y(e[0])}).y1(function(e){return t.y(e[1])});this.plot.selectAll(".trend__area").data(e).enter().append("path").attr("class","trend__area").attr("d",n).style("fill",function(e){return t.color(e.key)}).style("opacity",.85)}},{key:"showLines",value:function(e){var t=this,n=aa().x(function(e){return t.x(e.data.id)}).y(function(e){return t.y(e[1])});this.plot.selectAll(".trend__line").data(e).enter().append("path").attr("class",".trend__line").attr("d",n).style("stroke-width",2).style("stroke",function(e){return t.color(e.key)})}},{key:"showPoints",value:function(e){var t=this;this.plot.selectAll(".trend_points").data(e).enter().append("g").attr("class",".trend_point").style("fill",function(e){return t.color(e.key)}).selectAll(".trend_point").data(function(e){return e}).enter().append("circle").attr("r",2).attr("cx",function(e){return t.x(e.data.id)}).attr("cy",function(e){return t.y(e[1])}).attr("class","trend_point")}},{key:"showSlices",value:function(e){var t=this;this.plot.selectAll(".slice").data(e).enter().append("g").attr("class","slice"),this.plot.selectAll(".slice").filter(function(e){return e.reportUrl}).append("a").attr("class","edge").filter(function(e){return e.reportUrl}).attr("xlink:href",function(e){return e.reportUrl}),this.plot.selectAll(".slice").filter(function(e){return!e.reportUrl}).append("g").attr("class","edge"),this.plot.selectAll(".edge").append("line").attr("id",function(e){return e.id}).attr("x1",function(e){return t.x(e.id)}).attr("y1",function(e){return t.y(e.total)}).attr("x2",function(e){return t.x(e.id)}).attr("y2",this.y(0)).attr("stroke","white").attr("stroke-width",1).attr("class","report-line"),this.plot.selectAll(".edge").append("rect").style("opacity",0).attr("class","report-edge").attr("x",function(e,n){return n>0?t.x(e.id)-t.x.step()/2:0}).attr("y",0).attr("height",this.height).attr("width",function(e,n){return 0===n||t.x(e.id)===t.width?t.x.step()/2:t.x.step()}).on("mouseover",function(e){var n=t.plot.append("circle").attr("class","anchor").attr("cx","".concat(t.x(e.id))).attr("cy","".concat(t.y(e.total/2)));t.showTooltip(e,n.node())}).on("mouseout",function(){t.plot.selectAll(".anchor").remove(),t.hideTooltip()})}},{key:"getTooltipContent",value:function(e){var t=this,n=w()({},e,{data:this.keys.map(function(n){return{key:n,num:t.yTickFormat(e.data[n]),color:t.color(n)}}).filter(function(e){return!!e.num}).reverse()});return Ga()(n)}}]),TrendChartView}(Wa),Ka=function(e){function TrendCollection(){return l()(this,TrendCollection),h()(this,p()(TrendCollection).apply(this,arguments))}return b()(TrendCollection,e),c()(TrendCollection,[{key:"initialize",value:function(e,t){this.options=t}},{key:"url",value:function(){return"widgets/".concat(this.options.name,".json")}},{key:"parse",value:function(e){return e.reverse().map(function(e,t){return w()({},e,{id:t,name:e.buildOrder?"#".concat(e.buildOrder):"",total:Object(k.values)(Object(k.omit)(e.data,"total")).reduce(function(e,t){return e+t},0),data:Object(k.omit)(e.data,"total")})})}},{key:"keys",value:function(){return Object(k.uniq)(Object(k.flatten)(this.map(function(e){return Object(k.keys)(e.get("data"))})))}},{key:"sortedKeysByLastValue",value:function(){var e=this.keys(),t=this.last().get("data");return e.sort(function(e,n){return(t[n]||0)-(t[e]||0)})}}]),TrendCollection}(x.Collection);window.allure={api:o.a,getPluginSettings:function(e,t){return Object(rt.b)(e,t)},settings:xe.a,components:{AppLayout:y.a,TreeLayout:ht,WidgetStatusView:mt,TrendChartView:Xa},collections:{TrendCollection:Ka}};var Za,Ja,Qa=n(100),ei=n.n(Qa),ti=(n(193),n(101)),ni=n.n(ti),ri=(n(194),n(102)),ai=n.n(ri),ii=Object(G.d)({text:"Loading..."})(Za=function(e){function LoaderView(){var e,t;l()(this,LoaderView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(LoaderView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ai.a),t}return b()(LoaderView,e),c()(LoaderView,[{key:"initialize",value:function(e){this.options=e}},{key:"serializeData",value:function(){return this.options}}]),LoaderView}(ye.View))||Za;var oi=Object(G.b)("widgets-grid")(Ja=function(e){function WidgetsGridView(){var e,t;l()(this,WidgetsGridView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(WidgetsGridView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",function(){return""}),t}return b()(WidgetsGridView,e),c()(WidgetsGridView,[{key:"initialize",value:function(){this.widgets=o.a.widgets[this.options.tabName],this.settings=this.options.settings||Object(rt.d)(this.options.tabName)}},{key:"onRender",value:function(){var e=this;this.getWidgetsArrangement().map(function(t){return t.map(function(t){return[t,e.widgets[t].widget,e.widgets[t].model]})}).forEach(function(t){var n=i()('<div class="widgets-grid__col"></div>');e.$el.append(n),t.forEach(function(t){var r=ei()(t,3),a=r[0],i=r[1],o=r[2];e.addWidget(n,a,i,o)})}),this.$(".widgets-grid__col").each(function(t,n){return new ni.a(n,{group:"widgets",ghostClass:"widget_ghost",handle:".widget__handle",onEnd:e.saveWidgetsArrangement.bind(e)})})}},{key:"getWidgetsArrangement",value:function(){var e=this,t=this.settings.getWidgetsArrangement().map(function(t){return t.filter(function(t){return e.widgets[t]})});return Object.keys(this.widgets).forEach(function(e){t.every(function(t){return-1===t.indexOf(e)})&&t.reduce(function(e,t){return t.length<e.length?t:e}).push(e)}),t}},{key:"saveWidgetsArrangement",value:function(){this.settings.setWidgetsArrangement(this.$(".widgets-grid__col").toArray().map(function(e){return i()(e).find(".widget").toArray().map(function(e){return i()(e).data("id")})}))}},{key:"addWidget",value:function(e,t,n,r){var a=i()('<div class="widget island" data-id="'.concat(t,'">\n <div class="widget__handle">\n <span class="draggable-icon"></span>\n </div>\n <div class="widget__body"></div>\n</div>'));e.append(a),this.addRegion(t,{el:a.find(".widget__body")});var o=new r({},{name:t});!function(e,t,n,r){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){};e.showChildView(t,new ii),n.fetch().then(function(){e.showChildView(t,r),a()})}(this,t,o,new n({model:o}))}}]),WidgetsGridView}(ye.View))||Ja,si=function(e){function OverviewLayout(){return l()(this,OverviewLayout),h()(this,p()(OverviewLayout).apply(this,arguments))}return b()(OverviewLayout,e),c()(OverviewLayout,[{key:"getContentView",value:function(){return new oi({tabName:"widgets"})}}]),OverviewLayout}(y.a);allure.api.addTab("",{title:"tab.overview.name",icon:"fa fa-home",route:"",onEnter:function(){return new si({tabName:"tab.overview.name"})}});n(195),n(196);var li=function(e){function GraphCollection(){var e,t;l()(this,GraphCollection);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(GraphCollection)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"url","widgets/status-chart.json"),t}return b()(GraphCollection,e),GraphCollection}(x.Collection),ui=function(e){function GraphLayout(){return l()(this,GraphLayout),h()(this,p()(GraphLayout).apply(this,arguments))}return b()(GraphLayout,e),c()(GraphLayout,[{key:"initialize",value:function(){this.collection=new li}},{key:"loadData",value:function(){return this.collection.fetch()}},{key:"getContentView",value:function(){return new oi({model:this.collection,tabName:"graph"})}}]),GraphLayout}(y.a);allure.api.addTab("graph",{title:"tab.graph.name",icon:"fa fa-bar-chart",route:"graph",onEnter:function(){return new ui}});var ci=n(32),fi=n.n(ci),hi=(n(197),n(20)),di={value:function(){}};function dispatch_dispatch(){for(var e,t=0,n=arguments.length,r={};t<n;++t){if(!(e=arguments[t]+"")||e in r)throw new Error("illegal type: "+e);r[e]=[]}return new Dispatch(r)}function Dispatch(e){this._=e}function dispatch_get(e,t){for(var n,r=0,a=e.length;r<a;++r)if((n=e[r]).name===t)return n.value}function dispatch_set(e,t,n){for(var r=0,a=e.length;r<a;++r)if(e[r].name===t){e[r]=di,e=e.slice(0,r).concat(e.slice(r+1));break}return null!=n&&e.push({name:t,value:n}),e}Dispatch.prototype=dispatch_dispatch.prototype={constructor:Dispatch,on:function(e,t){var n,r,a=this._,i=(r=a,(e+"").trim().split(/^|\s+/).map(function(e){var t="",n=e.indexOf(".");if(n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),e&&!r.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:t}})),o=-1,s=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++o<s;)if(n=(e=i[o]).type)a[n]=dispatch_set(a[n],e.name,t);else if(null==t)for(n in a)a[n]=dispatch_set(a[n],e.name,null);return this}for(;++o<s;)if((n=(e=i[o]).type)&&(n=dispatch_get(a[n],e.name)))return n},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Dispatch(e)},call:function(e,t){if((n=arguments.length-2)>0)for(var n,r,a=new Array(n),i=0;i<n;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(i=0,n=(r=this._[e]).length;i<n;++i)r[i].value.apply(t,a)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var r=this._[e],a=0,i=r.length;a<i;++a)r[a].value.apply(t,n)}};var pi=dispatch_dispatch;function nopropagation(){Va.stopImmediatePropagation()}var mi=function(){Va.preventDefault(),Va.stopImmediatePropagation()},gi=function(e){var t=e.document.documentElement,n=La(e).on("dragstart.drag",mi,!0);"onselectstart"in t?n.on("selectstart.drag",mi,!0):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")};function yesdrag(e,t){var n=e.document.documentElement,r=La(e).on("dragstart.drag",null);t&&(r.on("click.drag",mi,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var vi=function(e){return function(){return e}};function DragEvent(e,t,n,r,a,i,o,s,l,u){this.target=e,this.type=t,this.subject=n,this.identifier=r,this.active=a,this.x=i,this.y=o,this.dx=s,this.dy=l,this._=u}function defaultFilter(){return!Va.button}function defaultContainer(){return this.parentNode}function defaultSubject(e){return null==e?{x:Va.x,y:Va.y}:e}function defaultTouchable(){return"ontouchstart"in this}DragEvent.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};var bi,yi,_i=0,wi=0,xi=0,ki=1e3,Ci=0,Si=0,Ti=0,Ei="object"==typeof performance&&performance.now?performance:Date,Mi="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function now(){return Si||(Mi(clearNow),Si=Ei.now()+Ti)}function clearNow(){Si=0}function Timer(){this._call=this._time=this._next=null}function timer(e,t,n){var r=new Timer;return r.restart(e,t,n),r}function wake(){Si=(Ci=Ei.now())+Ti,_i=wi=0;try{!function(){now(),++_i;for(var e,t=bi;t;)(e=Si-t._time)>=0&&t._call.call(null,e),t=t._next;--_i}()}finally{_i=0,function(){var e,t,n=bi,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:bi=t);yi=e,sleep(r)}(),Si=0}}function poke(){var e=Ei.now(),t=e-Ci;t>ki&&(Ti-=t,Ci=e)}function sleep(e){_i||(wi&&(wi=clearTimeout(wi)),e-Si>24?(e<1/0&&(wi=setTimeout(wake,e-Ei.now()-Ti)),xi&&(xi=clearInterval(xi))):(xi||(Ci=Ei.now(),xi=setInterval(poke,ki)),_i=1,Mi(wake)))}Timer.prototype=timer.prototype={constructor:Timer,restart:function(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?now():+n)+(null==t?0:+t),this._next||yi===this||(yi?yi._next=this:bi=this,yi=this),this._call=e,this._time=n,sleep()},stop:function(){this._call&&(this._call=null,this._time=1/0,sleep())}};var Oi=function(e,t,n){var r=new Timer;return t=null==t?0:+t,r.restart(function(n){r.stop(),e(n+t)},t,n),r},Ai=pi("start","end","interrupt"),Ri=[],Ni=0,Di=1,Vi=2,ji=3,Pi=4,Li=5,Ii=6,Bi=function(e,t,n,r,a,i){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function(e,t,n){var r,a=e.__transition;function start(i){var o,s,l,u;if(n.state!==Di)return stop();for(o in a)if((u=a[o]).name===n.name){if(u.state===ji)return Oi(start);u.state===Pi?(u.state=Ii,u.timer.stop(),u.on.call("interrupt",e,e.__data__,u.index,u.group),delete a[o]):+o<t&&(u.state=Ii,u.timer.stop(),delete a[o])}if(Oi(function(){n.state===ji&&(n.state=Pi,n.timer.restart(tick,n.delay,n.time),tick(i))}),n.state=Vi,n.on.call("start",e,e.__data__,n.index,n.group),n.state===Vi){for(n.state=ji,r=new Array(l=n.tween.length),o=0,s=-1;o<l;++o)(u=n.tween[o].value.call(e,e.__data__,n.index,n.group))&&(r[++s]=u);r.length=s+1}}function tick(t){for(var a=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(stop),n.state=Li,1),i=-1,o=r.length;++i<o;)r[i].call(null,a);n.state===Li&&(n.on.call("end",e,e.__data__,n.index,n.group),stop())}function stop(){for(var r in n.state=Ii,n.timer.stop(),delete a[t],a)return;delete e.__transition}a[t]=n,n.timer=timer(function(e){n.state=Di,n.timer.restart(start,n.delay,n.time),n.delay<=e&&start(e-n.delay)},0,n.time)}(e,n,{name:t,index:r,group:a,on:Ai,tween:Ri,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:Ni})};function init(e,t){var n=schedule_get(e,t);if(n.state>Ni)throw new Error("too late; already scheduled");return n}function schedule_set(e,t){var n=schedule_get(e,t);if(n.state>Vi)throw new Error("too late; already started");return n}function schedule_get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}var zi=function(e,t){var n,r,a,i=e.__transition,o=!0;if(i){for(a in t=null==t?null:t+"",i)(n=i[a]).name===t?(r=n.state>Vi&&n.state<Li,n.state=Ii,n.timer.stop(),r&&n.on.call("interrupt",e,e.__data__,n.index,n.group),delete i[a]):o=!1;o&&delete e.__transition}};function tweenValue(e,t,n){var r=e._id;return e.each(function(){var e=schedule_set(this,r);(e.value||(e.value={}))[t]=n.apply(this,arguments)}),function(e){return schedule_get(e,r).value[t]}}var Ui=function(e,t){var n;return("number"==typeof t?yn:t instanceof color_color?vn:(n=color_color(t))?(t=n,vn):Tn)(e,t)};var Fi=Pa.prototype.constructor;var Hi=0;function Transition(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function src_transition_transition(e){return Pa().transition(e)}function newId(){return++Hi}var qi=Pa.prototype;Transition.prototype=src_transition_transition.prototype={constructor:Transition,select:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Ca(e));for(var r=this._groups,a=r.length,i=new Array(a),o=0;o<a;++o)for(var s,l,u=r[o],c=u.length,f=i[o]=new Array(c),h=0;h<c;++h)(s=u[h])&&(l=e.call(s,s.__data__,h,u))&&("__data__"in s&&(l.__data__=s.__data__),f[h]=l,Bi(f[h],t,n,h,f,schedule_get(s,n)));return new Transition(i,this._parents,t,n)},selectAll:function(e){var t=this._name,n=this._id;"function"!=typeof e&&(e=Sa(e));for(var r=this._groups,a=r.length,i=[],o=[],s=0;s<a;++s)for(var l,u=r[s],c=u.length,f=0;f<c;++f)if(l=u[f]){for(var h,d=e.call(l,l.__data__,f,u),p=schedule_get(l,n),m=0,g=d.length;m<g;++m)(h=d[m])&&Bi(h,t,n,m,d,p);i.push(d),o.push(l)}return new Transition(i,o,t,n)},filter:function(e){"function"!=typeof e&&(e=Oa(e));for(var t=this._groups,n=t.length,r=new Array(n),a=0;a<n;++a)for(var i,o=t[a],s=o.length,l=r[a]=[],u=0;u<s;++u)(i=o[u])&&e.call(i,i.__data__,u,o)&&l.push(i);return new Transition(r,this._parents,this._name,this._id)},merge:function(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,r=t.length,a=n.length,i=Math.min(r,a),o=new Array(r),s=0;s<i;++s)for(var l,u=t[s],c=n[s],f=u.length,h=o[s]=new Array(f),d=0;d<f;++d)(l=u[d]||c[d])&&(h[d]=l);for(;s<r;++s)o[s]=t[s];return new Transition(o,this._parents,this._name,this._id)},selection:function(){return new Fi(this._groups,this._parents)},transition:function(){for(var e=this._name,t=this._id,n=newId(),r=this._groups,a=r.length,i=0;i<a;++i)for(var o,s=r[i],l=s.length,u=0;u<l;++u)if(o=s[u]){var c=schedule_get(o,t);Bi(o,e,n,u,s,{time:c.time+c.delay+c.duration,delay:0,duration:c.duration,ease:c.ease})}return new Transition(r,this._parents,e,n)},call:qi.call,nodes:qi.nodes,node:qi.node,size:qi.size,empty:qi.empty,each:qi.each,on:function(e,t){var n=this._id;return arguments.length<2?schedule_get(this.node(),n).on.on(e):this.each(function(e,t,n){var r,a,i=function(e){return(e+"").trim().split(/^|\s+/).every(function(e){var t=e.indexOf(".");return t>=0&&(e=e.slice(0,t)),!e||"start"===e})}(t)?init:schedule_set;return function(){var o=i(this,e),s=o.on;s!==r&&(a=(r=s).copy()).on(t,n),o.on=a}}(n,e,t))},attr:function(e,t){var n=xa(e),r="transform"===n?Dn:Ui;return this.attrTween(e,"function"==typeof t?(n.local?function(e,t,n){var r,a,i;return function(){var o,s=n(this);if(null!=s)return(o=this.getAttributeNS(e.space,e.local))===s?null:o===r&&s===a?i:i=t(r=o,a=s);this.removeAttributeNS(e.space,e.local)}}:function(e,t,n){var r,a,i;return function(){var o,s=n(this);if(null!=s)return(o=this.getAttribute(e))===s?null:o===r&&s===a?i:i=t(r=o,a=s);this.removeAttribute(e)}})(n,r,tweenValue(this,"attr."+e,t)):null==t?(n.local?function(e){return function(){this.removeAttributeNS(e.space,e.local)}}:function(e){return function(){this.removeAttribute(e)}})(n):(n.local?function(e,t,n){var r,a;return function(){var i=this.getAttributeNS(e.space,e.local);return i===n?null:i===r?a:a=t(r=i,n)}}:function(e,t,n){var r,a;return function(){var i=this.getAttribute(e);return i===n?null:i===r?a:a=t(r=i,n)}})(n,r,t+""))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!=typeof t)throw new Error;var r=xa(e);return this.tween(n,(r.local?function(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttributeNS(e.space,e.local,r(t))}}return tween._value=t,tween}:function(e,t){function tween(){var n=this,r=t.apply(n,arguments);return r&&function(t){n.setAttribute(e,r(t))}}return tween._value=t,tween})(r,t))},style:function(e,t,n){var r="transform"==(e+="")?Nn:Ui;return null==t?this.styleTween(e,function(e,t){var n,r,a;return function(){var i=styleValue(this,e),o=(this.style.removeProperty(e),styleValue(this,e));return i===o?null:i===n&&o===r?a:a=t(n=i,r=o)}}(e,r)).on("end.style."+e,function(e){return function(){this.style.removeProperty(e)}}(e)):this.styleTween(e,"function"==typeof t?function(e,t,n){var r,a,i;return function(){var o=styleValue(this,e),s=n(this);return null==s&&(this.style.removeProperty(e),s=styleValue(this,e)),o===s?null:o===r&&s===a?i:i=t(r=o,a=s)}}(e,r,tweenValue(this,"style."+e,t)):function(e,t,n){var r,a;return function(){var i=styleValue(this,e);return i===n?null:i===r?a:a=t(r=i,n)}}(e,r,t+""),n)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!=typeof t)throw new Error;return this.tween(r,function(e,t,n){function tween(){var r=this,a=t.apply(r,arguments);return a&&function(t){r.style.setProperty(e,a(t),n)}}return tween._value=t,tween}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"==typeof e?function(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(tweenValue(this,"text",e)):function(e){return function(){this.textContent=e}}(null==e?"":e+""))},remove:function(){return this.on("end.remove",(e=this._id,function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}));var e},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,a=schedule_get(this.node(),n).tween,i=0,o=a.length;i<o;++i)if((r=a[i]).name===e)return r.value;return null}return this.each((null==t?function(e,t){var n,r;return function(){var a=schedule_set(this,e),i=a.tween;if(i!==n)for(var o=0,s=(r=n=i).length;o<s;++o)if(r[o].name===t){(r=r.slice()).splice(o,1);break}a.tween=r}}:function(e,t,n){var r,a;if("function"!=typeof n)throw new Error;return function(){var i=schedule_set(this,e),o=i.tween;if(o!==r){a=(r=o).slice();for(var s={name:t,value:n},l=0,u=a.length;l<u;++l)if(a[l].name===t){a[l]=s;break}l===u&&a.push(s)}i.tween=a}})(n,e,t))},delay:function(e){var t=this._id;return arguments.length?this.each(("function"==typeof e?function(e,t){return function(){init(this,e).delay=+t.apply(this,arguments)}}:function(e,t){return t=+t,function(){init(this,e).delay=t}})(t,e)):schedule_get(this.node(),t).delay},duration:function(e){var t=this._id;return arguments.length?this.each(("function"==typeof e?function(e,t){return function(){schedule_set(this,e).duration=+t.apply(this,arguments)}}:function(e,t){return t=+t,function(){schedule_set(this,e).duration=t}})(t,e)):schedule_get(this.node(),t).duration},ease:function(e){var t=this._id;return arguments.length?this.each(function(e,t){if("function"!=typeof t)throw new Error;return function(){schedule_set(this,e).ease=t}}(t,e)):schedule_get(this.node(),t).ease}};(function custom(e){function polyIn(t){return Math.pow(t,e)}return e=+e,polyIn.exponent=custom,polyIn})(3),function custom(e){function polyOut(t){return 1-Math.pow(1-t,e)}return e=+e,polyOut.exponent=custom,polyOut}(3),function custom(e){function polyInOut(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,polyInOut.exponent=custom,polyInOut}(3),Math.PI;(function custom(e){function backIn(t){return t*t*((e+1)*t-e)}return e=+e,backIn.overshoot=custom,backIn})(1.70158),function custom(e){function backOut(t){return--t*t*((e+1)*t+e)+1}return e=+e,backOut.overshoot=custom,backOut}(1.70158),function custom(e){function backInOut(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,backInOut.overshoot=custom,backInOut}(1.70158);var Wi=2*Math.PI,$i=(function custom(e,t){var n=Math.asin(1/(e=Math.max(1,e)))*(t/=Wi);function elasticIn(r){return e*Math.pow(2,10*--r)*Math.sin((n-r)/t)}return elasticIn.amplitude=function(e){return custom(e,t*Wi)},elasticIn.period=function(t){return custom(e,t)},elasticIn}(1,.3),function custom(e,t){var n=Math.asin(1/(e=Math.max(1,e)))*(t/=Wi);function elasticOut(r){return 1-e*Math.pow(2,-10*(r=+r))*Math.sin((r+n)/t)}return elasticOut.amplitude=function(e){return custom(e,t*Wi)},elasticOut.period=function(t){return custom(e,t)},elasticOut}(1,.3),function custom(e,t){var n=Math.asin(1/(e=Math.max(1,e)))*(t/=Wi);function elasticInOut(r){return((r=2*r-1)<0?e*Math.pow(2,10*r)*Math.sin((n-r)/t):2-e*Math.pow(2,-10*r)*Math.sin((n+r)/t))/2}return elasticInOut.amplitude=function(e){return custom(e,t*Wi)},elasticInOut.period=function(t){return custom(e,t)},elasticInOut}(1,.3),{time:null,delay:0,duration:250,ease:function(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}});function transition_inherit(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))return $i.time=now(),$i;return n}Pa.prototype.interrupt=function(e){return this.each(function(){zi(this,e)})},Pa.prototype.transition=function(e){var t,n;e instanceof Transition?(t=e._id,e=e._name):(t=newId(),(n=$i).time=now(),e=null==e?null:e+"");for(var r=this._groups,a=r.length,i=0;i<a;++i)for(var o,s=r[i],l=s.length,u=0;u<l;++u)(o=s[u])&&Bi(o,e,t,u,s,n||transition_inherit(o,t));return new Transition(r,this._parents,e,t)};var Yi=function(e){return function(){return e}},Gi=function(e,t,n){this.target=e,this.type=t,this.selection=n};function noevent_nopropagation(){Va.stopImmediatePropagation()}var Xi=function(){Va.preventDefault(),Va.stopImmediatePropagation()},Ki={name:"drag"},Zi={name:"space"},Ji={name:"handle"},Qi={name:"center"},eo={name:"x",handles:["e","w"].map(brush_type),input:function(e,t){return e&&[[e[0],t[0][1]],[e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},to={name:"y",handles:["n","s"].map(brush_type),input:function(e,t){return e&&[[t[0][0],e[0]],[t[1][0],e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},no=(["n","e","s","w","nw","ne","se","sw"].map(brush_type),{overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"}),ro={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},ao={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},io={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},oo={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function brush_type(e){return{type:e}}function brush_defaultFilter(){return!Va.button}function defaultExtent(){var e=this.ownerSVGElement||this;return[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function brush_local(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function brush_empty(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function brush_brush(e){var t,n=defaultExtent,r=brush_defaultFilter,a=pi(brush,"start","brush","end"),i=6;function brush(t){var n=t.property("__brush",initialize).selectAll(".overlay").data([brush_type("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",no.overlay).merge(n).each(function(){var e=brush_local(this).extent;La(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])}),t.selectAll(".selection").data([brush_type("selection")]).enter().append("rect").attr("class","selection").attr("cursor",no.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=t.selectAll(".handle").data(e.handles,function(e){return e.type});r.exit().remove(),r.enter().append("rect").attr("class",function(e){return"handle handle--"+e.type}).attr("cursor",function(e){return no[e.type]}),t.each(redraw).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",started)}function redraw(){var e=La(this),t=brush_local(this).selection;t?(e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]),e.selectAll(".handle").style("display",null).attr("x",function(e){return"e"===e.type[e.type.length-1]?t[1][0]-i/2:t[0][0]-i/2}).attr("y",function(e){return"s"===e.type[0]?t[1][1]-i/2:t[0][1]-i/2}).attr("width",function(e){return"n"===e.type||"s"===e.type?t[1][0]-t[0][0]+i:i}).attr("height",function(e){return"e"===e.type||"w"===e.type?t[1][1]-t[0][1]+i:i})):e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function emitter(e,t){return e.__brush.emitter||new Emitter(e,t)}function Emitter(e,t){this.that=e,this.args=t,this.state=e.__brush,this.active=0}function started(){if(Va.touches){if(Va.changedTouches.length<Va.touches.length)return Xi()}else if(t)return;if(r.apply(this,arguments)){var n,a,i,o,s,l,u,c,f,h,d,p,m,g=this,v=Va.target.__data__.type,b="selection"===(Va.metaKey?v="overlay":v)?Ki:Va.altKey?Qi:Ji,y=e===to?null:io[v],_=e===eo?null:oo[v],w=brush_local(g),x=w.extent,k=w.selection,C=x[0][0],S=x[0][1],T=x[1][0],E=x[1][1],M=y&&_&&Va.shiftKey,O=Ua(g),A=O,R=emitter(g,arguments).beforestart();"overlay"===v?w.selection=k=[[n=e===to?C:O[0],i=e===eo?S:O[1]],[s=e===to?T:n,u=e===eo?E:i]]:(n=k[0][0],i=k[0][1],s=k[1][0],u=k[1][1]),a=n,o=i,l=s,c=u;var N=La(g).attr("pointer-events","none"),D=N.selectAll(".overlay").attr("cursor",no[v]);if(Va.touches)N.on("touchmove.brush",moved,!0).on("touchend.brush touchcancel.brush",ended,!0);else{var V=La(Va.view).on("keydown.brush",function(){switch(Va.keyCode){case 16:M=y&&_;break;case 18:b===Ji&&(y&&(s=l-f*y,n=a+f*y),_&&(u=c-h*_,i=o+h*_),b=Qi,move());break;case 32:b!==Ji&&b!==Qi||(y<0?s=l-f:y>0&&(n=a-f),_<0?u=c-h:_>0&&(i=o-h),b=Zi,D.attr("cursor",no.selection),move());break;default:return}Xi()},!0).on("keyup.brush",function(){switch(Va.keyCode){case 16:M&&(p=m=M=!1,move());break;case 18:b===Qi&&(y<0?s=l:y>0&&(n=a),_<0?u=c:_>0&&(i=o),b=Ji,move());break;case 32:b===Zi&&(Va.altKey?(y&&(s=l-f*y,n=a+f*y),_&&(u=c-h*_,i=o+h*_),b=Qi):(y<0?s=l:y>0&&(n=a),_<0?u=c:_>0&&(i=o),b=Ji),D.attr("cursor",no[v]),move());break;default:return}Xi()},!0).on("mousemove.brush",moved,!0).on("mouseup.brush",ended,!0);gi(Va.view)}noevent_nopropagation(),zi(g),redraw.call(g),R.start()}function moved(){var e=Ua(g);!M||p||m||(Math.abs(e[0]-A[0])>Math.abs(e[1]-A[1])?m=!0:p=!0),A=e,d=!0,Xi(),move()}function move(){var e;switch(f=A[0]-O[0],h=A[1]-O[1],b){case Zi:case Ki:y&&(f=Math.max(C-n,Math.min(T-s,f)),a=n+f,l=s+f),_&&(h=Math.max(S-i,Math.min(E-u,h)),o=i+h,c=u+h);break;case Ji:y<0?(f=Math.max(C-n,Math.min(T-n,f)),a=n+f,l=s):y>0&&(f=Math.max(C-s,Math.min(T-s,f)),a=n,l=s+f),_<0?(h=Math.max(S-i,Math.min(E-i,h)),o=i+h,c=u):_>0&&(h=Math.max(S-u,Math.min(E-u,h)),o=i,c=u+h);break;case Qi:y&&(a=Math.max(C,Math.min(T,n-f*y)),l=Math.max(C,Math.min(T,s+f*y))),_&&(o=Math.max(S,Math.min(E,i-h*_)),c=Math.max(S,Math.min(E,u+h*_)))}l<a&&(y*=-1,e=n,n=s,s=e,e=a,a=l,l=e,v in ro&&D.attr("cursor",no[v=ro[v]])),c<o&&(_*=-1,e=i,i=u,u=e,e=o,o=c,c=e,v in ao&&D.attr("cursor",no[v=ao[v]])),w.selection&&(k=w.selection),p&&(a=k[0][0],l=k[1][0]),m&&(o=k[0][1],c=k[1][1]),k[0][0]===a&&k[0][1]===o&&k[1][0]===l&&k[1][1]===c||(w.selection=[[a,o],[l,c]],redraw.call(g),R.brush())}function ended(){if(noevent_nopropagation(),Va.touches){if(Va.touches.length)return;t&&clearTimeout(t),t=setTimeout(function(){t=null},500),N.on("touchmove.brush touchend.brush touchcancel.brush",null)}else yesdrag(Va.view,d),V.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);N.attr("pointer-events","all"),D.attr("cursor",no.overlay),w.selection&&(k=w.selection),brush_empty(k)&&(w.selection=null,redraw.call(g)),R.end()}}function initialize(){var t=this.__brush||{selection:null};return t.extent=n.apply(this,arguments),t.dim=e,t}return brush.move=function(t,n){t.selection?t.on("start.brush",function(){emitter(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){emitter(this,arguments).end()}).tween("brush",function(){var t=this,r=t.__brush,a=emitter(t,arguments),i=r.selection,o=e.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=En(i,o);function tween(e){r.selection=1===e&&brush_empty(o)?null:s(e),redraw.call(t),a.brush()}return i&&o?tween:tween(1)}):t.each(function(){var t=arguments,r=this.__brush,a=e.input("function"==typeof n?n.apply(this,t):n,r.extent),i=emitter(this,t).beforestart();zi(this),r.selection=null==a||brush_empty(a)?null:a,redraw.call(this),i.start().brush().end()})},Emitter.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){customEvent(new Gi(brush,t,e.output(this.state.selection)),a.apply,a,[t,this.that,this.args])}},brush.extent=function(e){return arguments.length?(n="function"==typeof e?e:Yi([[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]]),brush):n},brush.filter=function(e){return arguments.length?(r="function"==typeof e?e:Yi(!!e),brush):r},brush.handleSize=function(e){return arguments.length?(i=+e,brush):i},brush.on=function(){var e=a.on.apply(a,arguments);return e===a?brush:e},brush}Pa.prototype.attrs=function(e){return("function"==typeof e?function(e,t){return e.each(function(){var e=t.apply(this,arguments),n=La(this);for(var r in e)n.attr(r,e[r])})}:function(e,t){for(var n in t)e.attr(n,t[n]);return e})(this,e)},Pa.prototype.styles=function(e,t){return("function"==typeof e?function(e,t,n){return e.each(function(){var e=t.apply(this,arguments),r=La(this);for(var a in e)r.style(a,e[a],n)})}:function(e,t,n){for(var r in t)e.style(r,t[r],n);return e})(this,e,null==t?"":t)},Pa.prototype.properties=function(e){return("function"==typeof e?function(e,t){return e.each(function(){var e=t.apply(this,arguments),n=La(this);for(var r in e)n.property(r,e[r])})}:function(e,t){for(var n in t)e.property(n,t[n]);return e})(this,e)},src_transition_transition.prototype.attrs=function(e){return("function"==typeof e?function(e,t){return e.each(function(){var n=t.apply(this,arguments),r=La(this).transition(e);for(var a in n)r.attr(a,n[a])})}:function(e,t){for(var n in t)e.attr(n,t[n]);return e})(this,e)},src_transition_transition.prototype.styles=function(e,t){return("function"==typeof e?function(e,t,n){return e.each(function(){var r=t.apply(this,arguments),a=La(this).transition(e);for(var i in r)a.style(i,r[i],n)})}:function(e,t,n){for(var r in t)e.style(r,t[r],n);return e})(this,e,null==t?"":t)};var so=n(11);function escape_escape(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return e.reduce(function(e,t,r){return e+Object(so.escapeExpression)(n[r-1])+t})}var lo,uo=n(103),co=n.n(uo);function _templateObject(){var e=fi()(["","<br>\n "," — ",""]);return _templateObject=function(){return e},e}var fo=Object(G.b)("timeline")(lo=function(e){function TimelineView(){return l()(this,TimelineView),h()(this,p()(TimelineView).apply(this,arguments))}return b()(TimelineView,e),c()(TimelineView,[{key:"initialize",value:function(){var e=this;this.chartX=linear_linear(),this.brushX=linear_linear(),this.sorter=getComparator({sorter:"sorter.name",ascending:!0}),this.brush=brush_brush(eo).on("start brush end",this.onBrushChange.bind(this)),this.tooltip=new $a.a({position:"bottom"}),this.collection.applyFilterAndSorting(function(){return 1},this.sorter),this.minDuration=this.collection.time.minDuration,this.maxDuration=this.collection.time.maxDuration,this.selectedDuration=this.minDuration,this.data=this.collection.toJSON(),this.total=this.collection.allResults.length,this.timeOffset=function(t){return t-e.collection.time.start}}},{key:"onAttach",value:function(){this.doShow()}},{key:"setupViewport",value:function(){this.$el.html(co()({PADDING:30})),this.svgChart=La(this.$el[0]).select(".timeline__chart_svg"),this.svgBrush=La(this.$el[0]).select(".timeline__brush_svg"),this.slider=this.svgChart.select(".timeline__slider")}},{key:"setupSlider",value:function(){var e=this,t=linear_linear().range([0,this.width]).domain([this.minDuration,this.maxDuration]).clamp(!0);this.slider.append("line").attrs({class:"timeline__slider_track",x1:t.range()[0],x2:t.range()[1]}),this.handle=this.slider.insert("circle").attrs({class:"timeline__slider_handle",cx:t(this.selectedDuration),r:8}).call(function(){var e,t,n,r,a=defaultFilter,i=defaultContainer,o=defaultSubject,s=defaultTouchable,l={},u=pi("start","drag","end"),c=0,f=0;function drag(e){e.on("mousedown.drag",mousedowned).filter(s).on("touchstart.drag",touchstarted).on("touchmove.drag",touchmoved).on("touchend.drag touchcancel.drag",touchended).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function mousedowned(){if(!r&&a.apply(this,arguments)){var o=beforestart("mouse",i.apply(this,arguments),Ua,this,arguments);o&&(La(Va.view).on("mousemove.drag",mousemoved,!0).on("mouseup.drag",mouseupped,!0),gi(Va.view),nopropagation(),n=!1,e=Va.clientX,t=Va.clientY,o("start"))}}function mousemoved(){if(mi(),!n){var r=Va.clientX-e,a=Va.clientY-t;n=r*r+a*a>f}l.mouse("drag")}function mouseupped(){La(Va.view).on("mousemove.drag mouseup.drag",null),yesdrag(Va.view,n),mi(),l.mouse("end")}function touchstarted(){if(a.apply(this,arguments)){var e,t,n=Va.changedTouches,r=i.apply(this,arguments),o=n.length;for(e=0;e<o;++e)(t=beforestart(n[e].identifier,r,Fa,this,arguments))&&(nopropagation(),t("start"))}}function touchmoved(){var e,t,n=Va.changedTouches,r=n.length;for(e=0;e<r;++e)(t=l[n[e].identifier])&&(mi(),t("drag"))}function touchended(){var e,t,n=Va.changedTouches,a=n.length;for(r&&clearTimeout(r),r=setTimeout(function(){r=null},500),e=0;e<a;++e)(t=l[n[e].identifier])&&(nopropagation(),t("end"))}function beforestart(e,t,n,r,a){var i,s,f,h=n(t,e),d=u.copy();if(customEvent(new DragEvent(drag,"beforestart",i,e,c,h[0],h[1],0,0,d),function(){return null!=(Va.subject=i=o.apply(r,a))&&(s=i.x-h[0]||0,f=i.y-h[1]||0,!0)}))return function gesture(o){var u,p=h;switch(o){case"start":l[e]=gesture,u=c++;break;case"end":delete l[e],--c;case"drag":h=n(t,e),u=c}customEvent(new DragEvent(drag,o,i,e,u,h[0]+s,h[1]+f,h[0]-p[0],h[1]-p[1],d),d.apply,d,[o,r,a])}}return drag.filter=function(e){return arguments.length?(a="function"==typeof e?e:vi(!!e),drag):a},drag.container=function(e){return arguments.length?(i="function"==typeof e?e:vi(e),drag):i},drag.subject=function(e){return arguments.length?(o="function"==typeof e?e:vi(e),drag):o},drag.touchable=function(e){return arguments.length?(s="function"==typeof e?e:vi(!!e),drag):s},drag.on=function(){var e=u.on.apply(u,arguments);return e===u?drag:e},drag.clickDistance=function(e){return arguments.length?(f=(e=+e)*e,drag):Math.sqrt(f)},drag}().on("drag",function(){e.selectedDuration=t.invert(Va.x),e.handle.attr("cx",t(e.selectedDuration))}).on("end",function(){var n,r,a=(n=e.selectedDuration,r=e.maxDuration,function(e){return e.children?e.children.length>0:n<=e.time.duration&&e.time.duration<=r});e.collection.applyFilterAndSorting(a,e.sorter),e.data=e.collection.toJSON(),e.doShow(),e.handle.attr("cx",t(e.selectedDuration))}));var n=this.collection.testResults.length,r={count:n,percent:(100*n/this.total).toFixed(2),duration:Object(hi.default)(this.selectedDuration)};this.slider.insert("g").append("text").attr("transform","translate(".concat(this.width/2,", 20)")).attr("class","timeline__slider_text").text(Object(Le.default)("tab.timeline.selected",{hash:r})),this.slider.insert("g").attr("class","timeline__slider_text").attr("transform","translate(0, 20)").selectAll("text").data(t.domain()).enter().append("text").attr("x",t).text(function(e){return Object(hi.default)(e,1)})}},{key:"doShow",value:function(){var e=this;this.width=this.$el.width()>60?this.$el.width()-60:this.$el.width();var t=[this.collection.time.start,this.collection.time.stop];this.chartX.domain(t).range([0,this.width]),this.brushX.domain(t).range([0,this.width]),this.setupViewport(),this.setupSlider();var n=10,r=this.svgChart.select(".timeline__plot");n+=this.drawTestGroups(this.data,n,r,!0),La(this.$el[0]).select(".timeline__brush").style("top",function(){return Math.min(e.$el.height()-20,n+30)+"px"}),this.xChartAxis=this.makeAxis(axisBottom(),this.svgChart.select(".timeline__chart__axis_x"),{scale:this.chartX,tickFormat:function(){return""},tickSizeOuter:0,tickSizeInner:n}),this.xBrushAxis=this.makeAxis(axisBottom(),this.svgBrush.select(".timeline__brush__axis_x"),{scale:this.chartX,tickFormat:function(t){return Object(hi.default)(t-e.collection.time.start,2)},tickSizeOuter:0},{top:24,left:30}),this.brush.extent([[0,0],[this.width,20]]),this.svgBrush.append("g").attrs({transform:"translate(".concat(30,", ").concat(2,")"),class:"brush"}).call(this.brush).call(this.brush.move,this.chartX.range()),this.firstRender&&this.svgBrush.select(".brush").transition().duration(300).call(this.brush.move,[1/16*this.width,.9375*this.width]).transition().duration(500).call(this.brush.move,this.chartX.range()),this.svgChart.attr("height",function(){return 30+n+20}),g()(p()(TimelineView.prototype),"onRender",this).call(this)}},{key:"drawTestGroups",value:function(e,t,n,r){var a=this;return e.filter(function(e){return e.children}).forEach(function(e){var i=0,o=n.append("g").attrs({class:"timeline__group",transform:"translate(0, ".concat(t,")")});if(r){var s=o.append("text").datum(e).text(function(e){return e.name}).attr("class","timeline__group_title");a.bindTooltip(s),t+=i=22}t+=a.drawTestGroups(e.children,i,o,!1)}),t+=this.drawTestResults(e.filter(function(e){return!e.children}),n,t)}},{key:"drawTestResults",value:function(e,t){var n=this;if(e.length){var r=t.selectAll(".timeline__item").data(e).enter().append("a").attr("xlink:href",function(e){return"#testresult/"+e.uid}).append("rect").attrs({class:function(e){return"timeline__item chart__fill_status_".concat(e.status)},x:function(e){return n.chartX(e.time.start)},width:function(e){return n.chartX(e.time.start+e.time.duration)},rx:2,ry:2,height:20});return this.bindTooltip(r),r.on("click",this.hideTooltip.bind(this)),22}return 0}},{key:"onBrushChange",value:function(){var e=this,t=Va.selection,n=function(t){return Math.max(0,Math.min(e.chartX(t.time.start),e.width))};t&&(this.chartX.domain(t.map(this.brushX.invert,this.brushX)),this.svgChart.selectAll(".timeline__item").attrs({x:function(e){return n(e)},width:function(t){return function(t){return Math.max(0,Math.min(e.chartX(t.time.stop),e.width))}(t)-n(t)}}),this.svgBrush.select(".timeline__brush__axis_x").call(this.xBrushAxis),this.svgChart.select(".timeline__chart__axis_x").call(this.xChartAxis)),this.svgBrush.selectAll(".handle").attrs({y:0,height:20})}},{key:"getTooltipContent",value:function(e){return escape_escape(_templateObject(),e.name,Object(hi.default)(this.timeOffset(e.time.start)),Object(hi.default)(this.timeOffset(e.time.stop)))}}]),TimelineView}(Wa))||lo,ho=function(e){function TimelineLayout(){return l()(this,TimelineLayout),h()(this,p()(TimelineLayout).apply(this,arguments))}return b()(TimelineLayout,e),c()(TimelineLayout,[{key:"initialize",value:function(e){var t=e.url;g()(p()(TimelineLayout.prototype),"initialize",this).call(this),this.items=new Y([],{url:t})}},{key:"loadData",value:function(){return this.items.fetch()}},{key:"getContentView",value:function(){return new fo({collection:this.items})}}]),TimelineLayout}(y.a);allure.api.addTab("timeline",{title:"tab.timeline.name",icon:"fa fa-clock-o",route:"timeline",onEnter:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return new ho(w()({},t,{url:"data/timeline.json"}))}});var po,mo,go,vo=n(104),bo=n.n(vo);function PieChartView_templateObject(){var e=fi()(["\n "," tests (","%)<br>\n ","\n "]);return PieChartView_templateObject=function(){return e},e}var yo,_o=(po=Object(G.c)("mouseleave .chart__legend-row"),mo=Object(G.c)("mouseenter .chart__legend-row"),go=function(e){function PieChartView(){return l()(this,PieChartView),h()(this,p()(PieChartView).apply(this,arguments))}return b()(PieChartView,e),c()(PieChartView,[{key:"initialize",value:function(e){this.options=e,this.model=this.options.model,this.showLegend=this.options&&this.options.showLegend||!1,this.arc=na(),this.pie=function(){var e=sa,t=oa,n=null,r=qr(0),a=qr(ta),i=qr(0);function pie(o){var s,l,u,c,f,h=o.length,d=0,p=new Array(h),m=new Array(h),g=+r.apply(this,arguments),v=Math.min(ta,Math.max(-ta,a.apply(this,arguments)-g)),b=Math.min(Math.abs(v)/h,i.apply(this,arguments)),y=b*(v<0?-1:1);for(s=0;s<h;++s)(f=m[p[s]=s]=+e(o[s],s,o))>0&&(d+=f);for(null!=t?p.sort(function(e,n){return t(m[e],m[n])}):null!=n&&p.sort(function(e,t){return n(o[e],o[t])}),s=0,u=d?(v-h*y)/d:0;s<h;++s,g=c)l=p[s],c=g+((f=m[l])>0?f*u:0)+y,m[l]={data:o[l],index:s,value:f,startAngle:g,endAngle:c,padAngle:b};return m}return pie.value=function(t){return arguments.length?(e="function"==typeof t?t:qr(+t),pie):e},pie.sortValues=function(e){return arguments.length?(t=e,n=null,pie):t},pie.sort=function(e){return arguments.length?(n=e,t=null,pie):n},pie.startAngle=function(e){return arguments.length?(r="function"==typeof e?e:qr(+e),pie):r},pie.endAngle=function(e){return arguments.length?(a="function"==typeof e?e:qr(+e),pie):a},pie.padAngle=function(e){return arguments.length?(i="function"==typeof e?e:qr(+e),pie):i},pie}().sort(null).value(function(e){return e.value}),this.tooltip=new $a.a({position:"center"}),this.getChartData()}},{key:"getChartData",value:function(){this.statistic=this.model.get("statistic");var e=this.statistic.total,t=Object(k.omit)(this.statistic,"total");this.data=Object.keys(t).map(function(n){return{name:n.toUpperCase(),value:t[n],part:t[n]/e}})}},{key:"setupViewport",value:function(){return g()(p()(PieChartView.prototype),"setupViewport",this).call(this),this.showLegend&&this.$el.append(this.getLegendTpl()),this.svg}},{key:"onAttach",value:function(){var e=this,t=this.data,n=this.$el.outerWidth(),r=this.$el.outerHeight(),a=Math.min(n,r)/2-10,i=r/2,o=n/2;this.showLegend&&(o-=70),this.arc.innerRadius(.8*a).outerRadius(a),this.svg=this.setupViewport();var s=this.svg.select(".chart__plot").attrs({transform:"translate(".concat(o,",").concat(i,")")}).selectAll(".chart__arc").data(this.pie(t)).enter().append("path").attr("class",function(e){return"chart__arc chart__fill_status_"+e.data.name.toLowerCase()});this.bindTooltip(s),this.svg.select(".chart__plot").append("text").classed("chart__caption",!0).attrs({dy:"0.4em"}).styles({"font-size":"".concat(a/3,"px")}).text(this.getChartTitle()),this.firstRender?s.transition().duration(750).attrTween("d",function(t){var n=En(0,t.startAngle),r=En(0,t.endAngle);return function(t){return e.arc({startAngle:n(t),endAngle:r(t)})}}):s.attr("d",function(t){return e.arc(t)}),g()(p()(PieChartView.prototype),"onAttach",this).call(this)}},{key:"formatNumber",value:function(e){return(Math.floor(100*e)/100).toString()}},{key:"getChartTitle",value:function(){var e=this.statistic,t=e.passed,n=e.total;return this.formatNumber((t||0)/n*100)+"%"}},{key:"getTooltipContent",value:function(e){var t=e.data,n=t.value||0,r=t.part||0,a=t.name.toLowerCase(),i=Object(Le.default)("status.".concat(a),{});return escape_escape(PieChartView_templateObject(),n,this.formatNumber(100*r),i)}},{key:"getLegendTpl",value:function(){return'<div class="chart__legend">\n '.concat(C.a.map(function(e){return'<div class="chart__legend-row" data-status="'.concat(e,'">\n<span class="chart__legend-icon chart__legend-icon_status_').concat(e,'"></span> ').concat(Object(Le.default)("status."+e),"</div>")}).join(""),"\n</div>")}},{key:"onLegendOut",value:function(){this.hideTooltip()}},{key:"onLegendHover",value:function(e){var t=this.$(e.currentTarget).data("status"),n=this.$(".chart__fill_status_"+t)[0],r=La(n).datum();this.showTooltip(r,n)}}]),PieChartView}(Wa),Se()(go.prototype,"onLegendOut",[po],Object.getOwnPropertyDescriptor(go.prototype,"onLegendOut"),go.prototype),Se()(go.prototype,"onLegendHover",[mo],Object.getOwnPropertyDescriptor(go.prototype,"onLegendHover"),go.prototype),go),wo=Object(G.b)("status-widget")(yo=Object(G.e)({chart:".status-widget__content"})(yo=function(e){function StatusWidgetView(){var e,t;l()(this,StatusWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(StatusWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",bo.a),t}return b()(StatusWidgetView,e),c()(StatusWidgetView,[{key:"onRender",value:function(){this.showChildView("chart",new _o({model:this.getStatusChartData(),showLegend:!0}))}},{key:"getStatusChartData",value:function(){this.items=this.model.get("items");var e=this.items.reduce(function(e,t){return e[t.status.toLowerCase()]++,e},{total:this.items.length,failed:0,broken:0,skipped:0,passed:0,unknown:0});return new x.Model({statistic:e})}}]),StatusWidgetView}(ye.View))||yo)||yo;allure.api.addWidget("graph","status-chart",wo);var xo=n(105),ko=n.n(xo),Co=n(36);function SeverityChartView_templateObject(){var e=fi()(["<li>","</li>"]);return SeverityChartView_templateObject=function(){return e},e}var So,To=["blocker","critical","normal","minor","trivial"],Eo=function(e){function SeverityChartView(){return l()(this,SeverityChartView),h()(this,p()(SeverityChartView).apply(this,arguments))}return b()(SeverityChartView,e),c()(SeverityChartView,[{key:"initialize",value:function(){this.x=band().domain(To),this.y=sqrt(),this.status=band().domain(C.a),this.tooltip=new Co.a({position:"right"}),this.collection=this.model,this.getChartData()}},{key:"getChartData",value:function(){var e=this;this.data=To.map(function(t){return C.a.map(function(n){var r=e.collection.filter(function(e){return e.status===n&&e.severity===t});return{value:r.length,testResults:r,severity:t,status:n}})})}},{key:"onAttach",value:function(){var e=this,t=this.data;this.setupViewport(),this.x.range([0,this.width]),this.y.range([this.height,0],1),this.y.domain([0,Nt(t,function(e){return Nt(e,function(e){return e.value})})]).nice(),this.status.rangeRound([0,this.x.step()]),this.makeBottomAxis({tickFormat:function(e){return e.toLowerCase()},scale:this.x}),this.svg.selectAll(".tick").select("line").attr("transform","translate(".concat(this.x.step()/2," , 0)")),this.makeLeftAxis({scale:this.y,ticks:Math.min(10,this.y.domain()[1])});var n=this.svg.select(".chart__plot").selectAll(".chart__group").data(t).enter().append("g").attr("transform",function(t){return"translate(".concat(e.x(t[0].severity),",0)")}).selectAll(".bar").data(function(e){return e}).enter().append("rect");n.attrs({x:function(t){return e.status(t.status)},y:this.height,height:0,width:this.status.step(),class:function(e){return"chart__bar chart__fill_status_".concat(e.status)}}),this.bindTooltip(n),this.firstRender&&(n=n.transition().duration(500)),n.attrs({y:function(t){return e.y(t.value)},height:function(t){return e.height-e.y(t.value)}}),g()(p()(SeverityChartView.prototype),"onAttach",this).call(this)}},{key:"getTooltipContent",value:function(e){var t=e.value,n=e.severity,r=e.status,a=e.testResults,i=a.slice(0,10),o=a.length-i.length;return"<b>".concat(t," ").concat(n.toLowerCase()," test cases ").concat(r.toLowerCase(),'</b><br>\n <ul class="popover__list">\n ').concat(i.map(function(e){return escape_escape(SeverityChartView_templateObject(),e.name)}).join(""),"\n </ul>\n ").concat(o?"...and ".concat(o," more"):"","\n ")}}]),SeverityChartView}(Wa),Mo=Object(G.b)("severity-widget")(So=Object(G.e)({chart:".severity-widget__content"})(So=function(e){function SeverityWidgetView(){var e,t;l()(this,SeverityWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(SeverityWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ko.a),t}return b()(SeverityWidgetView,e),c()(SeverityWidgetView,[{key:"onRender",value:function(){this.showChildView("chart",new Eo({model:this.model.get("items")}))}}]),SeverityWidgetView}(ye.View))||So)||So;allure.api.addWidget("graph","severity",Mo);var Oo=n(106),Ao=n.n(Oo);function DurationChartView_templateObject(){var e=fi()(["<li>","</li>"]);return DurationChartView_templateObject=function(){return e},e}var Ro,No=function(e){function DurationChart(){return l()(this,DurationChart),h()(this,p()(DurationChart).apply(this,arguments))}return b()(DurationChart,e),c()(DurationChart,[{key:"initialize",value:function(){this.collection=this.model,this.getChartData()}},{key:"getChartData",value:function(){this.data=this.collection.map(function(e){return{value:e.time.duration,name:e.name}}).filter(function(e){return null!==e.value})}},{key:"onAttach",value:function(){this.data&&this.data.length?this.doShow():this.$el.html('<div class="widget__noitems">'.concat(Object(Le.default)("chart.duration.empty"),"</div>")),g()(p()(DurationChart.prototype),"onAttach",this).call(this)}},{key:"doShow",value:function(){var e=this;this.x=linear_linear(),this.y=sqrt(),this.tooltip=new Co.a({position:"right"}),this.setupViewport(),this.x.range([0,this.width]),this.y.range([this.height,0],1);var t=Nt(this.data,function(e){return e.value});this.x.domain([0,Math.max(t,10)]).nice();var n=function(){var e=St,t=wt,n=Rt;function histogram(r){var a,i,o=r.length,s=new Array(o);for(a=0;a<o;++a)s[a]=e(r[a],a,r);var l=t(s),u=l[0],c=l[1],f=n(s,u,c);Array.isArray(f)||(f=tickStep(u,c,f),f=Tt(Math.ceil(u/f)*f,c,f));for(var h=f.length;f[0]<=u;)f.shift(),--h;for(;f[h-1]>c;)f.pop(),--h;var d,p=new Array(h+1);for(a=0;a<=h;++a)(d=p[a]=[]).x0=a>0?f[a-1]:u,d.x1=a<h?f[a]:c;for(a=0;a<o;++a)u<=(i=s[a])&&i<=c&&p[_t(f,i,0,h)].push(r[a]);return p}return histogram.value=function(t){return arguments.length?(e="function"==typeof t?t:Ct(t),histogram):e},histogram.domain=function(e){return arguments.length?(t="function"==typeof e?e:Ct([e[0],e[1]]),histogram):t},histogram.thresholds=function(e){return arguments.length?(n="function"==typeof e?e:Array.isArray(e)?Ct(kt.call(e)):Ct(e),histogram):n},histogram}().value(function(e){return e.value}).domain(this.x.domain()).thresholds(this.x.ticks())(this.data).map(function(e){return{x0:e.x0,x1:e.x1,y:e.length,testResults:e}}),r=Nt(n,function(e){return e.y});this.y.domain([0,r]).nice(),this.makeBottomAxis({scale:this.x,tickFormat:function(e){return Object(hi.default)(e,1)}}),this.makeLeftAxis({scale:this.y,ticks:Math.min(10,r)});var a=this.plot.selectAll(".chart__bar").data(n).enter().append("rect").classed("chart__bar",!0);this.bindTooltip(a),a.attrs({x:function(t){return e.x(t.x0)+2},y:this.height,width:function(t){return Math.max(e.x(t.x1)-e.x(t.x0)-2,0)},height:0}),this.firstRender&&(a=a.transition().duration(500)),a.attrs({y:function(t){return e.y(t.y)},height:function(t){return e.height-e.y(t.y)}})}},{key:"getTooltipContent",value:function(e){var t=e.testResults,n=t.slice(0,10),r=t.length-n.length;return"<b>".concat(t.length,' test cases</b><br>\n <ul class="popover__list">\n ').concat(n.map(function(e){return escape_escape(DurationChartView_templateObject(),e.name)}).join(""),"\n </ul>\n ").concat(r?"...and ".concat(r," more"):"","\n ")}}]),DurationChart}(Wa),Do=Object(G.b)("duration-widget")(Ro=Object(G.e)({chart:".duration-widget__content"})(Ro=function(e){function DurationWidgetView(){var e,t;l()(this,DurationWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(DurationWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Ao.a),t}return b()(DurationWidgetView,e),c()(DurationWidgetView,[{key:"onRender",value:function(){this.showChildView("chart",new No({model:this.model.get("items")}))}}]),DurationWidgetView}(ye.View))||Ro)||Ro;allure.api.addWidget("graph","duration",Do);var Vo,jo=n(41),Po=n.n(jo),Lo=(n(201),n(107)),Io=n.n(Lo),Bo=Object(G.e)({chart:".duration-trend__chart"})(Vo=Object(G.b)("duration-trend")(Vo=function(e){function DurationTrendWidgetView(){var e,t;l()(this,DurationTrendWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(DurationTrendWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Io.a),t}return b()(DurationTrendWidgetView,e),c()(DurationTrendWidgetView,[{key:"onRender",value:function(){var e=this.model.map(function(e){return e.get("data").duration}),t=Math.min.apply(Math,Po()([function(e){return e>=0},function(e){return e<=0}].map(function(t){return e.reduce(function(n,r,a){return t(r-e[a-1])?a:n},Object(k.last)(e))}))),n=Math.max.apply(Math,Po()(e))-Math.min.apply(Math,Po()(e)),r=e[t]-Object(k.last)(e),a=linear_linear().domain([0,Math.max(n,.25*Math.max.apply(Math,Po()(e)))]);a.range(r>0?["#c4cac6","#31a354"]:["#cdc5c4","#e34a33"]).interpolate(vn);var i=ordinal().range([a(Math.abs(r))]);this.showChildView("chart",new Xa({model:this.model,hidePoints:!0,hideLines:!0,colors:i,keys:["duration"],yTickFormat:function(e){return Object(hi.default)(e,2)}}))}}]),DurationTrendWidgetView}(ye.View))||Vo)||Vo;allure.api.addWidget("graph","duration-trend",Bo,Ka);n(202);var zo=n(108),Uo=n.n(zo),Fo=function(e){for(var t=e.length/6|0,n=new Array(t),r=0;r<t;)n[r]="#"+e.slice(6*r,6*++r);return n},Ho=(Fo("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Fo("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),Fo("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),Fo("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),Fo("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),Fo("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),Fo("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),Fo("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),Fo("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),function(e){return bn(e[e.length-1])}),qo=(Ho(new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(Fo)),Ho(new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(Fo)),Ho(new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(Fo)),Ho(new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(Fo)),Ho(new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(Fo)),Ho(new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(Fo)),Ho(new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(Fo)),Ho(new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(Fo)),Ho(new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(Fo)),Ho(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(Fo)),Ho(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(Fo)),Ho(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(Fo)),Ho(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(Fo)),Ho(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(Fo)),Ho(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(Fo)),Ho(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(Fo)),Ho(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(Fo)),Ho(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(Fo)),Ho(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(Fo)),Ho(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(Fo)),Ho(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(Fo)));Ho(new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(Fo)),Ho(new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(Fo)),Ho(new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(Fo)),Ho(new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(Fo)),Ho(new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(Fo)),Ho(new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(Fo)),Vn(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),Vn(cubehelix_cubehelix(-100,.75,.35),cubehelix_cubehelix(80,1.5,.8)),Vn(cubehelix_cubehelix(260,.75,.35),cubehelix_cubehelix(80,1.5,.8)),cubehelix_cubehelix(),color_rgb(),Math.PI,Math.PI;function viridis_ramp(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}viridis_ramp(Fo("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_ramp(Fo("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_ramp(Fo("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_ramp(Fo("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));var Wo,$o=Object(G.e)({chart:".retry-trend__chart"})(Wo=Object(G.b)("retry-trend")(Wo=function(e){function RetryTrendWidgetView(){var e,t;l()(this,RetryTrendWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(RetryTrendWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Uo.a),t}return b()(RetryTrendWidgetView,e),c()(RetryTrendWidgetView,[{key:"onRender",value:function(){var e=this.model.last().get("data"),t=e.retry,n=e.run,r=Math.min(.3+Math.min(t,n)/n,1),a=ordinal(["#4682b4",qo(r)]);this.showChildView("chart",new Xa({model:this.model,keys:["run","retry"],colors:a,hideLines:!0,hidePoints:!0}))}}]),RetryTrendWidgetView}(ye.View))||Wo)||Wo;allure.api.addWidget("graph","retry-trend",$o,Ka);n(203);var Yo,Go=n(109),Xo=n.n(Go),Ko=Object(G.e)({chart:".categories-trend__chart"})(Yo=Object(G.b)("categories-trend")(Yo=function(e){function CategoriesTrendWidgetView(){var e,t;l()(this,CategoriesTrendWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(CategoriesTrendWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Xo.a),t}return b()(CategoriesTrendWidgetView,e),c()(CategoriesTrendWidgetView,[{key:"onRender",value:function(){var e=this.model.sortedKeysByLastValue(),t=ordinal(Object(k.range)(0,1,1/e.length).map(function(e){return qo(1-e)}));this.showChildView("chart",new Xa({model:this.model,keys:e,colors:t,hideLines:!0,hidePoints:!0}))}}]),CategoriesTrendWidgetView}(ye.View))||Yo)||Yo;allure.api.addWidget("graph","categories-trend",Ko,Ka);n(204);var Zo,Jo=n(110),Qo=n.n(Jo),es=Object(G.e)({chart:".summary-widget__chart"})(Zo=function(e){function SummaryWidgetView(){var e,t;l()(this,SummaryWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(SummaryWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Qo.a),t}return b()(SummaryWidgetView,e),c()(SummaryWidgetView,[{key:"onRender",value:function(){this.showChildView("chart",new _o({model:this.model,showLegend:!1}))}},{key:"serializeData",value:function(){var e=this.model.get("testRuns"),t=e&&e.length;return Object.assign(g()(p()(SummaryWidgetView.prototype),"serializeData",this).call(this),{isAggregated:t>1,launchesCount:t})}}]),SummaryWidgetView}(ye.View))||Zo;allure.api.addWidget("widgets","summary",es);n(205);var ts,ns=n(111),rs=n.n(ns),as=Object(G.e)({chart:".history-trend__chart"})(ts=Object(G.b)("history-trend")(ts=function(e){function HistoryTrendWidgetView(){var e,t;l()(this,HistoryTrendWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(HistoryTrendWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",rs.a),t}return b()(HistoryTrendWidgetView,e),c()(HistoryTrendWidgetView,[{key:"onRender",value:function(){this.showChildView("chart",new Xa({model:this.model,hideLines:!0,hidePoints:!0,colors:ordinal(["#fd5a3e","#ffd050","#97cc64","#aaa","#d35ebe"]).domain(C.a),keys:C.a}))}}]),HistoryTrendWidgetView}(ye.View))||ts)||ts;allure.api.addWidget("widgets","history-trend",as,Ka),allure.api.addWidget("graph","history-trend",as,Ka),allure.api.addWidget("widgets","suites",mt.extend({rowTag:"a",title:"widget.suites.name",baseUrl:"suites",showLinks:!0})),allure.api.addWidget("widgets","categories",mt.extend({rowTag:"a",title:"widget.categories.name",baseUrl:"categories",showLinks:!0}));var is,os,ss=n(112),ls=n.n(ss),us=(is=Object(G.c)("click .environment-widget__expand"),os=function(e){function EnvironmentWidget(){var e,t;l()(this,EnvironmentWidget);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(EnvironmentWidget)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ls.a),t}return b()(EnvironmentWidget,e),c()(EnvironmentWidget,[{key:"initialize",value:function(){this.listLimit=5}},{key:"onExpandClick",value:function(){this.listLimit=this.model.get("items").length,this.render()}},{key:"serializeData",value:function(){var e=this.model.get("items");return{items:e.slice(0,this.listLimit),overLimit:e.length>this.listLimit}}}]),EnvironmentWidget}(ye.View),Se()(os.prototype,"onExpandClick",[is],Object.getOwnPropertyDescriptor(os.prototype,"onExpandClick"),os.prototype),os);allure.api.addWidget("widgets","environment",us);var cs=n(113),fs=n.n(cs),hs=function(e){function ExecutorsWidgetView(){var e,t;l()(this,ExecutorsWidgetView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(ExecutorsWidgetView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",fs.a),t}return b()(ExecutorsWidgetView,e),ExecutorsWidgetView}(ye.View);allure.api.addWidget("widgets","executors",hs);var ds,ps=n(114),ms=n.n(ps),gs=Object(G.b)("pane__section")(ds=function(e){function DescriptionView(){var e,t;l()(this,DescriptionView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(DescriptionView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ms.a),t}return b()(DescriptionView,e),c()(DescriptionView,[{key:"serializeData",value:function(){return{descriptionHtml:this.model.get("descriptionHtml")}}}]),DescriptionView}(ye.View))||ds;allure.api.addTestResultBlock(gs,{position:"before"});var vs,bs=n(115),ys=n.n(bs),_s=Object(G.b)("pane__section")(vs=function(e){function TagsView(){var e,t;l()(this,TagsView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(TagsView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ys.a),t}return b()(TagsView,e),c()(TagsView,[{key:"serializeData",value:function(){var e=this.model.get("extra");return{tags:e?e.tags:null}}}]),TagsView}(ye.View))||vs;allure.api.addTestResultBlock(_s,{position:"tag"});var ws,xs=n(116),ks=n.n(xs),Cs=Object(G.b)("pane__section")(ws=function(e){function SeverityView(){var e,t;l()(this,SeverityView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(SeverityView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",ks.a),t}return b()(SeverityView,e),c()(SeverityView,[{key:"serializeData",value:function(){var e=this.model.get("extra");return{categories:e?e.categories:null}}}]),SeverityView}(ye.View))||ws;allure.api.addTestResultBlock(Cs,{position:"tag"});n(206);var Ss,Ts=n(117),Es=n.n(Ts);function getSuccessRate(e){if(!e||!e.statistic||!e.statistic.total)return"unknown";var t,n=e.statistic,r=n.passed,a=n.total;return t=(r||0)/a*100,(Math.floor(100*t)/100).toString()+"%"}var Ms=Object(G.b)("test-result-history")(Ss=function(e){function HistoryView(){var e,t;l()(this,HistoryView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(HistoryView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Es.a),t}return b()(HistoryView,e),c()(HistoryView,[{key:"serializeData",value:function(){var e=this.model.get("extra"),t=e?e.history:null;return{cls:this.className,history:t,successRate:getSuccessRate(t)}}}]),HistoryView}(ye.View))||Ss;allure.api.addTestResultTab("history","testResult.history.name",Ms);n(207);var Os,As,Rs,Ns,Ds=n(118),Vs=n.n(Ds),js=(Os=Object(G.b)("test-result-retries"),As=Object(G.c)("click .retry-row"),Os((Ns=function(e){function RetriesView(){var e,t;l()(this,RetriesView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(RetriesView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Vs.a),t}return b()(RetriesView,e),c()(RetriesView,[{key:"serializeData",value:function(){var e=this.model.get("extra"),t=e?e.retries:null;return{cls:this.className,retries:t}}},{key:"onRetryClick",value:function(e){var t=i()(e.currentTarget).data("uid");Ye.a.toUrl("#testresult/"+t)}}]),RetriesView}(ye.View),Se()(Ns.prototype,"onRetryClick",[As],Object.getOwnPropertyDescriptor(Ns.prototype,"onRetryClick"),Ns.prototype),Rs=Ns))||Rs);allure.api.addTestResultTab("retries","testResult.retries.name",js);var Ps,Ls,Is=n(119),Bs=n.n(Is),zs=Object(G.b)("pane__section")(Ps=function(e){function OwnerView(){var e,t;l()(this,OwnerView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(OwnerView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Bs.a),t}return b()(OwnerView,e),c()(OwnerView,[{key:"serializeData",value:function(){var e=this.model.get("extra");return{owner:e?e.owner:null}}}]),OwnerView}(ye.View))||Ps;allure.api.addTestResultBlock(zs,{position:"before"});var Us=Object(G.b)("pane__section")(Ls=function(e){function SeverityView(){return l()(this,SeverityView),h()(this,p()(SeverityView).apply(this,arguments))}return b()(SeverityView,e),c()(SeverityView,[{key:"template",value:function(e){return e.severity?"".concat(Object(Le.default)("testResult.severity.name"),": ").concat(Object(so.escapeExpression)(e.severity)):""}},{key:"serializeData",value:function(){var e=this.model.get("extra");return{severity:e?e.severity:null}}}]),SeverityView}(ye.View))||Ls;allure.api.addTestResultBlock(Us,{position:"tag"});var Fs,Hs=n(120),qs=n.n(Hs),Ws=Object(G.b)("pane__section")(Fs=function(e){function DurationView(){var e,t;l()(this,DurationView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(DurationView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",qs.a),t}return b()(DurationView,e),c()(DurationView,[{key:"serializeData",value:function(){return{time:this.model.get("time")}}}]),DurationView}(ye.View))||Fs;allure.api.addTestResultBlock(Ws,{position:"tag"});n(208);var $s,Ys,Gs,Xs,Ks=n(121),Zs=n.n(Ks),Js=($s=Object(G.b)("pane__section"),Ys=Object(G.c)("click .environment"),$s((Xs=function(e){function ParametersView(){var e,t;l()(this,ParametersView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(ParametersView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",Zs.a),t}return b()(ParametersView,e),c()(ParametersView,[{key:"serializeData",value:function(){return{parameters:this.model.get("parameters")}}},{key:"onParameterClick",value:function(){this.$(".environment").toggleClass("line-ellipsis",!1)}}]),ParametersView}(ye.View),Se()(Xs.prototype,"onParameterClick",[Ys],Object.getOwnPropertyDescriptor(Xs.prototype,"onParameterClick"),Xs.prototype),Gs=Xs))||Gs);allure.api.addTestResultBlock(Js,{position:"before"});n(209);var Qs,el=n(122),tl=n.n(el),nl=Object(G.b)("pane__section")(Qs=function(e){function LinksView(){var e,t;l()(this,LinksView);for(var n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return t=h()(this,(e=p()(LinksView)).call.apply(e,[this].concat(r))),J()(K()(K()(t)),"template",tl.a),t}return b()(LinksView,e),c()(LinksView,[{key:"serializeData",value:function(){return{links:this.model.get("links")}}}]),LinksView}(ye.View))||Qs;allure.api.addTestResultBlock(nl,{position:"before"}),window.jQuery=i.a,i()(document).ready(function(){return r.a.start()})}]); \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/2eab968ff714447d.txt b/apiAutoTest_v3/report/html/self/data/attachments/2eab968ff714447d.txt new file mode 100644 index 0000000..236e663 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/2eab968ff714447d.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/3e071b7c96abce70.txt b/apiAutoTest_v3/report/html/self/data/attachments/3e071b7c96abce70.txt new file mode 100644 index 0000000..f5c65fc --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/3e071b7c96abce70.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822268133376"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/42c0a1e45c554483.txt b/apiAutoTest_v3/report/html/self/data/attachments/42c0a1e45c554483.txt new file mode 100644 index 0000000..5565013 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/42c0a1e45c554483.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/431c22667e1568a4.txt b/apiAutoTest_v3/report/html/self/data/attachments/431c22667e1568a4.txt new file mode 100644 index 0000000..5bc81da --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/431c22667e1568a4.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822863724544"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/4bd9bae7aefc32b7.txt b/apiAutoTest_v3/report/html/self/data/attachments/4bd9bae7aefc32b7.txt new file mode 100644 index 0000000..36175c6 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/4bd9bae7aefc32b7.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831546815687270400'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/52297b711c29f1c.txt b/apiAutoTest_v3/report/html/self/data/attachments/52297b711c29f1c.txt new file mode 100644 index 0000000..3306fba --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/52297b711c29f1c.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818736529408"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/55249d0cea866f2d.txt b/apiAutoTest_v3/report/html/self/data/attachments/55249d0cea866f2d.txt new file mode 100644 index 0000000..83ef0ba --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/55249d0cea866f2d.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/593ce434feb27412.txt b/apiAutoTest_v3/report/html/self/data/attachments/593ce434feb27412.txt new file mode 100644 index 0000000..8d3463b --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/593ce434feb27412.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821848702976"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/61465377a4dd7876.txt b/apiAutoTest_v3/report/html/self/data/attachments/61465377a4dd7876.txt new file mode 100644 index 0000000..efd525d --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/61465377a4dd7876.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822473654272"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/67c68f16bc2428b5.txt b/apiAutoTest_v3/report/html/self/data/attachments/67c68f16bc2428b5.txt new file mode 100644 index 0000000..236e663 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/67c68f16bc2428b5.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/6b6a9905da9b3349.txt b/apiAutoTest_v3/report/html/self/data/attachments/6b6a9905da9b3349.txt new file mode 100644 index 0000000..2050dd4 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/6b6a9905da9b3349.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822054223872"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/71c542665a48cce.txt b/apiAutoTest_v3/report/html/self/data/attachments/71c542665a48cce.txt new file mode 100644 index 0000000..307e5f0 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/71c542665a48cce.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/7b17b3f7d04f417f.txt b/apiAutoTest_v3/report/html/self/data/attachments/7b17b3f7d04f417f.txt new file mode 100644 index 0000000..564a558 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/7b17b3f7d04f417f.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546823161520128"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/7c8d71418c9387a.txt b/apiAutoTest_v3/report/html/self/data/attachments/7c8d71418c9387a.txt new file mode 100644 index 0000000..6889f1f --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/7c8d71418c9387a.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819197902848"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/82ce2798a1aecc94.txt b/apiAutoTest_v3/report/html/self/data/attachments/82ce2798a1aecc94.txt new file mode 100644 index 0000000..ff0e114 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/82ce2798a1aecc94.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820259061760"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/855857f4b52c603d.txt b/apiAutoTest_v3/report/html/self/data/attachments/855857f4b52c603d.txt new file mode 100644 index 0000000..dca7ecf --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/855857f4b52c603d.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546822989553664"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/90c5e8cdd70dee67.txt b/apiAutoTest_v3/report/html/self/data/attachments/90c5e8cdd70dee67.txt new file mode 100644 index 0000000..fc4d403 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/90c5e8cdd70dee67.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/a45cffcd61fd0fed.txt b/apiAutoTest_v3/report/html/self/data/attachments/a45cffcd61fd0fed.txt new file mode 100644 index 0000000..9232d1c --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/a45cffcd61fd0fed.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819734773760"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/a51bfd87e14f0f6f.txt b/apiAutoTest_v3/report/html/self/data/attachments/a51bfd87e14f0f6f.txt new file mode 100644 index 0000000..cc5fa75 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/a51bfd87e14f0f6f.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546819952877568"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/aa3c6694b1f1ddb6.txt b/apiAutoTest_v3/report/html/self/data/attachments/aa3c6694b1f1ddb6.txt new file mode 100644 index 0000000..f907b58 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/aa3c6694b1f1ddb6.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjQsImlhdCI6MTcyNTUwOTc2NH0.J_HOuG3fdAoTTnfa4mILK97aLZhTY0B32tacncdLvsupfuEbvQz61Xpv8MTiSorLhkjerDTNengw-rbASx7SNA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/ba84caebf1721f87.txt b/apiAutoTest_v3/report/html/self/data/attachments/ba84caebf1721f87.txt new file mode 100644 index 0000000..67a84d8 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/ba84caebf1721f87.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/be46edc8297ef646.txt b/apiAutoTest_v3/report/html/self/data/attachments/be46edc8297ef646.txt new file mode 100644 index 0000000..d885d45 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/be46edc8297ef646.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/c136c3aa7037d413.txt b/apiAutoTest_v3/report/html/self/data/attachments/c136c3aa7037d413.txt new file mode 100644 index 0000000..b71e248 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/c136c3aa7037d413.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822700146688"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/c2f0527f03425ee7.txt b/apiAutoTest_v3/report/html/self/data/attachments/c2f0527f03425ee7.txt new file mode 100644 index 0000000..cf8dae2 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/c2f0527f03425ee7.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/c54e1459674203fa.txt b/apiAutoTest_v3/report/html/self/data/attachments/c54e1459674203fa.txt new file mode 100644 index 0000000..6a2cc48 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/c54e1459674203fa.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818946244608"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/c984b85801c5a84.txt b/apiAutoTest_v3/report/html/self/data/attachments/c984b85801c5a84.txt new file mode 100644 index 0000000..271d135 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/c984b85801c5a84.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546820129038336"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/cd95a46420d895b2.txt b/apiAutoTest_v3/report/html/self/data/attachments/cd95a46420d895b2.txt new file mode 100644 index 0000000..f934aaf --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/cd95a46420d895b2.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820485554176"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/d884741f4f258e0a.txt b/apiAutoTest_v3/report/html/self/data/attachments/d884741f4f258e0a.txt new file mode 100644 index 0000000..8c31680 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/d884741f4f258e0a.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819416006656"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/db341812f8b09b83.txt b/apiAutoTest_v3/report/html/self/data/attachments/db341812f8b09b83.txt new file mode 100644 index 0000000..3110b62 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/db341812f8b09b83.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821634793472"} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/db78e07989a10f8b.txt b/apiAutoTest_v3/report/html/self/data/attachments/db78e07989a10f8b.txt new file mode 100644 index 0000000..bbd8f99 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/db78e07989a10f8b.txt @@ -0,0 +1 @@ +[32mINFO [0m 张三:test_bpm.py:57 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/attachments/e31eae414fcd9ac3.txt b/apiAutoTest_v3/report/html/self/data/attachments/e31eae414fcd9ac3.txt new file mode 100644 index 0000000..d885d45 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/attachments/e31eae414fcd9ac3.txt @@ -0,0 +1 @@ +[31m[1mERROR [0m 张三:test_bpm.py:54 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/behaviors.csv b/apiAutoTest_v3/report/html/self/data/behaviors.csv new file mode 100644 index 0000000..e4117fc --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/behaviors.csv @@ -0,0 +1,2 @@ +"Epic","Feature","Story","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN" +"","","","23","0","8","0","0" diff --git a/apiAutoTest_v3/report/html/self/data/behaviors.json b/apiAutoTest_v3/report/html/self/data/behaviors.json new file mode 100644 index 0000000..7008e80 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/behaviors.json @@ -0,0 +1,408 @@ +{ + "uid" : "b1a8273437954620fa374b796ffaacdd", + "name" : "behaviors", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "uid" : "1b1ea3622c7cbb0e", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "uid" : "80a39a45c3baceac", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "uid" : "827168807ae28c0", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "uid" : "68edada79f2c2c5c", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}", "{'message': '加入成功'}", "'POST'", "'query'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "uid" : "400f0b538799da08", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}", "{'message': '保存组织参数成功!'}", "'POST'", "'query|json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "uid" : "3c7a94555e07633b", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "uid" : "b7ed8bb51662c63b", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "65bf4ee0f2e87568", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "da61aa4a47447f1", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "6c322c83493913f2", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "da0b4417fe54e65b", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "8c18ed11d24a69cf", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "c56320550a22c0db", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "34ae4840c9eb7a0a", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "9adb4eda7ef664b4", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "35d5cf5672473543", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "ba062d37a9003d15", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "46efc3b9e725d261", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "ad8b5e83abae28e2", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "a0e7fbd23128cdaf", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "981f584b9cbf47d6", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "ead755efe8123e8", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "620574a4f8cb8351", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "10d62acf0e332229", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "800d22e4a7f18199", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "75224b36c281fcd6", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "bae95a6a19479944", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "passed", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "91abfb7f4e48e0a7", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "83d8b1f10123a10c", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "8727397adfee82f7", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "cbcafb24c8f79dae", + "parentUid" : "b1a8273437954620fa374b796ffaacdd", + "status" : "failed", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/categories.csv b/apiAutoTest_v3/report/html/self/data/categories.csv new file mode 100644 index 0000000..a0dd610 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/categories.csv @@ -0,0 +1,2 @@ +"Category","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN" +"Product defects","23","0","0","0","0" diff --git a/apiAutoTest_v3/report/html/self/data/categories.json b/apiAutoTest_v3/report/html/self/data/categories.json new file mode 100644 index 0000000..36739e4 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/categories.json @@ -0,0 +1,312 @@ +{ + "uid" : "4b4757e66a1912dae1a509f688f20b0f", + "name" : "categories", + "children" : [ { + "name" : "Product defects", + "children" : [ { + "name" : "AssertionError: 断言失败", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "uid" : "1b1ea3622c7cbb0e", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "uid" : "80a39a45c3baceac", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "uid" : "827168807ae28c0", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "uid" : "3c7a94555e07633b", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "uid" : "b7ed8bb51662c63b", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "da61aa4a47447f1", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "6c322c83493913f2", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "da0b4417fe54e65b", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "8c18ed11d24a69cf", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "c56320550a22c0db", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "35d5cf5672473543", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "ba062d37a9003d15", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "46efc3b9e725d261", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "ad8b5e83abae28e2", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "981f584b9cbf47d6", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "ead755efe8123e8", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "620574a4f8cb8351", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "10d62acf0e332229", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "800d22e4a7f18199", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "91abfb7f4e48e0a7", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "83d8b1f10123a10c", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "8727397adfee82f7", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "cbcafb24c8f79dae", + "parentUid" : "19135fd4a1c65086de1dc2a02ed9d4e0", + "status" : "failed", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ], + "uid" : "19135fd4a1c65086de1dc2a02ed9d4e0" + } ], + "uid" : "8fb3a91ba5aaf9de24cc8a92edc82b5d" + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/packages.json b/apiAutoTest_v3/report/html/self/data/packages.json new file mode 100644 index 0000000..f310e77 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/packages.json @@ -0,0 +1,424 @@ +{ + "uid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", + "name" : "packages", + "children" : [ { + "name" : "test_case", + "children" : [ { + "name" : "test_demo.test_bpm", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "uid" : "1b1ea3622c7cbb0e", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "failed", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "uid" : "80a39a45c3baceac", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "failed", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "uid" : "827168807ae28c0", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "failed", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "uid" : "68edada79f2c2c5c", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "passed", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}", "{'message': '加入成功'}", "'POST'", "'query'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "uid" : "400f0b538799da08", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "passed", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}", "{'message': '保存组织参数成功!'}", "'POST'", "'query|json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "uid" : "3c7a94555e07633b", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "failed", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "uid" : "b7ed8bb51662c63b", + "parentUid" : "408359e4381982766f71d289f282adbb", + "status" : "failed", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] + } ], + "uid" : "test_demo.test_bpm" + }, { + "name" : "test_lao_zhang.test_bpm", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "65bf4ee0f2e87568", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "passed", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "da61aa4a47447f1", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "6c322c83493913f2", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "da0b4417fe54e65b", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "8c18ed11d24a69cf", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "c56320550a22c0db", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "34ae4840c9eb7a0a", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "passed", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "9adb4eda7ef664b4", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "passed", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "35d5cf5672473543", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "ba062d37a9003d15", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "46efc3b9e725d261", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "ad8b5e83abae28e2", + "parentUid" : "dc708df6f511ac1e3a3109b43cee7add", + "status" : "failed", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ], + "uid" : "test_lao_zhang.test_bpm" + }, { + "name" : "test_lisi.test_bpm", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "a0e7fbd23128cdaf", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "passed", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "981f584b9cbf47d6", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "ead755efe8123e8", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "620574a4f8cb8351", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "10d62acf0e332229", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "800d22e4a7f18199", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "75224b36c281fcd6", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "passed", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "bae95a6a19479944", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "passed", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "91abfb7f4e48e0a7", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "83d8b1f10123a10c", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "8727397adfee82f7", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "cbcafb24c8f79dae", + "parentUid" : "dd7dee3c492b4ad3464c8b0d74493779", + "status" : "failed", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ], + "uid" : "test_lisi.test_bpm" + } ], + "uid" : "3b2e467b921b0ea8d4803b9c79d92d0c" + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/suites.csv b/apiAutoTest_v3/report/html/self/data/suites.csv new file mode 100644 index 0000000..c8b7a2e --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/suites.csv @@ -0,0 +1,32 @@ +"Status","Start Time","Stop Time","Duration in ms","Parent Suite","Suite","Sub Suite","Test Class","Test Method","Name","Description" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","19","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]","" +"passed","Thu Sep 05 12:17:53 CST 2024","Thu Sep 05 12:17:54 CST 2024","36","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]","" +"passed","Thu Sep 05 12:17:53 CST 2024","Thu Sep 05 12:17:53 CST 2024","44","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","19","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]","" +"passed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","30","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","21","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","20","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","17","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]","" +"passed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","29","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","26","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","17","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]","" +"passed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","31","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","27","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","28","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]","" +"failed","Thu Sep 05 12:17:53 CST 2024","Thu Sep 05 12:17:53 CST 2024","50","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]","" +"failed","Thu Sep 05 12:17:53 CST 2024","Thu Sep 05 12:17:53 CST 2024","21","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]","" +"passed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","29","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","23","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","43","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]","" +"passed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","31","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","22","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","41","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","16","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]","" +"failed","Thu Sep 05 12:17:53 CST 2024","Thu Sep 05 12:17:53 CST 2024","45","test_case.test_demo","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","28","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","27","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","28","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:55 CST 2024","27","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]","" +"passed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","29","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]","" +"failed","Thu Sep 05 12:17:54 CST 2024","Thu Sep 05 12:17:54 CST 2024","28","test_case.test_lao_zhang","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]","" +"failed","Thu Sep 05 12:17:55 CST 2024","Thu Sep 05 12:17:55 CST 2024","39","test_case.test_lisi","test_bpm","TestBPM","","","test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]","" diff --git a/apiAutoTest_v3/report/html/self/data/suites.json b/apiAutoTest_v3/report/html/self/data/suites.json new file mode 100644 index 0000000..ba6800b --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/suites.json @@ -0,0 +1,444 @@ +{ + "uid" : "98d3104e051c652961429bf95fa0b5d6", + "name" : "suites", + "children" : [ { + "name" : "test_case.test_demo", + "children" : [ { + "name" : "test_bpm", + "children" : [ { + "name" : "TestBPM", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "uid" : "1b1ea3622c7cbb0e", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "failed", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "uid" : "80a39a45c3baceac", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "failed", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "uid" : "827168807ae28c0", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "failed", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "uid" : "68edada79f2c2c5c", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "passed", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}", "{'message': '加入成功'}", "'POST'", "'query'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "uid" : "400f0b538799da08", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "passed", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}", "{'message': '保存组织参数成功!'}", "'POST'", "'query|json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "uid" : "3c7a94555e07633b", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "failed", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "uid" : "b7ed8bb51662c63b", + "parentUid" : "ef69bf2bb1b41f3ca3f11617396f6a81", + "status" : "failed", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] + } ], + "uid" : "ef69bf2bb1b41f3ca3f11617396f6a81" + } ], + "uid" : "5f023a47dd31329b45d44784c00131e4" + } ], + "uid" : "7a8b7e46177bbd4d1efa8551fea4a38d" + }, { + "name" : "test_case.test_lao_zhang", + "children" : [ { + "name" : "test_bpm", + "children" : [ { + "name" : "TestBPM", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "65bf4ee0f2e87568", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "passed", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "da61aa4a47447f1", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "6c322c83493913f2", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "da0b4417fe54e65b", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "8c18ed11d24a69cf", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "c56320550a22c0db", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "34ae4840c9eb7a0a", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "passed", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "9adb4eda7ef664b4", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "passed", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "35d5cf5672473543", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "ba062d37a9003d15", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "46efc3b9e725d261", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "ad8b5e83abae28e2", + "parentUid" : "4f6941503e1db6580f150dde2427adc4", + "status" : "failed", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ], + "uid" : "4f6941503e1db6580f150dde2427adc4" + } ], + "uid" : "460caf91eafa6285e04f12bdb4dacd89" + } ], + "uid" : "f807542b498ef7f359918df354af54f0" + }, { + "name" : "test_case.test_lisi", + "children" : [ { + "name" : "test_bpm", + "children" : [ { + "name" : "TestBPM", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "a0e7fbd23128cdaf", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "passed", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "981f584b9cbf47d6", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "ead755efe8123e8", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "620574a4f8cb8351", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "10d62acf0e332229", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "800d22e4a7f18199", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "75224b36c281fcd6", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "passed", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "bae95a6a19479944", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "passed", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "91abfb7f4e48e0a7", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "83d8b1f10123a10c", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "8727397adfee82f7", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "cbcafb24c8f79dae", + "parentUid" : "f93dc438f21603c69f64d3794be05f11", + "status" : "failed", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + } ], + "uid" : "f93dc438f21603c69f64d3794be05f11" + } ], + "uid" : "97d31354c3c72ab56901e06e592db3e9" + } ], + "uid" : "d6bee4aab82b7aa6ffaaa10289749982" + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/10d62acf0e332229.json b/apiAutoTest_v3/report/html/self/data/test-cases/10d62acf0e332229.json new file mode 100644 index 0000000..026e9b7 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/10d62acf0e332229.json @@ -0,0 +1,179 @@ +{ + "uid" : "10d62acf0e332229", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "4479ea4b1d75c6673685eb0a9d802580", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C27E0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "3e071b7c96abce70", + "name" : "log", + "source" : "3e071b7c96abce70.txt", + "type" : "text/plain", + "size" : 499 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "10d62acf0e332229.json", + "parameterValues" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/1b1ea3622c7cbb0e.json b/apiAutoTest_v3/report/html/self/data/test-cases/1b1ea3622c7cbb0e.json new file mode 100644 index 0000000..ababd45 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/1b1ea3622c7cbb0e.json @@ -0,0 +1,179 @@ +{ + "uid" : "1b1ea3622c7cbb0e", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "a6f6de20f1d47502e15e1b34c901fc80", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加维度成功' == '添加维度成功!'\nE \nE - 添加维度成功!\nE ? -\nE + 添加维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加维度成功' == '添加维度成功!'\nE \nE - 添加维度成功!\nE ? -\nE + 添加维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876866AB0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/addDem', method = 'post', mime = 'application/json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = {'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "c2f0527f03425ee7", + "name" : "log", + "source" : "c2f0527f03425ee7.txt", + "type" : "text/plain", + "size" : 392 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}" + }, { + "name" : "expect_data", + "value" : "{'message': '添加维度成功'}" + }, { + "name" : "method", + "value" : "'post'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}" + }, { + "name" : "sql_type", + "value" : "'delete'" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "1b1ea3622c7cbb0e.json", + "parameterValues" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/34ae4840c9eb7a0a.json b/apiAutoTest_v3/report/html/self/data/test-cases/34ae4840c9eb7a0a.json new file mode 100644 index 0000000..5e7c32e --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/34ae4840c9eb7a0a.json @@ -0,0 +1,171 @@ +{ + "uid" : "34ae4840c9eb7a0a", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "9cdfc96e3129cbb4c7fa5ec8d0c6d4f1", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "a51bfd87e14f0f6f", + "name" : "log", + "source" : "a51bfd87e14f0f6f.txt", + "type" : "text/plain", + "size" : 315 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': ''}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "34ae4840c9eb7a0a.json", + "parameterValues" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/35d5cf5672473543.json b/apiAutoTest_v3/report/html/self/data/test-cases/35d5cf5672473543.json new file mode 100644 index 0000000..47b7712 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/35d5cf5672473543.json @@ -0,0 +1,179 @@ +{ + "uid" : "35d5cf5672473543", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "a4925b7a43beba15ce710d3a2d8ba3f6", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D250>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "82ce2798a1aecc94", + "name" : "log", + "source" : "82ce2798a1aecc94.txt", + "type" : "text/plain", + "size" : 962 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'post'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "35d5cf5672473543.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/3c7a94555e07633b.json b/apiAutoTest_v3/report/html/self/data/test-cases/3c7a94555e07633b.json new file mode 100644 index 0000000..2980ab2 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/3c7a94555e07633b.json @@ -0,0 +1,179 @@ +{ + "uid" : "3c7a94555e07633b", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "5b9cec47ee0edd555ba6e1220ea0e625", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...dOrg\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...dOrg\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876427290>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/org/v1/org/deleteOrg', method = 'POST', mime = 'json', case_data = 'testAddOrg', expect_data = {'message': '删除组织成功!'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "55249d0cea866f2d", + "name" : "log", + "source" : "55249d0cea866f2d.txt", + "type" : "text/plain", + "size" : 348 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "'testAddOrg'" + }, { + "name" : "expect_data", + "value" : "{'message': '删除组织成功!'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "3c7a94555e07633b.json", + "parameterValues" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/400f0b538799da08.json b/apiAutoTest_v3/report/html/self/data/test-cases/400f0b538799da08.json new file mode 100644 index 0000000..e6d0ee7 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/400f0b538799da08.json @@ -0,0 +1,171 @@ +{ + "uid" : "400f0b538799da08", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "fd1f5cf8cf0975a36ecfc6a676bd4dfa", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "db78e07989a10f8b", + "name" : "log", + "source" : "db78e07989a10f8b.txt", + "type" : "text/plain", + "size" : 403 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}" + }, { + "name" : "expect_data", + "value" : "{'message': '保存组织参数成功!'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'query|json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "400f0b538799da08.json", + "parameterValues" : [ "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}", "{'message': '保存组织参数成功!'}", "'POST'", "'query|json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/46efc3b9e725d261.json b/apiAutoTest_v3/report/html/self/data/test-cases/46efc3b9e725d261.json new file mode 100644 index 0000000..9023789 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/46efc3b9e725d261.json @@ -0,0 +1,179 @@ +{ + "uid" : "46efc3b9e725d261", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "4365a6de5e8b42ab1bd856faf33b87f7", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A69800>('message')\nE + where <built-in method get of dict object at 0x0000020876A69800> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A69800>('message')\nE + where <built-in method get of dict object at 0x0000020876A69800> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876335910>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "67c68f16bc2428b5", + "name" : "log", + "source" : "67c68f16bc2428b5.txt", + "type" : "text/plain", + "size" : 735 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "46efc3b9e725d261.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/620574a4f8cb8351.json b/apiAutoTest_v3/report/html/self/data/test-cases/620574a4f8cb8351.json new file mode 100644 index 0000000..5333623 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/620574a4f8cb8351.json @@ -0,0 +1,179 @@ +{ + "uid" : "620574a4f8cb8351", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "fc03ee40552f426cfe867dad8cd957fd", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3860>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "6b6a9905da9b3349", + "name" : "log", + "source" : "6b6a9905da9b3349.txt", + "type" : "text/plain", + "size" : 543 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "620574a4f8cb8351.json", + "parameterValues" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/65bf4ee0f2e87568.json b/apiAutoTest_v3/report/html/self/data/test-cases/65bf4ee0f2e87568.json new file mode 100644 index 0000000..7802218 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/65bf4ee0f2e87568.json @@ -0,0 +1,171 @@ +{ + "uid" : "65bf4ee0f2e87568", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "65755708ce0e8df98768842417beddc8", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "aa3c6694b1f1ddb6", + "name" : "log", + "source" : "aa3c6694b1f1ddb6.txt", + "type" : "text/plain", + "size" : 804 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "65bf4ee0f2e87568.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/68edada79f2c2c5c.json b/apiAutoTest_v3/report/html/self/data/test-cases/68edada79f2c2c5c.json new file mode 100644 index 0000000..ac07d92 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/68edada79f2c2c5c.json @@ -0,0 +1,171 @@ +{ + "uid" : "68edada79f2c2c5c", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "5945f99868ec59904be0e0c99840002e", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "71c542665a48cce", + "name" : "log", + "source" : "71c542665a48cce.txt", + "type" : "text/plain", + "size" : 322 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}" + }, { + "name" : "expect_data", + "value" : "{'message': '加入成功'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'query'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "68edada79f2c2c5c.json", + "parameterValues" : [ "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}", "{'message': '加入成功'}", "'POST'", "'query'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/6c322c83493913f2.json b/apiAutoTest_v3/report/html/self/data/test-cases/6c322c83493913f2.json new file mode 100644 index 0000000..2efae59 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/6c322c83493913f2.json @@ -0,0 +1,179 @@ +{ + "uid" : "6c322c83493913f2", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "fb4addf01045fbe8c5cdee39d26ad4eb", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DA60>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "c54e1459674203fa", + "name" : "log", + "source" : "c54e1459674203fa.txt", + "type" : "text/plain", + "size" : 507 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "6c322c83493913f2.json", + "parameterValues" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/75224b36c281fcd6.json b/apiAutoTest_v3/report/html/self/data/test-cases/75224b36c281fcd6.json new file mode 100644 index 0000000..0ebf059 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/75224b36c281fcd6.json @@ -0,0 +1,171 @@ +{ + "uid" : "75224b36c281fcd6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "8a6f5940a978fd4ecaa53e97a35ae776", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "c136c3aa7037d413", + "name" : "log", + "source" : "c136c3aa7037d413.txt", + "type" : "text/plain", + "size" : 315 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': ''}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "75224b36c281fcd6.json", + "parameterValues" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/800d22e4a7f18199.json b/apiAutoTest_v3/report/html/self/data/test-cases/800d22e4a7f18199.json new file mode 100644 index 0000000..8940b3b --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/800d22e4a7f18199.json @@ -0,0 +1,179 @@ +{ + "uid" : "800d22e4a7f18199", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "878a8b6a3f33c260878ce369810ee073", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2360>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "61465377a4dd7876", + "name" : "log", + "source" : "61465377a4dd7876.txt", + "type" : "text/plain", + "size" : 506 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "800d22e4a7f18199.json", + "parameterValues" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/80a39a45c3baceac.json b/apiAutoTest_v3/report/html/self/data/test-cases/80a39a45c3baceac.json new file mode 100644 index 0000000..3a94d69 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/80a39a45c3baceac.json @@ -0,0 +1,179 @@ +{ + "uid" : "80a39a45c3baceac", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "15d2daeb579bb5b1c6274efce6552f25", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '更新维度成功' == '更新维度成功!'\nE \nE - 更新维度成功!\nE ? -\nE + 更新维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '更新维度成功' == '更新维度成功!'\nE \nE - 更新维度成功!\nE ? -\nE + 更新维度成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020873919280>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/updateDem', method = 'put', mime = 'json'\ncase_data = {'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, expect_data = {'message': '更新维度成功'}\nsql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "90c5e8cdd70dee67", + "name" : "log", + "source" : "90c5e8cdd70dee67.txt", + "type" : "text/plain", + "size" : 386 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}" + }, { + "name" : "expect_data", + "value" : "{'message': '更新维度成功'}" + }, { + "name" : "method", + "value" : "'put'" + }, { + "name" : "mime", + "value" : "'json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "80a39a45c3baceac.json", + "parameterValues" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/827168807ae28c0.json b/apiAutoTest_v3/report/html/self/data/test-cases/827168807ae28c0.json new file mode 100644 index 0000000..916843f --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/827168807ae28c0.json @@ -0,0 +1,179 @@ +{ + "uid" : "827168807ae28c0", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "8601057ef64fcd13fa3bee37103323a1", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加组织成功' == '添加组织成功!'\nE \nE - 添加组织成功!\nE ? -\nE + 添加组织成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '添加组织成功' == '添加组织成功!'\nE \nE - 添加组织成功!\nE ? -\nE + 添加组织成功\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x000002087641A720>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>, url = 'http://36.139.193.99:8088/api/org/v1/org/addOrg'\nmethod = 'POST', mime = 'json', case_data = {'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', ...}\nexpect_data = {'message': '添加组织成功'}, sql_type = 'delete|select'\nsql_data = {'delete': 'delete from uc_org where CODE_=\"testAddOrg\";', 'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; '}\nupdate_key = 'demId'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "ba84caebf1721f87", + "name" : "log", + "source" : "ba84caebf1721f87.txt", + "type" : "text/plain", + "size" : 456 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}" + }, { + "name" : "expect_data", + "value" : "{'message': '添加组织成功'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'json'" + }, { + "name" : "sql_data", + "value" : "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}" + }, { + "name" : "sql_type", + "value" : "'delete|select'" + }, { + "name" : "update_key", + "value" : "'demId'" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "827168807ae28c0.json", + "parameterValues" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/83d8b1f10123a10c.json b/apiAutoTest_v3/report/html/self/data/test-cases/83d8b1f10123a10c.json new file mode 100644 index 0000000..64fe663 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/83d8b1f10123a10c.json @@ -0,0 +1,179 @@ +{ + "uid" : "83d8b1f10123a10c", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "9b37711dbaecfc386d6840f06e7e961c", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C1010>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "7b17b3f7d04f417f", + "name" : "log", + "source" : "7b17b3f7d04f417f.txt", + "type" : "text/plain", + "size" : 358 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': '123456'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "83d8b1f10123a10c.json", + "parameterValues" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/8727397adfee82f7.json b/apiAutoTest_v3/report/html/self/data/test-cases/8727397adfee82f7.json new file mode 100644 index 0000000..76b1246 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/8727397adfee82f7.json @@ -0,0 +1,179 @@ +{ + "uid" : "8727397adfee82f7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "4f9df20ffdc1503910911ac0849dd913", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A9B1C0>('message')\nE + where <built-in method get of dict object at 0x0000020876A9B1C0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000020876A9B1C0>('message')\nE + where <built-in method get of dict object at 0x0000020876A9B1C0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3E60>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "2eab968ff714447d", + "name" : "log", + "source" : "2eab968ff714447d.txt", + "type" : "text/plain", + "size" : 735 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "8727397adfee82f7.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/8c18ed11d24a69cf.json b/apiAutoTest_v3/report/html/self/data/test-cases/8c18ed11d24a69cf.json new file mode 100644 index 0000000..a018aa9 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/8c18ed11d24a69cf.json @@ -0,0 +1,179 @@ +{ + "uid" : "8c18ed11d24a69cf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "a175574a4d035c584ab8478e07968208", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DFD0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'a'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "d884741f4f258e0a", + "name" : "log", + "source" : "d884741f4f258e0a.txt", + "type" : "text/plain", + "size" : 499 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "8c18ed11d24a69cf.json", + "parameterValues" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/91abfb7f4e48e0a7.json b/apiAutoTest_v3/report/html/self/data/test-cases/91abfb7f4e48e0a7.json new file mode 100644 index 0000000..e6b7650 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/91abfb7f4e48e0a7.json @@ -0,0 +1,179 @@ +{ + "uid" : "91abfb7f4e48e0a7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "66b67242a399356d7f6f4ce06fbff864", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'post'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...aEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn', 'username': 'admin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "855857f4b52c603d", + "name" : "log", + "source" : "855857f4b52c603d.txt", + "type" : "text/plain", + "size" : 962 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'post'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "91abfb7f4e48e0a7.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/981f584b9cbf47d6.json b/apiAutoTest_v3/report/html/self/data/test-cases/981f584b9cbf47d6.json new file mode 100644 index 0000000..7fa8134 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/981f584b9cbf47d6.json @@ -0,0 +1,179 @@ +{ + "uid" : "981f584b9cbf47d6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "20a9dde76564254d92ac1acd705592d1", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C3B90>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "db341812f8b09b83", + "name" : "log", + "source" : "db341812f8b09b83.txt", + "type" : "text/plain", + "size" : 498 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "981f584b9cbf47d6.json", + "parameterValues" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/9adb4eda7ef664b4.json b/apiAutoTest_v3/report/html/self/data/test-cases/9adb4eda7ef664b4.json new file mode 100644 index 0000000..c4ff05f --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/9adb4eda7ef664b4.json @@ -0,0 +1,171 @@ +{ + "uid" : "9adb4eda7ef664b4", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "f3de7943a90f208dcf1743488a8f191d", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "c984b85801c5a84", + "name" : "log", + "source" : "c984b85801c5a84.txt", + "type" : "text/plain", + "size" : 324 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': '#!$!@#!@#'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "9adb4eda7ef664b4.json", + "parameterValues" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/a0e7fbd23128cdaf.json b/apiAutoTest_v3/report/html/self/data/test-cases/a0e7fbd23128cdaf.json new file mode 100644 index 0000000..2a64120 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/a0e7fbd23128cdaf.json @@ -0,0 +1,171 @@ +{ + "uid" : "a0e7fbd23128cdaf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "7f0e6cd414aa2df632599593553f643f", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "42c0a1e45c554483", + "name" : "log", + "source" : "42c0a1e45c554483.txt", + "type" : "text/plain", + "size" : 804 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "a0e7fbd23128cdaf.json", + "parameterValues" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/ad8b5e83abae28e2.json b/apiAutoTest_v3/report/html/self/data/test-cases/ad8b5e83abae28e2.json new file mode 100644 index 0000000..145738c --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/ad8b5e83abae28e2.json @@ -0,0 +1,179 @@ +{ + "uid" : "ad8b5e83abae28e2", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "b410abf76c32aa74be9f6d0484c2321c", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876A6BEC0>('message')\nE + where <built-in method get of dict object at 0x0000020876A6BEC0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876A6BEC0>('message')\nE + where <built-in method get of dict object at 0x0000020876A6BEC0> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x0000020876413260>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "be46edc8297ef646", + "name" : "log", + "source" : "be46edc8297ef646.txt", + "type" : "text/plain", + "size" : 489 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "None" + }, { + "name" : "expect_data", + "value" : "{'message': '刷新token成功'}" + }, { + "name" : "method", + "value" : "'GET'" + }, { + "name" : "mime", + "value" : "None" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/refresh'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "ad8b5e83abae28e2.json", + "parameterValues" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/b7ed8bb51662c63b.json b/apiAutoTest_v3/report/html/self/data/test-cases/b7ed8bb51662c63b.json new file mode 100644 index 0000000..408516f --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/b7ed8bb51662c63b.json @@ -0,0 +1,179 @@ +{ + "uid" : "b7ed8bb51662c63b", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "fullName" : "test_case.test_demo.test_bpm.TestBPM#test_bpm", + "historyId" : "e2d18f98d0b8345269ccaac9d47e0009", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功!' == '【requestsAdd...度下存在组织,不允许删除 '\nE \nE - 【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 \nE + 删除维度成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_req", + "time" : { + "start" : 1725509873455, + "stop" : 1725509873501, + "duration" : 46 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509873410, + "stop" : 1725509873455, + "duration" : 45 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功!' == '【requestsAdd...度下存在组织,不允许删除 '\nE \nE - 【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 \nE + 删除维度成功!\n\ntest_case\\test_demo\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_demo.test_bpm.TestBPM object at 0x0000020876313BF0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208763FD310>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000020876411130>\nurl = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', method = 'delete', mime = 'query', case_data = {'ids': '1831546815687270400'}\nexpect_data = {'message': '删除维度成功!'}, sql_type = 'select', sql_data = {'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_demo\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "4bd9bae7aefc32b7", + "name" : "log", + "source" : "4bd9bae7aefc32b7.txt", + "type" : "text/plain", + "size" : 382 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875451, + "stop" : 1725509875451, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875453, + "stop" : 1725509875453, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_demo" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_demo.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'ids': '需要更新'}" + }, { + "name" : "expect_data", + "value" : "{'message': '删除维度成功!'}" + }, { + "name" : "method", + "value" : "'delete'" + }, { + "name" : "mime", + "value" : "'query'" + }, { + "name" : "sql_data", + "value" : "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}" + }, { + "name" : "sql_type", + "value" : "'select'" + }, { + "name" : "update_key", + "value" : "'ids'" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "b7ed8bb51662c63b.json", + "parameterValues" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/ba062d37a9003d15.json b/apiAutoTest_v3/report/html/self/data/test-cases/ba062d37a9003d15.json new file mode 100644 index 0000000..9a52b25 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/ba062d37a9003d15.json @@ -0,0 +1,179 @@ +{ + "uid" : "ba062d37a9003d15", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "0cdf44136da9a3115d7402669edf9e44", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '解密密码异常,请检查RSA公钥和私钥配置'\nE \nE - 解密密码异常,请检查RSA公钥和私钥配置\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DE20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json', case_data = {'password': '123456', 'username': 'admin'}, expect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None\nupdate_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "cd95a46420d895b2", + "name" : "log", + "source" : "cd95a46420d895b2.txt", + "type" : "text/plain", + "size" : 358 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': '123456'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "ba062d37a9003d15.json", + "parameterValues" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/bae95a6a19479944.json b/apiAutoTest_v3/report/html/self/data/test-cases/bae95a6a19479944.json new file mode 100644 index 0000000..8801ac4 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/bae95a6a19479944.json @@ -0,0 +1,171 @@ +{ + "uid" : "bae95a6a19479944", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "4f9935fe474283bd57d587585b81a84e", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "status" : "passed", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "passed", + "steps" : [ ], + "attachments" : [ { + "uid" : "431c22667e1568a4", + "name" : "log", + "source" : "431c22667e1568a4.txt", + "type" : "text/plain", + "size" : 324 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'admin', 'password': '#!$!@#!@#'}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ ], + "tags" : [ ] + }, + "source" : "bae95a6a19479944.json", + "parameterValues" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/c56320550a22c0db.json b/apiAutoTest_v3/report/html/self/data/test-cases/c56320550a22c0db.json new file mode 100644 index 0000000..eda0a2e --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/c56320550a22c0db.json @@ -0,0 +1,179 @@ +{ + "uid" : "c56320550a22c0db", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "8eb7301a32c31c1993acb65490cebb5d", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688D4C0>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminxyz'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "a45cffcd61fd0fed", + "name" : "log", + "source" : "a45cffcd61fd0fed.txt", + "type" : "text/plain", + "size" : 506 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "c56320550a22c0db.json", + "parameterValues" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/cbcafb24c8f79dae.json b/apiAutoTest_v3/report/html/self/data/test-cases/cbcafb24c8f79dae.json new file mode 100644 index 0000000..7af7f6b --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/cbcafb24c8f79dae.json @@ -0,0 +1,179 @@ +{ + "uid" : "cbcafb24c8f79dae", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "128729b1e005cfdd6f14c1aa881b6157", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876AA1A80>('message')\nE + where <built-in method get of dict object at 0x0000020876AA1A80> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x0000020876AA1A80>('message')\nE + where <built-in method get of dict object at 0x0000020876AA1A80> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...UsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768668A0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/refresh', method = 'GET'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "e31eae414fcd9ac3", + "name" : "log", + "source" : "e31eae414fcd9ac3.txt", + "type" : "text/plain", + "size" : 489 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "None" + }, { + "name" : "expect_data", + "value" : "{'message': '刷新token成功'}" + }, { + "name" : "method", + "value" : "'GET'" + }, { + "name" : "mime", + "value" : "None" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/refresh'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "cbcafb24c8f79dae.json", + "parameterValues" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/da0b4417fe54e65b.json b/apiAutoTest_v3/report/html/self/data/test-cases/da0b4417fe54e65b.json new file mode 100644 index 0000000..138824b --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/da0b4417fe54e65b.json @@ -0,0 +1,179 @@ +{ + "uid" : "da0b4417fe54e65b", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "63d2c1d0245c2602497f67b56e03a018", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688DB20>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQraz...2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': 'adminadminadminadminadminadminadminadminadmin'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "7c8d71418c9387a", + "name" : "log", + "source" : "7c8d71418c9387a.txt", + "type" : "text/plain", + "size" : 543 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "da0b4417fe54e65b.json", + "parameterValues" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/da61aa4a47447f1.json b/apiAutoTest_v3/report/html/self/data/test-cases/da61aa4a47447f1.json new file mode 100644 index 0000000..6622dac --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/da61aa4a47447f1.json @@ -0,0 +1,179 @@ +{ + "uid" : "da61aa4a47447f1", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "fullName" : "test_case.test_lao_zhang.test_bpm.TestBPM#test_bpm", + "historyId" : "48abe8c46402ff324a761b2b5e506cc9", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_db", + "time" : { + "start" : 1725509874131, + "stop" : 1725509874160, + "duration" : 29 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874160, + "stop" : 1725509874198, + "duration" : 38 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lao_zhang\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lao_zhang.test_bpm.TestBPM object at 0x000002087688C500>\nfix_db = <apiAutoTest_v3.common.db.DB object at 0x00000208769EE3F0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208763FE3F0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': ''}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lao_zhang\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "52297b711c29f1c", + "name" : "log", + "source" : "52297b711c29f1c.txt", + "type" : "text/plain", + "size" : 498 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875450, + "stop" : 1725509875450, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875449, + "stop" : 1725509875449, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lao_zhang" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lao_zhang.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "da61aa4a47447f1.json", + "parameterValues" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/test-cases/ead755efe8123e8.json b/apiAutoTest_v3/report/html/self/data/test-cases/ead755efe8123e8.json new file mode 100644 index 0000000..226bb86 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/test-cases/ead755efe8123e8.json @@ -0,0 +1,179 @@ +{ + "uid" : "ead755efe8123e8", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "fullName" : "test_case.test_lisi.test_bpm.TestBPM#test_bpm", + "historyId" : "5bd9b2d423d7ab258be173e3e344797e", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "flaky" : false, + "newFailed" : false, + "beforeStages" : [ { + "name" : "fix_db", + "time" : { + "start" : 1725509874827, + "stop" : 1725509874861, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req", + "time" : { + "start" : 1725509874861, + "stop" : 1725509874895, + "duration" : 34 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "_session_faker", + "time" : { + "start" : 1725509873268, + "stop" : 1725509873410, + "duration" : 142 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "testStage" : { + "status" : "failed", + "statusMessage" : "AssertionError: 断言失败", + "statusTrace" : "self = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '账号或密码错误' == '账户错误或该租户未启用'\nE \nE - 账户错误或该租户未启用\nE + 账号或密码错误\n\ntest_case\\test_lisi\\test_bpm.py:52: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <apiAutoTest_v3.test_case.test_lisi.test_bpm.TestBPM object at 0x00000208768C2CC0>, fix_db = <apiAutoTest_v3.common.db.DB object at 0x0000020876A407A0>\nfix_req = <apiAutoTest_v3.request_method.request_method.RequestMethod object at 0x00000208768F8DD0>, url = 'http://36.139.193.99:8088/auth', method = 'POST'\nmime = 'application/json'\ncase_data = {'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ=', 'username': '#!$!@#!@#'}\nexpect_data = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @pytest.mark.parametrize(\"url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", excel.get_data())\n def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者为 delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件\n fix_db.delete(sql_data['delete'])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件\n select_result = fix_db.select(sql_data['select'])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestMethod类对象发送请求\n res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data.keys():\n assert expect_data[key] == res.json().get(key)\n except AssertionError:\n log.error(f\"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_lisi\\test_bpm.py:55: AssertionError", + "steps" : [ ], + "attachments" : [ { + "uid" : "593ce434feb27412", + "name" : "log", + "source" : "593ce434feb27412.txt", + "type" : "text/plain", + "size" : 507 + } ], + "parameters" : [ ], + "hasContent" : true, + "stepsCount" : 0, + "shouldDisplayMessage" : true, + "attachmentsCount" : 1 + }, + "afterStages" : [ { + "name" : "fix_db::0", + "time" : { + "start" : 1725509875448, + "stop" : 1725509875448, + "duration" : 0 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + }, { + "name" : "fix_req::0", + "time" : { + "start" : 1725509875446, + "stop" : 1725509875447, + "duration" : 1 + }, + "status" : "passed", + "steps" : [ ], + "attachments" : [ ], + "parameters" : [ ], + "hasContent" : false, + "stepsCount" : 0, + "shouldDisplayMessage" : false, + "attachmentsCount" : 0 + } ], + "labels" : [ { + "name" : "parentSuite", + "value" : "test_case.test_lisi" + }, { + "name" : "suite", + "value" : "test_bpm" + }, { + "name" : "subSuite", + "value" : "TestBPM" + }, { + "name" : "host", + "value" : "DESKTOP-4FFIKGU" + }, { + "name" : "thread", + "value" : "17444-MainThread" + }, { + "name" : "framework", + "value" : "pytest" + }, { + "name" : "language", + "value" : "cpython3" + }, { + "name" : "package", + "value" : "test_case.test_lisi.test_bpm" + }, { + "name" : "resultFormat", + "value" : "allure2" + } ], + "parameters" : [ { + "name" : "case_data", + "value" : "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}" + }, { + "name" : "expect_data", + "value" : "{'message': '账号或密码错误'}" + }, { + "name" : "method", + "value" : "'POST'" + }, { + "name" : "mime", + "value" : "'application/json'" + }, { + "name" : "sql_data", + "value" : "None" + }, { + "name" : "sql_type", + "value" : "None" + }, { + "name" : "update_key", + "value" : "None" + }, { + "name" : "url", + "value" : "'http://36.139.193.99:8088/auth'" + } ], + "links" : [ ], + "hidden" : false, + "retry" : false, + "extra" : { + "severity" : "normal", + "retries" : [ ], + "categories" : [ { + "name" : "Product defects", + "matchedStatuses" : [ ], + "flaky" : false + } ], + "tags" : [ ] + }, + "source" : "ead755efe8123e8.json", + "parameterValues" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/data/timeline.json b/apiAutoTest_v3/report/html/self/data/timeline.json new file mode 100644 index 0000000..a01372c --- /dev/null +++ b/apiAutoTest_v3/report/html/self/data/timeline.json @@ -0,0 +1,416 @@ +{ + "uid" : "ab17fc5a4eb3bca4b216b548c7f9fcbc", + "name" : "timeline", + "children" : [ { + "name" : "DESKTOP-4FFIKGU", + "children" : [ { + "name" : "17444-MainThread", + "children" : [ { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "65bf4ee0f2e87568", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "uid" : "a0e7fbd23128cdaf", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "46efc3b9e725d261", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "da61aa4a47447f1", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "c56320550a22c0db", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "ba062d37a9003d15", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "uid" : "800d22e4a7f18199", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "620574a4f8cb8351", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "uid" : "827168807ae28c0", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'testAddOrg', 'demId': '需要更新', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}", "{'message': '添加组织成功'}", "'POST'", "'json'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\"; ', 'delete': 'delete from uc_org where CODE_=\"testAddOrg\";'}", "'delete|select'", "'demId'", "'http://36.139.193.99:8088/api/org/v1/org/addOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "cbcafb24c8f79dae", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "91abfb7f4e48e0a7", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "uid" : "80a39a45c3baceac", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}", "{'message': '更新维度成功'}", "'put'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/updateDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "uid" : "b7ed8bb51662c63b", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'ids': '需要更新'}", "{'message': '删除维度成功!'}", "'delete'", "'query'", "{'select': 'select ID_ from uc_demension where CODE_=\"requestsAddDem\";'}", "'select'", "'ids'", "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "uid" : "ad8b5e83abae28e2", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "None", "{'message': '刷新token成功'}", "'GET'", "None", "None", "None", "None", "'http://36.139.193.99:8088/refresh'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "uid" : "400f0b538799da08", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}", "{'message': '保存组织参数成功!'}", "'POST'", "'query|json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "uid" : "83d8b1f10123a10c", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '123456'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "uid" : "35d5cf5672473543", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}", "{'message': '账号或密码错误'}", "'post'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "uid" : "981f584b9cbf47d6", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "uid" : "68edada79f2c2c5c", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}", "{'message': '加入成功'}", "'POST'", "'query'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "75224b36c281fcd6", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "uid" : "1b1ea3622c7cbb0e", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}", "{'message': '添加维度成功'}", "'post'", "'application/json'", "{'delete': 'dELETE FROM uc_demension WHERE `CODE_`=\"requestsAddDem\";'}", "'delete'", "None", "'http://36.139.193.99:8088/api/demension/v1/dem/addDem'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "bae95a6a19479944", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "10d62acf0e332229", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "uid" : "8c18ed11d24a69cf", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "uid" : "da0b4417fe54e65b", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "uid" : "8727397adfee82f7", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "uid" : "34ae4840c9eb7a0a", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': ''}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "6c322c83493913f2", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "uid" : "ead755efe8123e8", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "uid" : "3c7a94555e07633b", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "failed", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "'testAddOrg'", "{'message': '删除组织成功!'}", "'POST'", "'json'", "None", "None", "None", "'http://36.139.193.99:8088/api/org/v1/org/deleteOrg'" ] + }, { + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "uid" : "9adb4eda7ef664b4", + "parentUid" : "68ccee5bb088c98e2c0fde9c600ff6d7", + "status" : "passed", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "flaky" : false, + "newFailed" : false, + "parameters" : [ "{'username': 'admin', 'password': '#!$!@#!@#'}", "{'message': '账号或密码错误'}", "'POST'", "'application/json'", "None", "None", "None", "'http://36.139.193.99:8088/auth'" ] + } ], + "uid" : "68ccee5bb088c98e2c0fde9c600ff6d7" + } ], + "uid" : "f73be692ef2b065133063b476e3099eb" + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/export/influxDbData.txt b/apiAutoTest_v3/report/html/self/export/influxDbData.txt new file mode 100644 index 0000000..c880509 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/export/influxDbData.txt @@ -0,0 +1,12 @@ +launch_status failed=23 1725510822000000000 +launch_status broken=0 1725510822000000000 +launch_status passed=8 1725510822000000000 +launch_status skipped=0 1725510822000000000 +launch_status unknown=0 1725510822000000000 +launch_time duration=1926 1725510822000000000 +launch_time min_duration=16 1725510822000000000 +launch_time max_duration=50 1725510822000000000 +launch_time sum_duration=891 1725510822000000000 +launch_problems product_defects=23 1725510822000000000 +launch_retries retries=0 1725510822000000000 +launch_retries run=31 1725510822000000000 diff --git a/apiAutoTest_v3/report/html/self/export/mail.html b/apiAutoTest_v3/report/html/self/export/mail.html new file mode 100644 index 0000000..2f27130 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/export/mail.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Allure Report summary mail</title> +</head> +<body> + Mail body +</body> +</html> diff --git a/apiAutoTest_v3/report/html/self/export/prometheusData.txt b/apiAutoTest_v3/report/html/self/export/prometheusData.txt new file mode 100644 index 0000000..da60360 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/export/prometheusData.txt @@ -0,0 +1,12 @@ +launch_status_failed 23 +launch_status_broken 0 +launch_status_passed 8 +launch_status_skipped 0 +launch_status_unknown 0 +launch_time_duration 1926 +launch_time_min_duration 16 +launch_time_max_duration 50 +launch_time_sum_duration 891 +launch_problems_product_defects 23 +launch_retries_retries 0 +launch_retries_run 31 diff --git a/apiAutoTest_v3/report/html/self/favicon.ico b/apiAutoTest_v3/report/html/self/favicon.ico new file mode 100644 index 0000000..df636be --- /dev/null +++ b/apiAutoTest_v3/report/html/self/favicon.ico @@ -0,0 +1 @@ +module.exports = __webpack_public_path__ + "favicon.ico"; \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/history/categories-trend.json b/apiAutoTest_v3/report/html/self/history/categories-trend.json new file mode 100644 index 0000000..34e05e0 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/history/categories-trend.json @@ -0,0 +1,5 @@ +[ { + "data" : { + "Product defects" : 23 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/history/duration-trend.json b/apiAutoTest_v3/report/html/self/history/duration-trend.json new file mode 100644 index 0000000..f8490eb --- /dev/null +++ b/apiAutoTest_v3/report/html/self/history/duration-trend.json @@ -0,0 +1,5 @@ +[ { + "data" : { + "duration" : 1926 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/history/history-trend.json b/apiAutoTest_v3/report/html/self/history/history-trend.json new file mode 100644 index 0000000..c37b805 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/history/history-trend.json @@ -0,0 +1,10 @@ +[ { + "data" : { + "failed" : 23, + "broken" : 0, + "skipped" : 0, + "passed" : 8, + "unknown" : 0, + "total" : 31 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/history/history.json b/apiAutoTest_v3/report/html/self/history/history.json new file mode 100644 index 0000000..9516a76 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/history/history.json @@ -0,0 +1,614 @@ +{ + "8eb7301a32c31c1993acb65490cebb5d" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "c56320550a22c0db", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + } + } ] + }, + "8601057ef64fcd13fa3bee37103323a1" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "827168807ae28c0", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + } + } ] + }, + "8a6f5940a978fd4ecaa53e97a35ae776" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "75224b36c281fcd6", + "status" : "passed", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + } + } ] + }, + "48abe8c46402ff324a761b2b5e506cc9" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "da61aa4a47447f1", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + } + } ] + }, + "fb4addf01045fbe8c5cdee39d26ad4eb" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "6c322c83493913f2", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + } + } ] + }, + "b410abf76c32aa74be9f6d0484c2321c" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "ad8b5e83abae28e2", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + } + } ] + }, + "15d2daeb579bb5b1c6274efce6552f25" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "80a39a45c3baceac", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + } + } ] + }, + "a4925b7a43beba15ce710d3a2d8ba3f6" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "35d5cf5672473543", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + } + } ] + }, + "a6f6de20f1d47502e15e1b34c901fc80" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "1b1ea3622c7cbb0e", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + } + } ] + }, + "4f9df20ffdc1503910911ac0849dd913" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "8727397adfee82f7", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + } + } ] + }, + "f3de7943a90f208dcf1743488a8f191d" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "9adb4eda7ef664b4", + "status" : "passed", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + } + } ] + }, + "0cdf44136da9a3115d7402669edf9e44" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "ba062d37a9003d15", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + } + } ] + }, + "e2d18f98d0b8345269ccaac9d47e0009" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "b7ed8bb51662c63b", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + } + } ] + }, + "5945f99868ec59904be0e0c99840002e" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "68edada79f2c2c5c", + "status" : "passed", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + } + } ] + }, + "5bd9b2d423d7ab258be173e3e344797e" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "ead755efe8123e8", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + } + } ] + }, + "65755708ce0e8df98768842417beddc8" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "65bf4ee0f2e87568", + "status" : "passed", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + } + } ] + }, + "a175574a4d035c584ab8478e07968208" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "8c18ed11d24a69cf", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + } + } ] + }, + "4365a6de5e8b42ab1bd856faf33b87f7" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "46efc3b9e725d261", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + } + } ] + }, + "4f9935fe474283bd57d587585b81a84e" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "bae95a6a19479944", + "status" : "passed", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + } + } ] + }, + "4479ea4b1d75c6673685eb0a9d802580" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "10d62acf0e332229", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + } + } ] + }, + "5b9cec47ee0edd555ba6e1220ea0e625" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "3c7a94555e07633b", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + } + } ] + }, + "63d2c1d0245c2602497f67b56e03a018" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "da0b4417fe54e65b", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + } + } ] + }, + "878a8b6a3f33c260878ce369810ee073" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "800d22e4a7f18199", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + } + } ] + }, + "20a9dde76564254d92ac1acd705592d1" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "981f584b9cbf47d6", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + } + } ] + }, + "fc03ee40552f426cfe867dad8cd957fd" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "620574a4f8cb8351", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + } + } ] + }, + "7f0e6cd414aa2df632599593553f643f" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "a0e7fbd23128cdaf", + "status" : "passed", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + } + } ] + }, + "9b37711dbaecfc386d6840f06e7e961c" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "83d8b1f10123a10c", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + } + } ] + }, + "9cdfc96e3129cbb4c7fa5ec8d0c6d4f1" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "34ae4840c9eb7a0a", + "status" : "passed", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + } + } ] + }, + "fd1f5cf8cf0975a36ecfc6a676bd4dfa" : { + "statistic" : { + "failed" : 0, + "broken" : 0, + "skipped" : 0, + "passed" : 1, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "400f0b538799da08", + "status" : "passed", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + } + } ] + }, + "66b67242a399356d7f6f4ce06fbff864" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "91abfb7f4e48e0a7", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + } + } ] + }, + "128729b1e005cfdd6f14c1aa881b6157" : { + "statistic" : { + "failed" : 1, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 1 + }, + "items" : [ { + "uid" : "cbcafb24c8f79dae", + "status" : "failed", + "statusDetails" : "AssertionError: 断言失败", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + } + } ] + } +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/history/retry-trend.json b/apiAutoTest_v3/report/html/self/history/retry-trend.json new file mode 100644 index 0000000..c900d54 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/history/retry-trend.json @@ -0,0 +1,6 @@ +[ { + "data" : { + "run" : 31, + "retry" : 0 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/index.html b/apiAutoTest_v3/report/html/self/index.html new file mode 100644 index 0000000..ccf3d06 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/index.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html dir="ltr"> +<head> + <meta charset="utf-8"> + <title>Allure Report</title> + <link rel="favicon" href="favicon.ico?v=2"> + <link rel="stylesheet" href="styles.css"> + <link rel="stylesheet" href="plugins/screen-diff/styles.css"> +</head> +<body> +<div id="alert"></div> +<div id="content"> + <span class="spinner"> + <span class="spinner__circle"></span> + </span> +</div> +<div id="popup"></div> +<script src="app.js"></script> + <script src="plugins/behaviors/index.js"></script> + <script src="plugins/packages/index.js"></script> + <script src="plugins/screen-diff/index.js"></script> +</body> +</html> diff --git a/apiAutoTest_v3/report/html/self/plugins/behaviors/index.js b/apiAutoTest_v3/report/html/self/plugins/behaviors/index.js new file mode 100644 index 0000000..94f780d --- /dev/null +++ b/apiAutoTest_v3/report/html/self/plugins/behaviors/index.js @@ -0,0 +1,178 @@ +'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.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/apiAutoTest_v3/report/html/self/plugins/packages/index.js b/apiAutoTest_v3/report/html/self/plugins/packages/index.js new file mode 100644 index 0000000..1e2452c --- /dev/null +++ b/apiAutoTest_v3/report/html/self/plugins/packages/index.js @@ -0,0 +1,104 @@ +'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.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/apiAutoTest_v3/report/html/self/plugins/screen-diff/index.js b/apiAutoTest_v3/report/html/self/plugins/screen-diff/index.js new file mode 100644 index 0000000..3774f88 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/plugins/screen-diff/index.js @@ -0,0 +1,200 @@ +(function () { + var settings = allure.getPluginSettings('screen-diff', { diffType: 'diff' }); + + function renderImage(src) { + return ( + '<div class="screen-diff__container">' + + '<img class="screen-diff__image" src="' + + src + + '">' + + '</div>' + ); + } + + 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 ( + '<div class="screen-diff__overlay screen-diff__container">' + + '<img class="screen-diff__image" src="' + + expectedImage + + '">' + + '<div class="screen-diff__image-over">' + + '<img class="screen-diff__image" src="' + + actualImage + + '">' + + '</div>' + + '</div>' + ); + } + if (actualImage) { + return renderImage(actualImage); + } + return 'No diff data provided'; + } + + var TestResultView = Backbone.Marionette.View.extend({ + regions: { + subView: '.screen-diff-view', + }, + template: function () { + return '<div class="screen-diff-view"></div>'; + }, + 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 '<pre class="screen-diff-error">' + data.error + '</pre>'; + }, + }); + var AttachmentView = Backbone.Marionette.View.extend({ + regions: { + subView: '.screen-diff-view', + }, + template: function () { + return '<div class="screen-diff-view"></div>'; + }, + 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 ( + '<h3 class="pane__section-title">Screen Diff</h3>' + + '<div class="screen-diff__content">' + + '<div class="screen-diff__switchers">' + + '<label><input type="radio" name="' + + data.radioName + + '" value="diff"> Show diff</label>' + + '<label><input type="radio" name="' + + data.radioName + + '" value="overlay"> Show overlay</label>' + + '</div>' + + renderDiffContent( + data.diffType, + data.diffImage, + data.actualImage, + data.expectedImage, + ) + + '</div>' + ); + }, + 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/apiAutoTest_v3/report/html/self/plugins/screen-diff/styles.css b/apiAutoTest_v3/report/html/self/plugins/screen-diff/styles.css new file mode 100644 index 0000000..6cf2219 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/plugins/screen-diff/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/apiAutoTest_v3/report/html/self/styles.css b/apiAutoTest_v3/report/html/self/styles.css new file mode 100644 index 0000000..30d8700 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/styles.css @@ -0,0 +1,6 @@ +@charset "UTF-8"; +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(data:application/vnd.ms-fontobject;base64,bocCAKyGAgABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAWXjPkAAAAAAAAAAAAAAAAAAAAAAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAADgBSAGUAZwB1AGwAYQByAAAAJABWAGUAcgBzAGkAbwBuACAANAAuADcALgAwACAAMgAwADEANgAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAAAAAAAQAAAA0AgAADAFBGRlRNa75HuQAChpAAAAAcR0RFRgLwAAQAAoZwAAAAIE9TLzKIMnpAAAABWAAAAGBjbWFwCr86fwAADKgAAALyZ2FzcP//AAMAAoZoAAAACGdseWaP965NAAAarAACTLxoZWFkEInlLQAAANwAAAA2aGhlYQ8DCrUAAAEUAAAAJGhtdHhFeRiFAAABuAAACvBsb2NhAvWiXAAAD5wAAAsQbWF4cAMsAhwAAAE4AAAAIG5hbWXjl4usAAJnaAAABIZwb3N0r4+boQACa/AAABp1AAEAAAAEAcuQz3hZXw889QALBwAAAAAA1DPNMgAAAADUM80y////AAkBBgAAAAAIAAIAAQAAAAAAAQAABgD/AAAACQD/////CQEAAQAAAAAAAAAAAAAAAAAAArUAAQAAAsMCGQAnAAAAAAACAAAAAQABAAAAQAAAAAAAAAADBmkBkAAFAAAEjAQzAAAAhgSMBDMAAAJzAAABigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXJzAEAAIPUABgD/AAAABgABAAAAAAEAAAAAAAAAAAAAACAAAQOAAHAAAAAAAlUAAAHAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAABdBgAAAAaAAAAHAAAABwAAAAaAAAAGgAAABQAAAAeAAAAGgAAABwAAAAcAAAAHAAB5BYAAbgaAAAAGgAAABgAAAAcAAAAGAAAABYAAAAaAABoGAAAABgAAAAeAADIGgAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAASAAAAHAABABoAAAAMAAAAEgAAABoAAAAWAAAAHAAAABgAAAAeAAAAGgAAKBQAAAAaAAAAHgAAABoAAAAWAAAAEAAAABwAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAGAAAABAAAAAYAAAAEAAAABwAAAAaAAAAGgAAABwAAAAQAAAAHAAAABoAAegWAAAAGAAAABgAAAAaAAAAHAAAABAAAAAYCAAEFAACaBQAAWgYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAABABgAAAAaAADUGgAA1BwAAAAYAAAAGAAANBYAAAAWAAAAGgAB6BgAAAAYAAAAHAAAABYAAAAcAAAAHAAAABwAAEAWAAAAGgAAABwAAAAcAAAAGAAAABwAAWgcAAFoHgAAABoAAAAaAAAAHgAAAAwAAQAcAAAAIAAAABgAAAAYAAAAHAAAABwAAAAeAAAAHAAAABgAAAAYAAAADgAAABwAAAAaAAAAGAAAABIAAAAcAAAAGAAAABoAAAAYAAAAGgAAABgAAAAWAAAAFgAAABQAAAAYAAAAGgAAsBAAAXwYAAAAGgAAAB4AAAAWAAAAGAAAABwAAAAcAAEAGAAACBwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABoAAFQcAAAAFgAAFBwAAAAYAAAAHgAAABoAAEAeAAAAGgABzBwAAAQcAAAAFgAAEBgAAAAYAAAAGAAAABwAAAAcAAA8HAAAABgAAAAaAAAAGgAAbBwAAQAYAAAAGAAAABgAAAAkAAAAHgAAABAAAAAQAAAACgABAAoAAAAaAAAAEAAAABAAAAAQAAAAHAAAABgAAAAYAAAAHAAAoBwAAAAcAAAAHAAAAA4AAAQcAAAAGgAAABwAAAAQAAAAHAAAAB4AAAAeAAAAFgAAABYAAAAcAAAAHAABAB4AAAAWAAAAGAAAABYAAAAWAAAAHgABABwAAAAeAAAAGgABABgAAAAYAAAAEAAAtBAAADQSAAE0EgABNAoAALQKAAA0EgABNBIAATQeAAAAHgAAABIAAAAMAAAAGAAAABoAAAAaAAAAHAABABgAAAAcAAAAGgAAABoAAAAeAAAAHAAAABwAAAAYAAAAGAAAABgAAAAeAAAAHgAAABwAAQAcAAEAGgAANB4AALQcAAAAGgAACBYAAAgaAAAAEAAAABoAAAAQAAGACgAAAAoAAYgYAAAUGAAAFB4AAAQaAAAAEgAAABYAADQUAAAAGgAAABYAAAwaAACQHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADYGAAAABYAAAAQAAAMEAAADBgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAADQDggAABAMABAUAAAAHAAAABQAAOAYAAAAGAAAABoAAIgaAACIHAAAiBwAAIgYAACIGAAAiBoAAAAaAAAAGAAAABgAAGwWAAAUGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAMDAAADBwAAQAcAAAAFgAAABoAAAAWAAAAGAAALBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACwGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAATBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAAAABgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAGQcAAGQGAABZCAAAAAgAACoHAAAABgAACQcAACcJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAACBgAAAAUAAAAGAAACBwAAAAcA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AaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAAiAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTANICVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxAJQFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkHdW5pRjJBMAd1bmlGMkExB3VuaUYyQTIHdW5pRjJBMwd1bmlGMkE0B3VuaUYyQTUHdW5pRjJBNgd1bmlGMkE3B3VuaUYyQTgHdW5pRjJBOQd1bmlGMkFBB3VuaUYyQUIHdW5pRjJBQwd1bmlGMkFEB3VuaUYyQUUHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJDMAd1bmlGMkMxB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJEMAd1bmlGMkQxB3VuaUYyRDIHdW5pRjJEMwd1bmlGMkQ0B3VuaUYyRDUHdW5pRjJENgd1bmlGMkQ3B3VuaUYyRDgHdW5pRjJEOQd1bmlGMkRBB3VuaUYyREIHdW5pRjJEQwd1bmlGMkREB3VuaUYyREUHdW5pRjJFMAd1bmlGMkUxB3VuaUYyRTIHdW5pRjJFMwd1bmlGMkU0B3VuaUYyRTUHdW5pRjJFNgd1bmlGMkU3BF82OTgHdW5pRjJFOQd1bmlGMkVBB3VuaUYyRUIHdW5pRjJFQwd1bmlGMkVEB3VuaUYyRUUAAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQABAsIAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAMtPPDAAAAAA1DFouQ==);src:url(data:application/vnd.ms-fontobject;base64,bocCAKyGAgABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAWXjPkAAAAAAAAAAAAAAAAAAAAAAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAADgBSAGUAZwB1AGwAYQByAAAAJABWAGUAcgBzAGkAbwBuACAANAAuADcALgAwACAAMgAwADEANgAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAAAAAAAQAAAA0AgAADAFBGRlRNa75HuQAChpAAAAAcR0RFRgLwAAQAAoZwAAAAIE9TLzKIMnpAAAABWAAAAGBjbWFwCr86fwAADKgAAALyZ2FzcP//AAMAAoZoAAAACGdseWaP965NAAAarAACTLxoZWFkEInlLQAAANwAAAA2aGhlYQ8DCrUAAAEUAAAAJGhtdHhFeRiFAAABuAAACvBsb2NhAvWiXAAAD5wAAAsQbWF4cAMsAhwAAAE4AAAAIG5hbWXjl4usAAJnaAAABIZwb3N0r4+boQACa/AAABp1AAEAAAAEAcuQz3hZXw889QALBwAAAAAA1DPNMgAAAADUM80y////AAkBBgAAAAAIAAIAAQAAAAAAAQAABgD/AAAACQD/////CQEAAQAAAAAAAAAAAAAAAAAAArUAAQAAAsMCGQAnAAAAAAACAAAAAQABAAAAQAAAAAAAAAADBmkBkAAFAAAEjAQzAAAAhgSMBDMAAAJzAAABigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXJzAEAAIPUABgD/AAAABgABAAAAAAEAAAAAAAAAAAAAACAAAQOAAHAAAAAAAlUAAAHAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAABdBgAAAAaAAAAHAAAABwAAAAaAAAAGgAAABQAAAAeAAAAGgAAABwAAAAcAAAAHAAB5BYAAbgaAAAAGgAAABgAAAAcAAAAGAAAABYAAAAaAABoGAAAABgAAAAeAADIGgAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAASAAAAHAABABoAAAAMAAAAEgAAABoAAAAWAAAAHAAAABgAAAAeAAAAGgAAKBQAAAAaAAAAHgAAABoAAAAWAAAAEAAAABwAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAGAAAABAAAAAYAAAAEAAAABwAAAAaAAAAGgAAABwAAAAQAAAAHAAAABoAAegWAAAAGAAAABgAAAAaAAAAHAAAABAAAAAYCAAEFAACaBQAAWgYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAABABgAAAAaAADUGgAA1BwAAAAYAAAAGAAANBYAAAAWAAAAGgAB6BgAAAAYAAAAHAAAABYAAAAcAAAAHAAAABwAAEAWAAAAGgAAABwAAAAcAAAAGAAAABwAAWgcAAFoHgAAABoAAAAaAAAAHgAAAAwAAQAcAAAAIAAAABgAAAAYAAAAHAAAABwAAAAeAAAAHAAAABgAAAAYAAAADgAAABwAAAAaAAAAGAAAABIAAAAcAAAAGAAAABoAAAAYAAAAGgAAABgAAAAWAAAAFgAAABQAAAAYAAAAGgAAsBAAAXwYAAAAGgAAAB4AAAAWAAAAGAAAABwAAAAcAAEAGAAACBwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABoAAFQcAAAAFgAAFBwAAAAYAAAAHgAAABoAAEAeAAAAGgABzBwAAAQcAAAAFgAAEBgAAAAYAAAAGAAAABwAAAAcAAA8HAAAABgAAAAaAAAAGgAAbBwAAQAYAAAAGAAAABgAAAAkAAAAHgAAABAAAAAQAAAACgABAAoAAAAaAAAAEAAAABAAAAAQAAAAHAAAABgAAAAYAAAAHAAAoBwAAAAcAAAAHAAAAA4AAAQcAAAAGgAAABwAAAAQAAAAHAAAAB4AAAAeAAAAFgAAABYAAAAcAAAAHAABAB4AAAAWAAAAGAAAABYAAAAWAAAAHgABABwAAAAeAAAAGgABABgAAAAYAAAAEAAAtBAAADQSAAE0EgABNAoAALQKAAA0EgABNBIAATQeAAAAHgAAABIAAAAMAAAAGAAAABoAAAAaAAAAHAABABgAAAAcAAAAGgAAABoAAAAeAAAAHAAAABwAAAAYAAAAGAAAABgAAAAeAAAAHgAAABwAAQAcAAEAGgAANB4AALQcAAAAGgAACBYAAAgaAAAAEAAAABoAAAAQAAGACgAAAAoAAYgYAAAUGAAAFB4AAAQaAAAAEgAAABYAADQUAAAAGgAAABYAAAwaAACQHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADYGAAAABYAAAAQAAAMEAAADBgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAADQDggAABAMABAUAAAAHAAAABQAAOAYAAAAGAAAABoAAIgaAACIHAAAiBwAAIgYAACIGAAAiBoAAAAaAAAAGAAAABgAAGwWAAAUGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAMDAAADBwAAQAcAAAAFgAAABoAAAAWAAAAGAAALBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACwGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAATBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAAAABgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAGQcAAGQGAABZCAAAAAgAACoHAAAABgAACQcAACcJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAACBgAAAAUAAAAGAAACBwAAAAcA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AaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAAiAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTANICVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxAJQFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkHdW5pRjJBMAd1bmlGMkExB3VuaUYyQTIHdW5pRjJBMwd1bmlGMkE0B3VuaUYyQTUHdW5pRjJBNgd1bmlGMkE3B3VuaUYyQTgHdW5pRjJBOQd1bmlGMkFBB3VuaUYyQUIHdW5pRjJBQwd1bmlGMkFEB3VuaUYyQUUHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJDMAd1bmlGMkMxB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJEMAd1bmlGMkQxB3VuaUYyRDIHdW5pRjJEMwd1bmlGMkQ0B3VuaUYyRDUHdW5pRjJENgd1bmlGMkQ3B3VuaUYyRDgHdW5pRjJEOQd1bmlGMkRBB3VuaUYyREIHdW5pRjJEQwd1bmlGMkREB3VuaUYyREUHdW5pRjJFMAd1bmlGMkUxB3VuaUYyRTIHdW5pRjJFMwd1bmlGMkU0B3VuaUYyRTUHdW5pRjJFNgd1bmlGMkU3BF82OTgHdW5pRjJFOQd1bmlGMkVBB3VuaUYyRUIHdW5pRjJFQwd1bmlGMkVEB3VuaUYyRUUAAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQABAsIAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAMtPPDAAAAAA1DFouQ==?#iefix&v=4.7.0) format("embedded-opentype"),url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,AAEAAAANAIAAAwBQRkZUTWu+R7kAAoaQAAAAHEdERUYC8AAEAAKGcAAAACBPUy8yiDJ6QAAAAVgAAABgY21hcAq/On8AAAyoAAAC8mdhc3D//wADAAKGaAAAAAhnbHlmj/euTQAAGqwAAky8aGVhZBCJ5S0AAADcAAAANmhoZWEPAwq1AAABFAAAACRobXR4RXkYhQAAAbgAAArwbG9jYQL1olwAAA+cAAALEG1heHADLAIcAAABOAAAACBuYW1l45eLrAACZ2gAAASGcG9zdK+Pm6EAAmvwAAAadQABAAAABAHLkM94WV8PPPUACwcAAAAAANQzzTIAAAAA1DPNMv///wAJAQYAAAAACAACAAEAAAAAAAEAAAYA/wAAAAkA/////wkBAAEAAAAAAAAAAAAAAAAAAAK1AAEAAALDAhkAJwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAwZpAZAABQAABIwEMwAAAIYEjAQzAAACcwAAAYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHlycwBAACD1AAYA/wAAAAYAAQAAAAABAAAAAAAAAAAAAAAgAAEDgABwAAAAAAJVAAABwAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAXQYAAAAGgAAABwAAAAcAAAAGgAAABoAAAAUAAAAHgAAABoAAAAcAAAAHAAAABwAAeQWAAG4GgAAABoAAAAYAAAAHAAAABgAAAAWAAAAGgAAaBgAAAAYAAAAHgAAyBoAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAEgAAABwAAQAaAAAADAAAABIAAAAaAAAAFgAAABwAAAAYAAAAHgAAABoAACgUAAAAGgAAAB4AAAAaAAAAFgAAABAAAAAcAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAgABBQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQWAAAAFgAAABoAAegYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAABAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgAAAgcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAABQcAAAAGAAAAB4AAAAaAABAHgAAABoAAcwcAAAEHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAEHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAgWAAAIGgAAABAAAAAaAAAAEAABgAoAAAAKAAGIGAAAFBgAABQeAAAEGgAAABIAAAAWAAA0FAAAABoAAAAWAAAMGgAAkBwAAAAYAAAAGAAAABgAAAAYAAAAFgAAABwAADAcAAAAEgAAABgAAAAWAAAABgAAABgAAAAYAAAAHAAA2BgAAAAWAAAAEAAADBAAAAwYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABAAAAAQAAAAEAAA0A4IAAAQDAAQFAAAABwAAAAUAADgGAAAABgAAAAaAACIGgAAiBwAAIgcAACIGAAAiBgAAIgaAAAAGgAAABgAAAAYAABsFgAAFBgAAAAcAAAAHAABABgAACwYAAAAGAAAABgAAAAWAAAAGAAAABAAARAYAAAADAAADAwAAAwcAAEAHAAAABYAAAAaAAAAFgAAABgAACwYAAAAGAAAABQAALAYAAAAFAAAABAAAAAYAAAAHAAAsBgAAAAcAAEAGgAAgB4D//wcAAAAGAAAABYAAAAUAABUGAAAABgAAAAYAAAAGAAAABoAAAAYAAAAEgAAABYAAAAiAAAAGgAAABgAAAAcAAAAHAAAACAAAAAkAAAAGAABtBgAAAAcAAAAGAAAABgAAAAeAAAAGAAAACAAAAAYAAAAH9gApBgAAAAYAAAAGAAAABwAAAAYAAAAFAABABoAAAAMAAEAHAAAACQAAAAgAAAAGAAAABwAAAAYAAAAHAAAQCAAAAAgAAAAGAAAgBgAAAAQAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAACcHAAAACAAAAAcAAAAHAAAgBwAAEwcAAAAGAAAABwAARAYAAAAFAAA5BwAAEggAAAAHAAAABwAAAAYAAAAGAAAABwAAPgUAABgGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAABkHAABkBgAAWQgAAAAIAAAqBwAAAAYAAAkHAAAnCQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAADggAAA4FgAAABgAAAAYAAAAHAAAABwAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAACQAAAAYAAAAIAAAABQAACwgAAAAGAAAABgAAAAYAAAAIAAAABgAAAAYAAAAIAAAACAAAAAYAAAAIAAAACAAAAAaAAAAGgAAACAAAAAgAABMGAAAACQAAAAYAAAAHAAAABQAAAgYAAAAFAAAABgAAAgcAAAAHAAACB4AAAQgAAAYGAAAABQAAAggAAAQFAAAABQAAAAcAAAAHAAAABgAAAAUAAAAGAAAABwAAAAgAAAAIAAAACAAAAAYAAAAGAAAABgAAAAcAAAAGAAAACPgAVAkAAAAHAAAACQAAAAkAAAAJAAAACQAAAAkAAAAFAAAABAAAAAgAAAAJAAAABgAAAAYAAAAJAAAACQAAAAcAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAcAAAAIAAAA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AAD8uAAA/QwAAP1gAAD9tAAA/ggAAP64AAD/CAABABQAAQW0AAEG9AABB/gAAQjQAAEJZAABChAAAQqYAAELGAABDAQAAQykAAENLAABDgAAAQ+IAAERLAABEaAAARLMAAETOAABE+QAARSQAAEVKAABFaQAARZYAAEW/AABF8AAARiEAAEZeAABGnwAARtUAAEc1AABHUAAAR3UAAEekAABHwQAAR98AAEgpAABIcAAASJ4AAEjCAABI2wAASQEAAEkzAABJ2gAASjoAAEqTAABLFQAAS5MAAExdAABMfQAATLgAAEzMAABM7AAATSoAAE1dAABNlQAATckAAE4DAABOUgAAToQAAE68AABO5AAATyEAAE82AABP1gAAUAcAAFBwAABQsgAAUPIAAFEnAABRUgAAUZIAAFHcAABSEgAAUl4AAFKIAABSuQAAUvUAAFMoAABTRgAAU5AAAFQQAABUaAAAVLgAAFTRAABVCAAAVVMAAFWYAABVtQAAVdYAAFYNAABWKAAAVoEAAFaiAABW2QAAVvgAAFcfAABXdgAAV6gAAFglAABYUgAAWG8AAFi8AABY1gAAWSsAAFldAABZmgAAWfcAAFotAABaVwAAWp4AAFuhAABcEAAAXPgAAF2EAABd8gAAXiQAAF5iAABeowAAXtoAAF8jAABfRwAAX2kAAF/XAABf5gAAX/4AAGAbAABgXQAAYKQAAGDNAABg6QAAYTIAAGFsAABhqQAAYh0AAGJjAABijgAAYs4AAGLoAABjkwAAY6oAAGPVAABkBAAAZEUAAGTkAABlBQAAZUEAAGV/AABlvgAAZegAAGZfAABmsgAAZwQAAGdCAABndgAAZ58AAGfGAABn+gAAaDEAAGiDAABozQAAaR4AAGlsAABpoAAAadMAAGoHAABqJAAAajsAAGo7AABqOwAAalYAAGqKAABqyAAAavMAAGsrAABragAAa4gAAGuiAABrwQAAa+oAAGwQAABsIgAAba8AAG3bAABuOAAAbl0AAG6BAABupQAAbskAAG7pAABvAgAAbx4AAG9TAABvkwAAb6kAAG/IAABwEgAAcEYAAHBxAABwwQAAcPkAAHEoAABxVQAAcYoAAHG7AAByAwAAckMAAHKiAABy6AAAcz4AAHOHAABz5QAAdBsAAHRZAAB0twAAdNQAAHT+AAB1YQAAdZ4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AgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwDSAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQCUBWdsYXNzBW11c2ljBnNlYXJjaAhlbnZlbG9wZQVoZWFydARzdGFyCnN0YXJfZW1wdHkEdXNlcgRmaWxtCHRoX2xhcmdlAnRoB3RoX2xpc3QCb2sGcmVtb3ZlB3pvb21faW4Iem9vbV9vdXQDb2ZmBnNpZ25hbANjb2cFdHJhc2gEaG9tZQhmaWxlX2FsdAR0aW1lBHJvYWQMZG93bmxvYWRfYWx0CGRvd25sb2FkBnVwbG9hZAVpbmJveAtwbGF5X2NpcmNsZQZyZXBlYXQHcmVmcmVzaAhsaXN0X2FsdARsb2NrBGZsYWcKaGVhZHBob25lcwp2b2x1bWVfb2ZmC3ZvbHVtZV9kb3duCXZvbHVtZV91cAZxcmNvZGUHYmFyY29kZQN0YWcEdGFncwRib29rCGJvb2ttYXJrBXByaW50BmNhbWVyYQRmb250BGJvbGQGaXRhbGljC3RleHRfaGVpZ2h0CnRleHRfd2lkdGgKYWxpZ25fbGVmdAxhbGlnbl9jZW50ZXILYWxpZ25fcmlnaHQNYWxpZ25fanVzdGlmeQRsaXN0C2luZGVudF9sZWZ0DGluZGVudF9yaWdodA5mYWNldGltZV92aWRlbwdwaWN0dXJlBnBlbmNpbAptYXBfbWFya2VyBmFkanVzdAR0aW50BGVkaXQFc2hhcmUFY2hlY2sEbW92ZQ1zdGVwX2JhY2t3YXJkDWZhc3RfYmFja3dhcmQIYmFja3dhcmQEcGxheQVwYXVzZQRzdG9wB2ZvcndhcmQMZmFzdF9mb3J3YXJkDHN0ZXBfZm9yd2FyZAVlamVjdAxjaGV2cm9uX2xlZnQNY2hldnJvbl9yaWdodAlwbHVzX3NpZ24KbWludXNfc2lnbgtyZW1vdmVfc2lnbgdva19zaWduDXF1ZXN0aW9uX3NpZ24JaW5mb19zaWduCnNjcmVlbnNob3QNcmVtb3ZlX2NpcmNsZQlva19jaXJjbGUKYmFuX2NpcmNsZQphcnJvd19sZWZ0C2Fycm93X3JpZ2h0CGFycm93X3VwCmFycm93X2Rvd24Jc2hhcmVfYWx0C3Jlc2l6ZV9mdWxsDHJlc2l6ZV9zbWFsbBBleGNsYW1hdGlvbl9zaWduBGdpZnQEbGVhZgRmaXJlCGV5ZV9vcGVuCWV5ZV9jbG9zZQx3YXJuaW5nX3NpZ24FcGxhbmUIY2FsZW5kYXIGcmFuZG9tB2NvbW1lbnQGbWFnbmV0CmNoZXZyb25fdXAMY2hldnJvbl9kb3duB3JldHdlZXQNc2hvcHBpbmdfY2FydAxmb2xkZXJfY2xvc2ULZm9sZGVyX29wZW4PcmVzaXplX3ZlcnRpY2FsEXJlc2l6ZV9ob3Jpem9udGFsCWJhcl9jaGFydAx0d2l0dGVyX3NpZ24NZmFjZWJvb2tfc2lnbgxjYW1lcmFfcmV0cm8Da2V5BGNvZ3MIY29tbWVudHMNdGh1bWJzX3VwX2FsdA90aHVtYnNfZG93bl9hbHQJc3Rhcl9oYWxmC2hlYXJ0X2VtcHR5B3NpZ25vdXQNbGlua2VkaW5fc2lnbgdwdXNocGluDWV4dGVybmFsX2xpbmsGc2lnbmluBnRyb3BoeQtnaXRodWJfc2lnbgp1cGxvYWRfYWx0BWxlbW9uBXBob25lC2NoZWNrX2VtcHR5DmJvb2ttYXJrX2VtcHR5CnBob25lX3NpZ24HdHdpdHRlcghmYWNlYm9vawZnaXRodWIGdW5sb2NrC2NyZWRpdF9jYXJkA3JzcwNoZGQIYnVsbGhvcm4EYmVsbAtjZXJ0aWZpY2F0ZQpoYW5kX3JpZ2h0CWhhbmRfbGVmdAdoYW5kX3VwCWhhbmRfZG93bhFjaXJjbGVfYXJyb3dfbGVmdBJjaXJjbGVfYXJyb3dfcmlnaHQPY2lyY2xlX2Fycm93X3VwEWNpcmNsZV9hcnJvd19kb3duBWdsb2JlBndyZW5jaAV0YXNrcwZmaWx0ZXIJYnJpZWZjYXNlCmZ1bGxzY3JlZW4FZ3JvdXAEbGluawVjbG91ZAZiZWFrZXIDY3V0BGNvcHkKcGFwZXJfY2xpcARzYXZlCnNpZ25fYmxhbmsHcmVvcmRlcgJ1bAJvbA1zdHJpa2V0aHJvdWdoCXVuZGVybGluZQV0YWJsZQVtYWdpYwV0cnVjawlwaW50ZXJlc3QOcGludGVyZXN0X3NpZ24QZ29vZ2xlX3BsdXNfc2lnbgtnb29nbGVfcGx1cwVtb25leQpjYXJldF9kb3duCGNhcmV0X3VwCmNhcmV0X2xlZnQLY2FyZXRfcmlnaHQHY29sdW1ucwRzb3J0CXNvcnRfZG93bgdzb3J0X3VwDGVudmVsb3BlX2FsdAhsaW5rZWRpbgR1bmRvBWxlZ2FsCWRhc2hib2FyZAtjb21tZW50X2FsdAxjb21tZW50c19hbHQEYm9sdAdzaXRlbWFwCHVtYnJlbGxhBXBhc3RlCmxpZ2h0X2J1bGIIZXhjaGFuZ2UOY2xvdWRfZG93bmxvYWQMY2xvdWRfdXBsb2FkB3VzZXJfbWQLc3RldGhvc2NvcGUIc3VpdGNhc2UIYmVsbF9hbHQGY29mZmVlBGZvb2QNZmlsZV90ZXh0X2FsdAhidWlsZGluZwhob3NwaXRhbAlhbWJ1bGFuY2UGbWVka2l0C2ZpZ2h0ZXJfamV0BGJlZXIGaF9zaWduBGYwZmURZG91YmxlX2FuZ2xlX2xlZnQSZG91YmxlX2FuZ2xlX3JpZ2h0D2RvdWJsZV9hbmdsZV91cBFkb3VibGVfYW5nbGVfZG93bgphbmdsZV9sZWZ0C2FuZ2xlX3JpZ2h0CGFuZ2xlX3VwCmFuZ2xlX2Rvd24HZGVza3RvcAZsYXB0b3AGdGFibGV0DG1vYmlsZV9waG9uZQxjaXJjbGVfYmxhbmsKcXVvdGVfbGVmdAtxdW90ZV9yaWdodAdzcGlubmVyBmNpcmNsZQVyZXBseQpnaXRodWJfYWx0EGZvbGRlcl9jbG9zZV9hbHQPZm9sZGVyX29wZW5fYWx0CmV4cGFuZF9hbHQMY29sbGFwc2VfYWx0BXNtaWxlBWZyb3duA21laAdnYW1lcGFkCGtleWJvYXJkCGZsYWdfYWx0DmZsYWdfY2hlY2tlcmVkCHRlcm1pbmFsBGNvZGUJcmVwbHlfYWxsD3N0YXJfaGFsZl9lbXB0eQ5sb2NhdGlvbl9hcnJvdwRjcm9wCWNvZGVfZm9yawZ1bmxpbmsEXzI3OQtleGNsYW1hdGlvbgtzdXBlcnNjcmlwdAlzdWJzY3JpcHQEXzI4MwxwdXp6bGVfcGllY2UKbWljcm9waG9uZQ5taWNyb3Bob25lX29mZgZzaGllbGQOY2FsZW5kYXJfZW1wdHkRZmlyZV9leHRpbmd1aXNoZXIGcm9ja2V0Bm1heGNkbhFjaGV2cm9uX3NpZ25fbGVmdBJjaGV2cm9uX3NpZ25fcmlnaHQPY2hldnJvbl9zaWduX3VwEWNoZXZyb25fc2lnbl9kb3duBWh0bWw1BGNzczMGYW5jaG9yCnVubG9ja19hbHQIYnVsbHNleWUTZWxsaXBzaXNfaG9yaXpvbnRhbBFlbGxpcHNpc192ZXJ0aWNhbARfMzAzCXBsYXlfc2lnbgZ0aWNrZXQObWludXNfc2lnbl9hbHQLY2hlY2tfbWludXMIbGV2ZWxfdXAKbGV2ZWxfZG93bgpjaGVja19zaWduCWVkaXRfc2lnbgRfMzEyCnNoYXJlX3NpZ24HY29tcGFzcwhjb2xsYXBzZQxjb2xsYXBzZV90b3AEXzMxNwNldXIDZ2JwA3VzZANpbnIDanB5A3J1YgNrcncDYnRjBGZpbGUJZmlsZV90ZXh0EHNvcnRfYnlfYWxwaGFiZXQEXzMyORJzb3J0X2J5X2F0dHJpYnV0ZXMWc29ydF9ieV9hdHRyaWJ1dGVzX2FsdA1zb3J0X2J5X29yZGVyEXNvcnRfYnlfb3JkZXJfYWx0BF8zMzQEXzMzNQx5b3V0dWJlX3NpZ24HeW91dHViZQR4aW5nCXhpbmdfc2lnbgx5b3V0dWJlX3BsYXkHZHJvcGJveA1zdGFja2V4Y2hhbmdlCWluc3RhZ3JhbQZmbGlja3IDYWRuBGYxNzEOYml0YnVja2V0X3NpZ24GdHVtYmxyC3R1bWJscl9zaWduD2xvbmdfYXJyb3dfZG93bg1sb25nX2Fycm93X3VwD2xvbmdfYXJyb3dfbGVmdBBsb25nX2Fycm93X3JpZ2h0B3dpbmRvd3MHYW5kcm9pZAVsaW51eAdkcmliYmxlBXNreXBlCmZvdXJzcXVhcmUGdHJlbGxvBmZlbWFsZQRtYWxlBmdpdHRpcANzdW4EXzM2NgdhcmNoaXZlA2J1ZwJ2awV3ZWlibwZyZW5yZW4EXzM3Mg5zdGFja19leGNoYW5nZQRfMzc0FWFycm93X2NpcmNsZV9hbHRfbGVmdARfMzc2DmRvdF9jaXJjbGVfYWx0BF8zNzgMdmltZW9fc3F1YXJlBF8zODANcGx1c19zcXVhcmVfbwRfMzgyBF8zODMEXzM4NARfMzg1BF8zODYEXzM4NwRfMzg4BF8zODkHdW5pRjFBMARmMWExBF8zOTIEXzM5MwRmMWE0BF8zOTUEXzM5NgRfMzk3BF8zOTgEXzM5OQRfNDAwBGYxYWIEXzQwMgRfNDAzBF80MDQHdW5pRjFCMQRfNDA2BF80MDcEXzQwOARfNDA5BF80MTAEXzQxMQRfNDEyBF80MTMEXzQxNARfNDE1BF80MTYEXzQxNwRfNDE4BF80MTkHdW5pRjFDMAd1bmlGMUMxBF80MjIEXzQyMwRfNDI0BF80MjUEXzQyNgRfNDI3BF80MjgEXzQyOQRfNDMwBF80MzEEXzQzMgRfNDMzBF80MzQHdW5pRjFEMAd1bmlGMUQxB3VuaUYxRDIEXzQzOARfNDM5B3VuaUYxRDUHdW5pRjFENgd1bmlGMUQ3BF80NDMEXzQ0NARfNDQ1BF80NDYEXzQ0NwRfNDQ4BF80NDkHdW5pRjFFMARfNDUxBF80NTIEXzQ1MwRfNDU0BF80NTUEXzQ1NgRfNDU3BF80NTgEXzQ1OQRfNDYwBF80NjEEXzQ2MgRfNDYzBF80NjQHdW5pRjFGMARfNDY2BF80NjcEZjFmMwRfNDY5BF80NzAEXzQ3MQRfNDcyBF80NzMEXzQ3NARfNDc1BF80NzYEZjFmYwRfNDc4BF80NzkEXzQ4MARfNDgxBF80ODIEXzQ4MwRfNDg0BF80ODUEXzQ4NgRfNDg3BF80ODgEXzQ4OQRfNDkwBF80OTEEXzQ5MgRfNDkzBF80OTQEZjIxMARfNDk2BGYyMTIEXzQ5OARfNDk5BF81MDAEXzUwMQRfNTAyBF81MDMEXzUwNARfNTA1BF81MDYEXzUwNwRfNTA4BF81MDkFdmVudXMEXzUxMQRfNTEyBF81MTMEXzUxNARfNTE1BF81MTYEXzUxNwRfNTE4BF81MTkEXzUyMARfNTIxBF81MjIEXzUyMwRfNTI0BF81MjUEXzUyNgRfNTI3BF81MjgEXzUyOQRfNTMwBF81MzEEXzUzMgRfNTMzBF81MzQEXzUzNQRfNTM2BF81MzcEXzUzOARfNTM5BF81NDAEXzU0MQRfNTQyBF81NDMEXzU0NARfNTQ1BF81NDYEXzU0NwRfNTQ4BF81NDkEXzU1MARfNTUxBF81NTIEXzU1MwRfNTU0BF81NTUEXzU1NgRfNTU3BF81NTgEXzU1OQRfNTYwBF81NjEEXzU2MgRfNTYzBF81NjQEXzU2NQRfNTY2BF81NjcEXzU2OARfNTY5BGYyNjAEZjI2MQRfNTcyBGYyNjMEXzU3NARfNTc1BF81NzYEXzU3NwRfNTc4BF81NzkEXzU4MARfNTgxBF81ODIEXzU4MwRfNTg0BF81ODUEXzU4NgRfNTg3BF81ODgEXzU4OQRfNTkwBF81OTEEXzU5MgRfNTkzBF81OTQEXzU5NQRfNTk2BF81OTcEXzU5OARmMjdlB3VuaUYyODAHdW5pRjI4MQRfNjAyBF82MDMEXzYwNAd1bmlGMjg1B3VuaUYyODYEXzYwNwRfNjA4BF82MDkEXzYxMARfNjExBF82MTIEXzYxMwRfNjE0BF82MTUEXzYxNgRfNjE3BF82MTgEXzYxOQRfNjIwBF82MjEEXzYyMgRfNjIzBF82MjQEXzYyNQRfNjI2BF82MjcEXzYyOARfNjI5B3VuaUYyQTAHdW5pRjJBMQd1bmlGMkEyB3VuaUYyQTMHdW5pRjJBNAd1bmlGMkE1B3VuaUYyQTYHdW5pRjJBNwd1bmlGMkE4B3VuaUYyQTkHdW5pRjJBQQd1bmlGMkFCB3VuaUYyQUMHdW5pRjJBRAd1bmlGMkFFB3VuaUYyQjAHdW5pRjJCMQd1bmlGMkIyB3VuaUYyQjMHdW5pRjJCNAd1bmlGMkI1B3VuaUYyQjYHdW5pRjJCNwd1bmlGMkI4B3VuaUYyQjkHdW5pRjJCQQd1bmlGMkJCB3VuaUYyQkMHdW5pRjJCRAd1bmlGMkJFB3VuaUYyQzAHdW5pRjJDMQd1bmlGMkMyB3VuaUYyQzMHdW5pRjJDNAd1bmlGMkM1B3VuaUYyQzYHdW5pRjJDNwd1bmlGMkM4B3VuaUYyQzkHdW5pRjJDQQd1bmlGMkNCB3VuaUYyQ0MHdW5pRjJDRAd1bmlGMkNFB3VuaUYyRDAHdW5pRjJEMQd1bmlGMkQyB3VuaUYyRDMHdW5pRjJENAd1bmlGMkQ1B3VuaUYyRDYHdW5pRjJENwd1bmlGMkQ4B3VuaUYyRDkHdW5pRjJEQQd1bmlGMkRCB3VuaUYyREMHdW5pRjJERAd1bmlGMkRFB3VuaUYyRTAHdW5pRjJFMQd1bmlGMkUyB3VuaUYyRTMHdW5pRjJFNAd1bmlGMkU1B3VuaUYyRTYHdW5pRjJFNwRfNjk4B3VuaUYyRTkHdW5pRjJFQQd1bmlGMkVCB3VuaUYyRUMHdW5pRjJFRAd1bmlGMkVFAAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAQLCAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADLTzwwAAAAANQxaLk=) format("truetype"),url(data:image/svg+xml;base64,PHN2Zz48ZGVmcz48Zm9udCBpZD0iRm9udEF3ZXNvbWUiIGhvcml6LWFkdi14PSIxNTM2Ij48Zm9udC1mYWNlIGZvbnQtZmFtaWx5PSJGb250QXdlc29tZSIgZm9udC13ZWlnaHQ9IjQwMCIgdW5pdHMtcGVyLWVtPSIxNzkyIiBhc2NlbnQ9IjE1MzYiIGRlc2NlbnQ9Ii0yNTYiIGJib3g9Ii0xLjAyMDgzIC0yNTYuOTYyIDIzMDQuNiAxNTM3LjAyIiB1bmRlcmxpbmUtdGhpY2tuZXNzPSIwIiB1bmRlcmxpbmUtcG9zaXRpb249IjAiIHVuaWNvZGUtcmFuZ2U9IlUrMDAyMC1GNTAwIi8+PGdseXBoIGdseXBoLW5hbWU9Ii5ub3RkZWYiIGhvcml6LWFkdi14PSI4OTYiIGQ9Ik0yMjQgMTEyaDQ0OHYxMzEySDIyNFYxMTJ6TTExMiAwdjE1MzZoNjcyVjBIMTEyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSIubnVsbCIgaG9yaXotYWR2LXg9IjAiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibm9ubWFya2luZ3JldHVybiIgaG9yaXotYWR2LXg9IjU5NyIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzcGFjZSIgaG9yaXotYWR2LXg9IjQ0OCIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkaWVyZXNpcyIgdW5pY29kZT0iwqgiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9ImNvcHlyaWdodCIgdW5pY29kZT0iwqkiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9InJlZ2lzdGVyZWQiIHVuaWNvZGU9IsKuIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhY3V0ZSIgdW5pY29kZT0iwrQiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9IkFFIiB1bmljb2RlPSLDhiIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0iT3NsYXNoIiB1bmljb2RlPSLDmCIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0idHJhZGVtYXJrIiB1bmljb2RlPSLihKIiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9ImluZmluaXR5IiB1bmljb2RlPSLiiJ4iIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9Im5vdGVxdWFsIiB1bmljb2RlPSLiiaAiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9ImdsYXNzIiB1bmljb2RlPSLvgIAiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY5OSAxMzUwcTAtMzUtNDMtNzhsLTYzMi02MzJ2LTc2OGgzMjBxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOUg0NDhxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDMyMHY3NjhsLTYzMiA2MzJxLTQzIDQzLTQzIDc4IDAgMjMgMTggMzYuNXQzOCAxNy41IDQzIDRoMTQwOHEyMyAwIDQzLTR0MzgtMTcuNSAxOC0zNi41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJtdXNpYyIgdW5pY29kZT0i74CBIiBkPSJNMTUzNiAxMzEyVjE5MnEwLTUwLTM0LTg5dC04Ni02MC41LTEwMy41LTMyVDEyMTYgMHQtOTYuNSAxMC41LTEwMy41IDMyLTg2IDYwLjUtMzQgODkgMzQgODkgODYgNjAuNSAxMDMuNSAzMlQxMjE2IDM4NHExMDUgMCAxOTItMzl2NTM3TDY0MCA2NDVWLTY0cTAtNTAtMzQtODl0LTg2LTYwLjUtMTAzLjUtMzJUMzIwLTI1NnQtOTYuNSAxMC41LTEwMy41IDMyVDM0LTE1MyAwLTY0dDM0IDg5IDg2IDYwLjUgMTAzLjUgMzJUMzIwIDEyOHExMDUgMCAxOTItMzl2OTY3cTAgMzEgMTkgNTYuNXQ0OSAzNS41bDgzMiAyNTZxMTIgNCAyOCA0IDQwIDAgNjgtMjh0MjgtNjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNlYXJjaCIgdW5pY29kZT0i74CCIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExNTIgNzA0cTAgMTg1LTEzMS41IDMxNi41VDcwNCAxMTUydC0zMTYuNS0xMzEuNVQyNTYgNzA0dDEzMS41LTMxNi41VDcwNCAyNTZ0MzE2LjUgMTMxLjVUMTE1MiA3MDR6bTUxMi04MzJxMC01Mi0zOC05MHQtOTAtMzhxLTU0IDAtOTAgMzhsLTM0MyAzNDJROTI0IDAgNzA0IDAgNTYxIDAgNDMwLjUgNTUuNXQtMjI1IDE1MC0xNTAgMjI1VDAgNzA0dDU1LjUgMjczLjUgMTUwIDIyNSAyMjUgMTUwVDcwNCAxNDA4dDI3My41LTU1LjUgMjI1LTE1MCAxNTAtMjI1VDE0MDggNzA0cTAtMjIwLTEyNC0zOTlsMzQzLTM0M3EzNy0zNyAzNy05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZW52ZWxvcGUiIHVuaWNvZGU9Iu+AgyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDMydjc2OHEtMzItMzYtNjktNjYtMjY4LTIwNi00MjYtMzM4LTUxLTQzLTgzLTY3dC04Ni41LTQ4LjVUODk3IDI1NmgtMnEtNDggMC0xMDIuNSAyNC41VDcwNiAzMjl0LTgzIDY3UTQ2NSA1MjggMTk3IDczNHEtMzcgMzAtNjkgNjZWMzJxMC0xMyA5LjUtMjIuNVQxNjAgMGgxNDcycTEzIDAgMjIuNSA5LjVUMTY2NCAzMnptMCAxMDUxdjI0LjVsLS41IDEzLTMgMTIuNS01LjUgOS05IDcuNS0xNCAyLjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMTIwcTAtMTY4IDE0Ny0yODQgMTkzLTE1MiA0MDEtMzE3IDYtNSAzNS0yOS41dDQ2LTM3LjUgNDQuNS0zMS41VDg1MiAzOTN0NDMtOWgycTIwIDAgNDMgOXQ1MC41IDI3LjVUMTAzNSA0NTJ0NDYgMzcuNSAzNSAyOS41cTIwOCAxNjUgNDAxIDMxNyA1NCA0MyAxMDAuNSAxMTUuNVQxNjY0IDEwODN6bTEyOCAzN1YzMnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDE2MHEtNjYgMC0xMTMgNDdUMCAzMnYxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaGVhcnQiIHVuaWNvZGU9Iu+AhCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04OTYtMTI4cS0yNiAwLTQ0IDE4TDIyOCA0OTJxLTEwIDgtMjcuNSAyNlQxNDUgNTgzLjUgNzcgNjgxIDIzLjUgODAyIDAgOTQwcTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41LTIxLjV0MTIwLTU4VDgyMCAxMjYwdDc2LTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNSAxMjAgNThUMTMxNCAxNDA4cTIyNCAwIDM1MS0xMjR0MTI3LTM0NHEwLTIyMS0yMjktNDUwTDk0MC0xMTBxLTE4LTE4LTQ0LTE4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdGFyIiB1bmljb2RlPSLvgIUiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA4ODlxMC0yMi0yNi00OGwtMzYzLTM1NCA4Ni01MDBxMS03IDEtMjAgMC0yMS0xMC41LTM1LjVUMTMyMS04M3EtMTkgMC00MCAxMkw4MzIgMTY1IDM4My03MXEtMjItMTItNDAtMTItMjEgMC0zMS41IDE0LjVUMzAxLTMzcTAgNiAyIDIwbDg2IDUwMEwyNSA4NDFRMCA4NjggMCA4ODlxMCAzNyA1NiA0Nmw1MDIgNzMgMjI1IDQ1NXExOSA0MSA0OSA0MXQ0OS00MWwyMjUtNDU1IDUwMi03M3E1Ni05IDU2LTQ2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdGFyX2VtcHR5IiB1bmljb2RlPSLvgIYiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTEzNyA1MzJsMzA2IDI5Ny00MjIgNjItMTg5IDM4Mi0xODktMzgyLTQyMi02MiAzMDYtMjk3LTczLTQyMSAzNzggMTk5IDM3Ny0xOTl6bTUyNyAzNTdxMC0yMi0yNi00OGwtMzYzLTM1NCA4Ni01MDBxMS03IDEtMjAgMC01MC00MS01MC0xOSAwLTQwIDEyTDgzMiAxNjUgMzgzLTcxcS0yMi0xMi00MC0xMi0yMSAwLTMxLjUgMTQuNVQzMDEtMzNxMCA2IDIgMjBsODYgNTAwTDI1IDg0MVEwIDg2OCAwIDg4OXEwIDM3IDU2IDQ2bDUwMiA3MyAyMjUgNDU1cTE5IDQxIDQ5IDQxdDQ5LTQxbDIyNS00NTUgNTAyLTczcTU2LTkgNTYtNDZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVzZXIiIHVuaWNvZGU9Iu+AhyIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMjgwIDEzN3EwLTEwOS02Mi41LTE4N1QxMDY3LTEyOEgyMTNxLTg4IDAtMTUwLjUgNzhUMCAxMzdxMCA4NSA4LjUgMTYwLjV0MzEuNSAxNTIgNTguNSAxMzEgOTQgODlUMzI3IDcwNHExMzEtMTI4IDMxMy0xMjh0MzEzIDEyOHE3NiAwIDEzNC41LTM0LjV0OTQtODkgNTguNS0xMzEgMzEuNS0xNTJUMTI4MCAxMzd6bS0yNTYgODg3cTAtMTU5LTExMi41LTI3MS41VDY0MCA2NDAgMzY4LjUgNzUyLjUgMjU2IDEwMjR0MTEyLjUgMjcxLjVUNjQwIDE0MDh0MjcxLjUtMTEyLjVUMTAyNCAxMDI0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxtIiB1bmljb2RlPSLvgIgiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMzg0LTY0VjY0cTAgMjYtMTkgNDV0LTQ1IDE5SDE5MnEtMjYgMC00NS0xOXQtMTktNDVWLTY0cTAtMjYgMTktNDV0NDUtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6bTAgMzg0djEyOHEwIDI2LTE5IDQ1dC00NSAxOUgxOTJxLTI2IDAtNDUtMTl0LTE5LTQ1VjMyMHEwLTI2IDE5LTQ1dDQ1LTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1em0wIDM4NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTlIMTkycS0yNiAwLTQ1LTE5dC0xOS00NVY3MDRxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTQwOC02NHY1MTJxMCAyNi0xOSA0NXQtNDUgMTlINTc2cS0yNiAwLTQ1LTE5dC0xOS00NVYtNjRxMC0yNiAxOS00NXQ0NS0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDEwODh2MTI4cTAgMjYtMTkgNDV0LTQ1IDE5SDE5MnEtMjYgMC00NS0xOXQtMTktNDV2LTEyOHEwLTI2IDE5LTQ1dDQ1LTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyLTY0VjY0cTAgMjYtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAtNDUtMTl0LTE5LTQ1Vi02NHEwLTI2IDE5LTQ1dDQ1LTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1em0tMzg0IDc2OHY1MTJxMCAyNi0xOSA0NXQtNDUgMTlINTc2cS0yNiAwLTQ1LTE5dC0xOS00NVY3MDRxMC0yNiAxOS00NXQ0NS0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXptMzg0LTM4NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMC00NS0xOXQtMTktNDVWMzIwcTAtMjYgMTktNDV0NDUtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6bTAgMzg0djEyOHEwIDI2LTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwLTQ1LTE5dC0xOS00NVY3MDRxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXptMCAzODR2MTI4cTAgMjYtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAtNDUtMTl0LTE5LTQ1di0xMjhxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXptMTI4IDE2MFYtOTZxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAtOTZ2MTM0NHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InRoX2xhcmdlIiB1bmljb2RlPSLvgIkiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzY4IDUxMlYxMjhxMC01Mi0zOC05MFQ2NDAgMEgxMjhRNzYgMCAzOCAzOFQwIDEyOHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MC0zOHQzOC05MHptMCA3NjhWODk2cTAtNTItMzgtOTB0LTkwLTM4SDEyOHEtNTIgMC05MCAzOFQwIDg5NnYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MC0zOHQzOC05MHptODk2LTc2OFYxMjhxMC01Mi0zOC05MHQtOTAtMzhoLTUxMnEtNTIgMC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAtMzh0MzgtOTB6bTAgNzY4Vjg5NnEwLTUyLTM4LTkwdC05MC0zOGgtNTEycS01MiAwLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MC0zOHQzOC05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idGgiIHVuaWNvZGU9Iu+AiiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01MTIgMjg4Vjk2cTAtNDAtMjgtNjhUNDE2IDBIOTZRNTYgMCAyOCAyOFQwIDk2djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4LTI4dDI4LTY4em0wIDUxMlY2MDhxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMCA2MDh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjgtMjh0MjgtNjh6bTY0MC01MTJWOTZxMC00MC0yOC02OHQtNjgtMjhINzM2cS00MCAwLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OC0yOHQyOC02OHpNNTEyIDEzMTJ2LTE5MnEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjgtMjh0MjgtNjh6bTY0MC01MTJWNjA4cTAtNDAtMjgtNjh0LTY4LTI4SDczNnEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjgtMjh0MjgtNjh6bTY0MC01MTJWOTZxMC00MC0yOC02OHQtNjgtMjhoLTMyMHEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjgtMjh0MjgtNjh6bS02NDAgMTAyNHYtMTkycTAtNDAtMjgtNjh0LTY4LTI4SDczNnEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjgtMjh0MjgtNjh6bTY0MC01MTJWNjA4cTAtNDAtMjgtNjh0LTY4LTI4aC0zMjBxLTQwIDAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4LTI4dDI4LTY4em0wIDUxMnYtMTkycTAtNDAtMjgtNjh0LTY4LTI4aC0zMjBxLTQwIDAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4LTI4dDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0aF9saXN0IiB1bmljb2RlPSLvgIsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNTEyIDI4OFY5NnEwLTQwLTI4LTY4VDQxNiAwSDk2UTU2IDAgMjggMjhUMCA5NnYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OC0yOHQyOC02OHptMCA1MTJWNjA4cTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAgNjA4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4LTI4dDI4LTY4em0xMjgwLTUxMlY5NnEwLTQwLTI4LTY4dC02OC0yOEg3MzZxLTQwIDAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDk2MHE0MCAwIDY4LTI4dDI4LTY4ek01MTIgMTMxMnYtMTkycTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OC0yOHQyOC02OHptMTI4MC01MTJWNjA4cTAtNDAtMjgtNjh0LTY4LTI4SDczNnEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjgtMjh0MjgtNjh6bTAgNTEydi0xOTJxMC00MC0yOC02OHQtNjgtMjhINzM2cS00MCAwLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg5NjBxNDAgMCA2OC0yOHQyOC02OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ib2siIHVuaWNvZGU9Iu+AjCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjcxIDk3MHEwLTQwLTI4LTY4TDkxOSAxNzggNzgzIDQycS0yOC0yOC02OC0yOHQtNjggMjhMNTExIDE3OCAxNDkgNTQwcS0yOCAyOC0yOCA2OHQyOCA2OGwxMzYgMTM2cTI4IDI4IDY4IDI4dDY4LTI4bDI5NC0yOTUgNjU2IDY1N3EyOCAyOCA2OCAyOHQ2OC0yOGwxMzYtMTM2cTI4LTI4IDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJyZW1vdmUiIHVuaWNvZGU9Iu+AjSIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjk4IDIxNHEwLTQwLTI4LTY4TDExMzQgMTBxLTI4LTI4LTY4LTI4dC02OCAyOEw3MDQgMzA0IDQxMCAxMHEtMjgtMjgtNjgtMjh0LTY4IDI4TDEzOCAxNDZxLTI4IDI4LTI4IDY4dDI4IDY4bDI5NCAyOTQtMjk0IDI5NHEtMjggMjgtMjggNjh0MjggNjhsMTM2IDEzNnEyOCAyOCA2OCAyOHQ2OC0yOGwyOTQtMjk0IDI5NCAyOTRxMjggMjggNjggMjh0NjgtMjhsMTM2LTEzNnEyOC0yOCAyOC02OHQtMjgtNjhMOTc2IDU3NmwyOTQtMjk0cTI4LTI4IDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ6b29tX2luIiB1bmljb2RlPSLvgI4iIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyNCA3MzZ2LTY0cTAtMTMtOS41LTIyLjVUOTkyIDY0MEg3NjhWNDE2cTAtMTMtOS41LTIyLjVUNzM2IDM4NGgtNjRxLTEzIDAtMjIuNSA5LjVUNjQwIDQxNnYyMjRINDE2cS0xMyAwLTIyLjUgOS41VDM4NCA2NzJ2NjRxMCAxMyA5LjUgMjIuNVQ0MTYgNzY4aDIyNHYyMjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41VDc2OCA5OTJWNzY4aDIyNHExMyAwIDIyLjUtOS41dDkuNS0yMi41em0xMjgtMzJxMCAxODUtMTMxLjUgMzE2LjVUNzA0IDExNTJ0LTMxNi41LTEzMS41VDI1NiA3MDR0MTMxLjUtMzE2LjVUNzA0IDI1NnQzMTYuNSAxMzEuNVQxMTUyIDcwNHptNTEyLTgzMnEwLTUzLTM3LjUtOTAuNVQxNTM2LTI1NnEtNTQgMC05MCAzOGwtMzQzIDM0MlE5MjQgMCA3MDQgMCA1NjEgMCA0MzAuNSA1NS41dC0yMjUgMTUwLTE1MCAyMjVUMCA3MDR0NTUuNSAyNzMuNSAxNTAgMjI1IDIyNSAxNTBUNzA0IDE0MDh0MjczLjUtNTUuNSAyMjUtMTUwIDE1MC0yMjVUMTQwOCA3MDRxMC0yMjAtMTI0LTM5OWwzNDMtMzQzcTM3LTM3IDM3LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ6b29tX291dCIgdW5pY29kZT0i74CQIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTEwMjQgNzM2di02NHEwLTEzLTkuNS0yMi41VDk5MiA2NDBINDE2cS0xMyAwLTIyLjUgOS41VDM4NCA2NzJ2NjRxMCAxMyA5LjUgMjIuNVQ0MTYgNzY4aDU3NnExMyAwIDIyLjUtOS41dDkuNS0yMi41em0xMjgtMzJxMCAxODUtMTMxLjUgMzE2LjVUNzA0IDExNTJ0LTMxNi41LTEzMS41VDI1NiA3MDR0MTMxLjUtMzE2LjVUNzA0IDI1NnQzMTYuNSAxMzEuNVQxMTUyIDcwNHptNTEyLTgzMnEwLTUzLTM3LjUtOTAuNVQxNTM2LTI1NnEtNTQgMC05MCAzOGwtMzQzIDM0MlE5MjQgMCA3MDQgMCA1NjEgMCA0MzAuNSA1NS41dC0yMjUgMTUwLTE1MCAyMjVUMCA3MDR0NTUuNSAyNzMuNSAxNTAgMjI1IDIyNSAxNTBUNzA0IDE0MDh0MjczLjUtNTUuNSAyMjUtMTUwIDE1MC0yMjVUMTQwOCA3MDRxMC0yMjAtMTI0LTM5OWwzNDMtMzQzcTM3LTM3IDM3LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJvZmYiIHVuaWNvZGU9Iu+AkSIgZD0iTTE1MzYgNjQwcTAtMTU2LTYxLTI5OFQxMzExIDk3IDEwNjYtNjd0LTI5OC02MS0yOTggNjFUMjI1IDk3IDYxIDM0MiAwIDY0MHEwIDE4MiA4MC41IDM0M1QzMDcgMTI1M3E0MyAzMiA5NS41IDI1dDgzLjUtNTBxMzItNDIgMjQuNS05NC41VDQ2MSAxMDQ5cS05OC03NC0xNTEuNS0xODFUMjU2IDY0MHEwLTEwNCA0MC41LTE5OC41VDQwNiAyNzh0MTYzLjUtMTA5LjVUNzY4IDEyOHQxOTguNSA0MC41VDExMzAgMjc4dDEwOS41IDE2My41VDEyODAgNjQwcTAgMTIxLTUzLjUgMjI4VDEwNzUgMTA0OXEtNDIgMzItNDkuNSA4NC41dDI0LjUgOTQuNXEzMSA0MyA4NCA1MHQ5NS0yNXExNDYtMTA5IDIyNi41LTI3MHQ4MC41LTM0M3ptLTY0MCA3NjhWNzY4cTAtNTItMzgtOTB0LTkwLTM4LTkwIDM4LTM4IDkwdjY0MHEwIDUyIDM4IDkwdDkwIDM4IDkwLTM4IDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzaWduYWwiIHVuaWNvZGU9Iu+AkiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgOTZWLTk2cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5VDAtOTZWOTZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem0zODQgMTI4Vi05NnEwLTE0LTktMjN0LTIzLTlINDE2cS0xNCAwLTIzIDl0LTkgMjN2MzIwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptMzg0IDI1NlYtOTZxMC0xNC05LTIzdC0yMy05SDgwMHEtMTQgMC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjN6bTM4NCAzODRWLTk2cTAtMTQtOS0yM3QtMjMtOWgtMTkycS0xNCAwLTIzIDl0LTkgMjN2OTYwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptMzg0IDUxMlYtOTZxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNDcycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY29nIiB1bmljb2RlPSLvgJMiIGQ9Ik0xMDI0IDY0MHEwIDEwNi03NSAxODF0LTE4MSA3NS0xODEtNzUtNzUtMTgxIDc1LTE4MSAxODEtNzUgMTgxIDc1IDc1IDE4MXptNTEyIDEwOVY1MjdxMC0xMi04LTIzdC0yMC0xM2wtMTg1LTI4cS0xOS01NC0zOS05MSAzNS01MCAxMDctMTM4IDEwLTEyIDEwLTI1dC05LTIzcS0yNy0zNy05OS0xMDh0LTk0LTcxcS0xMiAwLTI2IDlsLTEzOCAxMDhxLTQ0LTIzLTkxLTM4LTE2LTEzNi0yOS0xODYtNy0yOC0zNi0yOEg2NTdxLTE0IDAtMjQuNSA4LjVUNjIxLTk4TDU5MyA4NnEtNDkgMTYtOTAgMzdMMzYyIDE2cS0xMC05LTI1LTktMTQgMC0yNSAxMS0xMjYgMTE0LTE2NSAxNjgtNyAxMC03IDIzIDAgMTIgOCAyMyAxNSAyMSA1MSA2Ni41dDU0IDcwLjVxLTI3IDUwLTQxIDk5TDI5IDQ5NXEtMTMgMi0yMSAxMi41VDAgNTMxdjIyMnEwIDEyIDggMjN0MTkgMTNsMTg2IDI4cTE0IDQ2IDM5IDkyLTQwIDU3LTEwNyAxMzgtMTAgMTItMTAgMjQgMCAxMCA5IDIzIDI2IDM2IDk4LjUgMTA3LjVUMzM3IDEyNzNxMTMgMCAyNi0xMGwxMzgtMTA3cTQ0IDIzIDkxIDM4IDE2IDEzNiAyOSAxODYgNyAyOCAzNiAyOGgyMjJxMTQgMCAyNC41LTguNVQ5MTUgMTM3OGwyOC0xODRxNDktMTYgOTAtMzdsMTQyIDEwN3E5IDkgMjQgOSAxMyAwIDI1LTEwIDEyOS0xMTkgMTY1LTE3MCA3LTggNy0yMiAwLTEyLTgtMjMtMTUtMjEtNTEtNjYuNXQtNTQtNzAuNXEyNi01MCA0MS05OGwxODMtMjhxMTMtMiAyMS0xMi41dDgtMjMuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idHJhc2giIHVuaWNvZGU9Iu+AlCIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik01MTIgODAwVjIyNHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMtOXQ5LTIzem0yNTYgMFYyMjRxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzLTl0OS0yM3ptMjU2IDBWMjI0cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMy05dDktMjN6bTEyOC03MjR2OTQ4SDI1NlY3NnEwLTIyIDctNDAuNXQxNC41LTI3VDI4OCAwaDgzMnEzIDAgMTAuNSA4LjV0MTQuNSAyNyA3IDQwLjV6TTQ4MCAxMTUyaDQ0OGwtNDggMTE3cS03IDktMTcgMTFINTQ2cS0xMC0yLTE3LTExem05MjgtMzJ2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZWNzZxMC04My00Ny0xNDMuNVQxMTIwLTEyOEgyODhxLTY2IDAtMTEzIDU4LjVUMTI4IDcydjk1MkgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDMwOWw3MCAxNjdxMTUgMzcgNTQgNjN0NzkgMjZoMzIwcTQwIDAgNzktMjZ0NTQtNjNsNzAtMTY3aDMwOXExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaG9tZSIgdW5pY29kZT0i74CVIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNTQ0VjY0cTAtMjYtMTktNDV0LTQ1LTE5SDk2MHYzODRINzA0VjBIMzIwcS0yNiAwLTQ1IDE5dC0xOSA0NXY0ODBxMCAxIC41IDN0LjUgM2w1NzUgNDc0IDU3NS00NzRxMS0yIDEtNnptMjIzIDY5bC02Mi03NHEtOC05LTIxLTExaC0zcS0xMyAwLTIxIDdsLTY5MiA1NzctNjkyLTU3N3EtMTItOC0yNC03LTEzIDItMjEgMTFsLTYyIDc0cS04IDEwLTcgMjMuNVQzNyA2NThsNzE5IDU5OXEzMiAyNiA3NiAyNnQ3Ni0yNmwyNDQtMjA0djE5NXEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjNWODQwbDIxOS0xODJxMTAtOCAxMS0yMS41dC03LTIzLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZpbGVfYWx0IiB1bmljb2RlPSLvgJYiIGQ9Ik0xNDY4IDExNTZxMjgtMjggNDgtNzZ0MjAtODhWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwLTE2MHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODgtMjB0NzYtNDh6bS00NDQgMjQ0di0zNzZoMzc2cS0xMCAyOS0yMiA0MWwtMzEzIDMxM3EtMTIgMTItNDEgMjJ6bTM4NC0xNTI4Vjg5Nkg5OTJxLTQwIDAtNjggMjh0LTI4IDY4djQxNkgxMjhWLTEyOGgxMjgweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0aW1lIiB1bmljb2RlPSLvgJciIGQ9Ik04OTYgOTkyVjU0NHEwLTE0LTktMjN0LTIzLTlINTQ0cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMjI0djM1MnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzLTl0OS0yM3ptNDE2LTM1MnEwIDE0OC03MyAyNzN0LTE5OCAxOTgtMjczIDczLTI3My03My0xOTgtMTk4LTczLTI3MyA3My0yNzMgMTk4LTE5OCAyNzMtNzMgMjczIDczIDE5OCAxOTggNzMgMjczem0yMjQgMHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icm9hZCIgdW5pY29kZT0i74CYIiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTExMTEgNTQwdjRsLTI0IDMyMHEtMSAxMy0xMSAyMi41dC0yMyA5LjVIODY3cS0xMyAwLTIzLTkuNVQ4MzMgODY0bC0yNC0zMjB2LTRxLTEtMTIgOC0yMHQyMS04aDI0NHExMiAwIDIxIDh0OCAyMHptNzU5LTQ2N3EwLTczLTQ2LTczaC03MDRxMTMgMCAyMiA5LjV0OCAyMi41bC0yMCAyNTZxLTEgMTMtMTEgMjIuNXQtMjMgOS41SDgyNHEtMTMgMC0yMy05LjVUNzkwIDI4OEw3NzAgMzJxLTEtMTMgOC0yMi41VDgwMCAwSDk2UTUwIDAgNTAgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAtMjMtOS41dC0xMS0yMi41bC0xNS0xOTJxLTEtMTQgOC0yM3QyMi05aDE2NnExMyAwIDIyIDl0OCAyM2wtMTUgMTkycS0xIDEzLTExIDIyLjV0LTIzIDkuNWgzMzlxMjAgMCAzOC0xNHQyNi0zM2w0MTctMTA0NHEyNi02MiAyNi0xMTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImRvd25sb2FkX2FsdCIgdW5pY29kZT0i74CZIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTEyODAgMTkycTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em0yNTYgMHEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptMTI4IDIyNFY5NnEwLTQwLTI4LTY4dC02OC0yOEg5NlE1NiAwIDI4IDI4VDAgOTZ2MzIwcTAgNDAgMjggNjh0NjggMjhoNDY1bDEzNS0xMzZxNTgtNTYgMTM2LTU2dDEzNiA1NmwxMzYgMTM2aDQ2NHE0MCAwIDY4LTI4dDI4LTY4em0tMzI1IDU2OXExNy00MS0xNC03MEw4NzcgNDY3cS0xOC0xOS00NS0xOXQtNDUgMTlMMzM5IDkxNXEtMzEgMjktMTQgNzAgMTcgMzkgNTkgMzloMjU2djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnEyNiAwIDQ1LTE5dDE5LTQ1di00NDhoMjU2cTQyIDAgNTktMzl6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImRvd25sb2FkIiB1bmljb2RlPSLvgJoiIGQ9Ik0xMTIwIDYwOHEwLTEyLTEwLTI0TDc5MSAyNjVxLTExLTktMjMtOXQtMjMgOUw0MjUgNTg1cS0xNSAxNi03IDM1IDggMjAgMzAgMjBoMTkydjM1MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjNWNjQwaDE5MnExNCAwIDIzLTl0OS0yM3ptLTM1MiA1NzZxLTE0OCAwLTI3My03M1QyOTcgOTEzdC03My0yNzMgNzMtMjczIDE5OC0xOTggMjczLTczIDI3MyA3MyAxOTggMTk4IDczIDI3My03MyAyNzMtMTk4IDE5OC0yNzMgNzN6bTc2OC01NDRxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVwbG9hZCIgdW5pY29kZT0i74CbIiBkPSJNMTExOCA2NjBxLTgtMjAtMzAtMjBIODk2VjI4OHEwLTE0LTktMjN0LTIzLTlINjcycS0xNCAwLTIzIDl0LTkgMjN2MzUySDQ0OHEtMTQgMC0yMyA5dC05IDIzcTAgMTIgMTAgMjRsMzE5IDMxOXExMSA5IDIzIDl0MjMtOWwzMjAtMzIwcTE1LTE2IDctMzV6bS0zNTAgNTI0cS0xNDggMC0yNzMtNzNUMjk3IDkxM3QtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzMtNzMgMjczLTE5OCAxOTgtMjczIDczem03NjgtNTQ0cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJpbmJveCIgdW5pY29kZT0i74CcIiBkPSJNMTAyMyA1NzZoMzE2cS0xIDMtMi41IDguNXQtMi41IDcuNWwtMjEyIDQ5Nkg0MTRMMjAyIDU5MnEtMS0zLTIuNS04LjVUMTk3IDU3NmgzMTZsOTUtMTkyaDMyMHptNTEzLTMwVjY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0UTM4IDAgMTkgMTlUMCA2NHY0ODJxMCA2MiAyNSAxMjNsMjM4IDU1MnExMCAyNSAzNi41IDQydDUyLjUgMTdoODMycTI2IDAgNTIuNS0xN3QzNi41LTQybDIzOC01NTJxMjUtNjEgMjUtMTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJwbGF5X2NpcmNsZSIgdW5pY29kZT0i74CdIiBkPSJNMTE4NCA2NDBxMC0zNy0zMi01NUw2MDggMjY1cS0xNS05LTMyLTktMTYgMC0zMiA4LTMyIDE5LTMyIDU2djY0MHEwIDM3IDMyIDU2IDMzIDE4IDY0LTFsNTQ0LTMyMHEzMi0xOCAzMi01NXptMTI4IDBxMCAxNDgtNzMgMjczdC0xOTggMTk4LTI3MyA3My0yNzMtNzMtMTk4LTE5OC03My0yNzMgNzMtMjczIDE5OC0xOTggMjczLTczIDI3MyA3MyAxOTggMTk4IDczIDI3M3ptMjI0IDBxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlcGVhdCIgdW5pY29kZT0i74CeIiBkPSJNMTUzNiAxMjgwVjgzMnEwLTI2LTE5LTQ1dC00NS0xOWgtNDQ4cS00MiAwLTU5IDQwLTE3IDM5IDE0IDY5bDEzOCAxMzhxLTE0OCAxMzctMzQ5IDEzNy0xMDQgMC0xOTguNS00MC41VDQwNiAxMDAyIDI5Ni41IDgzOC41IDI1NiA2NDB0NDAuNS0xOTguNVQ0MDYgMjc4dDE2My41LTEwOS41VDc2OCAxMjhxMTE5IDAgMjI1IDUydDE3OSAxNDdxNyAxMCAyMyAxMiAxNSAwIDI1LTlsMTM3LTEzOHE5LTggOS41LTIwLjVUMTM1OSAxNDlRMTI1MCAxNyAxMDk1LTU1LjVUNzY4LTEyOHEtMTU2IDAtMjk4IDYxVDIyNSA5NyA2MSAzNDIgMCA2NDB0NjEgMjk4IDE2NCAyNDUgMjQ1IDE2NCAyOTggNjFxMTQ3IDAgMjg0LjUtNTUuNVQxMjk3IDExOTZsMTMwIDEyOXEyOSAzMSA3MCAxNCAzOS0xNyAzOS01OXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icmVmcmVzaCIgdW5pY29kZT0i74ChIiBkPSJNMTUxMSA0ODBxMC01LTEtNy02NC0yNjgtMjY4LTQzNC41VDc2NC0xMjhxLTE0NiAwLTI4Mi41IDU1VDIzOCA4NEwxMDktNDVROTAtNjQgNjQtNjRUMTktNDUgMCAwdjQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1LTE5dDE5LTQ1LTE5LTQ1TDQyMCAyNjZxNzEtNjYgMTYxLTEwMnQxODctMzZxMTM0IDAgMjUwIDY1dDE4NiAxNzlxMTEgMTcgNTMgMTE3IDggMjMgMzAgMjNoMTkycTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTI1IDgwMFY4MzJxMC0yNi0xOS00NXQtNDUtMTloLTQ0OHEtMjYgMC00NSAxOXQtMTkgNDUgMTkgNDVsMTM4IDEzOHEtMTQ4IDEzNy0zNDkgMTM3LTEzNCAwLTI1MC02NVQzMzIgOTA4cS0xMS0xNy01My0xMTctOC0yMy0zMC0yM0g1MHEtMTMgMC0yMi41IDkuNVQxOCA4MDB2N3E2NSAyNjggMjcwIDQzNC41VDc2OCAxNDA4cTE0NiAwIDI4NC01NS41dDI0NS0xNTYuNWwxMzAgMTI5cTE5IDE5IDQ1IDE5dDQ1LTE5IDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsaXN0X2FsdCIgdW5pY29kZT0i74CiIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4NCAzNTJ2LTY0cTAtMTMtOS41LTIyLjVUMzUyIDI1NmgtNjRxLTEzIDAtMjIuNSA5LjVUMjU2IDI4OHY2NHEwIDEzIDkuNSAyMi41VDI4OCAzODRoNjRxMTMgMCAyMi41LTkuNVQzODQgMzUyem0wIDI1NnYtNjRxMC0xMy05LjUtMjIuNVQzNTIgNTEyaC02NHEtMTMgMC0yMi41IDkuNVQyNTYgNTQ0djY0cTAgMTMgOS41IDIyLjVUMjg4IDY0MGg2NHExMyAwIDIyLjUtOS41VDM4NCA2MDh6bTAgMjU2di02NHEwLTEzLTkuNS0yMi41VDM1MiA3NjhoLTY0cS0xMyAwLTIyLjUgOS41VDI1NiA4MDB2NjRxMCAxMyA5LjUgMjIuNVQyODggODk2aDY0cTEzIDAgMjIuNS05LjVUMzg0IDg2NHptMTE1Mi01MTJ2LTY0cTAtMTMtOS41LTIyLjVUMTUwNCAyNTZINTQ0cS0xMyAwLTIyLjUgOS41VDUxMiAyODh2NjRxMCAxMyA5LjUgMjIuNVQ1NDQgMzg0aDk2MHExMyAwIDIyLjUtOS41dDkuNS0yMi41em0wIDI1NnYtNjRxMC0xMy05LjUtMjIuNVQxNTA0IDUxMkg1NDRxLTEzIDAtMjIuNSA5LjVUNTEyIDU0NHY2NHEwIDEzIDkuNSAyMi41VDU0NCA2NDBoOTYwcTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgMjU2di02NHEwLTEzLTkuNS0yMi41VDE1MDQgNzY4SDU0NHEtMTMgMC0yMi41IDkuNVQ1MTIgODAwdjY0cTAgMTMgOS41IDIyLjVUNTQ0IDg5Nmg5NjBxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptMTI4LTcwNHY4MzJxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCA5OTJWMTYwcTAtMTMgOS41LTIyLjVUMTYwIDEyOGgxNDcycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6bTEyOCAxMDg4VjE2MHEwLTY2LTQ3LTExM1QxNjMyIDBIMTYwUTk0IDAgNDcgNDdUMCAxNjB2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImxvY2siIHVuaWNvZGU9Iu+AoyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0zMjAgNzY4aDUxMnYxOTJxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MVY3Njh6bTgzMi05NlY5NnEwLTQwLTI4LTY4dC02OC0yOEg5NlE1NiAwIDI4IDI4VDAgOTZ2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MTkycTAgMTg0IDEzMiAzMTZ0MzE2IDEzMiAzMTYtMTMyIDEzMi0zMTZWNzY4aDMycTQwIDAgNjgtMjh0MjgtNjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZsYWciIHVuaWNvZGU9Iu+ApCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zMjAgMTI4MHEwLTcyLTY0LTExMFYtOTZxMC0xMy05LjUtMjIuNVQyMjQtMTI4aC02NHEtMTMgMC0yMi41IDkuNVQxMjgtOTZ2MTI2NnEtNjQgMzgtNjQgMTEwIDAgNTMgMzcuNSA5MC41VDE5MiAxNDA4dDkwLjUtMzcuNVQzMjAgMTI4MHptMTQ3Mi02NFY0NTNxMC0yNS0xMi41LTM4LjVUMTc0MCAzODdxLTIxNS0xMTYtMzY5LTExNi02MSAwLTEyMy41IDIyVDExMzkgMzQxdC0xMTUuNSA0OFQ4ODEgNDExcS0xOTIgMC00NjQtMTQ2LTE3LTktMzMtOS0yNiAwLTQ1IDE5dC0xOSA0NXY3NDJxMCAzMiAzMSA1NSAyMSAxNCA3OSA0MyAyMzYgMTIwIDQyMSAxMjAgMTA3IDAgMjAwLTI5dDIxOS04OHEzOC0xOSA4OC0xOSA1NCAwIDExNy41IDIxdDExMCA0NyA4OCA0NyA1NC41IDIxcTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhlYWRwaG9uZXMiIHVuaWNvZGU9Iu+ApSIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDY1MHEwLTE2Ni02MC0zMTRsLTIwLTQ5LTE4NS0zM3EtMjItODMtOTAuNS0xMzYuNVQxMTUyIDY0VjMycTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMy05dDktMjN2LTMycTcxIDAgMTMwLTM1LjV0OTMtOTUuNWw2OCAxMnEyOSA5NSAyOSAxOTMgMCAxNDgtODggMjc5dC0yMzYuNSAyMDktMzE1LjUgNzgtMzE1LjUtNzhUMjgwIDkyOXQtODgtMjc5cTAtOTggMjktMTkzbDY4LTEycTM0IDYwIDkzIDk1LjVUNTEyIDU3NnYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzLTl0OS0yM1YzMnEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2MzJxLTg4IDAtMTU2LjUgNTMuNVQyNjUgMjU0TDgwIDI4N2wtMjAgNDlRMCA0ODQgMCA2NTBxMCAxNTEgNjcgMjkxdDE3OSAyNDIuNVQ1MTIgMTM0N3QzMjAgNjEgMzIwLTYxIDI2Ni0xNjMuNVQxNTk3IDk0MXQ2Ny0yOTF6Ii8+PGdseXBoIGdseXBoLW5hbWU9InZvbHVtZV9vZmYiIHVuaWNvZGU9Iu+ApiIgaG9yaXotYWR2LXg9Ijc2OCIgZD0iTTc2OCAxMTg0Vjk2cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5TDMyNiAzODRINjRxLTI2IDAtNDUgMTlUMCA0NDh2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUtMTkgMTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InZvbHVtZV9kb3duIiB1bmljb2RlPSLvgKciIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNzY4IDExODRWOTZxMC0yNi0xOS00NXQtNDUtMTktNDUgMTlMMzI2IDM4NEg2NHEtMjYgMC00NSAxOVQwIDQ0OHYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NS0xOSAxOS00NXptMzg0LTU0NHEwLTc2LTQyLjUtMTQxLjVUOTk3IDQwNXEtMTAtNS0yNS01LTI2IDAtNDUgMTguNVQ5MDggNDY0cTAgMjEgMTIgMzUuNXQyOSAyNSAzNCAyMyAyOSAzNiAxMiA1Ni41LTEyIDU2LjUtMjkgMzYtMzQgMjMtMjkgMjUtMTIgMzUuNXEwIDI3IDE5IDQ1LjV0NDUgMTguNXExNSAwIDI1LTUgNzAtMjcgMTEyLjUtOTN0NDIuNS0xNDJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InZvbHVtZV91cCIgdW5pY29kZT0i74CoIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMTg0Vjk2cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5TDMyNiAzODRINjRxLTI2IDAtNDUgMTlUMCA0NDh2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUtMTkgMTktNDV6bTM4NC01NDRxMC03Ni00Mi41LTE0MS41VDk5NyA0MDVxLTEwLTUtMjUtNS0yNiAwLTQ1IDE4LjVUOTA4IDQ2NHEwIDIxIDEyIDM1LjV0MjkgMjUgMzQgMjMgMjkgMzYgMTIgNTYuNS0xMiA1Ni41LTI5IDM2LTM0IDIzLTI5IDI1LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNS01IDcwLTI3IDExMi41LTkzdDQyLjUtMTQyem0yNTYgMHEwLTE1My04NS0yODIuNVQxMDk4IDE2OXEtMTMtNS0yNS01LTI3IDAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTkgNTYgMjkgNzYgNDQgNzQgNTQgMTE1LjUgMTM1LjVUMTI4MCA2NDB0LTQxLjUgMTczLjVUMTEyMyA5NDlxLTIwIDE1LTc2IDQ0LTM5IDIwLTM5IDU5IDAgMjYgMTkgNDV0NDUgMTlxMTMgMCAyNi01IDE0MC01OSAyMjUtMTg4LjV0ODUtMjgyLjV6bTI1NiAwcTAtMjMwLTEyNy00MjIuNVQxMTk5LTY2cS0xMy01LTI2LTUtMjYgMC00NSAxOXQtMTkgNDVxMCAzNiAzOSA1OSA3IDQgMjIuNSAxMC41VDExOTMgNzNxNDYgMjUgODIgNTEgMTIzIDkxIDE5MiAyMjd0NjkgMjg5LTY5IDI4OS0xOTIgMjI3cS0zNiAyNi04MiA1MS03IDQtMjIuNSAxMC41VDExNDggMTIyOHEtMzkgMjMtMzkgNTkgMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2LTUgMjExLTkxIDMzOC0yODMuNVQxNjY0IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icXJjb2RlIiB1bmljb2RlPSLvgKkiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDM4NFYyNTZIMjU2djEyOGgxMjh6bTAgNzY4di0xMjhIMjU2djEyOGgxMjh6bTc2OCAwdi0xMjhoLTEyOHYxMjhoMTI4ek0xMjggMTI5aDM4NHYzODNIMTI4VjEyOXptMCA3NjdoMzg0djM4NEgxMjhWODk2em03NjggMGgzODR2Mzg0SDg5NlY4OTZ6TTY0MCA2NDBWMEgwdjY0MGg2NDB6bTUxMi01MTJWMGgtMTI4djEyOGgxMjh6bTI1NiAwVjBoLTEyOHYxMjhoMTI4em0wIDUxMlYyNTZoLTM4NHYxMjhIODk2VjBINzY4djY0MGgzODRWNTEyaDEyOHYxMjhoMTI4em0tNzY4IDc2OFY3NjhIMHY2NDBoNjQwem03NjggMFY3NjhINzY4djY0MGg2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJhcmNvZGUiIHVuaWNvZGU9Iu+AqiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02MyAwSDB2MTQwOGg2M1Ywem02MyAxSDk0djE0MDdoMzJWMXptOTQgMGgtMzF2MTQwN2gzMVYxem0xNTcgMGgtMzF2MTQwN2gzMVYxem0xNTcgMGgtNjJ2MTQwN2g2MlYxem0xMjYgMGgtMzF2MTQwN2gzMVYxem02MyAwaC0zMXYxNDA3aDMxVjF6bTYzIDBoLTMxdjE0MDdoMzFWMXptMTU3IDBoLTYzdjE0MDdoNjNWMXptMTU3IDBoLTYzdjE0MDdoNjNWMXptMTI2IDBoLTYzdjE0MDdoNjNWMXptMTI2IDBoLTYzdjE0MDdoNjNWMXptOTQgMGgtNjN2MTQwN2g2M1Yxem0xODkgMGgtOTR2MTQwN2g5NFYxem02MyAwaC0zMnYxNDA3aDMyVjF6bTk0LTFoLTYzdjE0MDhoNjNWMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idGFnIiB1bmljb2RlPSLvgKsiIGQ9Ik00NDggMTA4OHEwIDUzLTM3LjUgOTAuNVQzMjAgMTIxNnQtOTAuNS0zNy41VDE5MiAxMDg4dDM3LjUtOTAuNVQzMjAgOTYwdDkwLjUgMzcuNVQ0NDggMTA4OHptMTA2Ny01NzZxMC01My0zNy05MEw5ODctNzBxLTM5LTM3LTkxLTM3LTUzIDAtOTAgMzdMOTEgNjQ2cS0zOCAzNy02NC41IDEwMVQwIDg2NHY0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTctMjYuNXQxMDItNjQuNWw3MTUtNzE0cTM3LTM5IDM3LTkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0YWdzIiB1bmljb2RlPSLvgKwiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNDQ4IDEwODhxMCA1My0zNy41IDkwLjVUMzIwIDEyMTZ0LTkwLjUtMzcuNVQxOTIgMTA4OHQzNy41LTkwLjVUMzIwIDk2MHQ5MC41IDM3LjVUNDQ4IDEwODh6bTEwNjctNTc2cTAtNTMtMzctOTBMOTg3LTcwcS0zOS0zNy05MS0zNy01MyAwLTkwIDM3TDkxIDY0NnEtMzggMzctNjQuNSAxMDFUMCA4NjR2NDE2cTAgNTIgMzggOTB0OTAgMzhoNDE2cTUzIDAgMTE3LTI2LjV0MTAyLTY0LjVsNzE1LTcxNHEzNy0zOSAzNy05MXptMzg0IDBxMC01My0zNy05MEwxMzcxLTcwcS0zOS0zNy05MS0zNy0zNiAwLTU5IDE0dC01MyA0NWw0NzAgNDcwcTM3IDM3IDM3IDkwIDAgNTItMzcgOTFsLTcxNSA3MTRxLTM4IDM4LTEwMiA2NC41VDcwNCAxNDA4aDIyNHE1MyAwIDExNy0yNi41dDEwMi02NC41bDcxNS03MTRxMzctMzkgMzctOTF6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJvb2siIHVuaWNvZGU9Iu+ArSIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjM5IDEwNThxNDAtNTcgMTgtMTI5TDEzODIgMjNxLTE5LTY0LTc2LjUtMTA3LjVUMTE4My0xMjhIMjYwcS03NyAwLTE0OC41IDUzLjVUMTIgNTdxLTI0IDY3LTIgMTI3IDAgNCAzIDI3dDQgMzdxMSA4LTMgMjEuNVQxMSAyODlxMiAxMSA4IDIxdDE2LjUgMjMuNVQ1MiAzNTdxMjMgMzggNDUgOTEuNXQzMCA5MS41cTMgMTAgLjUgMzB0LS41IDI4cTMgMTEgMTcgMjh0MTcgMjNxMjEgMzYgNDIgOTJ0MjUgOTBxMSA5LTIuNSAzMnQuNSAyOHE0IDEzIDIyIDMwLjV0MjIgMjIuNXExOSAyNiA0Mi41IDg0LjVUMzQwIDExMjVxMSA4LTMgMjUuNXQtMiAyNi41cTIgOCA5IDE4dDE4IDIzIDE3IDIxcTggMTIgMTYuNSAzMC41dDE1IDM1IDE2IDM2IDE5LjUgMzIgMjYuNSAyMy41IDM2IDExLjUgNDcuNS01LjVsLTEtM3EzOCA5IDUxIDloNzYxcTc0IDAgMTE0LTU2dDE4LTEzMGwtMjc0LTkwNnEtMzYtMTE5LTcxLjUtMTUzLjVUMTAyNSAxMjhIMTU2cS0yNyAwLTM4LTE1LTExLTE2LTEtNDNRMTQxIDAgMjYxIDBoOTIzcTI5IDAgNTYgMTUuNXQzNSA0MS41bDMwMCA5ODdxNyAyMiA1IDU3IDM4LTE1IDU5LTQzem0tMTA2NC0ycS00LTEzIDItMjIuNXQyMC05LjVoNjA4cTEzIDAgMjUuNSA5LjV0MTYuNSAyMi41bDIxIDY0cTQgMTMtMiAyMi41dC0yMCA5LjVINjM4cS0xMyAwLTI1LjUtOS41VDU5NiAxMTIwem0tODMtMjU2cS00LTEzIDItMjIuNXQyMC05LjVoNjA4cTEzIDAgMjUuNSA5LjVUMTE2NCA4MDBsMjEgNjRxNCAxMy0yIDIyLjV0LTIwIDkuNUg1NTVxLTEzIDAtMjUuNS05LjVUNTEzIDg2NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYm9va21hcmsiIHVuaWNvZGU9Iu+AriIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTY0IDE0MDhxMjMgMCA0NC05IDMzLTEzIDUyLjUtNDF0MTkuNS02MlY3cTAtMzQtMTkuNS02MlQxMjA4LTk2cS0xOS04LTQ0LTgtNDggMC04MyAzMkw2NDAgMzUyIDE5OS03MnEtMzYtMzMtODMtMzMtMjMgMC00NCA5LTMzIDEzLTUyLjUgNDFUMCA3djEyODlxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InByaW50IiB1bmljb2RlPSLvgK8iIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMzg0IDBoODk2djI1NkgzODRWMHptMCA2NDBoODk2djM4NGgtMTYwcS00MCAwLTY4IDI4dC0yOCA2OHYxNjBIMzg0VjY0MHptMTE1Mi02NHEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptMTI4IDBWMTYwcTAtMTMtOS41LTIyLjVUMTYzMiAxMjhoLTIyNFYtMzJxMC00MC0yOC02OHQtNjgtMjhIMzUycS00MCAwLTY4IDI4dC0yOCA2OHYxNjBIMzJxLTEzIDAtMjIuNSA5LjVUMCAxNjB2NDE2cTAgNzkgNTYuNSAxMzUuNVQxOTIgNzY4aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4LTIwdDc2LTQ4bDE1Mi0xNTJxMjgtMjggNDgtNzZ0MjAtODhWNzY4aDY0cTc5IDAgMTM1LjUtNTYuNVQxNjY0IDU3NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2FtZXJhIiB1bmljb2RlPSLvgLAiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNOTYwIDg2NHExMTkgMCAyMDMuNS04NC41VDEyNDggNTc2dC04NC41LTIwMy41VDk2MCAyODh0LTIwMy41IDg0LjVUNjcyIDU3NnQ4NC41IDIwMy41VDk2MCA4NjR6bTcwNCA0MTZxMTA2IDAgMTgxLTc1dDc1LTE4MVYxMjhxMC0xMDYtNzUtMTgxdC0xODEtNzVIMjU2cS0xMDYgMC0xODEgNzVUMCAxMjh2ODk2cTAgMTA2IDc1IDE4MXQxODEgNzVoMjI0bDUxIDEzNnExOSA0OSA2OS41IDg0LjVUNzA0IDE1MzZoNTEycTUzIDAgMTAzLjUtMzUuNXQ2OS41LTg0LjVsNTEtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNVQxNDA4IDU3NnQtMTMxLjUgMzE2LjVUOTYwIDEwMjQgNjQzLjUgODkyLjUgNTEyIDU3NnQxMzEuNS0zMTYuNVQ5NjAgMTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmb250IiB1bmljb2RlPSLvgLEiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzI1IDk3N0w1NTUgNTI3cTMzIDAgMTM2LjUtMnQxNjAuNS0ycTE5IDAgNTcgMi04NyAyNTMtMTg0IDQ1MnpNMC0xMjhsMiA3OXEyMyA3IDU2IDEyLjVUMTE1LTI2dDQ5LjUgMTQuNSA0NC41IDI5VDI0MCA2OGwyMzcgNjE2IDI4MCA3MjRoMTI4cTgtMTQgMTEtMjFsMjA1LTQ4MHEzMy03OCAxMDYtMjU3LjVUMTMyMSAzNzVxMTUtMzQgNTgtMTQ0LjVUMTQ1MSA2MnEyMC00NSAzNS01NyAxOS0xNSA4OC0yOS41dDg0LTIwLjVxNi0zOCA2LTU3IDAtNS0uNS0xMy41dC0uNS0xMi41cS02MyAwLTE5MCA4dC0xOTEgOHEtNzYgMC0yMTUtN3QtMTc4LThxMCA0MyA0IDc4bDEzMSAyOHExIDAgMTIuNSAyLjVUMTA1Mi0xNXQxNC41IDQuNSAxNSA2LjUgMTEgOCA5IDExIDIuNSAxNHEwIDE2LTMxIDk2LjVUMTAwMSAzMDN0LTQyIDEwMGwtNDUwIDJxLTI2LTU4LTc2LjUtMTk1LjVUMzgyIDQ3cTAtMjIgMTQtMzcuNVQ0MzkuNS0xNSA0ODgtMjguNXQ1Ny04LjUgNDEtNHExLTE5IDEtNTggMC05LTItMjctNTggMC0xNzQuNSAxMFQyMzYtMTA2cS04IDAtMjYuNS00dC0yMS41LTRxLTgwLTE0LTE4OC0xNHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYm9sZCIgdW5pY29kZT0i74CyIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTU1NSAxNXE3NC0zMiAxNDAtMzIgMzc2IDAgMzc2IDMzNSAwIDExNC00MSAxODAtMjcgNDQtNjEuNSA3NFQ5MDEgNjE4LjV0LTgwLjUgMjUtODQgMTAuNS05NC41IDJxLTczIDAtMTAxLTEwIDAtNTMtLjUtMTU5dC0uNS0xNThxMC04LTEtNjcuNXQtLjUtOTYuNSA0LjUtODMuNVQ1NTUgMTV6bS0xNCA3NDZxNDItNyAxMDktNyA4MiAwIDE0MyAxM3QxMTAgNDQuNSA3NC41IDg5LjUgMjUuNSAxNDJxMCA3MC0yOSAxMjIuNXQtNzkgODItMTA4IDQzLjUtMTI0IDE0cS01MCAwLTEzMC0xMyAwLTUwIDQtMTUxdDQtMTUycTAtMjctLjUtODB0LS41LTc5cTAtNDYgMS02OXpNMC0xMjhsMiA5NHExNSA0IDg1IDE2VDE5MyA5cTcgMTIgMTIuNSAyN3Q4LjUgMzMuNSA1LjUgMzIuNSAzIDM3LjUuNSAzNFYyMzlxMCA5ODItMjIgMTAyNS00IDgtMjIgMTQuNXQtNDQuNSAxMS00OS41IDctNDguNSA0LjUtMzAuNSAzbC00IDgzcTk4IDIgMzQwIDExLjV0MzczIDkuNXEyMyAwIDY4LS41dDY4LS41cTcwIDAgMTM2LjUtMTN0MTI4LjUtNDIgMTA4LTcxIDc0LTEwNC41IDI4LTEzNy41cTAtNTItMTYuNS05NS41dC0zOS03MlQxMjA2IDgxNHQtNzMtNDUtODQtNDBxMTU0LTM1IDI1Ni41LTEzNFQxNDA4IDM0N3EwLTEwMC0zNS0xNzkuNVQxMjc5LjUgMzd0LTEzOC04NS41VDk3OC05N3QtMTc2LTE0cS00NCAwLTEzMiAzdC0xMzIgM3EtMTA2IDAtMzA3LTExVDAtMTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJpdGFsaWMiIHVuaWNvZGU9Iu+AsyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0wLTEyNmwxNyA4NXEyMiA3IDYxLjUgMTYuNXQ3MiAxOVQyMTAgMThxMjggMzUgNDEgMTAxIDEgNyA2MiAyODl0MTE0IDU0My41IDUyIDI5Ni41djI1cS0yNCAxMy01NC41IDE4LjV0LTY5LjUgOC01OCA1LjVsMTkgMTAzcTMzLTIgMTIwLTYuNXQxNDkuNS03VDcwNiAxMzkycTQ4IDAgOTguNSAyLjV0MTIxIDcgOTguNSA2LjVxLTUtMzktMTktODktMzAtMTAtMTAxLjUtMjguNVQ3OTUgMTI1N3EtOC0xOS0xNC00Mi41dC05LTQwLTcuNS00NS41LTYuNS00MnEtMjctMTQ4LTg3LjUtNDE5LjVUNTkzIDMxMnEtMi05LTEzLTU4dC0yMC05MC0xNi04My41LTYtNTcuNWwxLTE4cTE3LTQgMTg1LTMxLTMtNDQtMTYtOTktMTEgMC0zMi41LTEuNVQ2NDMtMTI4cS0yOSAwLTg3IDEwdC04NiAxMHEtMTM4IDItMjA2IDItNTEgMC0xNDMtOVQwLTEyNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idGV4dF9oZWlnaHQiIHVuaWNvZGU9Iu+AtCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzQ0IDEyOHEzMyAwIDQyLTE4LjVUMTc3NSA2NUwxNjQ5LTk3cS0yMC0yNi00OS0yNnQtNDkgMjZMMTQyNSA2NXEtMjAgMjYtMTEgNDQuNXQ0MiAxOC41aDgwdjEwMjRoLTgwcS0zMyAwLTQyIDE4LjV0MTEgNDQuNWwxMjYgMTYycTIwIDI2IDQ5IDI2dDQ5LTI2bDEyNi0xNjJxMjAtMjYgMTEtNDQuNXQtNDItMTguNWgtODBWMTI4aDgwek04MSAxNDA3bDU0LTI3cTEyLTUgMjExLTUgNDQgMCAxMzIgMnQxMzIgMnEzNiAwIDEwNy41LS41dDEwNy41LS41aDI5M3E2IDAgMjEtLjV0MjAuNSAwIDE2IDMgMTcuNSA5IDE1IDE3LjVsNDIgMXE0IDAgMTQtLjV0MTQtLjVxMi0xMTIgMi0zMzYgMC04MC01LTEwOS0zOS0xNC02OC0xOC0yNSA0NC01NCAxMjgtMyA5LTExIDQ4dC0xNC41IDczLjUtNy41IDM1LjVxLTYgOC0xMiAxMi41dC0xNS41IDYtMTMgMi41LTE4IC41LTE2LjUtLjVxLTE3IDAtNjYuNS41dC03NC41LjUtNjQtMi03MS02cS05LTgxLTgtMTM2IDAtOTQgMi0zODh0Mi00NTVxMC0xNi0yLjUtNzEuNXQwLTkxLjVUNzc1IDMycTQwLTIxIDEyNC00Mi41VDEwMTktNDhxNS00MCA1LTUwIDAtMTQtMy0yOWwtMzQtMXEtNzYtMi0yMTggOHQtMjA3IDEwcS01MCAwLTE1MS05dC0xNTItOXEtMyA1MS0zIDUydjlxMTcgMjcgNjEuNSA0M1Q0MTYgNXQ3OCAyN3ExOSA0MiAxOSAzODMgMCAxMDEtMyAzMDN0LTMgMzAzdjExN3EwIDIgLjUgMTUuNXQuNSAyNS0xIDI1LjUtMyAyNC01IDE0cS0xMSAxMi0xNjIgMTItMzMgMC05My0xMnQtODAtMjZxLTE5LTEzLTM0LTcyLjV0LTMxLjUtMTExVDU2IDk3OXEtNDIgMjYtNTYgNDR2MzgzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0ZXh0X3dpZHRoIiB1bmljb2RlPSLvgLUiIGQ9Ik04MSAxNDA3bDU0LTI3cTEyLTUgMjExLTUgNDQgMCAxMzIgMnQxMzIgMnE3MCAwIDI0Ni41IDF0MzA0LjUuNSAyNDctNC41cTMzLTEgNTYgMzFsNDIgMXE0IDAgMTQtLjV0MTQtLjVxMi0xMTIgMi0zMzYgMC04MC01LTEwOS0zOS0xNC02OC0xOC0yNSA0NC01NCAxMjgtMyA5LTExIDQ3LjV0LTE1IDczLjUtNyAzNnEtMTAgMTMtMjcgMTktNSAyLTY2IDItMzAgMC05MyAxdC0xMDMgMS05NC0yLTk2LTdxLTktODEtOC0xMzZsMS0xNTJ2NTJxMC01NSAxLTE1NHQxLjUtMTgwIC41LTE1M3EwLTE2LTIuNS03MS41dDAtOTEuNSAxMi41LTY5cTQwLTIxIDEyNC00Mi41dDEyMC0zNy41cTUtNDAgNS01MCAwLTE0LTMtMjlsLTM0LTFxLTc2LTItMjE4IDh0LTIwNyAxMHEtNTAgMC0xNTEtOXQtMTUyLTlxLTMgNTEtMyA1MnY5cTE3IDI3IDYxLjUgNDN0OTguNSAyOSA3OCAyN3E3IDE2IDExLjUgNzR0NiAxNDUuNSAxLjUgMTU1LS41IDE1My41LS41IDg5cTAgNy0yLjUgMjEuNVQ2MzUgOTQ5cTAgNyAuNSA0NHQxIDczIDAgNzYuNS0zIDY3LjUtNi41IDMycS0xMSAxMi0xNjIgMTItNDEgMC0xNjMtMTMuNVQxNjQgMTIxNnEtMTktMTItMzQtNzEuNVQ5OC41IDEwMzMgNTYgOTc5cS00MiAyNi01NiA0NHYzODN6TTEzMTAgMTI1cTEyIDAgNDItMTkuNXQ1Ny41LTQxLjUgNTkuNS00OSAzNi0zMHEyNi0yMSAyNi00OXQtMjYtNDlxLTQtMy0zNi0zMHQtNTkuNS00OS01Ny41LTQxLjUtNDItMTkuNXEtMTMgMC0yMC41IDEwLjV0LTEwIDI4LjUtMi41IDMzLjUgMS41IDMzIDEuNSAxOS41SDI1NnEwLTIgMS41LTE5LjV0MS41LTMzLTIuNS0zMy41LTEwLTI4LjVUMjI2LTI1M3EtMTIgMC00MiAxOS41VDEyNi41LTE5MiA2Ny0xNDN0LTM2IDMwUTUtOTIgNS02NHQyNiA0OXE0IDMgMzYgMzB0NTkuNSA0OSA1Ny41IDQxLjUgNDIgMTkuNXExMyAwIDIwLjUtMTAuNXQxMC0yOC41IDIuNS0zMy41LTEuNS0zM1QyNTYgMGgxMDI0cTAgMi0xLjUgMTkuNXQtMS41IDMzIDIuNSAzMy41IDEwIDI4LjVUMTMxMCAxMjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2xlZnQiIHVuaWNvZGU9Iu+AtiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDE5MlY2NHEwLTI2LTE5LTQ1dC00NS0xOUg2NFEzOCAwIDE5IDE5VDAgNjR2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1LTE5dDE5LTQ1em0tMzg0IDM4NFY0NDhxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMCA0NDh2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1LTE5dDE5LTQ1em0yNTYgMzg0VjgzMnEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOVQwIDgzMnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUtMTl0MTktNDV6bS0zODQgMzg0di0xMjhxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYWxpZ25fY2VudGVyIiB1bmljb2RlPSLvgLciIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJWNjRxMC0yNi0xOS00NXQtNDUtMTlINjRRMzggMCAxOSAxOVQwIDY0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NS0xOXQxOS00NXptLTM4NCAzODRWNDQ4cTAtMjYtMTktNDV0LTQ1LTE5SDQ0OHEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloODk2cTI2IDAgNDUtMTl0MTktNDV6bTI1NiAzODRWODMycTAtMjYtMTktNDV0LTQ1LTE5SDE5MnEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1LTE5dDE5LTQ1em0tMzg0IDM4NHYtMTI4cTAtMjYtMTktNDV0LTQ1LTE5SDU3NnEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloNjQwcTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFsaWduX3JpZ2h0IiB1bmljb2RlPSLvgLgiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJWNjRxMC0yNi0xOS00NXQtNDUtMTlINjRRMzggMCAxOSAxOVQwIDY0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NS0xOXQxOS00NXptMCAzODRWNDQ4cTAtMjYtMTktNDV0LTQ1LTE5SDQ0OHEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1LTE5dDE5LTQ1em0wIDM4NFY4MzJxMC0yNi0xOS00NXQtNDUtMTlIMTkycS0yNiAwLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUtMTl0MTktNDV6bTAgMzg0di0xMjhxMC0yNi0xOS00NXQtNDUtMTlINTc2cS0yNiAwLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2p1c3RpZnkiIHVuaWNvZGU9Iu+AuSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDE5MlY2NHEwLTI2LTE5LTQ1dC00NS0xOUg2NFEzOCAwIDE5IDE5VDAgNjR2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1LTE5dDE5LTQ1em0wIDM4NFY0NDhxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMCA0NDh2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1LTE5dDE5LTQ1em0wIDM4NFY4MzJxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMCA4MzJ2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1LTE5dDE5LTQ1em0wIDM4NHYtMTI4cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Imxpc3QiIHVuaWNvZGU9Iu+AuiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMjI0VjMycTAtMTMtOS41LTIyLjVUMjI0IDBIMzJRMTkgMCA5LjUgOS41VDAgMzJ2MTkycTAgMTMgOS41IDIyLjVUMzIgMjU2aDE5MnExMyAwIDIyLjUtOS41VDI1NiAyMjR6bTAgMzg0VjQxNnEwLTEzLTkuNS0yMi41VDIyNCAzODRIMzJxLTEzIDAtMjIuNSA5LjVUMCA0MTZ2MTkycTAgMTMgOS41IDIyLjVUMzIgNjQwaDE5MnExMyAwIDIyLjUtOS41VDI1NiA2MDh6bTAgMzg0VjgwMHEwLTEzLTkuNS0yMi41VDIyNCA3NjhIMzJxLTEzIDAtMjIuNSA5LjVUMCA4MDB2MTkycTAgMTMgOS41IDIyLjVUMzIgMTAyNGgxOTJxMTMgMCAyMi41LTkuNVQyNTYgOTkyem0xNTM2LTc2OFYzMnEwLTEzLTkuNS0yMi41VDE3NjAgMEg0MTZxLTEzIDAtMjIuNSA5LjVUMzg0IDMydjE5MnEwIDEzIDkuNSAyMi41VDQxNiAyNTZoMTM0NHExMyAwIDIyLjUtOS41dDkuNS0yMi41ek0yNTYgMTM3NnYtMTkycTAtMTMtOS41LTIyLjVUMjI0IDExNTJIMzJxLTEzIDAtMjIuNSA5LjVUMCAxMTg0djE5MnEwIDEzIDkuNSAyMi41VDMyIDE0MDhoMTkycTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTE1MzYtNzY4VjQxNnEwLTEzLTkuNS0yMi41VDE3NjAgMzg0SDQxNnEtMTMgMC0yMi41IDkuNVQzODQgNDE2djE5MnEwIDEzIDkuNSAyMi41VDQxNiA2NDBoMTM0NHExMyAwIDIyLjUtOS41dDkuNS0yMi41em0wIDM4NFY4MDBxMC0xMy05LjUtMjIuNVQxNzYwIDc2OEg0MTZxLTEzIDAtMjIuNSA5LjVUMzg0IDgwMHYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgMzg0di0xOTJxMC0xMy05LjUtMjIuNXQtMjIuNS05LjVINDE2cS0xMyAwLTIyLjUgOS41VDM4NCAxMTg0djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaW5kZW50X2xlZnQiIHVuaWNvZGU9Iu+AuyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgOTkyVjQxNnEwLTEzLTkuNS0yMi41VDM1MiAzODRxLTE0IDAtMjMgOUw0MSA2ODFxLTkgOS05IDIzdDkgMjNsMjg4IDI4OHE5IDkgMjMgOSAxMyAwIDIyLjUtOS41VDM4NCA5OTJ6bTE0MDgtNzY4VjMycTAtMTMtOS41LTIyLjVUMTc2MCAwSDMyUTE5IDAgOS41IDkuNVQwIDMydjE5MnEwIDEzIDkuNSAyMi41VDMyIDI1NmgxNzI4cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgMzg0VjQxNnEwLTEzLTkuNS0yMi41VDE3NjAgMzg0SDY3MnEtMTMgMC0yMi41IDkuNVQ2NDAgNDE2djE5MnEwIDEzIDkuNSAyMi41VDY3MiA2NDBoMTA4OHExMyAwIDIyLjUtOS41dDkuNS0yMi41em0wIDM4NFY4MDBxMC0xMy05LjUtMjIuNVQxNzYwIDc2OEg2NzJxLTEzIDAtMjIuNSA5LjVUNjQwIDgwMHYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMDg4cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgMzg0di0xOTJxMC0xMy05LjUtMjIuNXQtMjIuNS05LjVIMzJxLTEzIDAtMjIuNSA5LjVUMCAxMTg0djE5MnEwIDEzIDkuNSAyMi41VDMyIDE0MDhoMTcyOHExMyAwIDIyLjUtOS41dDkuNS0yMi41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJpbmRlbnRfcmlnaHQiIHVuaWNvZGU9Iu+AvCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zNTIgNzA0cTAtMTQtOS0yM0w1NSAzOTNxLTktOS0yMy05LTEzIDAtMjIuNSA5LjVUMCA0MTZ2NTc2cTAgMTMgOS41IDIyLjVUMzIgMTAyNHExNCAwIDIzLTlsMjg4LTI4OHE5LTkgOS0yM3ptMTQ0MC00ODBWMzJxMC0xMy05LjUtMjIuNVQxNzYwIDBIMzJRMTkgMCA5LjUgOS41VDAgMzJ2MTkycTAgMTMgOS41IDIyLjVUMzIgMjU2aDE3MjhxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptMCAzODRWNDE2cTAtMTMtOS41LTIyLjVUMTc2MCAzODRINjcycS0xMyAwLTIyLjUgOS41VDY0MCA0MTZ2MTkycTAgMTMgOS41IDIyLjVUNjcyIDY0MGgxMDg4cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgMzg0VjgwMHEwLTEzLTkuNS0yMi41VDE3NjAgNzY4SDY3MnEtMTMgMC0yMi41IDkuNVQ2NDAgODAwdjE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptMCAzODR2LTE5MnEwLTEzLTkuNS0yMi41dC0yMi41LTkuNUgzMnEtMTMgMC0yMi41IDkuNVQwIDExODR2MTkycTAgMTMgOS41IDIyLjVUMzIgMTQwOGgxNzI4cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZhY2V0aW1lX3ZpZGVvIiB1bmljb2RlPSLvgL0iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxMTg0Vjk2cTAtNDItMzktNTktMTMtNS0yNS01LTI3IDAtNDUgMTlsLTQwMyA0MDNWMjg4cTAtMTE5LTg0LjUtMjAzLjVUOTkyIDBIMjg4UTE2OSAwIDg0LjUgODQuNVQwIDI4OHY3MDRxMCAxMTkgODQuNSAyMDMuNVQyODggMTI4MGg3MDRxMTE5IDAgMjAzLjUtODQuNVQxMjgwIDk5MlY4MjdsNDAzIDQwMnExOCAxOSA0NSAxOSAxMiAwIDI1LTUgMzktMTcgMzktNTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBpY3R1cmUiIHVuaWNvZGU9Iu+AviIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgOTYwcTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bTEwMjQtMzg0VjEyOEgyNTZ2MTkybDMyMCAzMjAgMTYwLTE2MCA1MTIgNTEyem05NiA3MDRIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMjQ4VjMycTAtMTMgOS41LTIyLjVUMTYwIDBoMTYwMHExMyAwIDIyLjUgOS41VDE3OTIgMzJ2MTIxNnEwIDEzLTkuNSAyMi41dC0yMi41IDkuNXptMTYwLTMyVjMycTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwIDMydjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJwZW5jaWwiIHVuaWNvZGU9Iu+BgCIgZD0iTTM2MyAwbDkxIDkxLTIzNSAyMzUtOTEtOTFWMTI4aDEyOFYwaDEwN3ptNTIzIDkyOHEwIDIyLTIyIDIyLTEwIDAtMTctN0wzMDUgNDAxcS03LTctNy0xNyAwLTIyIDIyLTIyIDEwIDAgMTcgN2w1NDIgNTQycTcgNyA3IDE3em0tNTQgMTkybDQxNi00MTYtODMyLTgzMkgwdjQxNnptNjgzLTk2cTAtNTMtMzctOTBsLTE2Ni0xNjYtNDE2IDQxNiAxNjYgMTY1cTM2IDM4IDkwIDM4IDUzIDAgOTEtMzhsMjM1LTIzNHEzNy0zOSAzNy05MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWFwX21hcmtlciIgdW5pY29kZT0i74GBIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTc2OCA4OTZxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MSA3NS0xODEgMTgxLTc1IDE4MSA3NSA3NSAxODF6bTI1NiAwcTAtMTA5LTMzLTE3OUw2MjctNTdxLTE2LTMzLTQ3LjUtNTJUNTEyLTEyOHQtNjcuNSAxOVQzOTgtNTdMMzMgNzE3UTAgNzg3IDAgODk2cTAgMjEyIDE1MCAzNjJ0MzYyIDE1MCAzNjItMTUwIDE1MC0zNjJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFkanVzdCIgdW5pY29kZT0i74GCIiBkPSJNNzY4IDk2djEwODhxLTE0OCAwLTI3My03M1QyOTcgOTEzdC03My0yNzMgNzMtMjczIDE5OC0xOTggMjczLTczem03NjggNTQ0cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0aW50IiB1bmljb2RlPSLvgYMiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNTEyIDM4NHEwIDM2LTIwIDY5LTEgMS0xNS41IDIyLjV0LTI1LjUgMzgtMjUgNDQtMjEgNTAuNXEtNCAxNi0yMSAxNnQtMjEtMTZxLTctMjMtMjEtNTAuNXQtMjUtNDQtMjUuNS0zOFQyNzYgNDUzcS0yMC0zMy0yMC02OSAwLTUzIDM3LjUtOTAuNVQzODQgMjU2dDkwLjUgMzcuNVQ1MTIgMzg0em01MTIgMTI4cTAtMjEyLTE1MC0zNjJUNTEyIDAgMTUwIDE1MCAwIDUxMnEwIDE0NSA4MSAyNzUgNiA5IDYyLjUgOTAuNXQxMDEgMTUxIDk5LjUgMTc4IDgzIDIwMS41cTkgMzAgMzQgNDd0NTEgMTcgNTEuNS0xNyAzMy41LTQ3cTI4LTkzIDgzLTIwMS41dDk5LjUtMTc4IDEwMS0xNTFUOTQzIDc4N3E4MS0xMjcgODEtMjc1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJlZGl0IiB1bmljb2RlPSLvgYQiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODg4IDM1MmwxMTYgMTE2LTE1MiAxNTItMTE2LTExNnYtNTZoOTZ2LTk2aDU2em00NDAgNzIwcS0xNiAxNi0zMy0xTDk0NSA3MjFxLTE3LTE3LTEtMzN0MzMgMWwzNTAgMzUwcTE3IDE3IDEgMzN6bTgwLTU5NFYyODhxMC0xMTktODQuNS0yMDMuNVQxMTIwIDBIMjg4UTE2OSAwIDg0LjUgODQuNVQwIDI4OHY4MzJxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg4MzJxNjMgMCAxMTctMjUgMTUtNyAxOC0yMyAzLTE3LTktMjlsLTQ5LTQ5cS0xNC0xNC0zMi04LTIzIDYtNDUgNkgyODhxLTY2IDAtMTEzLTQ3dC00Ny0xMTNWMjg4cTAtNjYgNDctMTEzdDExMy00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjEyNnEwIDEzIDkgMjJsNjQgNjRxMTUgMTUgMzUgN3QyMC0yOXptLTk2IDczOGwyODgtMjg4LTY3Mi02NzJINjQwdjI4OHptNDQ0LTEzMmwtOTItOTItMjg4IDI4OCA5MiA5MnEyOCAyOCA2OCAyOHQ2OC0yOGwxNTItMTUycTI4LTI4IDI4LTY4dC0yOC02OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic2hhcmUiIHVuaWNvZGU9Iu+BhSIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNDA4IDU0N1YyODhxMC0xMTktODQuNS0yMDMuNVQxMTIwIDBIMjg4UTE2OSAwIDg0LjUgODQuNVQwIDI4OHY4MzJxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGgyNTVxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXEwLTI3LTI2LTMyLTc3LTI2LTEzMy02MC0xMC00LTE2LTRIMjg4cS02NiAwLTExMy00N3QtNDctMTEzVjI4OHEwLTY2IDQ3LTExM3QxMTMtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YyMTRxMCAxOSAxOCAyOSAyOCAxMyA1NCAzNyAxNiAxNiAzNSA4IDIxLTkgMjEtMjl6bTIzNyA0OTZsLTM4NC0zODRxLTE4LTE5LTQ1LTE5LTEyIDAtMjUgNS0zOSAxNy0zOSA1OXYxOTJIOTkycS0zMjMgMC00MzgtMTMxLTExOS0xMzctNzQtNDczIDMtMjMtMjAtMzQtOC0yLTEyLTItMTYgMC0yNiAxMy0xMCAxNC0yMSAzMXQtMzkuNSA2OC41VDMxMiA0Njh0LTM4LjUgMTE0VDI1NiA3MDRxMCA0OSAzLjUgOTF0MTQgOTAgMjggODggNDcgODEuNSA2OC41IDc0IDk0LjUgNjEuNSAxMjQuNSA0OC41IDE1OS41IDMwLjUgMTk2LjUgMTFoMTYwdjE5MnEwIDQyIDM5IDU5IDEzIDUgMjUgNSAyNiAwIDQ1LTE5bDM4NC0zODRxMTktMTkgMTktNDV0LTE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVjayIgdW5pY29kZT0i74GGIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNjA2VjI4OHEwLTExOS04NC41LTIwMy41VDExMjAgMEgyODhRMTY5IDAgODQuNSA4NC41VDAgMjg4djgzMnEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDgzMnE2MyAwIDExNy0yNSAxNS03IDE4LTIzIDMtMTctOS0yOWwtNDktNDlxLTEwLTEwLTIzLTEwLTMgMC05IDItMjMgNi00NSA2SDI4OHEtNjYgMC0xMTMtNDd0LTQ3LTExM1YyODhxMC02NiA0Ny0xMTN0MTEzLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MjU0cTAgMTMgOSAyMmw2NCA2NHExMCAxMCAyMyAxMCA2IDAgMTItMyAyMC04IDIwLTI5em0yMzEgNDg5TDgyNSAyODFxLTI0LTI0LTU3LTI0dC01NyAyNEwyODEgNzExcS0yNCAyNC0yNCA1N3QyNCA1N2wxMTAgMTEwcTI0IDI0IDU3IDI0dDU3LTI0bDI2My0yNjMgNjQ3IDY0N3EyNCAyNCA1NyAyNHQ1Ny0yNGwxMTAtMTEwcTI0LTI0IDI0LTU3dC0yNC01N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibW92ZSIgdW5pY29kZT0i74GHIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjQwcTAtMjYtMTktNDVsLTI1Ni0yNTZxLTE5LTE5LTQ1LTE5dC00NSAxOS0xOSA0NXYxMjhoLTM4NFYxMjhoMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDVMOTQxLTIzN3EtMTktMTktNDUtMTl0LTQ1IDE5TDU5NSAxOXEtMTkgMTktMTkgNDV0MTkgNDUgNDUgMTloMTI4djM4NEgzODRWMzg0cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5TDE5IDU5NVEwIDYxNCAwIDY0MHQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1LTE5IDE5LTQ1Vjc2OGgzODR2Mzg0SDY0MHEtMjYgMC00NSAxOXQtMTkgNDUgMTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NS0xOWwyNTYtMjU2cTE5LTE5IDE5LTQ1dC0xOS00NS00NS0xOWgtMTI4Vjc2OGgzODR2MTI4cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTlsMjU2LTI1NnExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic3RlcF9iYWNrd2FyZCIgdW5pY29kZT0i74GIIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTk3OSAxMzk1cTE5IDE5IDMyIDEzdDEzLTMyVi05NnEwLTI2LTEzLTMydC0zMiAxM0wyNjkgNTk1cS05IDktMTMgMTlWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAtNjR2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1LTE5dDE5LTQ1VjY2NnE0IDEwIDEzIDE5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmYXN0X2JhY2t3YXJkIiB1bmljb2RlPSLvgYkiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc0NyAxMzk1cTE5IDE5IDMyIDEzdDEzLTMyVi05NnEwLTI2LTEzLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5LTEzIDE5Vi05NnEwLTI2LTEzLTMydC0zMiAxM0wyNjkgNTk1cS05IDktMTMgMTlWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAtNjR2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1LTE5dDE5LTQ1VjY2NnE0IDEwIDEzIDE5bDcxMCA3MTBxMTkgMTkgMzIgMTN0MTMtMzJWNjY2cTQgMTAgMTMgMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJhY2t3YXJkIiB1bmljb2RlPSLvgYoiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzLTMyVi05NnEwLTI2LTEzLTMydC0zMiAxM0w5MDkgNTk1cS05IDktMTMgMTlWLTk2cTAtMjYtMTMtMzJ0LTMyIDEzTDE0MSA1OTVxLTE5IDE5LTE5IDQ1dDE5IDQ1bDcxMCA3MTBxMTkgMTkgMzIgMTN0MTMtMzJWNjY2cTQgMTAgMTMgMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBsYXkiIHVuaWNvZGU9Iu+BiyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzg0IDYwOUw1Ni0xMjlxLTIzLTEzLTM5LjUtM1QwLTk2djE0NzJxMCAyNiAxNi41IDM2dDM5LjUtM2wxMzI4LTczOHEyMy0xMyAyMy0zMXQtMjMtMzF6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBhdXNlIiB1bmljb2RlPSLvgYwiIGQ9Ik0xNTM2IDEzNDRWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDk2MHEtMjYgMC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1LTE5dDE5LTQ1em0tODk2IDBWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAtNjR2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdG9wIiB1bmljb2RlPSLvgY0iIGQ9Ik0xNTM2IDEzNDRWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAtNjR2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZm9yd2FyZCIgdW5pY29kZT0i74GOIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTQ1LTExNXEtMTktMTktMzItMTNUMC05NnYxNDcycTAgMjYgMTMgMzJ0MzItMTNsNzEwLTcxMHE5LTkgMTMtMTl2NzEwcTAgMjYgMTMgMzJ0MzItMTNsNzEwLTcxMHExOS0xOSAxOS00NXQtMTktNDVMODEzLTExNXEtMTktMTktMzItMTN0LTEzIDMydjcxMHEtNC0xMC0xMy0xOXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZmFzdF9mb3J3YXJkIiB1bmljb2RlPSLvgZAiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNDUtMTE1cS0xOS0xOS0zMi0xM1QwLTk2djE0NzJxMCAyNiAxMyAzMnQzMi0xM2w3MTAtNzEwcTktOSAxMy0xOXY3MTBxMCAyNiAxMyAzMnQzMi0xM2w3MTAtNzEwcTktOSAxMy0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NS0xOXQxOS00NVYtNjRxMC0yNi0xOS00NXQtNDUtMTloLTEyOHEtMjYgMC00NSAxOXQtMTkgNDV2Njc4cS00LTEwLTEzLTE5TDgxMy0xMTVxLTE5LTE5LTMyLTEzdC0xMyAzMnY3MTBxLTQtMTAtMTMtMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InN0ZXBfZm9yd2FyZCIgdW5pY29kZT0i74GRIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTQ1LTExNXEtMTktMTktMzItMTNUMC05NnYxNDcycTAgMjYgMTMgMzJ0MzItMTNsNzEwLTcxMHE5LTkgMTMtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUtMTl0MTktNDVWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDgzMnEtMjYgMC00NSAxOXQtMTkgNDV2Njc4cS00LTEwLTEzLTE5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJlamVjdCIgdW5pY29kZT0i74GSIiBob3Jpei1hZHYteD0iMTUzOCIgZD0iTTE0IDU1N2w3MTAgNzEwcTE5IDE5IDQ1IDE5dDQ1LTE5bDcxMC03MTBxMTktMTkgMTMtMzJ0LTMyLTEzSDMzcS0yNiAwLTMyIDEzdDEzIDMyek0xNDczIDBINjVRMzkgMCAyMCAxOVQxIDY0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NS0xOXQxOS00NVY2NHEwLTI2LTE5LTQ1dC00NS0xOXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9sZWZ0IiB1bmljb2RlPSLvgZMiIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTE3MSAxMjM1TDY0MCA3MDRsNTMxLTUzMXExOS0xOSAxOS00NXQtMTktNDVMMTAwNS04M3EtMTktMTktNDUtMTl0LTQ1IDE5TDE3MyA2NTlxLTE5IDE5LTE5IDQ1dDE5IDQ1bDc0MiA3NDJxMTkgMTkgNDUgMTl0NDUtMTlsMTY2LTE2NnExOS0xOSAxOS00NXQtMTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fcmlnaHQiIHVuaWNvZGU9Iu+BlCIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTA3IDY1OUwzNjUtODNxLTE5LTE5LTQ1LTE5dC00NSAxOUwxMDkgODNxLTE5IDE5LTE5IDQ1dDE5IDQ1bDUzMSA1MzEtNTMxIDUzMXEtMTkgMTktMTkgNDV0MTkgNDVsMTY2IDE2NnExOSAxOSA0NSAxOXQ0NS0xOWw3NDItNzQycTE5LTE5IDE5LTQ1dC0xOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGx1c19zaWduIiB1bmljb2RlPSLvgZUiIGQ9Ik0xMjE2IDU3NnYxMjhxMCAyNi0xOSA0NXQtNDUgMTlIODk2djI1NnEwIDI2LTE5IDQ1dC00NSAxOUg3MDRxLTI2IDAtNDUtMTl0LTE5LTQ1Vjc2OEgzODRxLTI2IDAtNDUtMTl0LTE5LTQ1VjU3NnEwLTI2IDE5LTQ1dDQ1LTE5aDI1NlYyNTZxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYyNTZoMjU2cTI2IDAgNDUgMTl0MTkgNDV6bTMyMCA2NHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWludXNfc2lnbiIgdW5pY29kZT0i74GWIiBkPSJNMTIxNiA1NzZ2MTI4cTAgMjYtMTkgNDV0LTQ1IDE5SDM4NHEtMjYgMC00NS0xOXQtMTktNDVWNTc2cTAtMjYgMTktNDV0NDUtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6bTMyMCA2NHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icmVtb3ZlX3NpZ24iIHVuaWNvZGU9Iu+BlyIgZD0iTTExNDkgNDE0cTAgMjYtMTkgNDVMOTQ5IDY0MGwxODEgMTgxcTE5IDE5IDE5IDQ1IDAgMjctMTkgNDZsLTkwIDkwcS0xOSAxOS00NiAxOS0yNiAwLTQ1LTE5TDc2OCA4MjFsLTE4MSAxODFxLTE5IDE5LTQ1IDE5LTI3IDAtNDYtMTlsLTkwLTkwcS0xOS0xOS0xOS00NiAwLTI2IDE5LTQ1bDE4MS0xODEtMTgxLTE4MXEtMTktMTktMTktNDUgMC0yNyAxOS00Nmw5MC05MHExOS0xOSA0Ni0xOSAyNiAwIDQ1IDE5bDE4MSAxODEgMTgxLTE4MXExOS0xOSA0NS0xOSAyNyAwIDQ2IDE5bDkwIDkwcTE5IDE5IDE5IDQ2em0zODcgMjI2cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJva19zaWduIiB1bmljb2RlPSLvgZgiIGQ9Ik0xMjg0IDgwMnEwIDI4LTE4IDQ2bC05MSA5MHEtMTkgMTktNDUgMTl0LTQ1LTE5TDY3NyA1MzEgNDUxIDc1N3EtMTkgMTktNDUgMTl0LTQ1LTE5bC05MS05MHEtMTgtMTgtMTgtNDYgMC0yNyAxOC00NWwzNjItMzYycTE5LTE5IDQ1LTE5IDI3IDAgNDYgMTlsNTQzIDU0M3ExOCAxOCAxOCA0NXptMjUyLTE2MnEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icXVlc3Rpb25fc2lnbiIgdW5pY29kZT0i74GZIiBkPSJNODk2IDE2MHYxOTJxMCAxNC05IDIzdC0yMyA5SDY3MnEtMTQgMC0yMy05dC05LTIzVjE2MHEwLTE0IDktMjN0MjMtOWgxOTJxMTQgMCAyMyA5dDkgMjN6bTI1NiA2NzJxMCA4OC01NS41IDE2M1Q5NTggMTExMXQtMTcwIDQxcS0yNDMgMC0zNzEtMjEzLTE1LTI0IDgtNDJsMTMyLTEwMHE3LTYgMTktNiAxNiAwIDI1IDEyIDUzIDY4IDg2IDkyIDM0IDI0IDg2IDI0IDQ4IDAgODUuNS0yNnQzNy41LTU5cTAtMzgtMjAtNjF0LTY4LTQ1cS02My0yOC0xMTUuNS04Ni41VDY0MCA1MTZ2LTM2cTAtMTQgOS0yM3QyMy05aDE5MnExNCAwIDIzIDl0OSAyM3EwIDE5IDIxLjUgNDkuNVQ5NzIgNTc5cTMyIDE4IDQ5IDI4LjV0NDYgMzUgNDQuNSA0OCAyOCA2MC41IDEyLjUgODF6bTM4NC0xOTJxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImluZm9fc2lnbiIgdW5pY29kZT0i74GaIiBkPSJNMTAyNCAxNjB2MTYwcTAgMTQtOSAyM3QtMjMgOWgtOTZ2NTEycTAgMTQtOSAyM3QtMjMgOUg1NDRxLTE0IDAtMjMtOXQtOS0yM1Y3MDRxMC0xNCA5LTIzdDIzLTloOTZWMzUyaC05NnEtMTQgMC0yMy05dC05LTIzVjE2MHEwLTE0IDktMjN0MjMtOWg0NDhxMTQgMCAyMyA5dDkgMjN6bS0xMjggODk2djE2MHEwIDE0LTkgMjN0LTIzIDlINjcycS0xNCAwLTIzLTl0LTktMjN2LTE2MHEwLTE0IDktMjN0MjMtOWgxOTJxMTQgMCAyMyA5dDkgMjN6bTY0MC00MTZxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNjcmVlbnNob3QiIHVuaWNvZGU9Iu+BmyIgZD0iTTExOTcgNTEyaC0xMDlxLTI2IDAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEwOXEtMzIgMTA4LTExMi41IDE4OC41VDg5NiAxMDY5Vjk2MHEwLTI2LTE5LTQ1dC00NS0xOUg3MDRxLTI2IDAtNDUgMTl0LTE5IDQ1djEwOXEtMTA4LTMyLTE4OC41LTExMi41VDMzOSA3NjhoMTA5cTI2IDAgNDUtMTl0MTktNDVWNTc2cTAtMjYtMTktNDV0LTQ1LTE5SDMzOXEzMi0xMDggMTEyLjUtMTg4LjVUNjQwIDIxMXYxMDlxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NS0xOXQxOS00NVYyMTFxMTA4IDMyIDE4OC41IDExMi41VDExOTcgNTEyem0zMzkgMTkyVjU3NnEwLTI2LTE5LTQ1dC00NS0xOWgtMTQzcS0zNy0xNjEtMTU0LjUtMjc4LjVUODk2IDc5Vi02NHEwLTI2LTE5LTQ1dC00NS0xOUg3MDRxLTI2IDAtNDUgMTl0LTE5IDQ1Vjc5cS0xNjEgMzctMjc4LjUgMTU0LjVUMjA3IDUxMkg2NHEtMjYgMC00NSAxOVQwIDU3NnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDNxMzcgMTYxIDE1NC41IDI3OC41VDY0MCAxMjAxdjE0M3EwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1LTE5dDE5LTQ1di0xNDNxMTYxLTM3IDI3OC41LTE1NC41VDEzMjkgNzY4aDE0M3EyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJyZW1vdmVfY2lyY2xlIiB1bmljb2RlPSLvgZwiIGQ9Ik0xMDk3IDQ1N0w5NTEgMzExcS0xMC0xMC0yMy0xMHQtMjMgMTBMNzY4IDQ0OCA2MzEgMzExcS0xMC0xMC0yMy0xMHQtMjMgMTBMNDM5IDQ1N3EtMTAgMTAtMTAgMjN0MTAgMjNsMTM3IDEzNy0xMzcgMTM3cS0xMCAxMC0xMCAyM3QxMCAyM2wxNDYgMTQ2cTEwIDEwIDIzIDEwdDIzLTEwbDEzNy0xMzcgMTM3IDEzN3ExMCAxMCAyMyAxMHQyMy0xMGwxNDYtMTQ2cTEwLTEwIDEwLTIzdC0xMC0yM0w5NjAgNjQwbDEzNy0xMzdxMTAtMTAgMTAtMjN0LTEwLTIzem0yMTUgMTgzcTAgMTQ4LTczIDI3M3QtMTk4IDE5OC0yNzMgNzMtMjczLTczLTE5OC0xOTgtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzN6bTIyNCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJva19jaXJjbGUiIHVuaWNvZGU9Iu+BnSIgZD0iTTExNzEgNzIzTDc0OSAzMDFxLTE5LTE5LTQ1LTE5dC00NSAxOUwzNjUgNTk1cS0xOSAxOS0xOSA0NXQxOSA0NWwxMDIgMTAycTE5IDE5IDQ1IDE5dDQ1LTE5bDE0Ny0xNDcgMjc1IDI3NXExOSAxOSA0NSAxOXQ0NS0xOWwxMDItMTAycTE5LTE5IDE5LTQ1dC0xOS00NXptMTQxLTgzcTAgMTQ4LTczIDI3M3QtMTk4IDE5OC0yNzMgNzMtMjczLTczLTE5OC0xOTgtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzN6bTIyNCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJiYW5fY2lyY2xlIiB1bmljb2RlPSLvgZ4iIGQ9Ik0xMzEyIDY0M3EwIDE2MS04NyAyOTVMNDcxIDE4NXExMzctODkgMjk3LTg5IDExMSAwIDIxMS41IDQzLjVUMTE1MyAyNTZ0MTE2IDE3NC41IDQzIDIxMi41ek0zMTMgMzQ0bDc1NSA3NTRxLTEzNSA5MS0zMDAgOTEtMTQ4IDAtMjczLTczVDI5NyA5MTd0LTczLTI3NHEwLTE2MiA4OS0yOTl6bTEyMjMgMjk5cTAtMTU3LTYxLTMwMFQxMzExLjUgOTd0LTI0NS0xNjRUNzY4LTEyOCA0NjkuNS02N3QtMjQ1IDE2NFQ2MSAzNDMgMCA2NDN0NjEgMjk5LjVUMjI0LjUgMTE4OHQyNDUgMTY0IDI5OC41IDYxIDI5OC41LTYxIDI0NS0xNjRUMTQ3NSA5NDIuNXQ2MS0yOTkuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYXJyb3dfbGVmdCIgdW5pY29kZT0i74GgIiBkPSJNMTUzNiA2NDBWNTEycTAtNTMtMzIuNS05MC41VDE0MTkgMzg0SDcxNWwyOTMtMjk0cTM4LTM2IDM4LTkwdC0zOC05MGwtNzUtNzZxLTM3LTM3LTkwLTM3LTUyIDAtOTEgMzdMMTAxIDQ4NnEtMzcgMzctMzcgOTAgMCA1MiAzNyA5MWw2NTEgNjUwcTM4IDM4IDkxIDM4IDUyIDAgOTAtMzhsNzUtNzRxMzgtMzggMzgtOTF0LTM4LTkxTDcxNSA3NjhoNzA0cTUyIDAgODQuNS0zNy41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19yaWdodCIgdW5pY29kZT0i74GhIiBkPSJNMTQ3MiA1NzZxMC01NC0zNy05MUw3ODQtMTY2cS0zOS0zNy05MS0zNy01MSAwLTkwIDM3bC03NSA3NXEtMzggMzgtMzggOTF0MzggOTFsMjkzIDI5M0gxMTdxLTUyIDAtODQuNSAzNy41VDAgNTEydjEyOHEwIDUzIDMyLjUgOTAuNVQxMTcgNzY4aDcwNGwtMjkzIDI5NHEtMzggMzYtMzggOTB0MzggOTBsNzUgNzVxMzggMzggOTAgMzggNTMgMCA5MS0zOGw2NTEtNjUxcTM3LTM1IDM3LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd191cCIgdW5pY29kZT0i74GiIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgNTY1cTAtNTEtMzctOTBsLTc1LTc1cS0zOC0zOC05MS0zOC01NCAwLTkwIDM4bC0yOTQgMjkzVi0xMXEwLTUyLTM3LjUtODQuNVQ4OTYtMTI4SDc2OHEtNTMgMC05MC41IDMyLjVUNjQwLTExdjcwNEwzNDYgNDAwcS0zNi0zOC05MC0zOHQtOTAgMzhsLTc1IDc1cS0zOCAzOC0zOCA5MCAwIDUzIDM4IDkxbDY1MSA2NTFxMzUgMzcgOTAgMzcgNTQgMCA5MS0zN2w2NTEtNjUxcTM3LTM5IDM3LTkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19kb3duIiB1bmljb2RlPSLvgaMiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxMSA3MDRxMC01My0zNy05MEw5MjMtMzhxLTM5LTM3LTkxLTM3LTUzIDAtOTAgMzdMOTEgNjE0cS0zOCAzNi0zOCA5MCAwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3IDUzIDAgOTAtMzdsMjk0LTI5NHY3MDRxMCA1MiAzOCA5MHQ5MCAzOGgxMjhxNTIgMCA5MC0zOHQzOC05MFY1NzZsMjk0IDI5NHEzNyAzNyA5MCAzNyA1MiAwIDkxLTM3bDc1LTc1cTM3LTM5IDM3LTkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzaGFyZV9hbHQiIHVuaWNvZGU9Iu+BpCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDg5NnEwLTI2LTE5LTQ1bC01MTItNTEycS0xOS0xOS00NS0xOXQtNDUgMTktMTkgNDV2MjU2SDkyOHEtOTggMC0xNzUuNS02dC0xNTQtMjEuNS0xMzMtNDIuNVQzNjAgNTAwLjV0LTgwLTEwMVQyMzEuNSAyNjEgMjE0IDgwcTAtNTUgNS0xMjMgMC02IDIuNS0yMy41VDIyNC05M3EwLTE1LTguNS0yNVQxOTItMTI4cS0xNiAwLTI4IDE3LTcgOS0xMyAyMnQtMTMuNSAzMFQxMjctMzVRMCAyNTAgMCA0MTZxMCAxOTkgNTMgMzMzIDE2MiA0MDMgODc1IDQwM2gyMjR2MjU2cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTlsNTEyLTUxMnExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icmVzaXplX2Z1bGwiIHVuaWNvZGU9Iu+BpSIgZD0iTTc1NSA0ODBxMC0xMy0xMC0yM0w0MTMgMTI1IDU1Ny0xOXExOS0xOSAxOS00NXQtMTktNDUtNDUtMTlINjRxLTI2IDAtNDUgMTlUMC02NHY0NDhxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOWwxNDQtMTQ0IDMzMiAzMzJxMTAgMTAgMjMgMTB0MjMtMTBsMTE0LTExNHExMC0xMCAxMC0yM3ptNzgxIDg2NFY4OTZxMC0yNi0xOS00NXQtNDUtMTktNDUgMTlsLTE0NCAxNDQtMzMyLTMzMnEtMTAtMTAtMjMtMTB0LTIzIDEwTDc5MSA3NzdxLTEwIDEwLTEwIDIzdDEwIDIzbDMzMiAzMzItMTQ0IDE0NHEtMTkgMTktMTkgNDV0MTkgNDUgNDUgMTloNDQ4cTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlc2l6ZV9zbWFsbCIgdW5pY29kZT0i74GmIiBkPSJNNzY4IDU3NlYxMjhxMC0yNi0xOS00NXQtNDUtMTktNDUgMTlMNTE1IDIyNyAxODMtMTA1cS0xMC0xMC0yMy0xMHQtMjMgMTBMMjMgOVExMyAxOSAxMyAzMnQxMCAyM2wzMzIgMzMyLTE0NCAxNDRxLTE5IDE5LTE5IDQ1dDE5IDQ1IDQ1IDE5aDQ0OHEyNiAwIDQ1LTE5dDE5LTQ1em03NTUgNjcycTAtMTMtMTAtMjNsLTMzMi0zMzIgMTQ0LTE0NHExOS0xOSAxOS00NXQtMTktNDUtNDUtMTlIODMycS0yNiAwLTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOWwxNDQtMTQ0IDMzMiAzMzJxMTAgMTAgMjMgMTB0MjMtMTBsMTE0LTExNHExMC0xMCAxMC0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGx1cyIgdW5pY29kZT0i74GnIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDggODAwVjYwOHEwLTQwLTI4LTY4dC02OC0yOEg4OTZWOTZxMC00MC0yOC02OFQ4MDAgMEg2MDhxLTQwIDAtNjggMjh0LTI4IDY4djQxNkg5NnEtNDAgMC02OCAyOFQwIDYwOHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg0MTZ2NDE2cTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjgtMjh0MjgtNjhWODk2aDQxNnE0MCAwIDY4LTI4dDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJtaW51cyIgdW5pY29kZT0i74GoIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDggODAwVjYwOHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwIDYwOHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjgtMjh0MjgtNjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFzdGVyaXNrIiB1bmljb2RlPSLvgakiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ4MiA0ODZxNDYtMjYgNTkuNS03Ny41VDE1MjkgMzExbC02NC0xMTBxLTI2LTQ2LTc3LjUtNTkuNVQxMjkwIDE1NGwtMjY2IDE1M1YwcTAtNTItMzgtOTB0LTkwLTM4SDc2OHEtNTIgMC05MCAzOFQ2NDAgMHYzMDdMMzc0IDE1NHEtNDYtMjYtOTcuNS0xMi41VDE5OSAyMDFsLTY0IDExMHEtMjYgNDYtMTIuNSA5Ny41VDE4MiA0ODZsMjY2IDE1NC0yNjYgMTU0cS00NiAyNi01OS41IDc3LjVUMTM1IDk2OWw2NCAxMTBxMjYgNDYgNzcuNSA1OS41VDM3NCAxMTI2bDI2Ni0xNTN2MzA3cTAgNTIgMzggOTB0OTAgMzhoMTI4cTUyIDAgOTAtMzh0MzgtOTBWOTczbDI2NiAxNTNxNDYgMjYgOTcuNSAxMi41dDc3LjUtNTkuNWw2NC0xMTBxMjYtNDYgMTIuNS05Ny41VDE0ODIgNzk0bC0yNjYtMTU0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJleGNsYW1hdGlvbl9zaWduIiB1bmljb2RlPSLvgaoiIGQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNS0xMDN0Mjc5LjUtMjc5LjVUMTUzNiA2NDB0LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh6TTg5NiAxNjF2MTkwcTAgMTQtOSAyMy41dC0yMiA5LjVINjczcS0xMyAwLTIzLTEwdC0xMC0yM1YxNjFxMC0xMyAxMC0yM3QyMy0xMGgxOTJxMTMgMCAyMiA5LjV0OSAyMy41em0tMiAzNDRsMTggNjIxcTAgMTItMTAgMTgtMTAgOC0yNCA4SDY1OHEtMTQgMC0yNC04LTEwLTYtMTAtMThsMTctNjIxcTAtMTAgMTAtMTcuNXQyNC03LjVoMTg1cTE0IDAgMjMuNSA3LjVUODk0IDUwNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZ2lmdCIgdW5pY29kZT0i74GrIiBkPSJNOTI4IDE4MHY3MTZINjA4VjE4MHEwLTI1IDE4LTM4LjV0NDYtMTMuNWgxOTJxMjggMCA0NiAxMy41dDE4IDM4LjV6bS00NTYgODQ0aDE5NWwtMTI2IDE2MXEtMjYgMzEtNjkgMzEtNDAgMC02OC0yOHQtMjgtNjggMjgtNjggNjgtMjh6bTY4OCA5NnEwIDQwLTI4IDY4dC02OCAyOHEtNDMgMC02OS0zMWwtMTI1LTE2MWgxOTRxNDAgMCA2OCAyOHQyOCA2OHptMzc2LTI1NlY1NDRxMC0xNC05LTIzdC0yMy05aC05NlY5NnEwLTQwLTI4LTY4dC02OC0yOEgyMjRxLTQwIDAtNjggMjh0LTI4IDY4djQxNkgzMnEtMTQgMC0yMyA5dC05IDIzdjMyMHEwIDE0IDkgMjN0MjMgOWg0NDBxLTkzIDAtMTU4LjUgNjUuNVQyNDggMTEyMHQ2NS41IDE1OC41VDQ3MiAxMzQ0cTEwNyAwIDE2OC03N2wxMjgtMTY1IDEyOCAxNjVxNjEgNzcgMTY4IDc3IDkzIDAgMTU4LjUtNjUuNVQxMjg4IDExMjB0LTY1LjUtMTU4LjVUMTA2NCA4OTZoNDQwcTE0IDAgMjMtOXQ5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsZWFmIiB1bmljb2RlPSLvgawiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4MCA4MzJxMCAyNi0xOSA0NXQtNDUgMTlxLTE3MiAwLTMxOC00OS41dC0yNTkuNS0xMzRUNDAzIDQ5M3EtMTktMjEtMTktNDUgMC0yNiAxOS00NXQ0NS0xOXEyNCAwIDQ1IDE5IDI3IDI0IDc0IDcxdDY3IDY2cTEzNyAxMjQgMjY4LjUgMTc2dDMxMy41IDUycTI2IDAgNDUgMTl0MTkgNDV6bTUxMiAxOThxMC05NS0yMC0xOTMtNDYtMjI0LTE4NC41LTM4M1QxMjMwIDE4NlExMDE2IDc4IDc5MiA3OHEtMTQ4IDAtMjg2IDQ3LTE1IDUtODggNDJ0LTk2IDM3cS0xNiAwLTM5LjUtMzJ0LTQ1LTcwVDE4NSAzMiAxMjUgMFE4MiAwIDYxLjUgMTcuNVQxNiA3N3EtMiA0LTYgMTFUNC41IDk4dC0zIDkuNVQwIDEyMXEwIDM1IDMxIDczLjVUOTkgMjYwdDY4IDU2IDMxIDQ4cTAgNC0xNCAzOHQtMTYgNDRxLTkgNTEtOSAxMDQgMCAxMTUgNDMuNSAyMjB0MTE5IDE4NC41IDE3MC41IDEzOSAyMDQgOTUuNXE1NSAxOCAxNDUgMjUuNXQxNzkuNSA5IDE3OC41IDYgMTYzLjUgMjRUMTQ3NiAxMzEwbDI5LjUgMjkuNSAyOS41IDI4IDI3IDIwIDM2LjUgMTYgNDMuNSA0LjVxMzkgMCA3MC41LTQ2dDQ3LjUtMTEyIDI0LTEyNCA4LTk2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaXJlIiB1bmljb2RlPSLvga0iIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOC0xNjB2LTY0cTAtMTMtOS41LTIyLjVUMTM3Ni0yNTZIMzJxLTEzIDAtMjIuNSA5LjVUMC0yMjR2NjRxMCAxMyA5LjUgMjIuNVQzMi0xMjhoMTM0NHExMyAwIDIyLjUtOS41dDkuNS0yMi41ek0xMTUyIDg5NnEwLTc4LTI0LjUtMTQ0dC02NC0xMTIuNS04Ny41LTg4LTk2LTc3LjUtODcuNS03Mi02NC04MS41VDcwNCAyMjRxMC05NiA2Ny0yMjRsLTQgMSAxLTFxLTkwIDQxLTE2MCA4M1Q0NjkuNSAxODMgMzU2IDMwNS41IDI4My41IDQ1NiAyNTYgNjQwcTAgNzggMjQuNSAxNDR0NjQgMTEyLjUgODcuNSA4OCA5NiA3Ny41IDg3LjUgNzIgNjQgODEuNVQ3MDQgMTMxMnEwIDk0LTY2IDIyNGwzLTEtMSAxcTkwLTQxIDE2MC04M3QxMzguNS0xMDAgMTEzLjUtMTIyLjUgNzIuNS0xNTAuNSAyNy41LTE4NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZXllX29wZW4iIHVuaWNvZGU9Iu+BriIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDU3NnEtMTUyIDIzNi0zODEgMzUzIDYxLTEwNCA2MS0yMjUgMC0xODUtMTMxLjUtMzE2LjVUODk2IDI1NiA1NzkuNSAzODcuNSA0NDggNzA0cTAgMTIxIDYxIDIyNS0yMjktMTE3LTM4MS0zNTMgMTMzLTIwNSAzMzMuNS0zMjYuNVQ4OTYgMTI4dDQzNC41IDEyMS41VDE2NjQgNTc2ek05NDQgOTYwcTAgMjAtMTQgMzR0LTM0IDE0cS0xMjUgMC0yMTQuNS04OS41VDU5MiA3MDRxMC0yMCAxNC0zNHQzNC0xNCAzNCAxNCAxNCAzNHEwIDg2IDYxIDE0N3QxNDcgNjFxMjAgMCAzNCAxNHQxNCAzNHptODQ4LTM4NHEwLTM0LTIwLTY5LTE0MC0yMzAtMzc2LjUtMzY4LjVUODk2IDAgMzk2LjUgMTM5IDIwIDUwN1EwIDU0MiAwIDU3NnQyMCA2OXExNDAgMjI5IDM3Ni41IDM2OFQ4OTYgMTE1MnQ0OTkuNS0xMzlUMTc3MiA2NDVxMjAtMzUgMjAtNjl6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImV5ZV9jbG9zZSIgdW5pY29kZT0i74GwIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTU1NSAyMDFsNzggMTQxcS04NyA2My0xMzYgMTU5dC00OSAyMDNxMCAxMjEgNjEgMjI1LTIyOS0xMTctMzgxLTM1MyAxNjctMjU4IDQyNy0zNzV6bTM4OSA3NTlxMCAyMC0xNCAzNHQtMzQgMTRxLTEyNSAwLTIxNC41LTg5LjVUNTkyIDcwNHEwLTIwIDE0LTM0dDM0LTE0IDM0IDE0IDE0IDM0cTAgODYgNjEgMTQ3dDE0NyA2MXEyMCAwIDM0IDE0dDE0IDM0em0zNjMgMTkxcTAtNy0xLTktMTA2LTE4OS0zMTYtNTY3VDY3NSA5bC00OS04OXEtMTAtMTYtMjgtMTYtMTIgMC0xMzQgNzAtMTYgMTAtMTYgMjggMCAxMiA0NCA4Ny0xNDMgNjUtMjYzLjUgMTczVDIwIDUwN1EwIDUzOCAwIDU3NnQyMCA2OXExNTMgMjM1IDM4MCAzNzF0NDk2IDEzNnE4OSAwIDE4MC0xN2w1NCA5N3ExMCAxNiAyOCAxNiA1IDAgMTgtNnQzMS0xNS41IDMzLTE4LjUgMzEuNS0xOC41IDE5LjUtMTEuNXExNi0xMCAxNi0yN3ptMzctNDQ3cTAtMTM5LTc5LTI1My41VDEwNTYgMjg2bDI4MCA1MDJxOC00NSA4LTg0em00NDgtMTI4cTAtMzUtMjAtNjktMzktNjQtMTA5LTE0NS0xNTAtMTcyLTM0Ny41LTI2N1Q4OTYgMGw3NCAxMzJxMjEyIDE4IDM5Mi41IDEzN1QxNjY0IDU3NnEtMTE1IDE3OS0yODIgMjk0bDYzIDExMnE5NS02NCAxODIuNS0xNTNUMTc3MiA2NDVxMjAtMzQgMjAtNjl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Indhcm5pbmdfc2lnbiIgdW5pY29kZT0i74GxIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwMjQgMTYxdjE5MHEwIDE0LTkuNSAyMy41VDk5MiAzODRIODAwcS0xMyAwLTIyLjUtOS41VDc2OCAzNTFWMTYxcTAtMTQgOS41LTIzLjVUODAwIDEyOGgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjMuNXptLTIgMzc0bDE4IDQ1OXEwIDEyLTEwIDE5LTEzIDExLTI0IDExSDc4NnEtMTEgMC0yNC0xMS0xMC03LTEwLTIxbDE3LTQ1N3EwLTEwIDEwLTE2LjV0MjQtNi41aDE4NXExNCAwIDIzLjUgNi41VDEwMjIgNTM1em0tMTQgOTM0TDE3NzYgNjFxMzUtNjMtMi0xMjYtMTctMjktNDYuNS00NnQtNjMuNS0xN0gxMjhxLTM0IDAtNjMuNSAxN1QxOC02NVEtMTktMiAxNiA2MWw3NjggMTQwOHExNyAzMSA0NyA0OXQ2NSAxOCA2NS0xOCA0Ny00OXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGxhbmUiIHVuaWNvZGU9Iu+BsiIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzc2IDEzNzZxNDQtNTIgMTItMTQ4dC0xMDgtMTcybC0xNjEtMTYxIDE2MC02OTZxNS0xOS0xMi0zM2wtMTI4LTk2cS03LTYtMTktNi00IDAtNyAxLTE1IDMtMjEgMTZMODEzIDU4OSA1NTQgMzMwbDUzLTE5NHE1LTE3LTgtMzFMNTAzIDlxLTktOS0yMy05aC0ycS0xNSAyLTI0IDEzTDI2NSAyNjUgMTMgNDU0cS0xMSA3LTEzIDIzLTEgMTMgOSAyNWw5NiA5N3E5IDkgMjMgOSA2IDAgOC0xbDE5NC01MyAyNTkgMjU5LTUwOCAyNzlxLTE0IDgtMTcgMjQtMiAxNiA5IDI3bDEyOCAxMjhxMTQgMTMgMzAgOGw2NjUtMTU5IDE2MCAxNjBxNzYgNzYgMTcyIDEwOHQxNDgtMTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNhbGVuZGFyIiB1bmljb2RlPSLvgbMiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTI4LTEyOGgyODh2Mjg4SDEyOHYtMjg4em0zNTIgMGgzMjB2Mjg4SDQ4MHYtMjg4ek0xMjggMjI0aDI4OHYzMjBIMTI4VjIyNHptMzUyIDBoMzIwdjMyMEg0ODBWMjI0ek0xMjggNjA4aDI4OHYyODhIMTI4VjYwOHptNzM2LTczNmgzMjB2Mjg4SDg2NHYtMjg4ek00ODAgNjA4aDMyMHYyODhINDgwVjYwOHptNzY4LTczNmgyODh2Mjg4aC0yODh2LTI4OHpNODY0IDIyNGgzMjB2MzIwSDg2NFYyMjR6bS0zNTIgODY0djI4OHEwIDEzLTkuNSAyMi41VDQ4MCAxNDA4aC02NHEtMTMgMC0yMi41LTkuNVQzODQgMTM3NnYtMjg4cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptNzM2LTg2NGgyODh2MzIwaC0yODhWMjI0ek04NjQgNjA4aDMyMHYyODhIODY0VjYwOHptMzg0IDBoMjg4djI4OGgtMjg4VjYwOHptMzIgNDgwdjI4OHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yODhxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0zODQgNjRWLTEyOHEwLTUyLTM4LTkwdC05MC0zOEgxMjhxLTUyIDAtOTAgMzhUMC0xMjh2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDEyOHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMtNDd0NDctMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMTI4cTUyIDAgOTAtMzh0MzgtOTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJhbmRvbSIgdW5pY29kZT0i74G0IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY2NiAxMDU1cS02MC05Mi0xMzctMjczLTIyIDQ1LTM3IDcyLjVUNDUxLjUgOTE4dC01MSA1Ni41LTYzIDM1VDI1NiAxMDI0SDMycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHEyNTAgMCA0MTAtMjI1em0xMTI2LTc5OXEwLTE0LTktMjNMMTQ2My04N3EtOS05LTIzLTktMTMgMC0yMi41IDkuNVQxNDA4LTY0djE5MnEtMzIgMC04NS0uNXQtODEtMS03MyAxLTcxIDUtNjQgMTAuNS02MyAxOC41LTU4IDI4LjUtNTkgNDAtNTUgNTMuNS01NiA2OS41cTU5IDkzIDEzNiAyNzMgMjItNDUgMzctNzIuNXQ0MC41LTYzLjUgNTEtNTYuNSA2My0zNVQxMTUyIDM4NGgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQtMTBsMzE5LTMxOXE5LTkgOS0yM3ptMCA4OTZxMC0xNC05LTIzbC0zMjAtMzIwcS05LTktMjMtOS0xMyAwLTIyLjUgOS41VDE0MDggODMydjE5MmgtMjU2cS00OCAwLTg3LTE1dC02OS00NS01MS02MS41LTQ1LTc3LjVxLTMyLTYyLTc4LTE3MS0yOS02Ni00OS41LTExMXQtNTQtMTA1LTY0LTEwMC03NC04My05MC02OC41LTEwNi41LTQyVDI1NiAxMjhIMzJxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTQ4IDAgODcgMTV0NjkgNDUgNTEgNjEuNSA0NSA3Ny41cTMyIDYyIDc4IDE3MSAyOSA2NiA0OS41IDExMXQ1NCAxMDUgNjQgMTAwIDc0IDgzIDkwIDY4LjUgMTA2LjUgNDIgMTI4IDE2LjVoMjU2djE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0LTEwbDMxOS0zMTlxOS05IDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNvbW1lbnQiIHVuaWNvZGU9Iu+BtSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDY0MHEwLTE3NC0xMjAtMzIxLjV0LTMyNi0yMzNUODk2IDBxLTcwIDAtMTQ1IDgtMTk4LTE3NS00NjAtMjQyLTQ5LTE0LTExNC0yMi0xNy0yLTMwLjUgOVQxMjktMjE4djFxLTMgNC0uNSAxMnQyIDEwIDQuNSA5LjVsNiA5IDcgOC41IDggOXE3IDggMzEgMzQuNXQzNC41IDM4IDMxIDM5LjVUMjg1IDR0MjcgNTkgMjYgNzZRMTgxIDIyOCA5MC41IDM1OVQwIDY0MHEwIDEzMCA3MSAyNDguNVQyNjIgMTA5M3QyODYgMTM2LjUgMzQ4IDUwLjVxMjQ0IDAgNDUwLTg1LjV0MzI2LTIzM1QxNzkyIDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWFnbmV0IiB1bmljb2RlPSLvgbYiIGQ9Ik0xNTM2IDcwNFY1NzZxMC0yMDEtOTguNS0zNjJ0LTI3NC0yNTEuNVQ3NjgtMTI4IDM3Mi41LTM3LjUgOTguNSAyMTQgMCA1NzZ2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUtMTl0MTktNDVWNTc2cTAtNTIgMjMuNS05MHQ1My41LTU3IDcxLTMwIDY0LTEzIDQ0LTIgNDQgMiA2NCAxMyA3MSAzMCA1My41IDU3IDIzLjUgOTB2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUtMTl0MTktNDV6TTUxMiAxMzQ0Vjk2MHEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOVQwIDk2MHYzODRxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NS0xOXQxOS00NXptMTAyNCAwVjk2MHEwLTI2LTE5LTQ1dC00NS0xOWgtMzg0cS0yNiAwLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl91cCIgdW5pY29kZT0i74G3IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2ODMgMjA1TDE1MTcgNDBxLTE5LTE5LTQ1LTE5dC00NSAxOUw4OTYgNTcxIDM2NSA0MHEtMTktMTktNDUtMTl0LTQ1IDE5TDEwOSAyMDVxLTE5IDE5LTE5IDQ1LjV0MTkgNDUuNWw3NDIgNzQxcTE5IDE5IDQ1IDE5dDQ1LTE5bDc0Mi03NDFxMTktMTkgMTktNDUuNXQtMTktNDUuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9kb3duIiB1bmljb2RlPSLvgbgiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY4MyA3MjhMOTQxLTEzcS0xOS0xOS00NS0xOXQtNDUgMTlMMTA5IDcyOHEtMTkgMTktMTkgNDUuNXQxOSA0NS41bDE2NiAxNjVxMTkgMTkgNDUgMTl0NDUtMTlsNTMxLTUzMSA1MzEgNTMxcTE5IDE5IDQ1IDE5dDQ1LTE5bDE2Ni0xNjVxMTktMTkgMTktNDUuNXQtMTktNDUuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icmV0d2VldCIgdW5pY29kZT0i74G5IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgMzJxMC0xMy05LjUtMjIuNVQxMjQ4IDBIMjg4cS04IDAtMTMuNSAydC05IDctNS41IDgtMyAxMS41LTEgMTEuNXY2MDBINjRxLTI2IDAtNDUgMTlUMCA3MDRxMCAyNCAxNSA0MWwzMjAgMzg0cTE5IDIyIDQ5IDIydDQ5LTIybDMyMC0zODRxMTUtMTcgMTUtNDEgMC0yNi0xOS00NXQtNDUtMTlINTEyVjI1Nmg1NzZxMTYgMCAyNS0xMWwxNjAtMTkycTctMTAgNy0yMXptNjQwIDQxNnEwLTI0LTE1LTQxTDE1ODUgMjNxLTIwLTIzLTQ5LTIzdC00OSAyM2wtMzIwIDM4NHEtMTUgMTctMTUgNDEgMCAyNiAxOSA0NXQ0NSAxOWgxOTJ2Mzg0SDgzMnEtMTYgMC0yNSAxMmwtMTYwIDE5MnEtNyA5LTcgMjAgMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxOCAwIDEzLjUtMnQ5LTcgNS41LTggMy0xMS41IDEtMTEuNVY1MTJoMTkycTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNob3BwaW5nX2NhcnQiIHVuaWNvZGU9Iu+BuiIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMHEwLTUyLTM4LTkwdC05MC0zOC05MCAzOC0zOCA5MCAzOCA5MCA5MCAzOCA5MC0zOCAzOC05MHptODk2IDBxMC01Mi0zOC05MHQtOTAtMzgtOTAgMzgtMzggOTAgMzggOTAgOTAgMzggOTAtMzggMzgtOTB6bTEyOCAxMDg4VjU3NnEwLTI0LTE2LjUtNDIuNVQxNjA3IDUxMkw1NjMgMzkwcTEzLTYwIDEzLTcwIDAtMTYtMjQtNjRoOTIwcTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTlINDQ4cS0yNiAwLTQ1IDE5dC0xOSA0NXEwIDExIDggMzEuNXQxNiAzNiAyMS41IDQwVDQ0NSAzMjlsLTE3NyA4MjNINjRxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDI1NnExNiAwIDI4LjUtNi41VDM2OCAxMjU4dDEzLTI0LjUgOC0yNiA1LjUtMjkuNSA0LjUtMjZoMTIwMXEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfY2xvc2UiIHVuaWNvZGU9Iu+BuyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDkyOFYyMjRxMC05Mi02Ni0xNThUMTQ0MCAwSDIyNFExMzIgMCA2NiA2NlQwIDIyNHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OC02NnQ2Ni0xNTh2LTMyaDY3MnE5MiAwIDE1OC02NnQ2Ni0xNTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZvbGRlcl9vcGVuIiB1bmljb2RlPSLvgbwiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTg3OSA1ODRxMC0zMS0zMS02NmwtMzM2LTM5NnEtNDMtNTEtMTIwLjUtODYuNVQxMjQ4IDBIMTYwcS0zNCAwLTYwLjUgMTNUNzMgNTZxMCAzMSAzMSA2NmwzMzYgMzk2cTQzIDUxIDEyMC41IDg2LjVUNzA0IDY0MGgxMDg4cTM0IDAgNjAuNS0xM3QyNi41LTQzem0tMzQzIDM0NFY3NjhINzA0cS05NCAwLTE5Ny00Ny41VDM0MyA2MDFMNiAyMDVsLTUtNnEwIDQtLjUgMTIuNVQwIDIyNHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OC02NnQ2Ni0xNTh2LTMyaDU0NHE5MiAwIDE1OC02NnQ2Ni0xNTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlc2l6ZV92ZXJ0aWNhbCIgdW5pY29kZT0i74G9IiBob3Jpei1hZHYteD0iNzY4IiBkPSJNNzA0IDEyMTZxMC0yNi0xOS00NXQtNDUtMTlINTEyVjEyOGgxMjhxMjYgMCA0NS0xOXQxOS00NS0xOS00NUw0MjktMjM3cS0xOS0xOS00NS0xOXQtNDUgMTlMODMgMTlRNjQgMzggNjQgNjR0MTkgNDUgNDUgMTloMTI4djEwMjRIMTI4cS0yNiAwLTQ1IDE5dC0xOSA0NSAxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1LTE5bDI1Ni0yNTZxMTktMTkgMTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlc2l6ZV9ob3Jpem9udGFsIiB1bmljb2RlPSLvgb4iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA2NDBxMC0yNi0xOS00NWwtMjU2LTI1NnEtMTktMTktNDUtMTl0LTQ1IDE5LTE5IDQ1djEyOEgzODRWMzg0cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5TDE5IDU5NVEwIDYxNCAwIDY0MHQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1LTE5IDE5LTQ1Vjc2OGgxMDI0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5IDQ1LTE5bDI1Ni0yNTZxMTktMTkgMTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJhcl9jaGFydCIgdW5pY29kZT0i74KAIiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTY0MCA2NDBWMTI4SDM4NHY1MTJoMjU2em0zODQgNTEyVjEyOEg3Njh2MTAyNGgyNTZ6TTIwNDggMHYtMTI4SDB2MTUzNmgxMjhWMGgxOTIwem0tNjQwIDg5NlYxMjhoLTI1NnY3NjhoMjU2em0zODQgMzg0VjEyOGgtMjU2djExNTJoMjU2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0d2l0dGVyX3NpZ24iIHVuaWNvZGU9Iu+CgSIgZD0iTTEyODAgOTI2cS01Ni0yNS0xMjEtMzQgNjggNDAgOTMgMTE3LTY1LTM4LTEzNC01MS02MSA2Ni0xNTMgNjYtODcgMC0xNDguNS02MS41VDc1NSA4MTRxMC0yOSA1LTQ4LTEyOSA3LTI0MiA2NVQzMjYgOTg2cS0yOS01MC0yOS0xMDYgMC0xMTQgOTEtMTc1LTQ3IDEtMTAwIDI2di0ycTAtNzUgNTAtMTMzLjVUNDYxIDUyM3EtMjktOC01MS04LTEzIDAtMzkgNCAyMS02MyA3NC41LTEwNFQ1NjcgMzczcS0xMTYtOTAtMjYxLTkwLTI2IDAtNTAgMyAxNDgtOTQgMzIyLTk0IDExMiAwIDIxMCAzNS41dDE2OCA5NSAxMjAuNSAxMzcgNzUgMTYyVDExNzYgNzkwcTAgMTgtMSAyNyA2MyA0NSAxMDUgMTA5em0yNTYgMTk0VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZhY2Vib29rX3NpZ24iIHVuaWNvZGU9Iu+CgiIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOGgtMTg4djU5NWgxOTlsMzAgMjMyaC0yMjl2MTQ4cTAgNTYgMjMuNSA4NHQ5MS41IDI4bDEyMiAxdjIwN3EtNjMgOS0xNzggOS0xMzYgMC0yMTcuNS04MFQ4MjAgODcwVjY5OUg2MjBWNDY3aDIwMHYtNTk1SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNhbWVyYV9yZXRybyIgdW5pY29kZT0i74KDIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTkyOCA3MDRxMCAxNC05IDIzdC0yMyA5cS02NiAwLTExMy00N3QtNDctMTEzcTAtMTQgOS0yM3QyMy05IDIzIDkgOSAyM3EwIDQwIDI4IDY4dDY4IDI4cTE0IDAgMjMgOXQ5IDIzem0yMjQtMTMwcTAtMTA2LTc1LTE4MXQtMTgxLTc1LTE4MSA3NS03NSAxODEgNzUgMTgxIDE4MSA3NSAxODEtNzUgNzUtMTgxek0xMjggMGgxNTM2djEyOEgxMjhWMHptMTE1MiA1NzRxMCAxNTktMTEyLjUgMjcxLjVUODk2IDk1OCA2MjQuNSA4NDUuNSA1MTIgNTc0dDExMi41LTI3MS41VDg5NiAxOTB0MjcxLjUgMTEyLjVUMTI4MCA1NzR6TTI1NiAxMjE2aDM4NHYxMjhIMjU2di0xMjh6bS0xMjgtMTkyaDE1MzZ2MjU2SDgzNmwtNjQtMTI4SDEyOHYtMTI4em0xNjY0IDI1NlYwcTAtNTMtMzcuNS05MC41VDE2NjQtMTI4SDEyOHEtNTMgMC05MC41IDM3LjVUMCAwdjEyODBxMCA1MyAzNy41IDkwLjVUMTI4IDE0MDhoMTUzNnE1MyAwIDkwLjUtMzcuNXQzNy41LTkwLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImtleSIgdW5pY29kZT0i74KEIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTgzMiAxMDI0cTAgODAtNTYgMTM2dC0xMzYgNTYtMTM2LTU2LTU2LTEzNnEwLTQyIDE5LTgzLTQxIDE5LTgzIDE5LTgwIDAtMTM2LTU2dC01Ni0xMzYgNTYtMTM2IDEzNi01NiAxMzYgNTYgNTYgMTM2cTAgNDItMTkgODMgNDEtMTkgODMtMTkgODAgMCAxMzYgNTZ0NTYgMTM2em04NTEtNzA0cTAtMTctNDktNjZ0LTY2LTQ5cS05IDAtMjguNSAxNnQtMzYuNSAzMy0zOC41IDQwLTI0LjUgMjZsLTk2LTk2TDE1NjQgNHEyOC0yOCAyOC02OCAwLTQyLTM5LTgxdC04MS0zOXEtNDAgMC02OCAyOEw3MzMgNTE1UTU1NyAzODQgMzY4IDM4NHEtMTYzIDAtMjY1LjUgMTAyLjVUMCA3NTJxMCAxNjAgOTUgMzEzdDI0OCAyNDggMzEzIDk1cTE2MyAwIDI2NS41LTEwMi41VDEwMjQgMTA0MHEwLTE4OS0xMzEtMzY1bDM1NS0zNTUgOTYgOTZxLTMgMy0yNiAyNC41dC00MCAzOC41LTMzIDM2LjUtMTYgMjguNXEwIDE3IDQ5IDY2dDY2IDQ5cTEzIDAgMjMtMTAgNi02IDQ2LTQ0LjV0ODItNzkuNSA4Ni41LTg2IDczLTc4IDI4LjUtNDF6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNvZ3MiIHVuaWNvZGU9Iu+ChSIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik04OTYgNjQwcTAgMTA2LTc1IDE4MXQtMTgxIDc1LTE4MS03NS03NS0xODEgNzUtMTgxIDE4MS03NSAxODEgNzUgNzUgMTgxem03NjgtNTEycTAgNTItMzggOTB0LTkwIDM4LTkwLTM4LTM4LTkwcTAtNTMgMzcuNS05MC41VDE1MzYgMHQ5MC41IDM3LjVUMTY2NCAxMjh6bTAgMTAyNHEwIDUyLTM4IDkwdC05MCAzOC05MC0zOC0zOC05MHEwLTUzIDM3LjUtOTAuNXQ5MC41LTM3LjUgOTAuNSAzNy41IDM3LjUgOTAuNXptLTM4NC00MjFWNTQ2cTAtMTAtNy0xOS41dC0xNi0xMC41bC0xNTUtMjRxLTExLTM1LTMyLTc2IDM0LTQ4IDkwLTExNSA3LTExIDctMjAgMC0xMi03LTE5LTIzLTMwLTgyLjUtODkuNVQ5OTkgMTEzcS0xMSAwLTIxIDdsLTExNSA5MHEtMzctMTktNzctMzEtMTEtMTA4LTIzLTE1NS03LTI0LTMwLTI0SDU0N3EtMTEgMC0yMCA3LjVUNTE3IDI1bC0yMyAxNTNxLTM0IDEwLTc1IDMxbC0xMTgtODlxLTctNy0yMC03LTExIDAtMjEgOC0xNDQgMTMzLTE0NCAxNjAgMCA5IDcgMTkgMTAgMTQgNDEgNTN0NDcgNjFxLTIzIDQ0LTM1IDgyTDI0IDUyMHEtMTAgMS0xNyA5LjVUMCA1NDl2MTg1cTAgMTAgNyAxOS41VDIzIDc2NGwxNTUgMjRxMTEgMzUgMzIgNzYtMzQgNDgtOTAgMTE1LTcgMTEtNyAyMCAwIDEyIDcgMjAgMjIgMzAgODIgODl0NzkgNTlxMTEgMCAyMS03bDExNS05MHEzNCAxOCA3NyAzMiAxMSAxMDggMjMgMTU0IDcgMjQgMzAgMjRoMTg2cTExIDAgMjAtNy41dDEwLTE3LjVsMjMtMTUzcTM0LTEwIDc1LTMxbDExOCA4OXE4IDcgMjAgNyAxMSAwIDIxLTggMTQ0LTEzMyAxNDQtMTYwIDAtOC03LTE5LTEyLTE2LTQyLTU0dC00NS02MHEyMy00OCAzNC04MmwxNTItMjNxMTAtMiAxNy0xMC41dDctMTkuNXptNjQwLTUzM1Y1OHEwLTE2LTE0OS0zMS0xMi0yNy0zMC01MiA1MS0xMTMgNTEtMTM4IDAtNC00LTctMTIyLTcxLTEyNC03MS04IDAtNDYgNDd0LTUyIDY4cS0yMC0yLTMwLTJ0LTMwIDJxLTE0LTIxLTUyLTY4dC00Ni00N3EtMiAwLTEyNCA3MS00IDMtNCA3IDAgMjUgNTEgMTM4LTE4IDI1LTMwIDUyLTE0OSAxNS0xNDkgMzF2MTQwcTAgMTYgMTQ5IDMxIDEzIDI5IDMwIDUyLTUxIDExMy01MSAxMzggMCA0IDQgNyA0IDIgMzUgMjB0NTkgMzQgMzAgMTZxOCAwIDQ2LTQ2LjV0NTItNjcuNXEyMCAyIDMwIDJ0MzAtMnE1MSA3MSA5MiAxMTJsNiAycTQgMCAxMjQtNzAgNC0zIDQtNyAwLTI1LTUxLTEzOCAxNy0yMyAzMC01MiAxNDktMTUgMTQ5LTMxem0wIDEwMjR2LTE0MHEwLTE2LTE0OS0zMS0xMi0yNy0zMC01MiA1MS0xMTMgNTEtMTM4IDAtNC00LTctMTIyLTcxLTEyNC03MS04IDAtNDYgNDd0LTUyIDY4cS0yMC0yLTMwLTJ0LTMwIDJxLTE0LTIxLTUyLTY4dC00Ni00N3EtMiAwLTEyNCA3MS00IDMtNCA3IDAgMjUgNTEgMTM4LTE4IDI1LTMwIDUyLTE0OSAxNS0xNDkgMzF2MTQwcTAgMTYgMTQ5IDMxIDEzIDI5IDMwIDUyLTUxIDExMy01MSAxMzggMCA0IDQgNyA0IDIgMzUgMjB0NTkgMzQgMzAgMTZxOCAwIDQ2LTQ2LjV0NTItNjcuNXEyMCAyIDMwIDJ0MzAtMnE1MSA3MSA5MiAxMTJsNiAycTQgMCAxMjQtNzAgNC0zIDQtNyAwLTI1LTUxLTEzOCAxNy0yMyAzMC01MiAxNDktMTUgMTQ5LTMxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb21tZW50cyIgdW5pY29kZT0i74KGIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE0MDggNzY4cTAtMTM5LTk0LTI1N3QtMjU2LjUtMTg2LjVUNzA0IDI1NnEtODYgMC0xNzYgMTYtMTI0LTg4LTI3OC0xMjgtMzYtOS04Ni0xNmgtM3EtMTEgMC0yMC41IDhUMTI5IDE1N3EtMSAzLTEgNi41dC41IDYuNSAyIDZsMi41IDUgMy41IDUuNSA0IDUgNC41IDUgNCA0LjVxNSA2IDIzIDI1dDI2IDI5LjUgMjIuNSAyOSAyNSAzOC41IDIwLjUgNDRRMTQyIDQzOSA3MSA1NDRUMCA3NjhxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41VDcwNCAxMjgwdDM1My41LTY4LjVUMTMxNCAxMDI1dDk0LTI1N3ptMzg0LTI1NnEwLTEyMC03MS0yMjQuNVQxNTI2IDExMXExMC0yNCAyMC41LTQ0dDI1LTM4LjUgMjIuNS0yOSAyNi0yOS41IDIzLTI1cTEtMSA0LTQuNXQ0LjUtNSA0LTUgMy41LTUuNWwyLjUtNSAyLTYgLjUtNi41LTEtNi41cS0zLTE0LTEzLTIydC0yMi03cS01MCA3LTg2IDE2LTE1NCA0MC0yNzggMTI4LTkwLTE2LTE3Ni0xNi0yNzEgMC00NzIgMTMyIDU4LTQgODgtNCAxNjEgMCAzMDkgNDV0MjY0IDEyOXExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3Ny0yMyAxNTIgMTI5LTcxIDIwNC0xNzh0NzUtMjMweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0aHVtYnNfdXBfYWx0IiB1bmljb2RlPSLvgociIGQ9Ik0yNTYgMTkycTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em0xMTUyIDU3NnEwIDUxLTM5IDg5LjV0LTg5IDM4LjVIOTI4cTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OC0zMiAxNDV0LTEyOCA0N3EtMjYtMjYtMzgtODV0LTMwLjUtMTI1LjVUNzM2IDEwODhxLTIyLTIzLTc3LTkxLTQtNS0yMy0zMHQtMzEuNS00MS0zNC41LTQyLjUtNDAtNDQtMzguNS0zNS41LTQwLTI3LTM1LjUtOWgtMzJWMTI4aDMycTEzIDAgMzEuNS0zdDMzLTYuNSAzOC0xMSAzNS0xMS41VDU4OSA4My41IDYxOCA3M1E4MjkgMCA5NjAgMGgxMjFxMTkyIDAgMTkyIDE2NyAwIDI2LTUgNTYgMzAgMTYgNDcuNSA1Mi41VDEzMzMgMzQ5dC0xOCA2OXE1MyA1MCA1MyAxMTkgMCAyNS0xMCA1NS41dC0yNSA0Ny41cTMyIDEgNTMuNSA0N3QyMS41IDgxem0xMjggMXEwLTg5LTQ5LTE2MyA5LTMzIDktNjkgMC03Ny0zOC0xNDQgMy0yMSAzLTQzIDAtMTAxLTYwLTE3OCAxLTEzOS04NS0yMTkuNVQxMDg5LTEyOEg5NjBxLTk2IDAtMTg5LjUgMjIuNVQ1NTQtNDBRNDM4IDAgNDE2IDBIMTI4UTc1IDAgMzcuNSAzNy41VDAgMTI4djY0MHEwIDUzIDM3LjUgOTAuNVQxMjggODk2aDI3NHEzNiAyNCAxMzcgMTU1IDU4IDc1IDEwNyAxMjggMjQgMjUgMzUuNSA4NS41VDcxMiAxMzkxdDYyIDEwOHEzOSAzNyA5MCAzNyA4NCAwIDE1MS0zMi41dDEwMi0xMDEuNSAzNS0xODZxMC05My00OC0xOTJoMTc2cTEwNCAwIDE4MC03NnQ3Ni0xNzl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InRodW1ic19kb3duX2FsdCIgdW5pY29kZT0i74KIIiBkPSJNMjU2IDEwODhxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTktMTktNDUgMTktNDUgNDUtMTkgNDUgMTkgMTkgNDV6bTExNTItNTc2cTAgMzUtMjEuNSA4MXQtNTMuNSA0N3ExNSAxNyAyNSA0Ny41dDEwIDU1LjVxMCA2OS01MyAxMTkgMTggMzEgMTggNjkgMCAzNy0xNy41IDczLjVUMTI2OCAxMDU3cTUgMzAgNSA1NiAwIDg1LTQ5IDEyNnQtMTM2IDQxSDk2MHEtMTMxIDAtMzQyLTczLTUtMi0yOS0xMC41dC0zNS41LTEyLjUtMzUtMTEuNS0zOC0xMS0zMy02LjUtMzEuNS0zaC0zMlY1MTJoMzJxMTYgMCAzNS41LTl0NDAtMjcgMzguNS0zNS41IDQwLTQ0IDM0LjUtNDIuNSAzMS41LTQxIDIzLTMwcTU1LTY4IDc3LTkxIDQxLTQzIDU5LjUtMTA5LjVUODI2LTQzdDM4LTg1cTk2IDAgMTI4IDQ3dDMyIDE0NXEwIDU5LTQ4IDE2MC41VDkyOCAzODRoMzUycTUwIDAgODkgMzguNXQzOSA4OS41em0xMjgtMXEwLTEwMy03Ni0xNzl0LTE4MC03NmgtMTc2cTQ4LTk5IDQ4LTE5MiAwLTExOC0zNS0xODYtMzUtNjktMTAyLTEwMS41VDg2NC0yNTZxLTUxIDAtOTAgMzctMzQgMzMtNTQgODJ0LTI1LjUgOTAuNVQ2NzcgMzh0LTMxIDY0cS00OCA1MC0xMDcgMTI3LTEwMSAxMzEtMTM3IDE1NUgxMjhxLTUzIDAtOTAuNSAzNy41VDAgNTEydjY0MHEwIDUzIDM3LjUgOTAuNVQxMjggMTI4MGgyODhxMjIgMCAxMzggNDAgMTI4IDQ0IDIyMyA2NnQyMDAgMjJoMTEycTE0MCAwIDIyNi41LTc5dDg1LjUtMjE2di01cTYwLTc3IDYwLTE3OCAwLTIyLTMtNDMgMzgtNjcgMzgtMTQ0IDAtMzYtOS02OSA0OS03MyA0OS0xNjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InN0YXJfaGFsZiIgdW5pY29kZT0i74KJIiBob3Jpei1hZHYteD0iODk2IiBkPSJNODMyIDE1MDRWMTY1TDM4My03MXEtMjItMTItNDAtMTItMjEgMC0zMS41IDE0LjVUMzAxLTMzcTAgNiAyIDIwbDg2IDUwMEwyNSA4NDFRMCA4NjggMCA4ODlxMCAzNyA1NiA0Nmw1MDIgNzMgMjI1IDQ1NXExOSA0MSA0OSA0MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaGVhcnRfZW1wdHkiIHVuaWNvZGU9Iu+CiiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDk0MHEwIDgxLTIxLjUgMTQzdC01NSA5OC41LTgxLjUgNTkuNS05NCAzMS05OCA4LTExMi0yNS41LTExMC41LTY0LTg2LjUtNzItNjAtNjEuNXEtMTgtMjItNDktMjJ0LTQ5IDIycS0yNCAyOC02MCA2MS41dC04Ni41IDcyLTExMC41IDY0LTExMiAyNS41LTk4LTgtOTQtMzEtODEuNS01OS41LTU1LTk4LjVUMTI4IDk0MHEwLTE2OCAxODctMzU1TDg5NiAyNWw1ODAgNTU5cTE4OCAxODggMTg4IDM1NnptMTI4IDBxMC0yMjEtMjI5LTQ1MEw5NDAtMTEwcS0xOC0xOC00NC0xOHQtNDQgMThMMjI4IDQ5MnEtMTAgOC0yNy41IDI2VDE0NSA1ODMuNSA3NyA2ODEgMjMuNSA4MDIgMCA5NDBxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUtMjEuNXQxMjAtNThUODIwIDEyNjB0NzYtNjhxMzYgMzYgNzYgNjh0OTUuNSA2OC41IDEyMCA1OFQxMzE0IDE0MDhxMjI0IDAgMzUxLTEyNHQxMjctMzQ0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzaWdub3V0IiB1bmljb2RlPSLvgosiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDk2cTAtNCAxLTIwdC41LTI2LjUtMy0yMy41LTEwLTE5LjVUNjA4IDBIMjg4UTE2OSAwIDg0LjUgODQuNVQwIDI4OHY3MDRxMCAxMTkgODQuNSAyMDMuNVQyODggMTI4MGgzMjBxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXEwLTQgMS0yMHQuNS0yNi41LTMtMjMuNS0xMC0xOS41LTIwLjUtNi41SDI4OHEtNjYgMC0xMTMtNDd0LTQ3LTExM1YyODhxMC02NiA0Ny0xMTN0MTEzLTQ3aDMxMmwxMS41LTEgMTEuNS0zIDgtNS41IDctOSAyLTEzLjV6bTkyOCA1NDRxMC0yNi0xOS00NUwxMDA1IDUxcS0xOS0xOS00NS0xOXQtNDUgMTktMTkgNDV2Mjg4SDQ0OHEtMjYgMC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloNDQ4djI4OHEwIDI2IDE5IDQ1dDQ1IDE5IDQ1LTE5bDU0NC01NDRxMTktMTkgMTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImxpbmtlZGluX3NpZ24iIHVuaWNvZGU9Iu+CjCIgZD0iTTIzNyAxMjJoMjMxdjY5NEgyMzdWMTIyem0yNDYgOTA4cS0xIDUyLTM2IDg2dC05MyAzNC05NC41LTM0LTM2LjUtODZxMC01MSAzNS41LTg1LjVUMzUxIDkxMGgxcTU5IDAgOTUgMzQuNXQzNiA4NS41em01ODUtOTA4aDIzMXYzOThxMCAxNTQtNzMgMjMzdC0xOTMgNzlxLTEzNiAwLTIwOS0xMTdoMnYxMDFINTk1cTMtNjYgMC02OTRoMjMxdjM4OHEwIDM4IDcgNTYgMTUgMzUgNDUgNTkuNXQ3NCAyNC41cTExNiAwIDExNi0xNTdWMTIyem00NjggOTk4VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InB1c2hwaW4iIHVuaWNvZGU9Iu+CjSIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik00ODAgNjcydjQ0OHEwIDE0LTkgMjN0LTIzIDktMjMtOS05LTIzVjY3MnEwLTE0IDktMjN0MjMtOSAyMyA5IDkgMjN6bTY3Mi0zNTJxMC0yNi0xOS00NXQtNDUtMTlINjU5bC01MS00ODNxLTItMTItMTAuNS0yMC41VDU3Ny0yNTZoLTFxLTI3IDAtMzIgMjdsLTc2IDQ4NUg2NHEtMjYgMC00NSAxOVQwIDMyMHEwIDEyMyA3OC41IDIyMS41VDI1NiA2NDB2NTEycS01MiAwLTkwIDM4dC0zOCA5MCAzOCA5MCA5MCAzOGg2NDBxNTIgMCA5MC0zOHQzOC05MC0zOC05MC05MC0zOFY2NDBxOTkgMCAxNzcuNS05OC41VDExNTIgMzIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJleHRlcm5hbF9saW5rIiB1bmljb2RlPSLvgo4iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQwOCA2MDhWMjg4cTAtMTE5LTg0LjUtMjAzLjVUMTEyMCAwSDI4OFExNjkgMCA4NC41IDg0LjVUMCAyODh2ODMycTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoNzA0cTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlIMjg4cS02NiAwLTExMy00N3QtNDctMTEzVjI4OHEwLTY2IDQ3LTExM3QxMTMtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YzMjBxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMy05dDktMjN6bTM4NCA4NjRWOTYwcTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5bC0xNzYgMTc2LTY1Mi02NTJxLTEwLTEwLTIzLTEwdC0yMyAxMEw2OTUgNTUzcS0xMCAxMC0xMCAyM3QxMCAyM2w2NTIgNjUyLTE3NiAxNzZxLTE5IDE5LTE5IDQ1dDE5IDQ1IDQ1IDE5aDUxMnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzaWduaW4iIHVuaWNvZGU9Iu+CkCIgZD0iTTExODQgNjQwcTAtMjYtMTktNDVMNjIxIDUxcS0xOS0xOS00NS0xOXQtNDUgMTktMTkgNDV2Mjg4SDY0cS0yNiAwLTQ1IDE5VDAgNDQ4djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHYyODhxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOWw1NDQtNTQ0cTE5LTE5IDE5LTQ1em0zNTIgMzUyVjI4OHEwLTExOS04NC41LTIwMy41VDEyNDggMEg5MjhxLTEzIDAtMjIuNSA5LjVUODk2IDMycTAgNC0xIDIwdC0uNSAyNi41IDMgMjMuNSAxMCAxOS41VDkyOCAxMjhoMzIwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y3MDRxMCA2Ni00NyAxMTN0LTExMyA0N0g5MzZsLTExLjUgMS0xMS41IDMtOCA1LjUtNyA5LTIgMTMuNXEwIDQtMSAyMHQtLjUgMjYuNSAzIDIzLjUgMTAgMTkuNSAyMC41IDYuNWgzMjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDk5MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idHJvcGh5IiB1bmljb2RlPSLvgpEiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNDU4IDY1M3EtNzQgMTYyLTc0IDM3MUgxMjh2LTk2cTAtNzggOTQuNS0xNjJUNDU4IDY1M3ptMTA3OCAyNzV2OTZoLTI1NnEwLTIwOS03NC0zNzEgMTQxIDI5IDIzNS41IDExM3Q5NC41IDE2MnptMTI4IDEyOFY5MjhxMC03MS00MS41LTE0M3QtMTEyLTEzMC0xNzMtOTcuNVQxMTIyIDUxM3EtNDItNTQtOTUtOTUtMzgtMzQtNTIuNS03Mi41VDk2MCAyNTZxMC01NCAzMC41LTkxdDk3LjUtMzdxNzUgMCAxMzMuNS00NS41VDEyODAtMzJ2LTY0cTAtMTQtOS0yM3QtMjMtOUg0MTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDY5IDU4LjUgMTE0LjVUNTc2IDEyOHE2NyAwIDk3LjUgMzd0MzAuNSA5MXEwIDUxLTE0LjUgODkuNVQ2MzcgNDE4cS01MyA0MS05NSA5NS0xMTMgNS0yMTUuNSA0NC41dC0xNzMgOTcuNS0xMTIgMTMwVDAgOTI4djEyOHEwIDQwIDI4IDY4dDY4IDI4aDI4OHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNTc2cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMjg4cTQwIDAgNjgtMjh0MjgtNjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImdpdGh1Yl9zaWduIiB1bmljb2RlPSLvgpIiIGQ9Ik01MTkgMzM2cTQgNi0zIDEzLTkgNy0xNCAyLTQtNiAzLTEzIDktNyAxNC0yem0tMjggNDFxLTUgNy0xMiA0LTYtNCAwLTEyIDctOCAxMi01IDYgNCAwIDEzem0tNDEgNDBxMiA0LTUgOC03IDItOC0yLTMtNSA0LTggOC0yIDkgMnptMjEtMjNxMiAxIDEuNSA0LjVUNDY5IDQwNHEtNiA3LTEwIDN0MS0xMXE2LTYgMTEtMnptODYtNzVxMiA3LTkgMTEtOSAzLTEzLTQtMi03IDktMTEgOS0zIDEzIDR6bTQyLTNxMCA4LTEyIDgtMTAgMC0xMC04dDExLTggMTEgOHptMzkgN3EtMiA3LTEzIDV0LTktOXEyLTggMTItNnQxMCAxMHptNjQyIDMxN3EwIDIxMi0xNTAgMzYydC0zNjIgMTUwLTM2Mi0xNTAtMTUwLTM2MnEwLTE2NyA5OC0zMDAuNVQ2MDYgMTU0cTE4LTMgMjYuNSA1dDguNSAyMHEwIDUyLTEgOTUtNi0xLTE1LjUtMi41dC0zNS41LTItNDggNC00My41IDIwVDQ2OCAzMzVxLTIzIDU5LTU3IDc0LTIgMS00LjUgMy41bC04IDgtNyA5LjUgNCA3LjVMNDE1IDQ0MXE2IDAgMTUtMnQzMC0xNS41IDMzLTM1LjVxMTYtMjggMzcuNS00MnQ0My41LTE0IDM4IDMuNSAzMCA5LjVxNyA0NyAzMyA2OS00OSA2LTg2IDE4LjV0LTczIDM5LTU1LjUgNzZUNDQxIDY2N3EwIDc5IDUzIDEzNy0yNCA2MiA1IDEzNiAxOSA2IDU0LjUtNy41VDYxNCA5MDNsMjYtMTZxNTggMTcgMTI4IDE3dDEyOC0xN3ExMSA3IDI4LjUgMTh0NTUuNSAyNiA1NyA5cTI5LTc0IDUtMTM2IDUzLTU4IDUzLTEzNyAwLTU3LTE0LTEwMC41dC0zNS41LTcwVDk5MiA0NTJ0LTYyLjUtMjYtNjguNS0xMnEzNS0zMSAzNS05NSAwLTQwLS41LTg5dC0uNS01MXEwLTEyIDguNS0yMHQyNi41LTVxMTU0IDUyIDI1MiAxODUuNXQ5OCAzMDAuNXptMjU2IDQ4MFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1cGxvYWRfYWx0IiB1bmljb2RlPSLvgpMiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTI4MCA2NHEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptMjU2IDBxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTktMTktNDUgMTktNDUgNDUtMTkgNDUgMTkgMTkgNDV6bTEyOCAyMjRWLTMycTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMzJ2MzIwcTAgNDAgMjggNjh0NjggMjhoNDI3cTIxLTU2IDcwLjUtOTJUNzA0IDI1NmgyNTZxNjEgMCAxMTAuNSAzNnQ3MC41IDkyaDQyN3E0MCAwIDY4LTI4dDI4LTY4em0tMzI1IDY0OHEtMTctNDAtNTktNDBoLTI1NlY0NDhxMC0yNi0xOS00NXQtNDUtMTlINzA0cS0yNiAwLTQ1IDE5dC0xOSA0NXY0NDhIMzg0cS00MiAwLTU5IDQwLTE3IDM5IDE0IDY5bDQ0OCA0NDhxMTggMTkgNDUgMTl0NDUtMTlsNDQ4LTQ0OHEzMS0zMCAxNC02OXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibGVtb24iIHVuaWNvZGU9Iu+ClCIgZD0iTTE0MDcgNzEwcTAgNDQtNyAxMTMuNXQtMTggOTYuNXEtMTIgMzAtMTcgNDR0LTkgMzYuNS00IDQ4LjVxMCAyMyA1IDY4LjV0NSA2Ny41cTAgMzctMTAgNTUtNCAxLTEzIDEtMTkgMC01OC00LjV0LTU5LTQuNXEtNjAgMC0xNzYgMjR0LTE3NSAyNHEtNDMgMC05NC41LTExLjV0LTg1LTIzLjUtODkuNS0zNHEtMTM3LTU0LTIwMi0xMDMtOTYtNzMtMTU5LjUtMTg5LjV0LTg4LTIzNlQxMjggNDM0cTAtNDAgMTIuNS0xMjBUMTUzIDE5M3EwLTIzLTExLTY2LjVUMTMxIDYxdDEyLTM2LjVUMTc3IDEwcTI0IDAgNzIuNSAxMVQzMjMgMzJxNTcgMCAxNjkuNS0xNS41VDY2MiAxcTE4MSAwIDI4NCAzNiAxMjkgNDUgMjM1LjUgMTUyLjV0MTY2IDI0NS41IDU5LjUgMjc1em0xMjggMnEwLTE2NS03MC0zMjcuNXQtMTk2LTI4OFQ5ODgtODRxLTEyNC00NC0zMjYtNDQtNTcgMC0xNzAgMTQuNVQzMjMtOTlxLTI0IDAtNzIuNS0xNC41VDE3Ny0xMjhxLTczIDAtMTIzLjUgNTUuNVQzIDU2cTAgMjQgMTEgNjh0MTEgNjdxMCA0MC0xMi41IDEyMC41VDAgNDMzcTAgMTExIDE4IDIxNy41VDcyLjUgODYwIDE3MyAxMDU0dDE1MCAxNTZxNzggNTkgMjMyIDEyMCAxOTQgNzggMzE2IDc4IDYwIDAgMTc1LjUtMjR0MTczLjUtMjRxMTkgMCA1NyA1dDU4IDVxODEgMCAxMTgtNTAuNXQzNy0xMzQuNXEwLTIzLTUtNjh0LTUtNjhxMC0xMyAyLTI1dDMuNS0xNi41IDcuNS0yMC41IDgtMjBxMTYtNDAgMjUtMTE4LjV0OS0xMzYuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGhvbmUiIHVuaWNvZGU9Iu+ClSIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDI5NnEwLTI3LTEwLTcwLjV0LTIxLTY4LjVxLTIxLTUwLTEyMi0xMDYtOTQtNTEtMTg2LTUxLTI3IDAtNTMgMy41VDk1OC41IDE2dC00NyAxNC41VDg1NiA1MXQtNDkgMThxLTk4IDM1LTE3NSA4My0xMjcgNzktMjY0IDIxNlQxNTIgNjMycS00OCA3Ny04MyAxNzUtMyA5LTE4IDQ5dC0yMC41IDU1LjUtMTQuNSA0N1QzLjUgMTAxNiAwIDEwNjlxMCA5MiA1MSAxODYgNTYgMTAxIDEwNiAxMjIgMjUgMTEgNjguNSAyMXQ3MC41IDEwcTE0IDAgMjEtMyAxOC02IDUzLTc2IDExLTE5IDMwLTU0dDM1LTYzLjUgMzEtNTMuNXEzLTQgMTcuNS0yNXQyMS41LTM1LjUgNy0yOC41cTAtMjAtMjguNS01MHQtNjItNTUtNjItNTMtMjguNS00NnEwLTkgNS0yMi41dDguNS0yMC41IDE0LTI0IDExLjUtMTlxNzYtMTM3IDE3NC0yMzV0MjM1LTE3NHEyLTEgMTktMTEuNXQyNC0xNCAyMC41LTguNSAyMi41LTVxMTggMCA0NiAyOC41dDUzIDYyIDU1IDYyIDUwIDI4LjVxMTQgMCAyOC41LTd0MzUuNS0yMS41IDI1LTE3LjVxMjUtMTUgNTMuNS0zMXQ2My41LTM1IDU0LTMwcTcwLTM1IDc2LTUzIDMtNyAzLTIxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja19lbXB0eSIgdW5pY29kZT0i74KWIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTExMjAgMTI4MEgyODhxLTY2IDAtMTEzLTQ3dC00Ny0xMTNWMjg4cTAtNjYgNDctMTEzdDExMy00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjgzMnEwIDY2LTQ3IDExM3QtMTEzIDQ3em0yODgtMTYwVjI4OHEwLTExOS04NC41LTIwMy41VDExMjAgMEgyODhRMTY5IDAgODQuNSA4NC41VDAgMjg4djgzMnEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDgzMnExMTkgMCAyMDMuNS04NC41VDE0MDggMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYm9va21hcmtfZW1wdHkiIHVuaWNvZGU9Iu+ClyIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTUyIDEyODBIMTI4VjM4bDQyMyA0MDYgODkgODUgODktODUgNDIzLTQwNnYxMjQyem0xMiAxMjhxMjMgMCA0NC05IDMzLTEzIDUyLjUtNDF0MTkuNS02MlY3cTAtMzQtMTkuNS02MlQxMjA4LTk2cS0xOS04LTQ0LTgtNDggMC04MyAzMkw2NDAgMzUyIDE5OS03MnEtMzYtMzMtODMtMzMtMjMgMC00NCA5LTMzIDEzLTUyLjUgNDFUMCA3djEyODlxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBob25lX3NpZ24iIHVuaWNvZGU9Iu+CmCIgZD0iTTEyODAgMzQzcTAgMTEtMiAxNnQtMTggMTYuNS00MC41IDI1VDExNzIgNDI3dC00NS41IDI1LTI4LjUgMTVxLTUgMy0xOSAxM3QtMjUgMTUtMjEgNXEtMTUgMC0zNi41LTIwLjV0LTM5LjUtNDUtMzguNS00NVQ4ODUgMzY5cS03IDAtMTYuNSAzLjVUODUzIDM3OXQtMTcgOS41LTE0IDguNXEtOTkgNTUtMTcwIDEyNi41VDUyNSA2OTRxLTIgMy04LjUgMTR0LTkuNSAxNy02LjUgMTUuNVQ0OTcgNzU3cTAgMTMgMjAuNSAzMy41dDQ1IDM4LjUgNDUgMzkuNVQ2MjggOTA1cTAgMTAtNSAyMXQtMTUgMjUtMTMgMTlxLTMgNi0xNSAyOC41dC0yNSA0NS41LTI2LjUgNDcuNS0yNSA0MC41LTE2LjUgMTgtMTYgMnEtNDggMC0xMDEtMjItNDYtMjEtODAtOTQuNVQyNTYgOTA1cTAtMTYgMi41LTM0dDUtMzAuNSA5LTMzIDEwLTI5LjUgMTIuNS0zMyAxMS0zMHE2MC0xNjQgMjE2LjUtMzIwLjVUODQzIDE3OHE2LTIgMzAtMTF0MzMtMTIuNSAyOS41LTEwIDMzLTkgMzAuNS01IDM0LTIuNXE1NyAwIDEzMC41IDM0dDk0LjUgODBxMjIgNTMgMjIgMTAxem0yNTYgNzc3VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InR3aXR0ZXIiIHVuaWNvZGU9Iu+CmSIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjIwIDExMjhxLTY3LTk4LTE2Mi0xNjcgMS0xNCAxLTQyIDAtMTMwLTM4LTI1OS41VDEzMDUuNSA0MTEgMTEyMSAyMDAuNXQtMjU4LTE0NlQ1NDAgMFEyNjkgMCA0NCAxNDVxMzUtNCA3OC00IDIyNSAwIDQwMSAxMzgtMTA1IDItMTg4IDY0LjVUMjIxIDUwM3EzMy01IDYxLTUgNDMgMCA4NSAxMS0xMTIgMjMtMTg1LjUgMTExLjVUMTA4IDgyNnY0cTY4LTM4IDE0Ni00MS02NiA0NC0xMDUgMTE1dC0zOSAxNTRxMCA4OCA0NCAxNjMgMTIxLTE0OSAyOTQuNS0yMzguNVQ4MjAgODgzcS04IDM4LTggNzQgMCAxMzQgOTQuNSAyMjguNVQxMTM1IDEyODBxMTQwIDAgMjM2LTEwMiAxMDkgMjEgMjA1IDc4LTM3LTExNS0xNDItMTc4IDkzIDEwIDE4NiA1MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZmFjZWJvb2siIHVuaWNvZGU9Iu+CmiIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik05NTkgMTUyNHYtMjY0SDgwMnEtODYgMC0xMTYtMzZ0LTMwLTEwOFY5MjdoMjkzbC0zOS0yOTZINjU2di03NTlIMzUwdjc1OUg5NXYyOTZoMjU1djIxOHEwIDE4NiAxMDQgMjg4LjVUNzMxIDE1MzZxMTQ3IDAgMjI4LTEyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJnaXRodWIiIHVuaWNvZGU9Iu+CmyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41LTEwM3QyNzkuNS0yNzkuNVQxNTM2IDY0MHEwLTI1MS0xNDYuNS00NTEuNVQxMDExLTg5cS0yNy01LTQwIDd0LTEzIDMwcTAgMyAuNSA3Ni41VDk1OSAxNTlxMCA5Ny01MiAxNDIgNTcgNiAxMDIuNSAxOHQ5NCAzOSA4MSA2Ni41IDUzIDEwNVQxMjU4IDY4MHEwIDExOS03OSAyMDYgMzcgOTEtOCAyMDQtMjggOS04MS0xMXQtOTItNDRsLTM4LTI0cS05MyAyNi0xOTIgMjZ0LTE5Mi0yNnEtMTYgMTEtNDIuNSAyN3QtODMuNSAzOC41LTg1IDEzLjVxLTQ1LTExMy04LTIwNC03OS04Ny03OS0yMDYgMC04NSAyMC41LTE1MFQzNTEgNDI1dDgwLjUtNjcgOTQtMzlUNjI4IDMwMXEtMzktMzYtNDktMTAzLTIxLTEwLTQ1LTE1dC01Ny01LTY1LjUgMjEuNVQzNTYgMjYycS0xOSAzMi00OC41IDUyVDI1OCAzMzhsLTIwIDNxLTIxIDAtMjktNC41dC01LTExLjUgOS0xNCAxMy0xMmw3LTVxMjItMTAgNDMuNS0zOHQzMS41LTUxbDEwLTIzcTEzLTM4IDQ0LTYxLjV0NjctMzAgNjkuNS03VDU1NCA4N2wyMyA0cTAtMzggLjUtODguNVQ1NzgtNTJxMC0xOC0xMy0zMHQtNDAtN1EyOTMtMTIgMTQ2LjUgMTg4LjVUMCA2NDBxMCAyMDkgMTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh6TTI5MSAzMDVxMyA3LTcgMTItMTAgMy0xMy0yLTMtNyA3LTEyIDktNiAxMyAyem0zMS0zNHE3IDUtMiAxNi0xMCA5LTE2IDMtNy01IDItMTYgMTAtMTAgMTYtM3ptMzAtNDVxOSA3IDAgMTktOCAxMy0xNyA2LTktNSAwLTE4dDE3LTd6bTQyLTQycTggOC00IDE5LTEyIDEyLTIwIDMtOS04IDQtMTkgMTItMTIgMjAtM3ptNTctMjVxMyAxMS0xMyAxNi0xNSA0LTE5LTd0MTMtMTVxMTUtNiAxOSA2em02My01cTAgMTMtMTcgMTEtMTYgMC0xNi0xMSAwLTEzIDE3LTExIDE2IDAgMTYgMTF6bTU4IDEwcS0yIDExLTE4IDktMTYtMy0xNC0xNXQxOC04IDE0IDE0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmxvY2siIHVuaWNvZGU9Iu+CnCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDk2MFY3MDRxMC0yNi0xOS00NXQtNDUtMTloLTY0cS0yNiAwLTQ1IDE5dC0xOSA0NXYyNTZxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MVY3NjhoOTZxNDAgMCA2OC0yOHQyOC02OFY5NnEwLTQwLTI4LTY4dC02OC0yOEg5NlE1NiAwIDI4IDI4VDAgOTZ2NTc2cTAgNDAgMjggNjh0NjggMjhoNjcydjE5MnEwIDE4NSAxMzEuNSAzMTYuNVQxMjE2IDE0MDh0MzE2LjUtMTMxLjVUMTY2NCA5NjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNyZWRpdF9jYXJkIiB1bmljb2RlPSLvgp0iIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTc2MCAxNDA4cTY2IDAgMTEzLTQ3dDQ3LTExM1YzMnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDE2MHEtNjYgMC0xMTMgNDdUMCAzMnYxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwek0xNjAgMTI4MHEtMTMgMC0yMi41LTkuNVQxMjggMTI0OHYtMjI0aDE2NjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41SDE2MHpNMTc2MCAwcTEzIDAgMjIuNSA5LjVUMTc5MiAzMnY2MDhIMTI4VjMycTAtMTMgOS41LTIyLjVUMTYwIDBoMTYwMHpNMjU2IDEyOHYxMjhoMjU2VjEyOEgyNTZ6bTM4NCAwdjEyOGgzODRWMTI4SDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icnNzIiB1bmljb2RlPSLvgp4iIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDE5MnEwLTgwLTU2LTEzNlQxOTIgMCA1NiA1NiAwIDE5MnQ1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6TTg5NiA2OXEyLTI4LTE3LTQ4LTE4LTIxLTQ3LTIxSDY5N3EtMjUgMC00MyAxNi41VDYzNCA1OHEtMjIgMjI5LTE4NC41IDM5MS41VDU4IDYzNHEtMjUgMi00MS41IDIwVDAgNjk3djEzNXEwIDI5IDIxIDQ3IDE3IDE3IDQzIDE3aDVxMTYwLTEzIDMwNi04MC41VDYzNCA2MzRxMTE0LTExMyAxODEuNS0yNTlUODk2IDY5em01MTItMnEyLTI3LTE4LTQ3LTE4LTIwLTQ2LTIwaC0xNDNxLTI2IDAtNDQuNSAxNy41VDExMzcgNjBxLTEyIDIxNS0xMDEgNDA4LjV0LTIzMS41IDMzNi0zMzYgMjMxLjVUNjAgMTEzOHEtMjUgMS00Mi41IDE5LjVUMCAxMjAxdjE0M3EwIDI4IDIwIDQ2IDE4IDE4IDQ0IDE4aDNxMjYyLTEzIDUwMS41LTEyMFQ5OTQgOTk0cTE4Ny0xODYgMjk0LTQyNS41VDE0MDggNjd6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhkZCIgdW5pY29kZT0i74KgIiBkPSJNMTA0MCAzMjBxMC0zMy0yMy41LTU2LjVUOTYwIDI0MHQtNTYuNSAyMy41VDg4MCAzMjB0MjMuNSA1Ni41VDk2MCA0MDB0NTYuNS0yMy41VDEwNDAgMzIwem0yNTYgMHEwLTMzLTIzLjUtNTYuNVQxMjE2IDI0MHQtNTYuNSAyMy41VDExMzYgMzIwdDIzLjUgNTYuNVQxMjE2IDQwMHQ1Ni41LTIzLjVUMTI5NiAzMjB6bTExMi0xNjB2MzIwcTAgMTMtOS41IDIyLjVUMTM3NiA1MTJIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCA0ODBWMTYwcTAtMTMgOS41LTIyLjVUMTYwIDEyOGgxMjE2cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE3OCA2NDBoMTE4MGwtMTU3IDQ4MnEtNCAxMy0xNiAyMS41dC0yNiA4LjVIMzc3cS0xNCAwLTI2LTguNXQtMTYtMjEuNXptMTM1OC0xNjBWMTYwcTAtNjYtNDctMTEzVDEzNzYgMEgxNjBROTQgMCA0NyA0N1QwIDE2MHYzMjBxMCAyNSAxNiA3NWwxOTcgNjA2cTE3IDUzIDYzIDg2dDEwMSAzM2g3ODJxNTUgMCAxMDEtMzN0NjMtODZsMTk3LTYwNnExNi01MCAxNi03NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYnVsbGhvcm4iIHVuaWNvZGU9Iu+CoSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDg5NnE1MyAwIDkwLjUtMzcuNVQxNzkyIDc2OHQtMzcuNS05MC41VDE2NjQgNjQwVjI1NnEwLTUyLTM4LTkwdC05MC0zOHEtNDE3IDM0Ny04MTIgMzgwLTU4LTE5LTkxLTY2dC0zMS0xMDAuNSA0MC05Mi41cS0yMC0zMy0yMy02NS41dDYtNTggMzMuNS01NSA0OC01MFQ3NjgtMzBxLTI5LTU4LTExMS41LTgzVDQ4OC0xMjQuNSAzNTYtNjlxLTcgMjMtMjkuNSA4Ny41dC0zMiA5NC41LTIzIDg5LTE1IDEwMSAzLjUgOTguNVQyODIgNTEySDE2MHEtNjYgMC0xMTMgNDdUMCA2NzJ2MTkycTAgNjYgNDcgMTEzdDExMyA0N2g0ODBxNDM1IDAgODk2IDM4NCA1MiAwIDkwLTM4dDM4LTkwVjg5NnptLTEyOC02MDR2OTU0cS0zOTQtMzAyLTc2OC0zNDNWNjMzcTM3Ny00MiA3NjgtMzQxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJiZWxsIiB1bmljb2RlPSLvgqIiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNOTEyLTE2MHEwIDE2LTE2IDE2LTU5IDAtMTAxLjUgNDIuNVQ3NTIgMHEwIDE2LTE2IDE2VDcyMCAwcTAtNzMgNTEuNS0xMjQuNVQ4OTYtMTc2cTE2IDAgMTYgMTZ6TTI0NiAxMjhoMTMwMHEtMjY2IDMwMC0yNjYgODMyIDAgNTEtMjQgMTA1dC02OSAxMDMtMTIxLjUgODAuNVQ4OTYgMTI4MHQtMTY5LjUtMzEuNVQ2MDUgMTE2OHQtNjktMTAzLTI0LTEwNXEwLTUzMi0yNjYtODMyem0xNDgyIDBxMC01Mi0zOC05MHQtOTAtMzhoLTQ0OHEwLTEwNi03NS0xODF0LTE4MS03NS0xODEgNzVUNjQwIDBIMTkycS01MiAwLTkwIDM4dC0zOCA5MHE1MCA0MiA5MSA4OHQ4NSAxMTkuNVQzMTQuNSA0OTR0NTAgMjA2VDM4NCA5NjBxMCAxNTIgMTE3IDI4Mi41VDgwOCAxNDAxcS04IDE5LTggMzkgMCA0MCAyOCA2OHQ2OCAyOCA2OC0yOCAyOC02OHEwLTIwLTgtMzkgMTkwLTI4IDMwNy0xNTguNVQxNDA4IDk2MHEwLTEzOSAxOS41LTI2MHQ1MC0yMDYgNzQuNS0xNTguNSA4NS0xMTkuNSA5MS04OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2VydGlmaWNhdGUiIHVuaWNvZGU9Iu+CoyIgZD0iTTEzNzYgNjQwbDEzOC0xMzVxMzAtMjggMjAtNzAtMTItNDEtNTItNTFsLTE4OC00OCA1My0xODZxMTItNDEtMTktNzAtMjktMzEtNzAtMTlsLTE4NiA1My00OC0xODhxLTEwLTQwLTUxLTUyLTEyLTItMTktMi0zMSAwLTUxIDIyTDc2OCAzMiA2MzMtMTA2cS0yOC0zMC03MC0yMC00MSAxMS01MSA1MmwtNDggMTg4LTE4Ni01M3EtNDEtMTItNzAgMTktMzEgMjktMTkgNzBsNTMgMTg2LTE4OCA0OHEtNDAgMTAtNTIgNTEtMTAgNDIgMjAgNzBsMTM4IDEzNUwyMiA3NzVxLTMwIDI4LTIwIDcwIDEyIDQxIDUyIDUxbDE4OCA0OC01MyAxODZxLTEyIDQxIDE5IDcwIDI5IDMxIDcwIDE5bDE4Ni01MyA0OCAxODhxMTAgNDEgNTEgNTEgNDEgMTIgNzAtMTlsMTM1LTEzOSAxMzUgMTM5cTI5IDMwIDcwIDE5IDQxLTEwIDUxLTUxbDQ4LTE4OCAxODYgNTNxNDEgMTIgNzAtMTkgMzEtMjkgMTktNzBsLTUzLTE4NiAxODgtNDhxNDAtMTAgNTItNTEgMTAtNDItMjAtNzB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhhbmRfcmlnaHQiIHVuaWNvZGU9Iu+CpCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMTkycTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em0xNDA4IDU3NnEwIDUxLTM5IDg5LjV0LTg5IDM4LjVIOTYwcTAgMjAgMTUgNDguNXQzMyA1NSAzMyA2OCAxNSA4NC41cTAgNjctNDQuNSA5Ny41VDg5NiAxMjgwcS0yNCAwLTkwLTEzOS0yNC00NC0zNy02NS00MC02NC0xMTItMTQ1LTcxLTgxLTEwMS0xMDYtNjktNTctMTQwLTU3aC0zMlYxMjhoMzJxNzIgMCAxNjctMzJ0MTkzLjUtNjRUOTU2IDBxMTg5IDAgMTg5IDE2NyAwIDI2LTUgNTYgMzAgMTYgNDcuNSA1Mi41VDEyMDUgMzQ5dC0xOCA2OXE1MyA1MCA1MyAxMTkgMCAyNS0xMCA1NS41dC0yNSA0Ny41aDMzMXE1MiAwIDkwIDM4dDM4IDkwem0xMjggMXEwLTEwNS03NS41LTE4MVQxNTM2IDUxMmgtMTY5cS00LTYyLTM3LTExOSAzLTIxIDMtNDMgMC0xMDEtNjAtMTc4IDEtMTM5LTg1LTIxOS41VDk2MS0xMjhxLTEzMyAwLTMyMiA2OVE0NzUgMCA0MTYgMEgxMjhRNzUgMCAzNy41IDM3LjVUMCAxMjh2NjQwcTAgNTMgMzcuNSA5MC41VDEyOCA4OTZoMjg4cTEwIDAgMjEuNSA0LjV0MjMuNSAxNCAyMi41IDE4IDI0IDIyLjUgMjAuNSAyMS41IDE5IDIxLjUgMTQgMTdxNjUgNzQgMTAwIDEyOSAxMyAyMSAzMyA2MnQzNyA3MiA0MC41IDYzIDU1IDQ5LjVUODk2IDE0MDhxMTI1IDAgMjA2LjUtNjd0ODEuNS0xODlxMC02OC0yMi0xMjhoMzc0cTEwNCAwIDE4MC03NnQ3Ni0xNzl6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhhbmRfbGVmdCIgdW5pY29kZT0i74KlIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEzNzYgMTI4aDMydjY0MGgtMzJxLTM1IDAtNjcuNSAxMnQtNjIuNSAzNy01MCA0Ni00OSA1NHEtOCA5LTEyIDE0LTcyIDgxLTExMiAxNDUtMTQgMjItMzggNjgtMSAzLTEwLjUgMjIuNXQtMTguNSAzNi0yMCAzNS41LTIxLjUgMzAuNVQ4OTYgMTI4MHEtNzEgMC0xMTUuNS0zMC41VDczNiAxMTUycTAtNDMgMTUtODQuNXQzMy02OCAzMy01NSAxNS00OC41SDI1NnEtNTAgMC04OS0zOC41VDEyOCA3NjhxMC01MiAzOC05MHQ5MC0zOGgzMzFxLTE1LTE3LTI1LTQ3LjVUNTUyIDUzN3EwLTY5IDUzLTExOS0xOC0zMi0xOC02OXQxNy41LTczLjVUNjUyIDIyM3EtNC0yNC00LTU2IDAtODUgNDguNS0xMjZUODMyIDBxODQgMCAxODMgMzJ0MTk0IDY0IDE2NyAzMnptMjg4IDY0cTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em0xMjggNTc2VjEyOHEwLTUzLTM3LjUtOTAuNVQxNjY0IDBoLTI4OHEtNTkgMC0yMjMtNTktMTkwLTY5LTMxNy02OS0xNDIgMC0yMzAgNzcuNVQ1MTkgMTY3bDEgNXEtNjEgNzYtNjEgMTc4IDAgMjIgMyA0My0zMyA1Ny0zNyAxMTlIMjU2cS0xMDUgMC0xODAuNSA3NlQwIDc2OXEwIDEwMyA3NiAxNzl0MTgwIDc2aDM3NHEtMjIgNjAtMjIgMTI4IDAgMTIyIDgxLjUgMTg5dDIwNi41IDY3cTM4IDAgNjkuNS0xNy41dDU1LTQ5LjUgNDAuNS02MyAzNy03MiAzMy02MnEzNS01NSAxMDAtMTI5IDItMyAxNC0xN3QxOS0yMS41IDIwLjUtMjEuNSAyNC0yMi41IDIyLjUtMTggMjMuNS0xNCAyMS41LTQuNWgyODhxNTMgMCA5MC41LTM3LjVUMTc5MiA3Njh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhhbmRfdXAiIHVuaWNvZGU9Iu+CpiIgZD0iTTEyODAtNjRxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTktMTktNDUgMTktNDUgNDUtMTkgNDUgMTkgMTkgNDV6bTEyOCA3NjRxMCAxODktMTY3IDE4OS0yNiAwLTU2LTUtMTYgMzAtNTIuNSA0Ny41VDEwNTkgOTQ5dC02OS0xOHEtNTAgNTMtMTE5IDUzLTI1IDAtNTUuNS0xMFQ3NjggOTQ5djMzMXEwIDUyLTM4IDkwdC05MCAzOHEtNTEgMC04OS41LTM5dC0zOC41LTg5VjcwNHEtMjAgMC00OC41IDE1dC01NSAzMy02OCAzMy04NC41IDE1cS02NyAwLTk3LjUtNDQuNVQxMjggNjQwcTAtMjQgMTM5LTkwIDQ0LTI0IDY1LTM3IDY0LTQwIDE0NS0xMTIgODEtNzEgMTA2LTEwMSA1Ny02OSA1Ny0xNDB2LTMyaDY0MHYzMnEwIDcyIDMyIDE2N3Q2NCAxOTMuNSAzMiAxNzkuNXptMTI4IDVxMC0xMzMtNjktMzIyLTU5LTE2NC01OS0yMjN2LTI4OHEwLTUzLTM3LjUtOTAuNVQxMjgwLTI1Nkg2NDBxLTUzIDAtOTAuNSAzNy41VDUxMi0xMjh2Mjg4cTAgMTAtNC41IDIxLjV0LTE0IDIzLjUtMTggMjIuNS0yMi41IDI0LTIxLjUgMjAuNS0yMS41IDE5LTE3IDE0cS03NCA2NS0xMjkgMTAwLTIxIDEzLTYyIDMzdC03MiAzNy02MyA0MC41LTQ5LjUgNTVUMCA2NDBxMCAxMjUgNjcgMjA2LjVUMjU2IDkyOHE2OCAwIDEyOC0yMnYzNzRxMCAxMDQgNzYgMTgwdDE3OSA3NnExMDUgMCAxODEtNzUuNXQ3Ni0xODAuNXYtMTY5cTYyLTQgMTE5LTM3IDIxIDMgNDMgMyAxMDEgMCAxNzgtNjAgMTM5IDEgMjE5LjUtODV0ODAuNS0yMjd6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImhhbmRfZG93biIgdW5pY29kZT0i74KnIiBkPSJNMTQwOCA1NzZxMCA4NC0zMiAxODN0LTY0IDE5NC0zMiAxNjd2MzJINjQwdi0zMnEwLTM1LTEyLTY3LjVUNTkxIDk5MHQtNDYtNTAtNTQtNDlxLTktOC0xNC0xMi04MS03Mi0xNDUtMTEyLTIyLTE0LTY4LTM4LTMtMS0yMi41LTEwLjV0LTM2LTE4LjUtMzUuNS0yMC0zMC41LTIxLjVUMTI4IDY0MHEwLTcxIDMwLjUtMTE1LjVUMjU2IDQ4MHE0MyAwIDg0LjUgMTV0NjggMzMgNTUgMzMgNDguNSAxNVYwcTAtNTAgMzguNS04OXQ4OS41LTM5cTUyIDAgOTAgMzh0MzggOTB2MzMxcTQ2LTM1IDEwMy0zNSA2OSAwIDExOSA1MyAzMi0xOCA2OS0xOHQ3My41IDE3LjVUMTE4NSAzOTZxMjQtNCA1Ni00IDg1IDAgMTI2IDQ4LjV0NDEgMTM1LjV6bS0xMjggNzY4cTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em0yNTYtNzY0cTAtMTQyLTc3LjUtMjMwVDEyNDEgMjYzbC01IDFxLTc2LTYxLTE3OC02MS0yMiAwLTQzIDMtNTQtMzAtMTE5LTM3VjBxMC0xMDUtNzYtMTgwLjVUNjM5LTI1NnEtMTAzIDAtMTc5IDc2VDM4NCAwdjM3NHEtNTQtMjItMTI4LTIyLTEyMSAwLTE4OC41IDgxLjVUMCA2NDBxMCAzOCAxNy41IDY5LjV0NDkuNSA1NSA2MyA0MC41IDcyIDM3IDYyIDMzcTU1IDM1IDEyOSAxMDAgMyAyIDE3IDE0dDIxLjUgMTkgMjEuNSAyMC41IDIyLjUgMjQgMTggMjIuNSAxNCAyMy41IDQuNSAyMS41djI4OHEwIDUzIDM3LjUgOTAuNVQ2NDAgMTUzNmg2NDBxNTMgMCA5MC41LTM3LjV0MzcuNS05MC41di0yODhxMC01OSA1OS0yMjMgNjktMTkwIDY5LTMxN3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlX2Fycm93X2xlZnQiIHVuaWNvZGU9Iu+CqCIgZD0iTTEyODAgNTc2djEyOHEwIDI2LTE5IDQ1dC00NSAxOUg3MTRsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOC00NSAxOHQtNDUtMThMMzYwIDc3NmwtOTEtOTFxLTE4LTE4LTE4LTQ1dDE4LTQ1bDkxLTkxIDM2Mi0zNjJxMTgtMTggNDUtMTh0NDUgMThsOTEgOTFxMTggMTggMTggNDV0LTE4IDQ1TDcxNCA1MTJoNTAycTI2IDAgNDUgMTl0MTkgNDV6bTI1NiA2NHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlX2Fycm93X3JpZ2h0IiB1bmljb2RlPSLvgqkiIGQ9Ik0xMjg1IDY0MHEwIDI3LTE4IDQ1bC05MSA5MS0zNjIgMzYycS0xOCAxOC00NSAxOHQtNDUtMThsLTkxLTkxcS0xOC0xOC0xOC00NXQxOC00NWwxODktMTg5SDMyMHEtMjYgMC00NS0xOXQtMTktNDVWNTc2cTAtMjYgMTktNDV0NDUtMTloNTAyTDYzMyAzMjNxLTE5LTE5LTE5LTQ1dDE5LTQ1bDkxLTkxcTE4LTE4IDQ1LTE4dDQ1IDE4bDM2MiAzNjIgOTEgOTFxMTggMTggMTggNDV6bTI1MSAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYXJyb3dfdXAiIHVuaWNvZGU9Iu+CqiIgZD0iTTEyODQgNjQxcTAgMjctMTggNDVsLTM2MiAzNjItOTEgOTFxLTE4IDE4LTQ1IDE4dC00NS0xOGwtOTEtOTEtMzYyLTM2MnEtMTgtMTgtMTgtNDV0MTgtNDVsOTEtOTFxMTgtMTggNDUtMTh0NDUgMThsMTg5IDE4OVYxOTJxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5LTE4OXExOS0xOSA0NS0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXptMjUyLTFxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9hcnJvd19kb3duIiB1bmljb2RlPSLvgqsiIGQ9Ik0xMjg0IDYzOXEwIDI3LTE4IDQ1bC05MSA5MXEtMTggMTgtNDUgMTh0LTQ1LTE4TDg5NiA1ODZ2NTAycTAgMjYtMTkgNDV0LTQ1IDE5SDcwNHEtMjYgMC00NS0xOXQtMTktNDVWNTg2TDQ1MSA3NzVxLTE5IDE5LTQ1IDE5dC00NS0xOWwtOTEtOTFxLTE4LTE4LTE4LTQ1dDE4LTQ1bDM2Mi0zNjIgOTEtOTFxMTgtMTggNDUtMTh0NDUgMThsOTEgOTEgMzYyIDM2MnExOCAxOCAxOCA0NXptMjUyIDFxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Imdsb2JlIiB1bmljb2RlPSLvgqwiIGQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNS0xMDN0Mjc5LjUtMjc5LjVUMTUzNiA2NDB0LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh6bTI3NC01MjFxLTItMS05LjUtOS41VDEwMTkgODY4cTIgMCA0LjUgNXQ1IDExIDMuNSA3cTYgNyAyMiAxNSAxNCA2IDUyIDEyIDM0IDggNTEtMTEtMiAyIDkuNSAxM3QxNC41IDEycTMgMiAxNSA0LjV0MTUgNy41bDIgMjJxLTEyLTEtMTcuNSA3dC02LjUgMjFxMC0yLTYtOCAwIDctNC41IDh0LTExLjUtMS05LTFxLTEwIDMtMTUgNy41dC04IDE2LjUtNCAxNXEtMiA1LTkuNSAxMXQtOS41IDEwcS0xIDItMi41IDUuNXQtMyA2LjUtNCA1LjUtNS41IDIuNS03LTUtNy41LTEwLTQuNS01cS0zIDItNiAxLjV0LTQuNS0xLTQuNS0zLTUtMy41cS0zLTItOC41LTN0LTguNS0ycTE1IDUtMSAxMS0xMCA0LTE2IDMgOSA0IDcuNSAxMnQtOC41IDE0aDVxLTEgNC04LjUgOC41dC0xNy41IDguNS0xMyA2cS04IDUtMzQgOS41dC0zMyAuNXEtNS02LTQuNS0xMC41dDQtMTQgMy41LTEyLjVxMS02LTUuNS0xM3QtNi41LTEycTAtNyAxNC0xNS41dDEwLTIxLjVxLTMtOC0xNi0xNnQtMTYtMTJxLTUtOC0xLjUtMTguNVQ5MTQgOTUycTItMiAxLjUtNHQtMy41LTQuNS01LjUtNC02LjUtMy41bC0zLTJxLTExLTUtMjAuNSA2VDg2MyA5NjZxLTcgMjUtMTYgMzAtMjMgOC0yOS0xLTUgMTMtNDEgMjYtMjUgOS01OCA0IDYgMSAwIDE1LTcgMTUtMTkgMTIgMyA2IDQgMTcuNXQxIDEzLjVxMyAxMyAxMiAyMyAxIDEgNyA4LjV0OS41IDEzLjUuNSA2cTM1LTQgNTAgMTEgNSA1IDExLjUgMTd0MTAuNSAxN3E5IDYgMTQgNS41dDE0LjUtNS41IDE0LjUtNXExNC0xIDE1LjUgMTF0LTcuNSAyMHExMi0xIDMgMTctNCA3LTggOS0xMiA0LTI3LTUtOC00IDItOC0xIDEtOS41LTEwLjVUODAxIDExOTB0LTE2IDVxLTEgMS01LjUgMTMuNVQ3NzAgMTIyMnEtOCAwLTE2LTE1IDMgOC0xMSAxNXQtMjQgOHExOSAxMi04IDI3LTcgNC0yMC41IDV0LTE5LjUtNHEtNS03LTUuNS0xMS41dDUtOCAxMC41LTUuNSAxMS41LTQgOC41LTNxMTQtMTAgOC0xNC0yLTEtOC41LTMuNVQ2ODkgMTIwNHQtNi00cS0zLTQgMC0xNHQtMi0xNHEtNSA1LTkgMTcuNXQtNyAxNi41cTctOS0yNS02bC0xMCAxcS00IDAtMTYtMnQtMjAuNS0xLTEzLjUgOHEtNCA4IDAgMjAgMSA0IDQgMi00IDMtMTEgOS41dC0xMCA4LjVxLTQ2LTE1LTk0LTQxIDYtMSAxMiAxIDUgMiAxMyA2LjV0MTAgNS41cTM0IDE0IDQyIDdsNSA1cTE0LTE2IDIwLTI1LTcgNC0zMCAxLTIwLTYtMjItMTIgNy0xMiA1LTE4LTQgMy0xMS41IDEwdC0xNC41IDExLTE1IDVxLTE2IDAtMjItMS0xNDYtODAtMjM1LTIyMiA3LTcgMTItOCA0LTEgNS05dDIuNS0xMSAxMS41IDNxOS04IDMtMTkgMSAxIDQ0LTI3IDE5LTE3IDIxLTIxIDMtMTEtMTAtMTgtMSAyLTkgOXQtOSA0cS0zLTUgLjUtMTguNVQzMDggODUxcS03IDAtOS41LTE2dC0yLjUtMzUuNS0xLTIzLjVsMi0xcS0zLTEyIDUuNS0zNC41VDMyNCA3MjFxLTEzLTMgMjAtNDMgNi04IDgtOSAzLTIgMTItNy41dDE1LTEwIDEwLTEwLjVxNC01IDEwLTIyLjV0MTQtMjMuNXEtMi02IDkuNS0yMHQxMC41LTIzcS0xIDAtMi41LTF0LTIuNS0xcTMtNyAxNS41LTE0dDE1LjUtMTNxMS0zIDItMTB0My0xMSA4LTJxMiAyMC0yNCA2Mi0xNSAyNS0xNyAyOS0zIDUtNS41IDE1LjVUNDIxIDYyMXEyIDAgNi0xLjV0OC41LTMuNSA3LjUtNCAyLTNxLTMtNyAyLTE3LjV0MTItMTguNSAxNy0xOSAxMi0xM3E2LTYgMTQtMTkuNXQwLTEzLjVxOSAwIDIwLTEwLjV0MTctMTkuNXE1LTggOC0yNnQ1LTI0cTItNyA4LjUtMTMuNVQ1NzMgNDA1bDE2LTggMTMtN3E1LTIgMTguNS0xMC41VDY0MiAzNjhxMTAtNCAxNi00dDE0LjUgMi41VDY4NiAzNzBxMTUgMiAyOS0xNXQyMS0yMXEzNi0xOSA1NS0xMS0yLTEgLjUtNy41dDgtMTUuNSA5LTE0LjUgNS41LTguNXE1LTYgMTgtMTV0MTgtMTVxNiA0IDcgOS0zLTggNy0yMHQxOC0xMHExNCAzIDE0IDMyLTMxLTE1LTQ5IDE4IDAgMS0yLjUgNS41dC00IDguNS0yLjUgOC41IDAgNy41IDUgM3E5IDAgMTAgMy41dC0yIDEyLjUtNCAxM3EtMSA4LTExIDIwdC0xMiAxNXEtNS05LTE2LTh0LTE2IDlxMC0xLTEuNS01LjVUNzg5IDM2MnEtMTMgMC0xNSAxIDEgMyAyLjUgMTcuNVQ3ODAgNDAzcTEgNCA1LjUgMTJ0Ny41IDE0LjUgNCAxMi41LTQuNSA5LjVUNzc1IDQ1NHEtMTktMS0yNi0yMC0xLTMtMy0xMC41dC01LTExLjUtOS03cS03LTMtMjQtMnQtMjQgNXEtMTMgOC0yMi41IDI5dC05LjUgMzdxMCAxMCAyLjUgMjYuNXQzIDI1VDY1MiA1NTBxMyAyIDkgOS41dDEwIDEwLjVxMiAxIDQuNSAxLjV0NC41IDAgNCAxLjUgMyA2cS0xIDEtNCAzLTMgMy00IDMgNy0zIDI4LjUgMS41VDczNSA1ODVxMTUtMTEgMjIgMiAwIDEtMi41IDkuNVQ3NTQgNjEwcTUtMjcgMjktOSAzLTMgMTUuNS01dDE3LjUtNXEzLTIgNy01LjV0NS41LTQuNSA1IC41IDguNSA2LjVxMTAtMTQgMTItMjQgMTEtNDAgMTktNDQgNy0zIDExLTJ0NC41IDkuNSAwIDE0VDg4NyA1NTRsLTEgOHYxOGwtMSA4cS0xNSAzLTE4LjUgMTJ0MS41IDE4LjUgMTUgMTguNXExIDEgOCAzLjV0MTUuNSA2LjUgMTIuNSA4cTIxIDE5IDE1IDM1IDcgMCAxMSA5LTEgMC01IDN0LTcuNSA1LTQuNSAycTkgNSAyIDE2IDUgMyA3LjUgMTF0Ny41IDEwcTktMTIgMjEtMiA4IDggMSAxNiA1IDcgMjAuNSAxMC41dDE4LjUgOS41cTctMiA4IDJ0MSAxMiAzIDEycTQgNSAxNSA5dDEzIDVsMTcgMTFxMyA0IDAgNCAxOC0yIDMxIDExIDEwIDExLTYgMjAgMyA2LTMgOS41dC0xNSA1LjVxMyAxIDExLjUuNXQxMC41IDEuNXExNSAxMC03IDE2LTE3IDUtNDMtMTJ6TTg3OSAxMHEyMDYgMzYgMzUxIDE4OS0zIDMtMTIuNSA0LjVUMTIwNSAyMDdxLTE4IDctMjQgOCAxIDctMi41IDEzdC04IDktMTIuNSA4LTExIDdxLTIgMi03IDZ0LTcgNS41LTcuNSA0LjUtOC41IDItMTAtMWwtMy0xcS0zLTEtNS41LTIuNXQtNS41LTMtNC0zIDAtMi41cS0yMSAxNy0zNiAyMi01IDEtMTEgNS41dC0xMC41IDctMTAgMS41LTExLjUtN3EtNS01LTYtMTV0LTItMTNxLTcgNSAwIDE3LjV0MiAxOC41cS0zIDYtMTAuNSA0LjV0LTEyLTQuNS0xMS41LTguNS05LTYuNS04LjUtNS41LTguNS03LjVxLTMtNC02LTEydC01LTExcS0yIDQtMTEuNSA2LjVUOTEyIDI1NXEyLTEwIDQtMzV0NS0zOHE3LTMxLTEyLTQ4LTI3LTI1LTI5LTQwLTQtMjIgMTItMjYgMC03LTgtMjAuNVQ4NzcgMjZxMC02IDItMTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9IndyZW5jaCIgdW5pY29kZT0i74KtIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCA2NHEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptNjQ0IDQyMEwzNDYtMTk4cS0zNy0zNy05MC0zNy01MiAwLTkxIDM3TDU5LTkwUTIxLTU0IDIxIDBxMCA1MyAzOCA5MWw2ODEgNjgxcTM5LTk4IDExNC41LTE3My41VDEwMjggNDg0em02MzQgNDM1cTAtMzktMjMtMTA2LTQ3LTEzNC0xNjQuNS0yMTcuNVQxMjE2IDUxMnEtMTg1IDAtMzE2LjUgMTMxLjVUNzY4IDk2MHQxMzEuNSAzMTYuNVQxMjE2IDE0MDhxNTggMCAxMjEuNS0xNi41VDE0NDUgMTM0NXExNi0xMSAxNi0yOHQtMTYtMjhsLTI5My0xNjlWODk2bDE5My0xMDdxNSAzIDc5IDQ4LjV0MTM1LjUgODFUMTYzMCA5NTRxMTUgMCAyMy41LTEwdDguNS0yNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idGFza3MiIHVuaWNvZGU9Iu+CriIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMDI0IDEyOGg2NDB2MTI4aC02NDBWMTI4ek02NDAgNjQwaDEwMjR2MTI4SDY0MFY2NDB6bTY0MCA1MTJoMzg0djEyOGgtMzg0di0xMjh6bTUxMi04MzJWNjRxMC0yNi0xOS00NXQtNDUtMTlINjRRMzggMCAxOSAxOVQwIDY0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NS0xOXQxOS00NXptMCA1MTJWNTc2cTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAgNTc2djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NS0xOXQxOS00NXptMCA1MTJ2LTI1NnEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaWx0ZXIiIHVuaWNvZGU9Iu+CsCIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDAzIDEyNDFxMTctNDEtMTQtNzBMODk2IDY3OFYtNjRxMC00Mi0zOS01OS0xMy01LTI1LTUtMjcgMC00NSAxOUw1MzEgMTQ3cS0xOSAxOS0xOSA0NXY0ODZMMTkgMTE3MXEtMzEgMjktMTQgNzAgMTcgMzkgNTkgMzloMTI4MHE0MiAwIDU5LTM5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJicmllZmNhc2UiIHVuaWNvZGU9Iu+CsSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NDAgMTI4MGg1MTJ2MTI4SDY0MHYtMTI4em0xMTUyLTY0MFYxNjBxMC02Ni00Ny0xMTNUMTYzMiAwSDE2MFE5NCAwIDQ3IDQ3VDAgMTYwdjQ4MGg2NzJWNDgwcTAtMjYgMTktNDV0NDUtMTloMzIwcTI2IDAgNDUgMTl0MTkgNDV2MTYwaDY3MnptLTc2OCAwVjUxMkg3Njh2MTI4aDI1NnptNzY4IDQ4MFY3MzZIMHYzODRxMCA2NiA0NyAxMTN0MTEzIDQ3aDM1MnYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OC0yOHQyOC02OHYtMTYwaDM1MnE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZ1bGxzY3JlZW4iIHVuaWNvZGU9Iu+CsiIgZD0iTTEyODMgOTk1TDkyOCA2NDBsMzU1LTM1NSAxNDQgMTQ0cTI5IDMxIDcwIDE0IDM5LTE3IDM5LTU5Vi02NHEwLTI2LTE5LTQ1dC00NS0xOWgtNDQ4cS00MiAwLTU5IDQwLTE3IDM5IDE0IDY5bDE0NCAxNDQtMzU1IDM1NS0zNTUtMzU1TDU1Ny0xOXEzMS0zMCAxNC02OS0xNy00MC01OS00MEg2NHEtMjYgMC00NSAxOVQwLTY0djQ0OHEwIDQyIDQwIDU5IDM5IDE3IDY5LTE0bDE0NC0xNDQgMzU1IDM1NS0zNTUgMzU1LTE0NC0xNDRxLTE5LTE5LTQ1LTE5LTEyIDAtMjQgNS00MCAxNy00MCA1OXY0NDhxMCAyNiAxOSA0NXQ0NSAxOWg0NDhxNDIgMCA1OS00MCAxNy0zOS0xNC02OWwtMTQ0LTE0NCAzNTUtMzU1IDM1NSAzNTUtMTQ0IDE0NHEtMzEgMzAtMTQgNjkgMTcgNDAgNTkgNDBoNDQ4cTI2IDAgNDUtMTl0MTktNDVWODk2cTAtNDItMzktNTktMTMtNS0yNS01LTI2IDAtNDUgMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Imdyb3VwIiB1bmljb2RlPSLvg4AiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTkzIDY0MHEtMTYyLTUtMjY1LTEyOEgxOTRxLTgyIDAtMTM4IDQwLjVUMCA2NzFxMCAzNTMgMTI0IDM1MyA2IDAgNDMuNS0yMXQ5Ny41LTQyLjVUMzg0IDkzOXE2NyAwIDEzMyAyMy01LTM3LTUtNjYgMC0xMzkgODEtMjU2ek0xNjY0IDNxMC0xMjAtNzMtMTg5LjVUMTM5Ny0yNTZINTIzcS0xMjEgMC0xOTQgNjkuNVQyNTYgM3EwIDUzIDMuNSAxMDMuNXQxNCAxMDlUMzAwIDMyNHQ0MyA5Ny41IDYyIDgxIDg1LjUgNTMuNVQ2MDIgNTc2cTEwIDAgNDMtMjEuNXQ3My00OCAxMDctNDhUOTYwIDQzN3QxMzUgMjEuNSAxMDcgNDggNzMgNDggNDMgMjEuNXE2MSAwIDExMS41LTIwdDg1LjUtNTMuNSA2Mi04MSA0My05Ny41IDI2LjUtMTA4LjUgMTQtMTA5VDE2NjQgM3pNNjQwIDEyODBxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MSA3NSAxODEgMTgxIDc1IDE4MS03NSA3NS0xODF6bTcwNC0zODRxMC0xNTktMTEyLjUtMjcxLjVUOTYwIDUxMiA2ODguNSA2MjQuNSA1NzYgODk2dDExMi41IDI3MS41VDk2MCAxMjgwdDI3MS41LTExMi41VDEzNDQgODk2em01NzYtMjI1cTAtNzgtNTYtMTE4LjVUMTcyNiA1MTJoLTEzNHEtMTAzIDEyMy0yNjUgMTI4IDgxIDExNyA4MSAyNTYgMCAyOS01IDY2IDY2LTIzIDEzMy0yMyA1OSAwIDExOSAyMS41dDk3LjUgNDIuNSA0My41IDIxcTEyNCAwIDEyNC0zNTN6bS0xMjggNjA5cTAtMTA2LTc1LTE4MXQtMTgxLTc1LTE4MSA3NS03NSAxODEgNzUgMTgxIDE4MSA3NSAxODEtNzUgNzUtMTgxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsaW5rIiB1bmljb2RlPSLvg4EiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ1NiAzMjBxMCA0MC0yOCA2OGwtMjA4IDIwOHEtMjggMjgtNjggMjgtNDIgMC03Mi0zMiAzLTMgMTktMTguNXQyMS41LTIxLjUgMTUtMTkgMTMtMjUuNSAzLjUtMjcuNXEwLTQwLTI4LTY4dC02OC0yOHEtMTUgMC0yNy41IDMuNXQtMjUuNSAxMy0xOSAxNS0yMS41IDIxLjUtMTguNSAxOXEtMzMtMzEtMzMtNzMgMC00MCAyOC02OGwyMDYtMjA3cTI3LTI3IDY4LTI3IDQwIDAgNjggMjZsMTQ3IDE0NnEyOCAyOCAyOCA2N3ptLTcwMyA3MDVxMCA0MC0yOCA2OGwtMjA2IDIwN3EtMjggMjgtNjggMjgtMzkgMC02OC0yN2wtMTQ3LTE0NnEtMjgtMjgtMjgtNjcgMC00MCAyOC02OGwyMDgtMjA4cTI3LTI3IDY4LTI3IDQyIDAgNzIgMzEtMyAzLTE5IDE4LjVUNTQzLjUgODU2dC0xNSAxOS0xMyAyNS41VDUxMiA5MjhxMCA0MCAyOCA2OHQ2OCAyOHExNSAwIDI3LjUtMy41dDI1LjUtMTMgMTktMTUgMjEuNS0yMS41IDE4LjUtMTlxMzMgMzEgMzMgNzN6bTg5NS03MDVxMC0xMjAtODUtMjAzTDE0MTYtMjlxLTgzLTgzLTIwMy04My0xMjEgMC0yMDQgODVMODAzIDE4MHEtODMgODMtODMgMjAzIDAgMTIzIDg4IDIwOWwtODggODhxLTg2LTg4LTIwOC04OC0xMjAgMC0yMDQgODRMMTAwIDg4NHEtODQgODQtODQgMjA0dDg1IDIwM2wxNDcgMTQ2cTgzIDgzIDIwMyA4MyAxMjEgMCAyMDQtODVsMjA2LTIwN3E4My04MyA4My0yMDMgMC0xMjMtODgtMjA5bDg4LTg4cTg2IDg4IDIwOCA4OCAxMjAgMCAyMDQtODRsMjA4LTIwOHE4NC04NCA4NC0yMDR6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNsb3VkIiB1bmljb2RlPSLvg4IiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTkyMCAzODRxMC0xNTktMTEyLjUtMjcxLjVUMTUzNiAwSDQ0OFEyNjMgMCAxMzEuNSAxMzEuNVQwIDQ0OHEwIDEzMiA3MSAyNDEuNVQyNTggODUzcS0yIDI4LTIgNDMgMCAyMTIgMTUwIDM2MnQzNjIgMTUwcTE1OCAwIDI4Ni41LTg4dDE4Ny41LTIzMHE3MCA2MiAxNjYgNjIgMTA2IDAgMTgxLTc1dDc1LTE4MXEwLTc1LTQxLTEzOCAxMjktMzAgMjEzLTEzNC41dDg0LTIzOS41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJiZWFrZXIiIHVuaWNvZGU9Iu+DgyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNTI3IDg4cTU2LTg5IDIxLjUtMTUyLjVUMTQwOC0xMjhIMjU2cS0xMDYgMC0xNDAuNSA2My41VDEzNyA4OGw1MDMgNzkzdjM5OWgtNjRxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDUxMnEyNiAwIDQ1LTE5dDE5LTQ1LTE5LTQ1LTQ1LTE5aC02NFY4ODF6TTc0OCA4MTNMNDc2IDM4NGg3MTJMOTE2IDgxM2wtMjAgMzF2NDM2SDc2OFY4NDR6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImN1dCIgdW5pY29kZT0i74OEIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTk2MCA2NDBxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOXptMzAwLTY0bDUwNy0zOThxMjgtMjAgMjUtNTYtNS0zNS0zNS01MUwxNjI5IDdxLTEzLTctMjktNy0xNyAwLTMxIDhMODc5IDM5NWwtMTEwLTY2cS04LTQtMTItNSAxNC00OSAxMC05Ny03LTc3LTU2LTE0Ny41VDU3OS00NHEtMTMyLTg0LTI3Ny04NC0xMzYgMC0yMjIgNzgtOTAgODQtNzkgMjA3IDcgNzYgNTYgMTQ3dDEzMSAxMjRxMTMyIDg0IDI3OCA4NCA4MyAwIDE1MS0zMSA5IDEzIDIyIDIybDEyMiA3My0xMjIgNzNxLTEzIDktMjIgMjItNjgtMzEtMTUxLTMxLTE0NiAwLTI3OCA4NC04MiA1My0xMzEgMTI0VDEgOTk1cS01IDU5IDE1LjUgMTEzdDYzLjUgOTNxODUgNzkgMjIyIDc5IDE0NSAwIDI3Ny04NCA4My01MiAxMzItMTIzdDU2LTE0OHE0LTQ4LTEwLTk3IDQtMSAxMi01bDExMC02NiA2OTAgMzg3cTE0IDggMzEgOCAxNiAwIDI5LTdsMTI4LTY0cTMwLTE2IDM1LTUxIDMtMzYtMjUtNTZ6TTU3OSA4MzZxNDYgNDIgMjEgMTA4dC0xMDYgMTE3cS05MiA1OS0xOTIgNTktNzQgMC0xMTMtMzYtNDYtNDItMjEtMTA4dDEwNi0xMTdxOTItNTkgMTkyLTU5IDc0IDAgMTEzIDM2ek00OTQgOTFxODEgNTEgMTA2IDExN3QtMjEgMTA4cS0zOSAzNi0xMTMgMzYtMTAwIDAtMTkyLTU5LTgxLTUxLTEwNi0xMTd0MjEtMTA4cTM5LTM2IDExMy0zNiAxMDAgMCAxOTIgNTl6bTE3OCA2MTNsOTYtNTh2MTFxMCAzNiAzMyA1NmwxNCA4LTc5IDQ3LTI2LTI2cS0zLTMtMTAtMTF0LTEyLTEycS0yLTItNC0zLjV0LTMtMi41em0yMjQtMjI0bDk2LTMyIDczNiA1NzYtMTI4IDY0LTc2OC00MzFWNTQ0bC0xNjAtOTYgOS04cTItMiA3LTYgNC00IDExLTEydDExLTEybDI2LTI2em03MDQtNDE2bDEyOCA2NC01MjAgNDA4LTE3Ny0xMzhxLTItMy0xMy03eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb3B5IiB1bmljb2RlPSLvg4UiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY5NiAxMTUycTQwIDAgNjgtMjh0MjgtNjhWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg3MzZxLTQwIDAtNjggMjh0LTI4IDY4djI4OEg5NnEtNDAgMC02OCAyOFQwIDIyNHY2NzJxMCA0MCAyMCA4OHQ0OCA3Nmw0MDggNDA4cTI4IDI4IDc2IDQ4dDg4IDIwaDQxNnE0MCAwIDY4LTI4dDI4LTY4di0zMjhxNjggNDAgMTI4IDQwaDQxNnptLTU0NC0yMTNMODUzIDY0MGgyOTl2Mjk5em0tNjQwIDM4NGwtMjk5LTI5OWgyOTl2Mjk5em0xOTYtNjQ3bDMxNiAzMTZ2NDE2SDY0MFY5OTJxMC00MC0yOC02OHQtNjgtMjhIMTI4VjI1Nmg1MTJ2MjU2cTAgNDAgMjAgODh0NDggNzZ6bTk1Ni04MDR2MTE1MmgtMzg0VjYwOHEwLTQwLTI4LTY4dC02OC0yOEg3Njh2LTY0MGg4OTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBhcGVyX2NsaXAiIHVuaWNvZGU9Iu+DhiIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA0IDE1MXEwLTExNy03OS0xOTZ0LTE5Ni03OXEtMTM1IDAtMjM1IDEwMEwxMTcgNzUyUTQgODY3IDQgMTAyM3EwIDE1OSAxMTAgMjcwdDI2OSAxMTFxMTU4IDAgMjczLTExM2w2MDUtNjA2cTEwLTEwIDEwLTIyIDAtMTYtMzAuNS00Ni41VDExOTQgNTg2cS0xMyAwLTIzIDEwbC02MDYgNjA3cS03OSA3Ny0xODEgNzctMTA2IDAtMTc5LTc1dC03My0xODFxMC0xMDUgNzYtMTgxTDk4NCA2NnE2My02MyAxNDUtNjMgNjQgMCAxMDYgNDJ0NDIgMTA2cTAgODItNjMgMTQ1TDYzMyA4NzdxLTI2IDI0LTYwIDI0LTI5IDAtNDgtMTl0LTE5LTQ4cTAtMzIgMjUtNTlsNDEwLTQxMHExMC0xMCAxMC0yMiAwLTE2LTMxLTQ3dC00Ny0zMXEtMTIgMC0yMiAxMEw0NDEgNjg1cS02MyA2MS02MyAxNDkgMCA4MiA1NyAxMzl0MTM5IDU3cTg4IDAgMTQ5LTYzbDU4MS01ODFxMTAwLTk4IDEwMC0yMzV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNhdmUiIHVuaWNvZGU9Iu+DhyIgZD0iTTM4NCAwaDc2OHYzODRIMzg0VjB6bTg5NiAwaDEyOHY4OTZxMCAxNC0xMCAzOC41dC0yMCAzNC41bC0yODEgMjgxcS0xMCAxMC0zNCAyMHQtMzkgMTBWODY0cTAtNDAtMjgtNjh0LTY4LTI4SDM1MnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDEyOFYwaDEyOHY0MTZxMCA0MCAyOCA2OHQ2OCAyOGg4MzJxNDAgMCA2OC0yOHQyOC02OFYwek04OTYgOTI4djMyMHEwIDEzLTkuNSAyMi41VDg2NCAxMjgwSDY3MnEtMTMgMC0yMi41LTkuNVQ2NDAgMTI0OFY5MjhxMC0xMyA5LjUtMjIuNVQ2NzIgODk2aDE5MnExMyAwIDIyLjUgOS41VDg5NiA5Mjh6bTY0MC0zMlYtMzJxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMC0zMnYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODgtMjB0NzYtNDhsMjgwLTI4MHEyOC0yOCA0OC03NnQyMC04OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic2lnbl9ibGFuayIgdW5pY29kZT0i74OIIiBkPSJNMTUzNiAxMTIwVjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlb3JkZXIiIHVuaWNvZGU9Iu+DiSIgZD0iTTE1MzYgMTkyVjY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0UTM4IDAgMTkgMTlUMCA2NHYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUtMTl0MTktNDV6bTAgNTEyVjU3NnEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOVQwIDU3NnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUtMTl0MTktNDV6bTAgNTEydi0xMjhxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idWwiIHVuaWNvZGU9Iu+DiiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMTI4cTAtODAtNTYtMTM2VDE5Mi02NCA1Ni04IDAgMTI4dDU2IDEzNiAxMzYgNTYgMTM2LTU2IDU2LTEzNnptMCA1MTJxMC04MC01Ni0xMzZ0LTEzNi01Ni0xMzYgNTZUMCA2NDB0NTYgMTM2IDEzNiA1NiAxMzYtNTYgNTYtMTM2em0xNDA4LTQxNlYzMnEwLTEzLTkuNS0yMi41VDE3NjAgMEg1NDRxLTEzIDAtMjIuNSA5LjVUNTEyIDMydjE5MnEwIDEzIDkuNSAyMi41VDU0NCAyNTZoMTIxNnExMyAwIDIyLjUtOS41dDkuNS0yMi41ek0zODQgMTE1MnEwLTgwLTU2LTEzNnQtMTM2LTU2LTEzNiA1Ni01NiAxMzYgNTYgMTM2IDEzNiA1NiAxMzYtNTYgNTYtMTM2em0xNDA4LTQxNlY1NDRxMC0xMy05LjUtMjIuNVQxNzYwIDUxMkg1NDRxLTEzIDAtMjIuNSA5LjVUNTEyIDU0NHYxOTJxMCAxMyA5LjUgMjIuNVQ1NDQgNzY4aDEyMTZxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptMCA1MTJ2LTE5MnEwLTEzLTkuNS0yMi41dC0yMi41LTkuNUg1NDRxLTEzIDAtMjIuNSA5LjVUNTEyIDEwNTZ2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUtOS41dDkuNS0yMi41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJvbCIgdW5pY29kZT0i74OLIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4MS04NHEwLTgwLTU0LjUtMTI2VDE5MS0yNTZxLTEwNiAwLTE3MiA2Nmw1NyA4OHE0OS00NSAxMDYtNDUgMjkgMCA1MC41IDE0LjVUMjU0LTkwcTAgNjQtMTA1IDU2bC0yNiA1NnE4IDEwIDMyLjUgNDMuNXQ0Mi41IDU0IDM3IDM4LjV2MXEtMTYgMC00OC41LTF0LTQ4LjUtMXYtNTNIMzJ2MTUyaDMzM3YtODhMMjcwIDUzcTUxLTEyIDgxLTQ5dDMwLTg4em0yIDYyN1YzODRIMjFxLTYgMzYtNiA1NCAwIDUxIDIzLjUgOTNUOTUgNTk5dDY2IDQ3LjUgNTYuNSA0My41IDIzLjUgNDVxMCAyNS0xNC41IDM4LjVUMTg3IDc4N3EtNDYgMC04MS01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41VDE5OCA4OTZxNzMgMCAxMjMtNDEuNVQzNzEgNzQycTAtNTAtMzQtOTEuNVQyNjIgNTg2dC03NS41LTUwLjVUMTUxIDQ4M2gxMjd2NjBoMTA1em0xNDA5LTMxOVYzMnEwLTEzLTkuNS0yMi41VDE3NjAgMEg1NDRxLTEzIDAtMjIuNSA5LjVUNTEyIDMydjE5MnEwIDE0IDkgMjN0MjMgOWgxMjE2cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6TTM4NCAxMTIzdi05OUg0OXY5OWgxMDdxMCA0MSAuNSAxMjEuNXQuNSAxMjEuNXYxMmgtMnEtOC0xNy01MC01NGwtNzEgNzYgMTM2IDEyN2gxMDZ2LTQwNGgxMDh6bTE0MDgtMzg3VjU0NHEwLTEzLTkuNS0yMi41VDE3NjAgNTEySDU0NHEtMTMgMC0yMi41IDkuNVQ1MTIgNTQ0djE5MnEwIDE0IDkgMjN0MjMgOWgxMjE2cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTAgNTEydi0xOTJxMC0xMy05LjUtMjIuNXQtMjIuNS05LjVINTQ0cS0xMyAwLTIyLjUgOS41VDUxMiAxMDU2djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic3RyaWtldGhyb3VnaCIgdW5pY29kZT0i74OMIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3NjAgNjQwcTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlIMzJxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgxNzI4ek00ODMgNzA0cS0yOCAzNS01MSA4MC00OCA5OC00OCAxODggMCAxODEgMTM0IDMwOSAxMzMgMTI3IDM5MyAxMjcgNTAgMCAxNjctMTkgNjYtMTIgMTc3LTQ4IDEwLTM4IDIxLTExOCAxNC0xMjMgMTQtMTgzIDAtMTgtNS00NWwtMTItMy04NCA2LTE0IDJxLTUwIDE0OS0xMDMgMjA1LTg4IDkxLTIxMCA5MS0xMTQgMC0xODItNTktNjctNTgtNjctMTQ2IDAtNzMgNjYtMTQwdDI3OS0xMjlxNjktMjAgMTczLTY2IDU4LTI4IDk1LTUySDQ4M3ptNTA3LTI1Nmg0MTFxNy0zOSA3LTkyIDAtMTExLTQxLTIxMi0yMy01Ni03MS0xMDQtMzctMzUtMTA5LTgxLTgwLTQ4LTE1My02Ni04MC0yMS0yMDMtMjEtMTE0IDAtMTk1IDIzTDQ5Ni02NXEtNTcgMTYtNzIgMjgtOCA4LTggMjJ2MTNxMCAxMDgtMiAxNTYtMSAzMCAwIDY4bDIgMzd2NDRsMTAyIDJxMTUtMzQgMzAtNzF0MjIuNS01NiAxMi41LTI3cTM1LTU3IDgwLTk0IDQzLTM2IDEwNS01NyA1OS0yMiAxMzItMjIgNjQgMCAxMzkgMjcgNzcgMjYgMTIyIDg2IDQ3IDYxIDQ3IDEyOSAwIDg0LTgxIDE1Ny0zNCAyOS0xMzcgNzF6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuZGVybGluZSIgdW5pY29kZT0i74ONIiBkPSJNNDggMTMxM3EtMzcgMi00NSA0bC0zIDg4cTEzIDEgNDAgMSA2MCAwIDExMi00IDEzMi03IDE2Ni03IDg2IDAgMTY4IDMgMTE2IDQgMTQ2IDUgNTYgMCA4NiAybC0xLTE0IDItNjR2LTlxLTYwLTktMTI0LTktNjAgMC03OS0yNS0xMy0xNC0xMy0xMzIgMC0xMyAuNS0zMi41dC41LTI1LjVsMS0yMjkgMTQtMjgwcTYtMTI0IDUxLTIwMiAzNS01OSA5Ni05MiA4OC00NyAxNzctNDcgMTA0IDAgMTkxIDI4IDU2IDE4IDk5IDUxIDQ4IDM2IDY1IDY0IDM2IDU2IDUzIDExNCAyMSA3MyAyMSAyMjkgMCA3OS0zLjUgMTI4dC0xMSAxMjIuNVQxMjQ0IDExNDBsLTQgNTlxLTUgNjctMjQgODgtMzQgMzUtNzcgMzRsLTEwMC0yLTE0IDMgMiA4Nmg4NGwyMDUtMTBxNzYtMyAxOTYgMTBsMTgtMnE2LTM4IDYtNTEgMC03LTQtMzEtNDUtMTItODQtMTMtNzMtMTEtNzktMTctMTUtMTUtMTUtNDEgMC03IDEuNS0yN3QxLjUtMzFxOC0xOSAyMi0zOTYgNi0xOTUtMTUtMzA0LTE1LTc2LTQxLTEyMi0zOC02NS0xMTItMTIzLTc1LTU3LTE4Mi04OS0xMDktMzMtMjU1LTMzLTE2NyAwLTI4NCA0Ni0xMTkgNDctMTc5IDEyMi02MSA3Ni04MyAxOTUtMTYgODAtMTYgMjM3djMzM3EwIDE4OC0xNyAyMTMtMjUgMzYtMTQ3IDM5ek0xNTM2LTk2djY0cTAgMTQtOSAyM3QtMjMgOUgzMlExOCAwIDktOVQwLTMydi02NHEwLTE0IDktMjN0MjMtOWgxNDcycTE0IDAgMjMgOXQ5IDIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0YWJsZSIgdW5pY29kZT0i74OOIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTUxMiAxNjB2MTkycTAgMTQtOSAyM3QtMjMgOUgxNjBxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloMzIwcTE0IDAgMjMgOXQ5IDIzem0wIDM4NHYxOTJxMCAxNC05IDIzdC0yMyA5SDE2MHEtMTQgMC0yMy05dC05LTIzVjU0NHEwLTE0IDktMjN0MjMtOWgzMjBxMTQgMCAyMyA5dDkgMjN6bTUxMi0zODR2MTkycTAgMTQtOSAyM3QtMjMgOUg2NzJxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloMzIwcTE0IDAgMjMgOXQ5IDIzek01MTIgOTI4djE5MnEwIDE0LTkgMjN0LTIzIDlIMTYwcS0xNCAwLTIzLTl0LTktMjNWOTI4cTAtMTQgOS0yM3QyMy05aDMyMHExNCAwIDIzIDl0OSAyM3ptNTEyLTM4NHYxOTJxMCAxNC05IDIzdC0yMyA5SDY3MnEtMTQgMC0yMy05dC05LTIzVjU0NHEwLTE0IDktMjN0MjMtOWgzMjBxMTQgMCAyMyA5dDkgMjN6bTUxMi0zODR2MTkycTAgMTQtOSAyM3QtMjMgOWgtMzIwcS0xNCAwLTIzLTl0LTktMjNWMTYwcTAtMTQgOS0yM3QyMy05aDMyMHExNCAwIDIzIDl0OSAyM3ptLTUxMiA3Njh2MTkycTAgMTQtOSAyM3QtMjMgOUg2NzJxLTE0IDAtMjMtOXQtOS0yM1Y5MjhxMC0xNCA5LTIzdDIzLTloMzIwcTE0IDAgMjMgOXQ5IDIzem01MTItMzg0djE5MnEwIDE0LTkgMjN0LTIzIDloLTMyMHEtMTQgMC0yMy05dC05LTIzVjU0NHEwLTE0IDktMjN0MjMtOWgzMjBxMTQgMCAyMyA5dDkgMjN6bTAgMzg0djE5MnEwIDE0LTkgMjN0LTIzIDloLTMyMHEtMTQgMC0yMy05dC05LTIzVjkyOHEwLTE0IDktMjN0MjMtOWgzMjBxMTQgMCAyMyA5dDkgMjN6bTEyOCAzMjBWMTYwcTAtNjYtNDctMTEzVDE1MDQgMEgxNjBROTQgMCA0NyA0N1QwIDE2MHYxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWFnaWMiIHVuaWNvZGU9Iu+DkCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTkwIDk1NWwyOTMgMjkzLTEwNyAxMDctMjkzLTI5M3ptNDQ3IDI5M3EwLTI3LTE4LTQ1TDMzMy04M3EtMTgtMTgtNDUtMTh0LTQ1IDE4TDQ1IDExNXEtMTggMTgtMTggNDV0MTggNDVsMTI4NiAxMjg2cTE4IDE4IDQ1IDE4dDQ1LTE4bDE5OC0xOThxMTgtMTggMTgtNDV6TTI4NiAxNDM4bDk4LTMwLTk4LTMwLTMwLTk4LTMwIDk4LTk4IDMwIDk4IDMwIDMwIDk4em0zNTAtMTYybDE5Ni02MC0xOTYtNjAtNjAtMTk2LTYwIDE5Ni0xOTYgNjAgMTk2IDYwIDYwIDE5NnptOTMwLTQ3OGw5OC0zMC05OC0zMC0zMC05OC0zMCA5OC05OCAzMCA5OCAzMCAzMCA5OHptLTY0MCA2NDBsOTgtMzAtOTgtMzAtMzAtOTgtMzAgOTgtOTggMzAgOTggMzAgMzAgOTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InRydWNrIiB1bmljb2RlPSLvg5EiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDEyOHEwIDUyLTM4IDkwdC05MCAzOC05MC0zOC0zOC05MCAzOC05MCA5MC0zOCA5MCAzOCAzOCA5MHpNMjU2IDY0MGgzODR2MjU2SDQ4MnEtMTMgMC0yMi05TDI2NSA2OTJxLTktOS05LTIydi0zMHptMTI4MC01MTJxMCA1Mi0zOCA5MHQtOTAgMzgtOTAtMzgtMzgtOTAgMzgtOTAgOTAtMzggOTAgMzggMzggOTB6bTI1NiAxMDg4VjE5MnEwLTE1LTQtMjYuNXQtMTMuNS0xOC41LTE2LjUtMTEuNS0yMy41LTYtMjIuNS0yLTI1LjUgMC0yMi41LjVxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MUg3NjhxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MWgtNjRxLTMgMC0yMi41LS41dC0yNS41IDAtMjIuNSAyLTIzLjUgNlQ4MS41IDE0NyA2OCAxNjUuNSA2NCAxOTJxMCAyNiAxOSA0NXQ0NSAxOXYzMjBxMCA4LS41IDM1dDAgMzggMi41IDM0LjUgNi41IDM3IDE0IDMwLjUgMjIuNSAzMGwxOTggMTk4cTE5IDE5IDUwLjUgMzJ0NTguNSAxM2gxNjB2MTkycTAgMjYgMTkgNDV0NDUgMTloMTAyNHEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJwaW50ZXJlc3QiIHVuaWNvZGU9Iu+DkiIgZD0iTTE1MzYgNjQwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOHEtMTExIDAtMjE4IDMyIDU5IDkzIDc4IDE2NCA5IDM0IDU0IDIxMSAyMC0zOSA3My02Ny41VDg2OSAxODNxMTIxIDAgMjE2IDY4LjVUMTIzMiA0NDB0NTIgMjcwcTAgMTE0LTU5LjUgMjE0VDEwNTIgMTA4N3QtMjU1IDYzcS0xMDUgMC0xOTYtMjl0LTE1NC41LTc3LTEwOS0xMTAuNS02Ny0xMjkuNVQyNDkgNjcwcTAtMTA0IDQwLTE4M3QxMTctMTExcTMwLTEyIDM4IDIwIDIgNyA4IDMxdDggMzBxNiAyMy0xMSA0My01MSA2MS01MSAxNTEgMCAxNTEgMTA0LjUgMjU5LjVUNzc2IDEwMTlxMTUxIDAgMjM1LjUtODJ0ODQuNS0yMTNxMC0xNzAtNjguNS0yODlUODUyIDMxNnEtNjEgMC05OCA0My41VDczMSA0NjRxOCAzNSAyNi41IDkzLjV0MzAgMTAzVDc5OSA3MzZxMCA1MC0yNyA4M3QtNzcgMzNxLTYyIDAtMTA1LTU3dC00My0xNDJxMC03MyAyNS0xMjJsLTk5LTQxOHEtMTctNzAtMTMtMTc3LTIwNiA5MS0zMzMgMjgxVDAgNjQwcTAgMjA5IDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGludGVyZXN0X3NpZ24iIHVuaWNvZGU9Iu+DkyIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEg1MjNRNjA4LTYgNjMxIDgycTkgMzQgNTMgMjA5IDIxLTM5IDczLjUtNjdUODcwIDE5NnExODEgMCAyOTUuNSAxNDcuNVQxMjgwIDcxN3EwIDg0LTM1IDE2Mi41dC05Ni41IDEzOS0xNTIuNSA5Ny0xOTcgMzYuNXEtMTA0IDAtMTk0LjUtMjguNXQtMTUzLTc2LjVUMzQ0IDkzNy41dC02Ni41LTEyOFQyNTYgNjc3cTAtMTAyIDM5LjUtMTgwVDQxMiAzODdxMTMtNSAyMy41IDB0MTQuNSAxOXExMCA0NCAxNSA2MSA2IDIzLTExIDQyLTUwIDYyLTUwIDE1MCAwIDE1MCAxMDMuNSAyNTYuNVQ3NzggMTAyMnExNDkgMCAyMzIuNS04MXQ4My41LTIxMHEwLTE2OC02Ny41LTI4NlQ4NTMgMzI3cS02MCAwLTk3IDQzLjVUNzMzIDQ3NHE4IDM0IDI2LjUgOTIuNXQyOS41IDEwMiAxMSA3NC41cTAgNDktMjYuNSA4MS41VDY5OCA4NTdxLTYxIDAtMTAzLjUtNTYuNVQ1NTIgNjYxcTAtNzIgMjQtMTIxbC05OC00MTRxLTI0LTEwMC03LTI1NEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJnb29nbGVfcGx1c19zaWduIiB1bmljb2RlPSLvg5QiIGQ9Ik05MTcgNjMxcTAgMjYtNiA2NEg1NDlWNTYzaDIxN3EtMy0yNC0xNi41LTUwVDcxMiA0NjB0LTY2LjUtNDQuNVQ1NDkgMzk4cS05OSAwLTE2OSA3MXQtNzAgMTcxIDcwIDE3MSAxNjkgNzFxOTIgMCAxNTMtNTlsMTA0IDEwMXEtMTA4IDEwMC0yNTcgMTAwLTE2MCAwLTI3Mi0xMTIuNVQxNjUgNjQwdDExMi0yNzEuNVQ1NDkgMjU2cTE2NSAwIDI2Ni41IDEwNVQ5MTcgNjMxem0zNDUtNDZoMTA5djExMGgtMTA5djExMGgtMTEwVjY5NWgtMTEwVjU4NWgxMTBWNDc1aDExMHYxMTB6bTI3NCA1MzVWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZ29vZ2xlX3BsdXMiIHVuaWNvZGU9Iu+DlSIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0xNDM3IDYyM3EwLTIwOC04Ny0zNzAuNXQtMjQ4LTI1NFQ3MzMtOTNxLTE0OSAwLTI4NSA1OFQyMTQgMTIxIDU4IDM1NSAwIDY0MHQ1OCAyODUgMTU2IDIzNCAyMzQgMTU2IDI4NSA1OHEyODYgMCA0OTEtMTkybC0xOTktMTkxcS0xMTcgMTEzLTI5MiAxMTMtMTIzIDAtMjI3LjUtNjJUMzQwIDg3Mi41IDI3OSA2NDB0NjEtMjMyLjVUNTA1LjUgMjM5IDczMyAxNzdxODMgMCAxNTIuNSAyM3QxMTQuNSA1Ny41IDc4LjUgNzguNSA0OSA4MyAyMS41IDc0SDczM3YyNTJoNjkycTEyLTYzIDEyLTEyMnptODY3IDEyMlY1MzVoLTIwOVYzMjZoLTIxMHYyMDloLTIwOXYyMTBoMjA5djIwOWgyMTBWNzQ1aDIwOXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibW9uZXkiIHVuaWNvZGU9Iu+DliIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik03NjggMzg0aDM4NHY5NmgtMTI4djQ0OEg5MTBMNzYyIDc5MWw3Ny04MHE0MiAzNyA1NSA1N2gyVjQ4MEg3Njh2LTk2em01MTIgMjU2cTAtNzAtMjEtMTQydC01OS41LTEzNFQxMDk4IDI2M3QtMTM4LTM5LTEzOCAzOS0xMDEuNSAxMDFUNjYxIDQ5OHQtMjEgMTQyIDIxIDE0MiA1OS41IDEzNFQ4MjIgMTAxN3QxMzggMzkgMTM4LTM5IDEwMS41LTEwMSA1OS41LTEzNCAyMS0xNDJ6bTUxMi0yNTZ2NTEycS0xMDYgMC0xODEgNzV0LTc1IDE4MUgzODRxMC0xMDYtNzUtMTgxdC0xODEtNzVWMzg0cTEwNiAwIDE4MS03NXQ3NS0xODFoMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1em0xMjggODMyVjY0cTAtMjYtMTktNDV0LTQ1LTE5SDY0UTM4IDAgMTkgMTlUMCA2NHYxMTUycTAgMjYgMTkgNDV0NDUgMTloMTc5MnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjYXJldF9kb3duIiB1bmljb2RlPSLvg5ciIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCA4MzJxMC0yNi0xOS00NUw1NTcgMzM5cS0xOS0xOS00NS0xOXQtNDUgMTlMMTkgNzg3UTAgODA2IDAgODMydDE5IDQ1IDQ1IDE5aDg5NnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjYXJldF91cCIgdW5pY29kZT0i74OYIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgMzIwcTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAgMzIwdDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUtMTlsNDQ4LTQ0OHExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2FyZXRfbGVmdCIgdW5pY29kZT0i74OZIiBob3Jpei1hZHYteD0iNjQwIiBkPSJNNjQwIDEwODhWMTkycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5TDgzIDU5NXEtMTkgMTktMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2FyZXRfcmlnaHQiIHVuaWNvZGU9Iu+DmiIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTU3NiA2NDBxMC0yNi0xOS00NUwxMDkgMTQ3cS0xOS0xOS00NS0xOXQtNDUgMTktMTkgNDV2ODk2cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTlsNDQ4LTQ0OHExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY29sdW1ucyIgdW5pY29kZT0i74ObIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MCAwaDYwOHYxMTUySDEyOFYzMnEwLTEzIDkuNS0yMi41VDE2MCAwem0xMzc2IDMydjExMjBIODk2VjBoNjA4cTEzIDAgMjIuNSA5LjVUMTUzNiAzMnptMTI4IDEyMTZWMzJxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTM0NHE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNvcnQiIHVuaWNvZGU9Iu+DnCIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDQ0OHEwLTI2LTE5LTQ1TDU1Ny00NXEtMTktMTktNDUtMTl0LTQ1IDE5TDE5IDQwM1EwIDQyMiAwIDQ0OHQxOSA0NSA0NSAxOWg4OTZxMjYgMCA0NS0xOXQxOS00NXptMCAzODRxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMCA4MzJ0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NS0xOWw0NDgtNDQ4cTE5LTE5IDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2Rvd24iIHVuaWNvZGU9Iu+DnSIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDQ0OHEwLTI2LTE5LTQ1TDU1Ny00NXEtMTktMTktNDUtMTl0LTQ1IDE5TDE5IDQwM1EwIDQyMiAwIDQ0OHQxOSA0NSA0NSAxOWg4OTZxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF91cCIgdW5pY29kZT0i74OeIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgODMycTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAgODMydDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUtMTlsNDQ4LTQ0OHExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZW52ZWxvcGVfYWx0IiB1bmljb2RlPSLvg6AiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA4MjZWMzJxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2Nzk0cTQ0LTQ5IDEwMS04NyAzNjItMjQ2IDQ5Ny0zNDUgNTctNDIgOTIuNS02NS41dDk0LjUtNDhUODk1IDI1NmgycTUxIDAgMTEwIDI0LjV0OTQuNSA0OFQxMTk0IDM5NHExNzAgMTIzIDQ5OCAzNDUgNTcgMzkgMTAwIDg3em0wIDI5NHEwLTc5LTQ5LTE1MXQtMTIyLTEyM3EtMzc2LTI2MS00NjgtMzI1LTEwLTctNDIuNS0zMC41dC01NC0zOC01Mi0zMi41LTU3LjUtMjctNTAtOWgtMnEtMjMgMC01MCA5dC01Ny41IDI3LTUyIDMyLjUtNTQgMzhUNjM5IDUyMXEtOTEgNjQtMjYyIDE4Mi41VDE3MiA4NDZxLTYyIDQyLTExNyAxMTUuNVQwIDEwOThxMCA3OCA0MS41IDEzMHQxMTguNSA1MmgxNDcycTY1IDAgMTEyLjUtNDd0NDcuNS0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImxpbmtlZGluIiB1bmljb2RlPSLvg6EiIGQ9Ik0zNDkgOTExVi04MEgxOXY5OTFoMzMwem0yMSAzMDZxMS03My01MC41LTEyMlQxODQgMTA0NmgtMnEtODIgMC0xMzIgNDlUMCAxMjE3cTAgNzQgNTEuNSAxMjIuNVQxODYgMTM4OHQxMzMtNDguNSA1MS0xMjIuNXptMTE2Ni03MjlWLTgwaC0zMjl2NTMwcTAgMTA1LTQwLjUgMTY0LjVUMTA0MCA2NzRxLTYzIDAtMTA1LjUtMzQuNVQ4NzEgNTU0cS0xMS0zMC0xMS04MVYtODBINTMxcTIgMzk5IDIgNjQ3dC0xIDI5NmwtMSA0OGgzMjlWNzY3aC0ycTIwIDMyIDQxIDU2dDU2LjUgNTIgODcgNDMuNVQxMTU3IDkzNHExNzEgMCAyNzUtMTEzLjVUMTUzNiA0ODh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuZG8iIHVuaWNvZGU9Iu+DoiIgZD0iTTE1MzYgNjQwcTAtMTU2LTYxLTI5OFQxMzExIDk3IDEwNjYtNjd0LTI5OC02MXEtMTcyIDAtMzI3IDcyLjVUMTc3IDE0OXEtNyAxMC02LjUgMjIuNVQxNzkgMTkybDEzNyAxMzhxMTAgOSAyNSA5IDE2LTIgMjMtMTIgNzMtOTUgMTc5LTE0N3QyMjUtNTJxMTA0IDAgMTk4LjUgNDAuNVQxMTMwIDI3OHQxMDkuNSAxNjMuNVQxMjgwIDY0MHQtNDAuNSAxOTguNVQxMTMwIDEwMDJ0LTE2My41IDEwOS41VDc2OCAxMTUycS05OCAwLTE4OC0zNS41VDQyMCAxMDE1bDEzNy0xMzhxMzEtMzAgMTQtNjktMTctNDAtNTktNDBINjRxLTI2IDAtNDUgMTlUMCA4MzJ2NDQ4cTAgNDIgNDAgNTkgMzkgMTcgNjktMTRsMTMwLTEyOXExMDcgMTAxIDI0NC41IDE1Ni41VDc2OCAxNDA4cTE1NiAwIDI5OC02MXQyNDUtMTY0IDE2NC0yNDUgNjEtMjk4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsZWdhbCIgdW5pY29kZT0i74OjIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3NzEgMHEwLTUzLTM3LTkwbC0xMDctMTA4cS0zOS0zNy05MS0zNy01MyAwLTkwIDM3bC0zNjMgMzY0cS0zOCAzNi0zOCA5MCAwIDUzIDQzIDk2TDgzMiA2MDggNzA2IDQ4MnEtMTQtMTQtMzQtMTR0LTM0IDE0cTItMiAxMi41LTEydDEyLjUtMTMgMTAtMTEuNSAxMC0xMy41IDYtMTMuNSA1LjUtMTYuNSAxLjUtMThxMC0zOC0yOC02OC0zLTMtMTYuNS0xOHQtMTktMjAuNVQ2MTQgMjYxdC0yMi0xNS41LTIyLTktMjYtNC41cS00MCAwLTY4IDI4TDY4IDY2OHEtMjggMjgtMjggNjggMCAxMyA0LjUgMjZ0OSAyMlQ2OSA4MDZ0MTYuNSAxOC41IDIwLjUgMTkgMTggMTYuNXEzMCAyOCA2OCAyOCAxMCAwIDE4LTEuNXQxNi41LTUuNSAxMy41LTYgMTMuNS0xMCAxMS41LTEwIDEzLTEyLjUgMTItMTIuNXEtMTQgMTQtMTQgMzR0MTQgMzRsMzQ4IDM0OHExNCAxNCAzNCAxNHQzNC0xNHEtMiAyLTEyLjUgMTJ0LTEyLjUgMTMtMTAgMTEuNS0xMCAxMy41LTYgMTMuNS01LjUgMTYuNS0xLjUgMThxMCAzOCAyOCA2OCAzIDMgMTYuNSAxOHQxOSAyMC41VDczMCAxNDY3dDIyIDE1LjUgMjIgOSAyNiA0LjVxNDAgMCA2OC0yOGw0MDgtNDA4cTI4LTI4IDI4LTY4IDAtMTMtNC41LTI2dC05LTIyLTE1LjUtMjItMTYuNS0xOC41LTIwLjUtMTktMTgtMTYuNXEtMzAtMjgtNjgtMjgtMTAgMC0xOCAxLjV0LTE2LjUgNS41LTEzLjUgNi0xMy41IDEwLTExLjUgMTAtMTMgMTIuNS0xMiAxMi41cTE0LTE0IDE0LTM0dC0xNC0zNEw5MjggNzA0bDI1Ni0yNTZxNDMgNDMgOTYgNDMgNTIgMCA5MS0zN2wzNjMtMzYzcTM3LTM5IDM3LTkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkYXNoYm9hcmQiIHVuaWNvZGU9Iu+DpCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMzg0cTAgNTMtMzcuNSA5MC41VDI1NiA1MTJ0LTkwLjUtMzcuNVQxMjggMzg0dDM3LjUtOTAuNVQyNTYgMjU2dDkwLjUgMzcuNVQzODQgMzg0em0xOTIgNDQ4cTAgNTMtMzcuNSA5MC41VDQ0OCA5NjB0LTkwLjUtMzcuNVQzMjAgODMydDM3LjUtOTAuNVQ0NDggNzA0dDkwLjUgMzcuNVQ1NzYgODMyem00MjgtNDgxbDEwMSAzODJxNiAyNi03LjUgNDguNVQxMDU5IDgxMXQtNDgtNi41LTMwLTM5LjVMODgwIDM4M3EtNjAtNS0xMDctNDMuNVQ3MTAgMjQxcS0yMC03NyAyMC0xNDZUODQ3IDZ0MTQ2IDIwIDg5IDExN3ExNiA2MC02IDExN3QtNzIgOTF6bTY2MCAzM3EwIDUzLTM3LjUgOTAuNVQxNTM2IDUxMnQtOTAuNS0zNy41VDE0MDggMzg0dDM3LjUtOTAuNVQxNTM2IDI1NnQ5MC41IDM3LjVUMTY2NCAzODR6bS02NDAgNjQwcTAgNTMtMzcuNSA5MC41VDg5NiAxMTUydC05MC41LTM3LjVUNzY4IDEwMjR0MzcuNS05MC41VDg5NiA4OTZ0OTAuNSAzNy41IDM3LjUgOTAuNXptNDQ4LTE5MnEwIDUzLTM3LjUgOTAuNVQxMzQ0IDk2MHQtOTAuNS0zNy41VDEyMTYgODMydDM3LjUtOTAuNVQxMzQ0IDcwNHQ5MC41IDM3LjVUMTQ3MiA4MzJ6bTMyMC00NDhxMC0yNjEtMTQxLTQ4My0xOS0yOS01NC0yOUgxOTVxLTM1IDAtNTQgMjlRMCAxMjIgMCAzODRxMCAxODIgNzEgMzQ4dDE5MSAyODYgMjg2IDE5MSAzNDggNzEgMzQ4LTcxIDI4Ni0xOTEgMTkxLTI4NiA3MS0zNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNvbW1lbnRfYWx0IiB1bmljb2RlPSLvg6UiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDExNTJxLTIwNCAwLTM4MS41LTY5LjVUMjMyLjUgODk1IDEyOCA2NDBxMC0xMTIgNzEuNS0yMTMuNVQ0MDEgMjUxbDg3LTUwLTI3LTk2cS0yNC05MS03MC0xNzJRNTQzLTQgNjY2IDEwNGw0MyAzOCA1Ny02cTY5LTggMTMwLTggMjA0IDAgMzgxLjUgNjkuNXQyODIgMTg3LjVUMTY2NCA2NDB0LTEwNC41IDI1NS0yODIgMTg3LjVUODk2IDExNTJ6bTg5Ni01MTJxMC0xNzQtMTIwLTMyMS41dC0zMjYtMjMzVDg5NiAwcS03MCAwLTE0NSA4LTE5OC0xNzUtNDYwLTI0Mi00OS0xNC0xMTQtMjJoLTVxLTE1IDAtMjcgMTAuNVQxMjktMjE4djFxLTMgNC0uNSAxMnQyIDEwIDQuNSA5LjVsNiA5IDcgOC41IDggOXE3IDggMzEgMzQuNXQzNC41IDM4IDMxIDM5LjVUMjg1IDR0MjcgNTkgMjYgNzZRMTgxIDIyOCA5MC41IDM1OVQwIDY0MHEwIDE3NCAxMjAgMzIxLjV0MzI2IDIzMyA0NTAgODUuNSA0NTAtODUuNSAzMjYtMjMzVDE3OTIgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb21tZW50c19hbHQiIHVuaWNvZGU9Iu+DpiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik03MDQgMTE1MnEtMTUzIDAtMjg2LTUyVDIwNi41IDk1OSAxMjggNzY4cTAtODIgNTMtMTU4dDE0OS0xMzJsOTctNTYtMzUtODRxMzQgMjAgNjIgMzlsNDQgMzEgNTMtMTBxNzgtMTQgMTUzLTE0IDE1MyAwIDI4NiA1MnQyMTEuNSAxNDEgNzguNSAxOTEtNzguNSAxOTFUOTkwIDExMDB0LTI4NiA1MnptMCAxMjhxMTkxIDAgMzUzLjUtNjguNVQxMzE0IDEwMjV0OTQtMjU3LTk0LTI1Ny0yNTYuNS0xODYuNVQ3MDQgMjU2cS04NiAwLTE3NiAxNi0xMjQtODgtMjc4LTEyOC0zNi05LTg2LTE2aC0zcS0xMSAwLTIwLjUgOFQxMjkgMTU3cS0xIDMtMSA2LjV0LjUgNi41IDIgNmwyLjUgNSAzLjUgNS41IDQgNSA0LjUgNSA0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNSAyMi41IDI5IDI1IDM4LjUgMjAuNSA0NFExNDIgNDM5IDcxIDU0NFQwIDc2OHEwIDEzOSA5NCAyNTd0MjU2LjUgMTg2LjVUNzA0IDEyODB6bTgyMi0xMTY5cTEwLTI0IDIwLjUtNDR0MjUtMzguNSAyMi41LTI5IDI2LTI5LjUgMjMtMjVxMS0xIDQtNC41dDQuNS01IDQtNSAzLjUtNS41bDIuNS01IDItNiAuNS02LjUtMS02LjVxLTMtMTQtMTMtMjJ0LTIyLTdxLTUwIDctODYgMTYtMTU0IDQwLTI3OCAxMjgtOTAtMTYtMTc2LTE2LTI3MSAwLTQ3MiAxMzIgNTgtNCA4OC00IDE2MSAwIDMwOSA0NXQyNjQgMTI5cTEyNSA5MiAxOTIgMjEydDY3IDI1NHEwIDc3LTIzIDE1MiAxMjktNzEgMjA0LTE3OHQ3NS0yMzBxMC0xMjAtNzEtMjI0LjVUMTUyNiAxMTF6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJvbHQiIHVuaWNvZGU9Iu+DpyIgaG9yaXotYWR2LXg9Ijg5NiIgZD0iTTg4NSA5NzBxMTgtMjAgNy00NEwzNTItMjMxcS0xMy0yNS00Mi0yNS00IDAtMTQgMi0xNyA1LTI1LjUgMTl0LTQuNSAzMGwxOTcgODA4TDU3IDUwMnEtNC0xLTEyLTEtMTggMC0zMSAxMS0xOCAxNS0xMyAzOWwyMDEgODI1cTQgMTQgMTYgMjN0MjggOWgzMjhxMTkgMCAzMi0xMi41dDEzLTI5LjVxMC04LTUtMThMNDQzIDg4NWwzOTYgOThxOCAyIDEyIDIgMTkgMCAzNC0xNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic2l0ZW1hcCIgdW5pY29kZT0i74OoIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMjg4Vi0zMnEwLTQwLTI4LTY4dC02OC0yOGgtMzIwcS00MCAwLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJIOTYwVjM4NGg5NnE0MCAwIDY4LTI4dDI4LTY4Vi0zMnEwLTQwLTI4LTY4dC02OC0yOEg3MzZxLTQwIDAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MkgzMjBWMzg0aDk2cTQwIDAgNjgtMjh0MjgtNjhWLTMycTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMzJ2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkycTAgNTIgMzggOTB0OTAgMzhoNTEydjE5MmgtOTZxLTQwIDAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4LTI4dDI4LTY4Vjk5MnEwLTQwLTI4LTY4dC02OC0yOGgtOTZWNzA0aDUxMnE1MiAwIDkwLTM4dDM4LTkwVjM4NGg5NnE0MCAwIDY4LTI4dDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bWJyZWxsYSIgdW5pY29kZT0i74OpIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg5NiA3MDhWMTI4cTAtMTA0LTc2LTE4MHQtMTgwLTc2LTE4MCA3Ni03NiAxODBxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOSAxOS00NXEwLTUwIDM5LTg5dDg5LTM5IDg5IDM5IDM5IDg5djU4MHEzMyAxMSA2NCAxMXQ2NC0xMXptNzY4LTI3cTAtMTMtOS41LTIyLjVUMTYzMiA2NDlxLTExIDAtMjMgMTAtNDkgNDYtOTMgNjl0LTEwMiAyM3EtNjggMC0xMjgtMzd0LTEwMy05N3EtNy0xMC0xNy41LTI4dC0xNC41LTI0cS0xMS0xNy0yOC0xNy0xOCAwLTI5IDE3LTQgNi0xNC41IDI0dC0xNy41IDI4cS00MyA2MC0xMDIuNSA5N1Q4MzIgNzUxdC0xMjcuNS0zN1Q2MDIgNjE3cS03LTEwLTE3LjUtMjhUNTcwIDU2NXEtMTEtMTctMjktMTctMTcgMC0yOCAxNy00IDYtMTQuNSAyNFQ0ODEgNjE3cS00MyA2MC0xMDMgOTd0LTEyOCAzN3EtNTggMC0xMDItMjN0LTkzLTY5cS0xMi0xMC0yMy0xMC0xMyAwLTIyLjUgOS41VDAgNjgxcTAgNSAxIDcgNDUgMTgzIDE3Mi41IDMxOS41dDI5OCAyMDQuNSAzNjAuNSA2OHExNDAgMCAyNzQuNS00MHQyNDYuNS0xMTMuNSAxOTQuNS0xODdUMTY2MyA2ODhxMS0yIDEtN3ptLTc2OCA3Mjd2LTk4cS00MiAyLTY0IDJ0LTY0LTJ2OThxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGFzdGUiIHVuaWNvZGU9Iu+DqiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik03NjgtMTI4aDg5NnY2NDBoLTQxNnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDc2OFYtMTI4em0yNTYgMTQ0MHY2NHEwIDEzLTkuNSAyMi41VDk5MiAxNDA4SDI4OHEtMTMgMC0yMi41LTkuNVQyNTYgMTM3NnYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg3MDRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMjU2LTY3MmgyOTlsLTI5OSAyOTlWNjQwem01MTItMTI4di02NzJxMC00MC0yOC02OHQtNjgtMjhINzM2cS00MCAwLTY4IDI4dC0yOCA2OFYwSDk2UTU2IDAgMjggMjhUMCA5NnYxMzQ0cTAgNDAgMjggNjh0NjggMjhoMTA4OHE0MCAwIDY4LTI4dDI4LTY4di0zMjhxMjEtMTMgMzYtMjhsNDA4LTQwOHEyOC0yOCA0OC03NnQyMC04OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibGlnaHRfYnVsYiIgdW5pY29kZT0i74OrIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTczNiA5NjBxMC0xMy05LjUtMjIuNVQ3MDQgOTI4dC0yMi41IDkuNVQ2NzIgOTYwcTAgNDYtNTQgNzF0LTEwNiAyNXEtMTMgMC0yMi41IDkuNVQ0ODAgMTA4OHQ5LjUgMjIuNSAyMi41IDkuNXE1MCAwIDk5LjUtMTZ0ODctNTQgMzcuNS05MHptMTYwIDBxMCA3Mi0zNC41IDEzNHQtOTAgMTAxLjUtMTIzIDYyVDUxMiAxMjgwdC0xMzYuNS0yMi41LTEyMy02Mi05MC0xMDEuNVQxMjggOTYwcTAtMTAxIDY4LTE4MCAxMC0xMSAzMC41LTMzdDMwLjUtMzNxMTI4LTE1MyAxNDEtMjk4aDIyOHExMyAxNDUgMTQxIDI5OCAxMCAxMSAzMC41IDMzdDMwLjUgMzNxNjggNzkgNjggMTgwem0xMjggMHEwLTE1NS0xMDMtMjY4LTQ1LTQ5LTc0LjUtODdUNzg3IDUwOS41IDc1MyA0MDJxNDctMjggNDctODIgMC0zNy0yNS02NCAyNS0yNyAyNS02NCAwLTUyLTQ1LTgxIDEzLTIzIDEzLTQ3IDAtNDYtMzEuNS03MVQ2NTktMzJxLTIwLTQ0LTYwLTcwdC04Ny0yNi04NyAyNi02MCA3MHEtNDYgMC03Ny41IDI1VDI1NiA2NHEwIDI0IDEzIDQ3LTQ1IDI5LTQ1IDgxIDAgMzcgMjUgNjQtMjUgMjctMjUgNjQgMCA1NCA0NyA4Mi00IDUwLTM0IDEwNy41VDE3Ny41IDYwNSAxMDMgNjkyUTAgODA1IDAgOTYwcTAgOTkgNDQuNSAxODQuNXQxMTcgMTQyIDE2NCA4OVQ1MTIgMTQwOHQxODYuNS0zMi41IDE2NC04OSAxMTctMTQyVDEwMjQgOTYweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJleGNoYW5nZSIgdW5pY29kZT0i74OsIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMzUyVjE2MHEwLTEzLTkuNS0yMi41VDE3NjAgMTI4SDM4NFYtNjRxMC0xMy05LjUtMjIuNVQzNTItOTZxLTEyIDAtMjQgMTBMOSAyMzRxLTkgOS05IDIyIDAgMTQgOSAyM2wzMjAgMzIwcTkgOSAyMyA5IDEzIDAgMjIuNS05LjVUMzg0IDU3NlYzODRoMTM3NnExMyAwIDIyLjUtOS41dDkuNS0yMi41em0wIDU0NHEwLTE0LTktMjNsLTMyMC0zMjBxLTktOS0yMy05LTEzIDAtMjIuNSA5LjVUMTQwOCA1NzZ2MTkySDMycS0xMyAwLTIyLjUgOS41VDAgODAwdjE5MnEwIDEzIDkuNSAyMi41VDMyIDEwMjRoMTM3NnYxOTJxMCAxNCA5IDIzdDIzIDlxMTIgMCAyNC0xMGwzMTktMzE5cTktOSA5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjbG91ZF9kb3dubG9hZCIgdW5pY29kZT0i74OtIiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgNjA4cTAgMTQtOSAyM3QtMjMgOWgtMjI0djM1MnEwIDEzLTkuNSAyMi41VDk5MiAxMDI0SDgwMHEtMTMgMC0yMi41LTkuNVQ3NjggOTkyVjY0MEg1NDRxLTEzIDAtMjIuNS05LjVUNTEyIDYwOHEwLTE0IDktMjNsMzUyLTM1MnE5LTkgMjMtOXQyMyA5bDM1MSAzNTFxMTAgMTIgMTAgMjR6bTY0MC0yMjRxMC0xNTktMTEyLjUtMjcxLjVUMTUzNiAwSDQ0OFEyNjMgMCAxMzEuNSAxMzEuNVQwIDQ0OHEwIDEzMCA3MCAyNDB0MTg4IDE2NXEtMiAzMC0yIDQzIDAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNS04N3QxODguNS0yMzFxNzEgNjIgMTY2IDYyIDEwNiAwIDE4MS03NXQ3NS0xODFxMC03Ni00MS0xMzggMTMwLTMxIDIxMy41LTEzNS41VDE5MjAgMzg0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjbG91ZF91cGxvYWQiIHVuaWNvZGU9Iu+DriIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDY3MnEwIDE0LTkgMjNsLTM1MiAzNTJxLTkgOS0yMyA5dC0yMy05TDUyMiA2OTZxLTEwLTEyLTEwLTI0IDAtMTQgOS0yM3QyMy05aDIyNFYyODhxMC0xMyA5LjUtMjIuNVQ4MDAgMjU2aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41djM1MmgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptNjQwLTI4OHEwLTE1OS0xMTIuNS0yNzEuNVQxNTM2IDBINDQ4UTI2MyAwIDEzMS41IDEzMS41VDAgNDQ4cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwLTIgNDMgMCAyMTIgMTUwIDM2MnQzNjIgMTUwcTE1NiAwIDI4NS41LTg3dDE4OC41LTIzMXE3MSA2MiAxNjYgNjIgMTA2IDAgMTgxLTc1dDc1LTE4MXEwLTc2LTQxLTEzOCAxMzAtMzEgMjEzLjUtMTM1LjVUMTkyMCAzODR6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVzZXJfbWQiIHVuaWNvZGU9Iu+DsCIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em0xMDI0LTYxcTAtMTIxLTczLTE5MHQtMTk0LTY5SDI2N3EtMTIxIDAtMTk0IDY5VDAgMTMxcTAgNjggNS41IDEzMXQyNCAxMzhUNzcgNTMyLjV0ODEgMTAzVDI3OCA2OTZxLTIyLTUyLTIyLTEyMFYzNzNxLTU4LTIwLTkzLTcwdC0zNS0xMTFxMC04MCA1Ni0xMzZUMzIwIDB0MTM2IDU2IDU2IDEzNnEwIDYxLTM1LjUgMTExVDM4NCAzNzN2MjAzcTAgNjIgMjUgOTMgMTMyLTEwNCAyOTUtMTA0dDI5NSAxMDRxMjUtMzEgMjUtOTN2LTY0cS0xMDYgMC0xODEtNzV0LTc1LTE4MXYtODlxLTMyLTI5LTMyLTcxIDAtNDAgMjgtNjh0NjgtMjggNjggMjggMjggNjhxMCA0Mi0zMiA3MXY4OXEwIDUyIDM4IDkwdDkwIDM4IDkwLTM4IDM4LTkwdi04OXEtMzItMjktMzItNzEgMC00MCAyOC02OHQ2OC0yOCA2OCAyOCAyOCA2OHEwIDQyLTMyIDcxdjg5cTAgNjgtMzQuNSAxMjcuNVQxMTUyIDQ3N3EwIDEwIC41IDQyLjV0MCA0OC0yLjUgNDEuNS03IDQ3LTEzIDQwcTY4LTE1IDEyMC02MC41dDgxLTEwMyA0Ny41LTEzMi41IDI0LTEzOCA1LjUtMTMxem0tMzIwIDg5M3EwLTE1OS0xMTIuNS0yNzEuNVQ3MDQgNjQwIDQzMi41IDc1Mi41IDMyMCAxMDI0dDExMi41IDI3MS41VDcwNCAxNDA4dDI3MS41LTExMi41VDEwODggMTAyNHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic3RldGhvc2NvcGUiIHVuaWNvZGU9Iu+DsSIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjgwIDgzMnEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptMTI4IDBxMC02Mi0zNS41LTExMXQtOTIuNS03MFYyNTZxMC0xNTktMTMxLjUtMjcxLjVUODMyLTEyOCA1MTUuNS0xNS41IDM4NCAyNTZ2MTMycS0xNjQgMjAtMjc0IDEyOFQwIDc2OHY1MTJxMCAyNiAxOSA0NXQ0NSAxOXE2IDAgMTYtMiAxNyAzMCA0NyA0OHQ2NSAxOHE1MyAwIDkwLjUtMzcuNVQzMjAgMTI4MHQtMzcuNS05MC41VDE5MiAxMTUycS0zMyAwLTY0IDE4Vjc2OHEwLTEwNiA5NC0xODF0MjI2LTc1IDIyNiA3NSA5NCAxODF2NDAycS0zMS0xOC02NC0xOC01MyAwLTkwLjUgMzcuNVQ1NzYgMTI4MHQzNy41IDkwLjVUNzA0IDE0MDhxMzUgMCA2NS0xOHQ0Ny00OHExMCAyIDE2IDIgMjYgMCA0NS0xOXQxOS00NVY3NjhxMC0xNDQtMTEwLTI1MlQ1MTIgMzg4VjI1NnEwLTEwNiA5NC0xODFUODMyIDB0MjI2IDc1IDk0IDE4MXYzOTVxLTU3IDIxLTkyLjUgNzBUMTAyNCA4MzJxMCA4MCA1NiAxMzZ0MTM2IDU2IDEzNi01NiA1Ni0xMzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InN1aXRjYXNlIiB1bmljb2RlPSLvg7IiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOEg2NDB2LTEyOHptLTM1MiAwVi0xMjhoLTY0cS05MiAwLTE1OCA2NlQwIDk2djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoNjR6bTExMjAgMFYtMTI4SDM4NHYxMjgwaDEyOHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OC0yOHQyOC02OHYtMTYwaDEyOHptMzg0LTIyNFY5NnEwLTkyLTY2LTE1OHQtMTU4LTY2aC02NHYxMjgwaDY0cTkyIDAgMTU4LTY2dDY2LTE1OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYmVsbF9hbHQiIHVuaWNvZGU9Iu+DsyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05MTItMTYwcTAgMTYtMTYgMTYtNTkgMC0xMDEuNSA0Mi41VDc1MiAwcTAgMTYtMTYgMTZUNzIwIDBxMC03MyA1MS41LTEyNC41VDg5Ni0xNzZxMTYgMCAxNiAxNnptODE2IDI4OHEwLTUyLTM4LTkwdC05MC0zOGgtNDQ4cTAtMTA2LTc1LTE4MXQtMTgxLTc1LTE4MSA3NVQ2NDAgMEgxOTJxLTUyIDAtOTAgMzh0LTM4IDkwcTUwIDQyIDkxIDg4dDg1IDExOS41VDMxNC41IDQ5NHQ1MCAyMDZUMzg0IDk2MHEwIDE1MiAxMTcgMjgyLjVUODA4IDE0MDFxLTggMTktOCAzOSAwIDQwIDI4IDY4dDY4IDI4IDY4LTI4IDI4LTY4cTAtMjAtOC0zOSAxOTAtMjggMzA3LTE1OC41VDE0MDggOTYwcTAtMTM5IDE5LjUtMjYwdDUwLTIwNiA3NC41LTE1OC41IDg1LTExOS41IDkxLTg4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb2ZmZWUiIHVuaWNvZGU9Iu+DtCIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNjY0IDg5NnEwIDgwLTU2IDEzNnQtMTM2IDU2aC02NFY3MDRoNjRxODAgMCAxMzYgNTZ0NTYgMTM2ek0wIDEyOGgxNzkycTAtMTA2LTc1LTE4MXQtMTgxLTc1SDI1NnEtMTA2IDAtMTgxIDc1VDAgMTI4em0xODU2IDc2OHEwLTE1OS0xMTIuNS0yNzEuNVQxNDcyIDUxMmgtNjR2LTMycTAtOTItNjYtMTU4dC0xNTgtNjZINDgwcS05MiAwLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMTU5IDAgMjcxLjUtMTEyLjVUMTg1NiA4OTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZvb2QiIHVuaWNvZGU9Iu+DtSIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik02NDAgMTQ3MlY4MzJxMC02MS0zNS41LTExMVQ1MTIgNjUxdi03NzlxMC01Mi0zOC05MHQtOTAtMzhIMjU2cS01MiAwLTkwIDM4dC0zOCA5MHY3NzlxLTU3IDIwLTkyLjUgNzBUMCA4MzJ2NjQwcTAgMjYgMTkgNDV0NDUgMTkgNDUtMTkgMTktNDV2LTQxNnEwLTI2IDE5LTQ1dDQ1LTE5IDQ1IDE5IDE5IDQ1djQxNnEwIDI2IDE5IDQ1dDQ1IDE5IDQ1LTE5IDE5LTQ1di00MTZxMC0yNiAxOS00NXQ0NS0xOSA0NSAxOSAxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOSAxOS00NXptNzY4IDBWLTEyOHEwLTUyLTM4LTkwdC05MC0zOGgtMTI4cS01MiAwLTkwIDM4dC0zOCA5MHY1MTJIODAwcS0xMyAwLTIyLjUgOS41VDc2OCA0MTZ2ODAwcTAgMTMyIDk0IDIyNnQyMjYgOTRoMjU2cTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZpbGVfdGV4dF9hbHQiIHVuaWNvZGU9Iu+DtiIgZD0iTTE0NjggMTE1NnEyOC0yOCA0OC03NnQyMC04OFYtMTYwcTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMTYwdjE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OC0yMHQ3Ni00OHptLTQ0NCAyNDR2LTM3NmgzNzZxLTEwIDI5LTIyIDQxbC0zMTMgMzEzcS0xMiAxMi00MSAyMnptMzg0LTE1MjhWODk2SDk5MnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDEyOFYtMTI4aDEyODB6TTM4NCA3MzZxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlINDE2cS0xNCAwLTIzIDl0LTkgMjN2NjR6bTczNi0yMjRxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOUg0MTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg3MDR6bTAtMjU2cTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlINDE2cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJidWlsZGluZyIgdW5pY29kZT0i74O3IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAtMTMtOS41LTIyLjVUMzUyIDEyOGgtNjRxLTEzIDAtMjIuNSA5LjVUMjU2IDE2MHY2NHEwIDEzIDkuNSAyMi41VDI4OCAyNTZoNjRxMTMgMCAyMi41LTkuNVQzODQgMjI0em0wIDI1NnYtNjRxMC0xMy05LjUtMjIuNVQzNTIgMzg0aC02NHEtMTMgMC0yMi41IDkuNVQyNTYgNDE2djY0cTAgMTMgOS41IDIyLjVUMjg4IDUxMmg2NHExMyAwIDIyLjUtOS41VDM4NCA0ODB6bTI1NiAwdi02NHEwLTEzLTkuNS0yMi41VDYwOCAzODRoLTY0cS0xMyAwLTIyLjUgOS41VDUxMiA0MTZ2NjRxMCAxMyA5LjUgMjIuNVQ1NDQgNTEyaDY0cTEzIDAgMjIuNS05LjVUNjQwIDQ4MHpNMzg0IDczNnYtNjRxMC0xMy05LjUtMjIuNVQzNTIgNjQwaC02NHEtMTMgMC0yMi41IDkuNVQyNTYgNjcydjY0cTAgMTMgOS41IDIyLjVUMjg4IDc2OGg2NHExMyAwIDIyLjUtOS41VDM4NCA3MzZ6bTc2OC01MTJ2LTY0cTAtMTMtOS41LTIyLjVUMTEyMCAxMjhoLTY0cS0xMyAwLTIyLjUgOS41VDEwMjQgMTYwdjY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXpNODk2IDQ4MHYtNjRxMC0xMy05LjUtMjIuNVQ4NjQgMzg0aC02NHEtMTMgMC0yMi41IDkuNVQ3NjggNDE2djY0cTAgMTMgOS41IDIyLjVUODAwIDUxMmg2NHExMyAwIDIyLjUtOS41VDg5NiA0ODB6TTY0MCA3MzZ2LTY0cTAtMTMtOS41LTIyLjVUNjA4IDY0MGgtNjRxLTEzIDAtMjIuNSA5LjVUNTEyIDY3MnY2NHEwIDEzIDkuNSAyMi41VDU0NCA3NjhoNjRxMTMgMCAyMi41LTkuNVQ2NDAgNzM2ek0zODQgOTkydi02NHEwLTEzLTkuNS0yMi41VDM1MiA4OTZoLTY0cS0xMyAwLTIyLjUgOS41VDI1NiA5Mjh2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41VDM4NCA5OTJ6bTc2OC01MTJ2LTY0cTAtMTMtOS41LTIyLjVUMTEyMCAzODRoLTY0cS0xMyAwLTIyLjUgOS41VDEwMjQgNDE2djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXpNODk2IDczNnYtNjRxMC0xMy05LjUtMjIuNVQ4NjQgNjQwaC02NHEtMTMgMC0yMi41IDkuNVQ3NjggNjcydjY0cTAgMTMgOS41IDIyLjVUODAwIDc2OGg2NHExMyAwIDIyLjUtOS41VDg5NiA3MzZ6TTY0MCA5OTJ2LTY0cTAtMTMtOS41LTIyLjVUNjA4IDg5NmgtNjRxLTEzIDAtMjIuNSA5LjVUNTEyIDkyOHY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNS05LjVUNjQwIDk5MnptLTI1NiAyNTZ2LTY0cTAtMTMtOS41LTIyLjVUMzUyIDExNTJoLTY0cS0xMyAwLTIyLjUgOS41VDI1NiAxMTg0djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptNzY4LTUxMnYtNjRxMC0xMy05LjUtMjIuNVQxMTIwIDY0MGgtNjRxLTEzIDAtMjIuNSA5LjVUMTAyNCA2NzJ2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41dDkuNS0yMi41ek04OTYgOTkydi02NHEwLTEzLTkuNS0yMi41VDg2NCA4OTZoLTY0cS0xMyAwLTIyLjUgOS41VDc2OCA5Mjh2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41VDg5NiA5OTJ6bS0yNTYgMjU2di02NHEwLTEzLTkuNS0yMi41VDYwOCAxMTUyaC02NHEtMTMgMC0yMi41IDkuNVQ1MTIgMTE4NHY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6bTUxMi0yNTZ2LTY0cTAtMTMtOS41LTIyLjVUMTEyMCA4OTZoLTY0cS0xMyAwLTIyLjUgOS41VDEwMjQgOTI4djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptLTI1NiAyNTZ2LTY0cTAtMTMtOS41LTIyLjVUODY0IDExNTJoLTY0cS0xMyAwLTIyLjUgOS41VDc2OCAxMTg0djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXptMjU2IDB2LTY0cTAtMTMtOS41LTIyLjV0LTIyLjUtOS41aC02NHEtMTMgMC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41dDkuNS0yMi41ek04OTYtMTI4aDM4NHYxNTM2SDEyOFYtMTI4aDM4NFY5NnEwIDEzIDkuNSAyMi41VDU0NCAxMjhoMzIwcTEzIDAgMjIuNS05LjVUODk2IDk2di0yMjR6bTUxMiAxNjAwVi0xOTJxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMC0xOTJ2MTY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaG9zcGl0YWwiIHVuaWNvZGU9Iu+DuCIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMjI0di02NHEwLTEzLTkuNS0yMi41VDM1MiAxMjhoLTY0cS0xMyAwLTIyLjUgOS41VDI1NiAxNjB2NjRxMCAxMyA5LjUgMjIuNVQyODggMjU2aDY0cTEzIDAgMjIuNS05LjVUMzg0IDIyNHptMCAyNTZ2LTY0cTAtMTMtOS41LTIyLjVUMzUyIDM4NGgtNjRxLTEzIDAtMjIuNSA5LjVUMjU2IDQxNnY2NHEwIDEzIDkuNSAyMi41VDI4OCA1MTJoNjRxMTMgMCAyMi41LTkuNVQzODQgNDgwem0yNTYgMHYtNjRxMC0xMy05LjUtMjIuNVQ2MDggMzg0aC02NHEtMTMgMC0yMi41IDkuNVQ1MTIgNDE2djY0cTAgMTMgOS41IDIyLjVUNTQ0IDUxMmg2NHExMyAwIDIyLjUtOS41VDY0MCA0ODB6TTM4NCA3MzZ2LTY0cTAtMTMtOS41LTIyLjVUMzUyIDY0MGgtNjRxLTEzIDAtMjIuNSA5LjVUMjU2IDY3MnY2NHEwIDEzIDkuNSAyMi41VDI4OCA3NjhoNjRxMTMgMCAyMi41LTkuNVQzODQgNzM2em03NjgtNTEydi02NHEwLTEzLTkuNS0yMi41VDExMjAgMTI4aC02NHEtMTMgMC0yMi41IDkuNVQxMDI0IDE2MHY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNS05LjV0OS41LTIyLjV6TTg5NiA0ODB2LTY0cTAtMTMtOS41LTIyLjVUODY0IDM4NGgtNjRxLTEzIDAtMjIuNSA5LjVUNzY4IDQxNnY2NHEwIDEzIDkuNSAyMi41VDgwMCA1MTJoNjRxMTMgMCAyMi41LTkuNVQ4OTYgNDgwek02NDAgNzM2di02NHEwLTEzLTkuNS0yMi41VDYwOCA2NDBoLTY0cS0xMyAwLTIyLjUgOS41VDUxMiA2NzJ2NjRxMCAxMyA5LjUgMjIuNVQ1NDQgNzY4aDY0cTEzIDAgMjIuNS05LjVUNjQwIDczNnptNTEyLTI1NnYtNjRxMC0xMy05LjUtMjIuNVQxMTIwIDM4NGgtNjRxLTEzIDAtMjIuNSA5LjVUMTAyNCA0MTZ2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUtOS41dDkuNS0yMi41ek04OTYgNzM2di02NHEwLTEzLTkuNS0yMi41VDg2NCA2NDBoLTY0cS0xMyAwLTIyLjUgOS41VDc2OCA2NzJ2NjRxMCAxMyA5LjUgMjIuNVQ4MDAgNzY4aDY0cTEzIDAgMjIuNS05LjVUODk2IDczNnptMjU2IDB2LTY0cTAtMTMtOS41LTIyLjVUMTEyMCA2NDBoLTY0cS0xMyAwLTIyLjUgOS41VDEwMjQgNjcydjY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNXpNODk2LTEyOGgzODR2MTE1MmgtMjU2di0zMnEwLTQwLTI4LTY4dC02OC0yOEg0ODBxLTQwIDAtNjggMjh0LTI4IDY4djMySDEyOFYtMTI4aDM4NFY5NnEwIDEzIDkuNSAyMi41VDU0NCAxMjhoMzIwcTEzIDAgMjIuNS05LjVUODk2IDk2di0yMjR6bTAgMTE4NHYzMjBxMCAxMy05LjUgMjIuNVQ4NjQgMTQwOGgtNjRxLTEzIDAtMjIuNS05LjVUNzY4IDEzNzZ2LTk2SDY0MHY5NnEwIDEzLTkuNSAyMi41VDYwOCAxNDA4aC02NHEtMTMgMC0yMi41LTkuNVQ1MTIgMTM3NnYtMzIwcTAtMTMgOS41LTIyLjV0MjIuNS05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptNTEyIDMyVi0xOTJxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMC0xOTJ2MTI4MHEwIDI2IDE5IDQ1dDQ1IDE5aDMyMHYyODhxMCA0MCAyOCA2OHQ2OCAyOGg0NDhxNDAgMCA2OC0yOHQyOC02OHYtMjg4aDMyMHEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhbWJ1bGFuY2UiIHVuaWNvZGU9Iu+DuSIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgMTI4cTAgNTMtMzcuNSA5MC41VDUxMiAyNTZ0LTkwLjUtMzcuNVQzODQgMTI4dDM3LjUtOTAuNVQ1MTIgMHQ5MC41IDM3LjVUNjQwIDEyOHpNMjU2IDY0MGgzODR2MjU2SDQ4MnEtMTQtMi0yMi05TDI2NSA2OTJxLTctMTItOS0yMnYtMzB6bTEyODAtNTEycTAgNTMtMzcuNSA5MC41VDE0MDggMjU2dC05MC41LTM3LjVUMTI4MCAxMjh0MzcuNS05MC41VDE0MDggMHQ5MC41IDM3LjVUMTUzNiAxMjh6bTEyOCA2NzJ2MTkycTAgMTQtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0LTkgMjN0LTIzIDloLTE5MnEtMTQgMC0yMy05dC05LTIzdi0yMjRIOTI4cS0xNCAwLTIzLTl0LTktMjNWODAwcTAtMTQgOS0yM3QyMy05aDIyNFY1NDRxMC0xNCA5LTIzdDIzLTloMTkycTE0IDAgMjMgOXQ5IDIzdjIyNGgyMjRxMTQgMCAyMyA5dDkgMjN6bTI1NiA1NDRWMTkycTAtMjYtMTktNDV0LTQ1LTE5aC0xOTJxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MUg3NjhxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MUgxMjhxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5djQxNnEwIDI2IDEzIDU4dDMyIDUxbDE5OCAxOThxMTkgMTkgNTEgMzJ0NTggMTNoMTYwdjMyMHEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWVka2l0IiB1bmljb2RlPSLvg7oiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4MCA0MTZ2MTkycTAgMTQtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0LTkgMjN0LTIzIDlIODAwcS0xNCAwLTIzLTl0LTktMjNWNjQwSDU0NHEtMTQgMC0yMy05dC05LTIzVjQxNnEwLTE0IDktMjN0MjMtOWgyMjRWMTYwcTAtMTQgOS0yM3QyMy05aDE5MnExNCAwIDIzIDl0OSAyM3YyMjRoMjI0cTE0IDAgMjMgOXQ5IDIzem0tNjQwIDczNmg1MTJ2MTI4SDY0MHYtMTI4em0tMzg0IDBWLTEyOGgtMzJxLTkyIDAtMTU4IDY2VDAgOTZ2ODMycTAgOTIgNjYgMTU4dDE1OCA2NmgzMnptMTE4NCAwVi0xMjhIMzUydjEyODBoMTYwdjE2MHEwIDQwIDI4IDY4dDY4IDI4aDU3NnE0MCAwIDY4LTI4dDI4LTY4di0xNjBoMTYwem0zNTItMjI0Vjk2cTAtOTItNjYtMTU4dC0xNTgtNjZoLTMydjEyODBoMzJxOTIgMCAxNTgtNjZ0NjYtMTU4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaWdodGVyX2pldCIgdW5pY29kZT0i74O7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE5MjAgNTc2cS0xLTMyLTI4OC05NmwtMzUyLTMyLTIyNC02NGgtNjRMNjk5IDMyaDY5cTI2IDAgNDUtNC41VDgzMiAxNiA4MTMgNC41IDc2OCAwSDQ0OHYzMmg2NHY0MTZIMzUyTDE2MCAyMjRINjRsLTMyIDMydjE5MmgzMnYzMmgxMjh2OEwwIDUxMnYxMjhsMTkyIDI0djhINjR2MzJIMzJ2MTkybDMyIDMyaDk2bDE5Mi0yMjRoMTYwdjQxNmgtNjR2MzJoMzIwcTI2IDAgNDUtNC41dDE5LTExLjUtMTktMTEuNS00NS00LjVoLTY5bDI5My0zNTJoNjRsMjI0LTY0IDM1Mi0zMnExMjgtMjggMjAwLTUydDgwLTM0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJiZWVyIiB1bmljb2RlPSLvg7wiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDY0MHYzODRIMzg0Vjc2OHEwLTUzIDM3LjUtOTAuNVQ1MTIgNjQwaDEyOHptMTAyNC00NDhWMEg1MTJ2MTkybDEyOCAxOTJINTEycS0xNTkgMC0yNzEuNSAxMTIuNVQxMjggNzY4djMyMGwtNjQgNjQgMzIgMTI4aDQ4MGwzMiAxMjhoOTYwbDMyLTE5Mi02NC0zMlYzODR6Ii8+PGdseXBoIGdseXBoLW5hbWU9Imhfc2lnbiIgdW5pY29kZT0i74O9IiBkPSJNMTI4MCAxOTJ2ODk2cTAgMjYtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAtNDUtMTl0LTE5LTQ1Vjc2OEg1MTJ2MzIwcTAgMjYtMTkgNDV0LTQ1IDE5SDMyMHEtMjYgMC00NS0xOXQtMTktNDVWMTkycTAtMjYgMTktNDV0NDUtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDUxMlYxOTJxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXptMjU2IDkyOFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmMGZlIiB1bmljb2RlPSLvg74iIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNi0xOSA0NXQtNDUgMTlIODk2djMyMHEwIDI2LTE5IDQ1dC00NSAxOUg3MDRxLTI2IDAtNDUtMTl0LTE5LTQ1Vjc2OEgzMjBxLTI2IDAtNDUtMTl0LTE5LTQ1VjU3NnEwLTI2IDE5LTQ1dDQ1LTE5aDMyMFYxOTJxMC0yNiAxOS00NXQ0NS0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoMzIwcTI2IDAgNDUgMTl0MTkgNDV6bTI1NiA1NDRWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZG91YmxlX2FuZ2xlX2xlZnQiIHVuaWNvZGU9Iu+EgCIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik02MjcgMTYwcTAtMTMtMTAtMjNsLTUwLTUwcS0xMC0xMC0yMy0xMHQtMjMgMTBMNTUgNTUzcS0xMCAxMC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzLTEwbDUwLTUwcTEwLTEwIDEwLTIzdC0xMC0yM0wyMjQgNTc2bDM5My0zOTNxMTAtMTAgMTAtMjN6bTM4NCAwcTAtMTMtMTAtMjNsLTUwLTUwcS0xMC0xMC0yMy0xMHQtMjMgMTBMNDM5IDU1M3EtMTAgMTAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMy0xMGw1MC01MHExMC0xMCAxMC0yM3QtMTAtMjNMNjA4IDU3NmwzOTMtMzkzcTEwLTEwIDEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfcmlnaHQiIHVuaWNvZGU9Iu+EgSIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01OTUgNTc2cTAtMTMtMTAtMjNMMTE5IDg3cS0xMC0xMC0yMy0xMFQ3MyA4N2wtNTAgNTBxLTEwIDEwLTEwIDIzdDEwIDIzbDM5MyAzOTNMMjMgOTY5cS0xMCAxMC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMy0xMGw0NjYtNDY2cTEwLTEwIDEwLTIzem0zODQgMHEwLTEzLTEwLTIzTDUwMyA4N3EtMTAtMTAtMjMtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAtMTAgMjN0MTAgMjNsMzkzIDM5My0zOTMgMzkzcS0xMCAxMC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMy0xMGw0NjYtNDY2cTEwLTEwIDEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfdXAiIHVuaWNvZGU9Iu+EgiIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDIyNHEwLTEzLTEwLTIzbC01MC01MHEtMTAtMTAtMjMtMTB0LTIzIDEwTDU3NiA1NDQgMTgzIDE1MXEtMTAtMTAtMjMtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMy0xMGw0NjYtNDY2cTEwLTEwIDEwLTIzem0wIDM4NHEwLTEzLTEwLTIzbC01MC01MHEtMTAtMTAtMjMtMTB0LTIzIDEwTDU3NiA5MjggMTgzIDUzNXEtMTAtMTAtMjMtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMy0xMGw0NjYtNDY2cTEwLTEwIDEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfZG93biIgdW5pY29kZT0i74SDIiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgNjcycTAtMTMtMTAtMjNMNTk5IDE4M3EtMTAtMTAtMjMtMTB0LTIzIDEwTDg3IDY0OXEtMTAgMTAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMtMTBsMzkzLTM5MyAzOTMgMzkzcTEwIDEwIDIzIDEwdDIzLTEwbDUwLTUwcTEwLTEwIDEwLTIzem0wIDM4NHEwLTEzLTEwLTIzTDU5OSA1NjdxLTEwLTEwLTIzLTEwdC0yMyAxMEw4NyAxMDMzcS0xMCAxMC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMy0xMGwzOTMtMzkzIDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMtMTBsNTAtNTBxMTAtMTAgMTAtMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFuZ2xlX2xlZnQiIHVuaWNvZGU9Iu+EhCIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTYyNyA5OTJxMC0xMy0xMC0yM0wyMjQgNTc2bDM5My0zOTNxMTAtMTAgMTAtMjN0LTEwLTIzbC01MC01MHEtMTAtMTAtMjMtMTB0LTIzIDEwTDU1IDU1M3EtMTAgMTAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMy0xMGw1MC01MHExMC0xMCAxMC0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYW5nbGVfcmlnaHQiIHVuaWNvZGU9Iu+EhSIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTU5NSA1NzZxMC0xMy0xMC0yM0wxMTkgODdxLTEwLTEwLTIzLTEwVDczIDg3bC01MCA1MHEtMTAgMTAtMTAgMjN0MTAgMjNsMzkzIDM5M0wyMyA5NjlxLTEwIDEwLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzLTEwbDQ2Ni00NjZxMTAtMTAgMTAtMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFuZ2xlX3VwIiB1bmljb2RlPSLvhIYiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSAzNTJxMC0xMy0xMC0yM2wtNTAtNTBxLTEwLTEwLTIzLTEwdC0yMyAxMEw1NzYgNjcyIDE4MyAyNzlxLTEwLTEwLTIzLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMtMTBsNDY2LTQ2NnExMC0xMCAxMC0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iYW5nbGVfZG93biIgdW5pY29kZT0i74SHIiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgODAwcTAtMTMtMTAtMjNMNTk5IDMxMXEtMTAtMTAtMjMtMTB0LTIzIDEwTDg3IDc3N3EtMTAgMTAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMtMTBsMzkzLTM5MyAzOTMgMzkzcTEwIDEwIDIzIDEwdDIzLTEwbDUwLTUwcTEwLTEwIDEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkZXNrdG9wIiB1bmljb2RlPSLvhIgiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTc5MiA1NDR2ODMycTAgMTMtOS41IDIyLjV0LTIyLjUgOS41SDE2MHEtMTMgMC0yMi41LTkuNVQxMjggMTM3NlY1NDRxMC0xMyA5LjUtMjIuNVQxNjAgNTEyaDE2MDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDgzMlYyODhxMC02Ni00Ny0xMTN0LTExMy00N2gtNTQ0cTAtMzcgMTYtNzcuNXQzMi03MSAxNi00My41cTAtMjYtMTktNDV0LTQ1LTE5SDcwNHEtMjYgMC00NSAxOXQtMTkgNDVxMCAxNCAxNiA0NHQzMiA3MCAxNiA3OEgxNjBxLTY2IDAtMTEzIDQ3VDAgMjg4djEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsYXB0b3AiIHVuaWNvZGU9Iu+EiSIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00MTYgMjU2cS02NiAwLTExMyA0N3QtNDcgMTEzdjcwNHEwIDY2IDQ3IDExM3QxMTMgNDdoMTA4OHE2NiAwIDExMy00N3Q0Ny0xMTNWNDE2cTAtNjYtNDctMTEzdC0xMTMtNDdINDE2em0tMzIgODY0VjQxNnEwLTEzIDkuNS0yMi41VDQxNiAzODRoMTA4OHExMyAwIDIyLjUgOS41dDkuNSAyMi41djcwNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNUg0MTZxLTEzIDAtMjIuNS05LjVUMzg0IDExMjB6bTEzNzYtOTI4aDE2MFY5NnEwLTQwLTQ3LTY4VDE3NjAgMEgxNjBROTQgMCA0NyAyOFQwIDk2djk2aDE3NjB6bS03MjAtOTZxMTYgMCAxNiAxNnQtMTYgMTZIODgwcS0xNiAwLTE2LTE2dDE2LTE2aDE2MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idGFibGV0IiB1bmljb2RlPSLvhIoiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNjQwIDEyOHEwIDI2LTE5IDQ1dC00NSAxOS00NS0xOS0xOS00NSAxOS00NSA0NS0xOSA0NSAxOSAxOSA0NXptMzg0IDE2MHY5NjBxMCAxMy05LjUgMjIuNVQ5OTIgMTI4MEgxNjBxLTEzIDAtMjIuNS05LjVUMTI4IDEyNDhWMjg4cTAtMTMgOS41LTIyLjVUMTYwIDI1Nmg4MzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDk2MFYxNjBxMC02Ni00Ny0xMTNUOTkyIDBIMTYwUTk0IDAgNDcgNDdUMCAxNjB2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoODMycTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibW9iaWxlX3Bob25lIiB1bmljb2RlPSLvhIsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik00NjQgMTI4cTAgMzMtMjMuNSA1Ni41VDM4NCAyMDh0LTU2LjUtMjMuNVQzMDQgMTI4dDIzLjUtNTYuNVQzODQgNDh0NTYuNSAyMy41VDQ2NCAxMjh6bTIwOCAxNjB2NzA0cTAgMTMtOS41IDIyLjVUNjQwIDEwMjRIMTI4cS0xMyAwLTIyLjUtOS41VDk2IDk5MlYyODhxMC0xMyA5LjUtMjIuNVQxMjggMjU2aDUxMnExMyAwIDIyLjUgOS41VDY3MiAyODh6bS0xOTIgODQ4cTAgMTYtMTYgMTZIMzA0cS0xNiAwLTE2LTE2dDE2LTE2aDE2MHExNiAwIDE2IDE2em0yODggMTZWMTI4cTAtNTItMzgtOTBUNjQwIDBIMTI4UTc2IDAgMzggMzhUMCAxMjh2MTAyNHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwLTM4dDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYmxhbmsiIHVuaWNvZGU9Iu+EjCIgZD0iTTc2OCAxMTg0cS0xNDggMC0yNzMtNzNUMjk3IDkxM3QtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzMtNzMgMjczLTE5OCAxOTgtMjczIDczem03NjgtNTQ0cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJxdW90ZV9sZWZ0IiB1bmljb2RlPSLvhI0iIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzY4IDU3NlYxOTJxMC04MC01Ni0xMzZUNTc2IDBIMTkyUTExMiAwIDU2IDU2VDAgMTkydjcwNHEwIDEwNCA0MC41IDE5OC41VDE1MCAxMjU4dDE2My41IDEwOS41VDUxMiAxNDA4aDY0cTI2IDAgNDUtMTl0MTktNDV2LTEyOHEwLTI2LTE5LTQ1dC00NS0xOWgtNjRxLTEwNiAwLTE4MS03NXQtNzUtMTgxdi0zMnEwLTQwIDI4LTY4dDY4LTI4aDIyNHE4MCAwIDEzNi01NnQ1Ni0xMzZ6bTg5NiAwVjE5MnEwLTgwLTU2LTEzNlQxNDcyIDBoLTM4NHEtODAgMC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNVQxMDQ2IDEyNTh0MTYzLjUgMTA5LjVUMTQwOCAxNDA4aDY0cTI2IDAgNDUtMTl0MTktNDV2LTEyOHEwLTI2LTE5LTQ1dC00NS0xOWgtNjRxLTEwNiAwLTE4MS03NXQtNzUtMTgxdi0zMnEwLTQwIDI4LTY4dDY4LTI4aDIyNHE4MCAwIDEzNi01NnQ1Ni0xMzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InF1b3RlX3JpZ2h0IiB1bmljb2RlPSLvhI4iIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNzY4IDEyMTZWNTEycTAtMTA0LTQwLjUtMTk4LjVUNjE4IDE1MCA0NTQuNSA0MC41IDI1NiAwaC02NHEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloNjRxMTA2IDAgMTgxIDc1dDc1IDE4MXYzMnEwIDQwLTI4IDY4dC02OCAyOEgxOTJxLTgwIDAtMTM2IDU2VDAgODMydjM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2LTU2dDU2LTEzNnptODk2IDBWNTEycTAtMTA0LTQwLjUtMTk4LjVUMTUxNCAxNTAgMTM1MC41IDQwLjUgMTE1MiAwaC02NHEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloNjRxMTA2IDAgMTgxIDc1dDc1IDE4MXYzMnEwIDQwLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2LTU2dDU2LTEzNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic3Bpbm5lciIgdW5pY29kZT0i74SQIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUyNiAxNDJxMC01My0zNy41LTkwLjVUMzk4IDE0cS01MiAwLTkwIDM4dC0zOCA5MHEwIDUzIDM3LjUgOTAuNVQzOTggMjcwdDkwLjUtMzcuNVQ1MjYgMTQyem00OTgtMjA2cTAtNTMtMzcuNS05MC41VDg5Ni0xOTJ0LTkwLjUgMzcuNVQ3NjgtNjR0MzcuNSA5MC41VDg5NiA2NHQ5MC41LTM3LjVUMTAyNC02NHpNMzIwIDY0MHEwLTUzLTM3LjUtOTAuNVQxOTIgNTEydC05MC41IDM3LjVUNjQgNjQwdDM3LjUgOTAuNVQxOTIgNzY4dDkwLjUtMzcuNVQzMjAgNjQwem0xMjAyLTQ5OHEwLTUyLTM4LTkwdC05MC0zOHEtNTMgMC05MC41IDM3LjVUMTI2NiAxNDJ0MzcuNSA5MC41VDEzOTQgMjcwdDkwLjUtMzcuNVQxNTIyIDE0MnptLTk2NCA5OTZxMC02Ni00Ny0xMTN0LTExMy00Ny0xMTMgNDctNDcgMTEzIDQ3IDExMyAxMTMgNDcgMTEzLTQ3IDQ3LTExM3ptMTE3MC00OThxMC01My0zNy41LTkwLjVUMTYwMCA1MTJ0LTkwLjUgMzcuNVQxNDcyIDY0MHQzNy41IDkwLjVUMTYwMCA3Njh0OTAuNS0zNy41VDE3MjggNjQwem0tNjQwIDcwNHEwLTgwLTU2LTEzNnQtMTM2LTU2LTEzNiA1Ni01NiAxMzYgNTYgMTM2IDEzNiA1NiAxMzYtNTYgNTYtMTM2em01MzAtMjA2cTAtOTMtNjYtMTU4LjVUMTM5NCA5MTRxLTkzIDAtMTU4LjUgNjUuNVQxMTcwIDExMzhxMCA5MiA2NS41IDE1OHQxNTguNSA2NnE5MiAwIDE1OC02NnQ2Ni0xNTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZSIgdW5pY29kZT0i74SRIiBkPSJNMTUzNiA2NDBxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlcGx5IiB1bmljb2RlPSLvhJIiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA0MTZxMC0xNjYtMTI3LTQ1MS0zLTctMTAuNS0yNFQxNjQxLTg5dC0xMy0yMnEtMTItMTctMjgtMTctMTUgMC0yMy41IDEwdC04LjUgMjVxMCA5IDIuNSAyNi41VDE1NzMtNDNxNSA2OCA1IDEyMyAwIDEwMS0xNy41IDE4MVQxNTEyIDM5OS41dC04MCAxMDEtMTA1LjUgNjkuNS0xMzMgNDIuNS0xNTQgMjEuNS0xNzUuNSA2SDY0MFYzODRxMC0yNi0xOS00NXQtNDUtMTktNDUgMTlMMTkgODUxUTAgODcwIDAgODk2dDE5IDQ1bDUxMiA1MTJxMTkgMTkgNDUgMTl0NDUtMTkgMTktNDV2LTI1NmgyMjRxNzEzIDAgODc1LTQwMyA1My0xMzQgNTMtMzMzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJnaXRodWJfYWx0IiB1bmljb2RlPSLvhJMiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDMyMHEwLTQwLTEyLjUtODJ0LTQzLTc2LTcyLjUtMzQtNzIuNSAzNC00MyA3Ni0xMi41IDgyIDEyLjUgODIgNDMgNzYgNzIuNSAzNCA3Mi41LTM0IDQzLTc2IDEyLjUtODJ6bTY0MCAwcTAtNDAtMTIuNS04MnQtNDMtNzYtNzIuNS0zNC03Mi41IDM0LTQzIDc2LTEyLjUgODIgMTIuNSA4MiA0MyA3NiA3Mi41IDM0IDcyLjUtMzQgNDMtNzYgMTIuNS04MnptMTYwIDBxMCAxMjAtNjkgMjA0dC0xODcgODRxLTQxIDAtMTk1LTIxLTcxLTExLTE1Ny0xMXQtMTU3IDExcS0xNTIgMjEtMTk1IDIxLTExOCAwLTE4Ny04NHQtNjktMjA0cTAtODggMzItMTUzLjV0ODEtMTAzIDEyMi02MFQ1OTktMjZ0MTQ5LTdoMTY4cTgyIDAgMTQ5IDd0MTQwIDI5LjUgMTIyIDYwIDgxIDEwMyAzMiAxNTMuNXptMjI0IDE3NnEwLTIwNy02MS0zMzEtMzgtNzctMTA1LjUtMTMzdC0xNDEtODYtMTcwLTQ3LjUtMTcxLjUtMjItMTY3LTQuNXEtNzggMC0xNDIgM3QtMTQ3LjUgMTIuNS0xNTIuNSAzMFQyNjktMzEgMTQ4IDUwIDYyIDE2NVEwIDI4OCAwIDQ5NnEwIDIzNyAxMzYgMzk2LTI3IDgyLTI3IDE3MCAwIDExNiA1MSAyMTggMTA4IDAgMTkwLTM5LjVUNTM5IDExMTdxMTQ3IDM1IDMwOSAzNSAxNDggMCAyODAtMzIgMTA1IDgyIDE4NyAxMjF0MTg5IDM5cTUxLTEwMiA1MS0yMTggMC04Ny0yNy0xNjggMTM2LTE2MCAxMzYtMzk4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfY2xvc2VfYWx0IiB1bmljb2RlPSLvhJQiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAtMjggNjh0LTY4IDI4SDczNnEtNDAgMC02OCAyOHQtMjggNjh2NjRxMCA0MC0yOCA2OHQtNjggMjhIMjI0cS00MCAwLTY4LTI4dC0yOC02OFYyMjRxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6bTEyOCA3MDRWMjI0cTAtOTItNjYtMTU4VDE0NDAgMEgyMjRRMTMyIDAgNjYgNjZUMCAyMjR2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTgtNjZ0NjYtMTU4di0zMmg2NzJxOTIgMCAxNTgtNjZ0NjYtMTU4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfb3Blbl9hbHQiIHVuaWNvZGU9Iu+ElSIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzgxIDYwNXEwIDM1LTUzIDM1SDY0MHEtNDAgMC04NS41LTIxLjVUNDgzIDU2NkwxODkgMjAzcS0xOC0yNC0xOC00MCAwLTM1IDUzLTM1aDEwODhxNDAgMCA4NiAyMnQ3MSA1M2wyOTQgMzYzcTE4IDIyIDE4IDM5ek02NDAgNzY4aDc2OHYxNjBxMCA0MC0yOCA2OHQtNjggMjhINzM2cS00MCAwLTY4IDI4dC0yOCA2OHY2NHEwIDQwLTI4IDY4dC02OCAyOEgyMjRxLTQwIDAtNjgtMjh0LTI4LTY4VjMzMWwyNTYgMzE1cTQ0IDUzIDExNiA4Ny41VDY0MCA3Njh6bTEyNjktMTYzcTAtNjItNDYtMTIwbC0yOTUtMzYzcS00My01My0xMTYtODcuNVQxMzEyIDBIMjI0UTEzMiAwIDY2IDY2VDAgMjI0djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwcTkyIDAgMTU4LTY2dDY2LTE1OHYtMzJoNTQ0cTkyIDAgMTU4LTY2dDY2LTE1OFY3NjhoMTkycTU0IDAgOTktMjQuNXQ2Ny03MC41cTE1LTMyIDE1LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJleHBhbmRfYWx0IiB1bmljb2RlPSLvhJYiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9ImNvbGxhcHNlX2FsdCIgdW5pY29kZT0i74SXIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzbWlsZSIgdW5pY29kZT0i74SYIiBkPSJNMTEzNCA0NjFxLTM3LTEyMS0xMzgtMTk1dC0yMjgtNzQtMjI4IDc0LTEzOCAxOTVxLTggMjUgNCA0OC41dDM4IDMxLjVxMjUgOCA0OC41LTR0MzEuNS0zOHEyNS04MCA5Mi41LTEyOS41VDc2OCAzMjB0MTUxLjUgNDkuNVQxMDEyIDQ5OXE4IDI2IDMyIDM4dDQ5IDQgMzctMzEuNSA0LTQ4LjV6TTY0MCA4OTZxMC01My0zNy41LTkwLjVUNTEyIDc2OHQtOTAuNSAzNy41VDM4NCA4OTZ0MzcuNSA5MC41VDUxMiAxMDI0dDkwLjUtMzcuNVQ2NDAgODk2em01MTIgMHEwLTUzLTM3LjUtOTAuNVQxMDI0IDc2OHQtOTAuNSAzNy41VDg5NiA4OTZ0MzcuNSA5MC41IDkwLjUgMzcuNSA5MC41LTM3LjVUMTE1MiA4OTZ6bTI1Ni0yNTZxMCAxMzAtNTEgMjQ4LjV0LTEzNi41IDIwNC0yMDQgMTM2LjUtMjQ4LjUgNTEtMjQ4LjUtNTEtMjA0LTEzNi41LTEzNi41LTIwNFQxMjggNjQwdDUxLTI0OC41IDEzNi41LTIwNFQ1MTkuNSA1MSA3NjggMHQyNDguNSA1MSAyMDQgMTM2LjUgMTM2LjUgMjA0IDUxIDI0OC41em0xMjggMHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZnJvd24iIHVuaWNvZGU9Iu+EmSIgZD0iTTExMzQgMzA3cTgtMjUtNC00OC41dC0zNy0zMS41LTQ5IDQtMzIgMzhxLTI1IDgwLTkyLjUgMTI5LjVUNzY4IDQ0OHQtMTUxLjUtNDkuNVQ1MjQgMjY5cS04LTI2LTMxLjUtMzh0LTQ4LjUtNHEtMjYgOC0zOCAzMS41dC00IDQ4LjVxMzcgMTIxIDEzOCAxOTV0MjI4IDc0IDIyOC03NCAxMzgtMTk1ek02NDAgODk2cTAtNTMtMzcuNS05MC41VDUxMiA3Njh0LTkwLjUgMzcuNVQzODQgODk2dDM3LjUgOTAuNVQ1MTIgMTAyNHQ5MC41LTM3LjVUNjQwIDg5NnptNTEyIDBxMC01My0zNy41LTkwLjVUMTAyNCA3Njh0LTkwLjUgMzcuNVQ4OTYgODk2dDM3LjUgOTAuNSA5MC41IDM3LjUgOTAuNS0zNy41VDExNTIgODk2em0yNTYtMjU2cTAgMTMwLTUxIDI0OC41dC0xMzYuNSAyMDQtMjA0IDEzNi41LTI0OC41IDUxLTI0OC41LTUxLTIwNC0xMzYuNS0xMzYuNS0yMDRUMTI4IDY0MHQ1MS0yNDguNSAxMzYuNS0yMDRUNTE5LjUgNTEgNzY4IDB0MjQ4LjUgNTEgMjA0IDEzNi41IDEzNi41IDIwNCA1MSAyNDguNXptMTI4IDBxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Im1laCIgdW5pY29kZT0i74SaIiBkPSJNMTE1MiA0NDhxMC0yNi0xOS00NXQtNDUtMTlINDQ4cS0yNiAwLTQ1IDE5dC0xOSA0NSAxOSA0NSA0NSAxOWg2NDBxMjYgMCA0NS0xOXQxOS00NXpNNjQwIDg5NnEwLTUzLTM3LjUtOTAuNVQ1MTIgNzY4dC05MC41IDM3LjVUMzg0IDg5NnQzNy41IDkwLjVUNTEyIDEwMjR0OTAuNS0zNy41VDY0MCA4OTZ6bTUxMiAwcTAtNTMtMzcuNS05MC41VDEwMjQgNzY4dC05MC41IDM3LjVUODk2IDg5NnQzNy41IDkwLjUgOTAuNSAzNy41IDkwLjUtMzcuNVQxMTUyIDg5NnptMjU2LTI1NnEwIDEzMC01MSAyNDguNXQtMTM2LjUgMjA0LTIwNCAxMzYuNS0yNDguNSA1MS0yNDguNS01MS0yMDQtMTM2LjUtMTM2LjUtMjA0VDEyOCA2NDB0NTEtMjQ4LjUgMTM2LjUtMjA0VDUxOS41IDUxIDc2OCAwdDI0OC41IDUxIDIwNCAxMzYuNSAxMzYuNSAyMDQgNTEgMjQ4LjV6bTEyOCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJnYW1lcGFkIiB1bmljb2RlPSLvhJsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNODMyIDQ0OHYxMjhxMCAxNC05IDIzdC0yMyA5SDYwOHYxOTJxMCAxNC05IDIzdC0yMyA5SDQ0OHEtMTQgMC0yMy05dC05LTIzVjYwOEgyMjRxLTE0IDAtMjMtOXQtOS0yM1Y0NDhxMC0xNCA5LTIzdDIzLTloMTkyVjIyNHEwLTE0IDktMjN0MjMtOWgxMjhxMTQgMCAyMyA5dDkgMjN2MTkyaDE5MnExNCAwIDIzIDl0OSAyM3ptNTc2LTY0cTAgNTMtMzcuNSA5MC41VDEyODAgNTEydC05MC41LTM3LjVUMTE1MiAzODR0MzcuNS05MC41VDEyODAgMjU2dDkwLjUgMzcuNVQxNDA4IDM4NHptMjU2IDI1NnEwIDUzLTM3LjUgOTAuNVQxNTM2IDc2OHQtOTAuNS0zNy41VDE0MDggNjQwdDM3LjUtOTAuNVQxNTM2IDUxMnQ5MC41IDM3LjVUMTY2NCA2NDB6bTI1Ni0xMjhxMC0yMTItMTUwLTM2MlQxNDA4IDBxLTE5MiAwLTMzOCAxMjhIODUwUTcwNCAwIDUxMiAwIDMwMCAwIDE1MCAxNTBUMCA1MTJ0MTUwIDM2MiAzNjIgMTUwaDg5NnEyMTIgMCAzNjItMTUwdDE1MC0zNjJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImtleWJvYXJkIiB1bmljb2RlPSLvhJwiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMzg0IDM2OHYtOTZxMC0xNi0xNi0xNmgtOTZxLTE2IDAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2em0xMjggMjU2di05NnEwLTE2LTE2LTE2SDI3MnEtMTYgMC0xNiAxNnY5NnEwIDE2IDE2IDE2aDIyNHExNiAwIDE2LTE2ek0zODQgODgwdi05NnEwLTE2LTE2LTE2aC05NnEtMTYgMC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZ6bTEwMjQtNTEydi05NnEwLTE2LTE2LTE2SDUyOHEtMTYgMC0xNiAxNnY5NnEwIDE2IDE2IDE2aDg2NHExNiAwIDE2LTE2ek03NjggNjI0di05NnEwLTE2LTE2LTE2aC05NnEtMTYgMC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZ6TTY0MCA4ODB2LTk2cTAtMTYtMTYtMTZoLTk2cS0xNiAwLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNi0xNnptMzg0LTI1NnYtOTZxMC0xNi0xNi0xNmgtOTZxLTE2IDAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2ek04OTYgODgwdi05NnEwLTE2LTE2LTE2aC05NnEtMTYgMC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZ6bTM4NC0yNTZ2LTk2cTAtMTYtMTYtMTZoLTk2cS0xNiAwLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNi0xNnptMzg0LTI1NnYtOTZxMC0xNi0xNi0xNmgtOTZxLTE2IDAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2em0tNTEyIDUxMnYtOTZxMC0xNi0xNi0xNmgtOTZxLTE2IDAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2em0yNTYgMHYtOTZxMC0xNi0xNi0xNmgtOTZxLTE2IDAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2em0yNTYgMFY1MjhxMC0xNi0xNi0xNmgtMjI0cS0xNiAwLTE2IDE2djk2cTAgMTYgMTYgMTZoMTEydjI0MHEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZ6bTEyOC03NTJ2ODk2SDEyOFYxMjhoMTY2NHptMTI4IDg5NlYxMjhxMC01My0zNy41LTkwLjVUMTc5MiAwSDEyOFE3NSAwIDM3LjUgMzcuNVQwIDEyOHY4OTZxMCA1MyAzNy41IDkwLjVUMTI4IDExNTJoMTY2NHE1MyAwIDkwLjUtMzcuNXQzNy41LTkwLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZsYWdfYWx0IiB1bmljb2RlPSLvhJ0iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCA0OTF2NjE2cS0xNjktOTEtMzA2LTkxLTgyIDAtMTQ1IDMyLTEwMCA0OS0xODQgNzYuNVQ4NTEgMTE1MnEtMTczIDAtNDAzLTEyN1Y0MjZxMjQ1IDExMyA0MzMgMTEzIDU1IDAgMTAzLjUtNy41dDk4LTI2IDc3LTMxVDEyNDIgNDM1bDI4LTE0cTQ0LTIyIDEwMS0yMiAxMjAgMCAyOTMgOTJ6TTMyMCAxMjgwcTAtMzUtMTcuNS02NHQtNDYuNS00NlYtOTZxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjEyNjZxLTI5IDE3LTQ2LjUgNDZUNjQgMTI4MHEwIDUzIDM3LjUgOTAuNVQxOTIgMTQwOHQ5MC41LTM3LjVUMzIwIDEyODB6bTE0NzItNjRWNDUzcTAtMzktMzUtNTctMTAtNS0xNy05LTIxOC0xMTYtMzY5LTExNi04OCAwLTE1OCAzNWwtMjggMTRxLTY0IDMzLTk5IDQ4dC05MSAyOS0xMTQgMTRxLTEwMiAwLTIzNS41LTQ0VDQxNyAyNjVxLTE1LTktMzMtOS0xNiAwLTMyIDgtMzIgMTktMzIgNTZ2NzQycTAgMzUgMzEgNTUgMzUgMjEgNzguNSA0Mi41dDExNCA1MlQ2OTYgMTI2MXQxNTUgMTlxMTEyIDAgMjA5LTMxdDIwOS04NnEzOC0xOSA4OS0xOSAxMjIgMCAzMTAgMTEyIDIyIDEyIDMxIDE3IDMxIDE2IDYyLTIgMzEtMjAgMzEtNTV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZsYWdfY2hlY2tlcmVkIiB1bmljb2RlPSLvhJ4iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODMyIDUzNnYxOTJxLTE4MS0xNi0zODQtMTE3VjQyNnEyMDUgOTYgMzg0IDExMHptMCA0MTh2MTk3cS0xNzItOC0zODQtMTI2VjgzNnEyMTUgMTExIDM4NCAxMTh6bTgzMi00NjN2MTg0cS0yMzUtMTE2LTM4NC03MXYyMjRxLTIwIDYtMzkgMTUtNSAzLTMzIDE3dC0zNC41IDE3LTMxLjUgMTUtMzQuNSAxNS41LTMyLjUgMTMtMzYgMTIuNS0zNSA4LjUtMzkuNSA3LjUtMzkuNSA0LTQ0IDJxLTIzIDAtNDktM1Y3MzBoMTlxMTAyIDAgMTkyLjUtMjl0MTk3LjUtODJxMTktOSAzOS0xNVY0MTZxNDItMTcgOTEtMTcgMTIwIDAgMjkzIDkyem0wIDQyN3YxODlxLTE2OS05MS0zMDYtOTEtNDUgMC03OCA4VjgyOHExNDgtNDIgMzg0IDkwek0zMjAgMTI4MHEwLTM1LTE3LjUtNjR0LTQ2LjUtNDZWLTk2cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3YxMjY2cS0yOSAxNy00Ni41IDQ2VDY0IDEyODBxMCA1MyAzNy41IDkwLjVUMTkyIDE0MDh0OTAuNS0zNy41VDMyMCAxMjgwem0xNDcyLTY0VjQ1M3EwLTM5LTM1LTU3LTEwLTUtMTctOS0yMTgtMTE2LTM2OS0xMTYtODggMC0xNTggMzVsLTI4IDE0cS02NCAzMy05OSA0OHQtOTEgMjktMTE0IDE0cS0xMDIgMC0yMzUuNS00NFQ0MTcgMjY1cS0xNS05LTMzLTktMTYgMC0zMiA4LTMyIDE5LTMyIDU2djc0MnEwIDM1IDMxIDU1IDM1IDIxIDc4LjUgNDIuNXQxMTQgNTJUNjk2IDEyNjF0MTU1IDE5cTExMiAwIDIwOS0zMXQyMDktODZxMzgtMTkgODktMTkgMTIyIDAgMzEwIDExMiAyMiAxMiAzMSAxNyAzMSAxNiA2Mi0yIDMxLTIwIDMxLTU1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0ZXJtaW5hbCIgdW5pY29kZT0i74SgIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTU4NSA1NTNMMTE5IDg3cS0xMC0xMC0yMy0xMFQ3MyA4N2wtNTAgNTBxLTEwIDEwLTEwIDIzdDEwIDIzbDM5MyAzOTNMMjMgOTY5cS0xMCAxMC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMy0xMGw0NjYtNDY2cTEwLTEwIDEwLTIzdC0xMC0yM3pNMTY2NCA5NlYzMnEwLTE0LTktMjN0LTIzLTlINjcycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTYwcTE0IDAgMjMtOXQ5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb2RlIiB1bmljb2RlPSLvhKEiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNjE3IDEzN2wtNTAtNTBxLTEwLTEwLTIzLTEwdC0yMyAxMEw1NSA1NTNxLTEwIDEwLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMtMTBsNTAtNTBxMTAtMTAgMTAtMjN0LTEwLTIzTDIyNCA1NzZsMzkzLTM5M3ExMC0xMCAxMC0yM3QtMTAtMjN6bTU5MSAxMDY3TDgzNS04N3EtNC0xMy0xNS41LTE5LjVUNzk2LTEwOWwtNjIgMTdxLTEzIDQtMTkuNSAxNS41VDcxMi01MmwzNzMgMTI5MXE0IDEzIDE1LjUgMTkuNXQyMy41IDIuNWw2Mi0xN3ExMy00IDE5LjUtMTUuNXQyLjUtMjQuNXptNjU3LTY1MUwxMzk5IDg3cS0xMC0xMC0yMy0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMC0xMCAyM3QxMCAyM2wzOTMgMzkzLTM5MyAzOTNxLTEwIDEwLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzLTEwbDQ2Ni00NjZxMTAtMTAgMTAtMjN0LTEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJyZXBseV9hbGwiIHVuaWNvZGU9Iu+EoiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NDAgNDU0di03MHEwLTQyLTM5LTU5LTEzLTUtMjUtNS0yNyAwLTQ1IDE5TDE5IDg1MVEwIDg3MCAwIDg5NnQxOSA0NWw1MTIgNTEycTI5IDMxIDcwIDE0IDM5LTE3IDM5LTU5di02OUwyNDMgOTQxcS0xOS0xOS0xOS00NXQxOS00NXptMTE1Mi0zOHEwLTU4LTE3LTEzMy41dC0zOC41LTEzOC00OC0xMjVUMTY0OC03MWwtMjAtNDBxLTgtMTctMjgtMTctNiAwLTkgMS0yNSA4LTIzIDM0IDQzIDQwMC0xMDYgNTY1LTY0IDcxLTE3MC41IDExMC41VDEwMjQgNjM1VjM4NHEwLTQyLTM5LTU5LTEzLTUtMjUtNS0yNyAwLTQ1IDE5TDQwMyA4NTFxLTE5IDE5LTE5IDQ1dDE5IDQ1bDUxMiA1MTJxMjkgMzEgNzAgMTQgMzktMTcgMzktNTl2LTI2MnE0MTEtMjggNTk5LTIyMSAxNjktMTczIDE2OS01MDl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InN0YXJfaGFsZl9lbXB0eSIgdW5pY29kZT0i74SjIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExODYgNTc5bDI1NyAyNTAtMzU2IDUyLTY2IDEwLTMwIDYwLTE1OSAzMjJWMzEwbDU5LTMxIDMxOC0xNjgtNjAgMzU1LTEyIDY2em00NTIgMjYybC0zNjMtMzU0IDg2LTUwMHE1LTMzLTYtNTEuNVQxMzIxLTgzcS0xNyAwLTQwIDEyTDgzMiAxNjUgMzgzLTcxcS0yMy0xMi00MC0xMi0yMyAwLTM0IDE4LjVUMzAzLTEzbDg2IDUwMEwyNSA4NDFxLTMyIDMyLTIzIDU5LjVUNTYgOTM1bDUwMiA3MyAyMjUgNDU1cTIwIDQxIDQ5IDQxIDI4IDAgNDktNDFsMjI1LTQ1NSA1MDItNzNxNDUtNyA1NC0zNC41dC0yNC01OS41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsb2NhdGlvbl9hcnJvdyIgdW5pY29kZT0i74SkIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDEgMTE4N0w3NjEtOTNxLTE3LTM1LTU3LTM1LTUgMC0xNSAyLTIyIDUtMzUuNSAyMi41VDY0MC02NHY1NzZINjRxLTIyIDAtMzkuNSAxMy41VDIgNTYxdDQgNDIgMjkgMzBsMTI4MCA2NDBxMTMgNyAyOSA3IDI3IDAgNDUtMTkgMTUtMTQgMTguNS0zNC41dC02LjUtMzkuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY3JvcCIgdW5pY29kZT0i74SlIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTU1NyAyNTZoNTk1djU5NXptLTQ1IDQ1bDU5NSA1OTVINTEyVjMwMXptMTE1Mi03N1YzMnEwLTE0LTktMjN0LTIzLTloLTIyNHYtMjI0cTAtMTQtOS0yM3QtMjMtOWgtMTkycS0xNCAwLTIzIDl0LTkgMjNWMEgyODhxLTE0IDAtMjMgOXQtOSAyM3Y4NjRIMzJxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0djIyNHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjN2LTIyNGg4NTFsMjQ2IDI0N3ExMCA5IDIzIDl0MjMtOXE5LTEwIDktMjN0LTktMjNsLTI0Ny0yNDZWMjU2aDIyNHExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY29kZV9mb3JrIiB1bmljb2RlPSLvhKYiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMjg4IDY0cTAgNDAtMjggNjh0LTY4IDI4LTY4LTI4LTI4LTY4IDI4LTY4IDY4LTI4IDY4IDI4IDI4IDY4em0wIDExNTJxMCA0MC0yOCA2OHQtNjggMjgtNjgtMjgtMjgtNjggMjgtNjggNjgtMjggNjggMjggMjggNjh6bTY0MC0xMjhxMCA0MC0yOCA2OHQtNjggMjgtNjgtMjgtMjgtNjggMjgtNjggNjgtMjggNjggMjggMjggNjh6bTk2IDBxMC01Mi0yNi05Ni41VDkyOCA5MjJxLTItMjg3LTIyNi00MTQtNjctMzgtMjAzLTgxLTEyOC00MC0xNjkuNS03MVQyODggMjU2di0yNnE0NC0yNSA3MC02OS41VDM4NCA2NHEwLTgwLTU2LTEzNnQtMTM2LTU2VDU2LTcyIDAgNjRxMCA1MiAyNiA5Ni41VDk2IDIzMHY4MjBxLTQ0IDI1LTcwIDY5LjVUMCAxMjE2cTAgODAgNTYgMTM2dDEzNiA1NiAxMzYtNTYgNTYtMTM2cTAtNTItMjYtOTYuNXQtNzAtNjkuNVY1NTNxNTQgMjYgMTU0IDU3IDU1IDE3IDg3LjUgMjkuNXQ3MC41IDMxIDU5IDM5LjUgNDAuNSA1MSAyOCA2OS41VDczNiA5MjJxLTQ0IDI1LTcwIDY5LjV0LTI2IDk2LjVxMCA4MCA1NiAxMzZ0MTM2IDU2IDEzNi01NiA1Ni0xMzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVubGluayIgdW5pY29kZT0i74SnIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTQzOSAyNjVMMTgzIDlxLTExLTktMjMtOXQtMjMgOXEtOSAxMC05IDIzdDkgMjNsMjU2IDI1NnExMCA5IDIzIDl0MjMtOXE5LTEwIDktMjN0LTktMjN6bTE2OS00MVYtOTZxMC0xNC05LTIzdC0yMy05LTIzIDktOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDkgMjMtOSA5LTIzek0zODQgNDQ4cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5dC05IDIzIDkgMjMgMjMgOWgzMjBxMTQgMCAyMy05dDktMjN6bTEyNjQtMTI4cTAtMTIwLTg1LTIwM0wxNDE2LTI5cS04My04My0yMDMtODMtMTIxIDAtMjA0IDg1TDY3NSAzMDhxLTIxIDIxLTQyIDU2bDIzOSAxOCAyNzMtMjc0cTI3LTI3IDY4LTI3LjV0NjggMjYuNWwxNDcgMTQ2cTI4IDI4IDI4IDY3IDAgNDAtMjggNjhsLTI3NCAyNzUgMTggMjM5cTM1LTIxIDU2LTQybDMzNi0zMzZxODQtODYgODQtMjA0em0tNjE3IDcyNGwtMjM5LTE4LTI3MyAyNzRxLTI4IDI4LTY4IDI4LTM5IDAtNjgtMjdsLTE0Ny0xNDZxLTI4LTI4LTI4LTY3IDAtNDAgMjgtNjhsMjc0LTI3NC0xOC0yNDBxLTM1IDIxLTU2IDQyTDEwMCA4ODRxLTg0IDg2LTg0IDIwNCAwIDEyMCA4NSAyMDNsMTQ3IDE0NnE4MyA4MyAyMDMgODMgMTIxIDAgMjA0LTg1bDMzNC0zMzVxMjEtMjEgNDItNTZ6bTYzMy04NHEwLTE0LTktMjN0LTIzLTloLTMyMHEtMTQgMC0yMyA5dC05IDIzIDkgMjMgMjMgOWgzMjBxMTQgMCAyMy05dDktMjN6bS01NDQgNTQ0di0zMjBxMC0xNC05LTIzdC0yMy05LTIzIDktOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDkgMjMtOSA5LTIzem00MDctMTUxbC0yNTYtMjU2cS0xMS05LTIzLTl0LTIzIDlxLTkgMTAtOSAyM3Q5IDIzbDI1NiAyNTZxMTAgOSAyMyA5dDIzLTlxOS0xMCA5LTIzdC05LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJxdWVzdGlvbiIgdW5pY29kZT0i74SoIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTcwNCAyODBWNDBxMC0xNi0xMi0yOFQ2NjQgMEg0MjRxLTE2IDAtMjggMTJ0LTEyIDI4djI0MHEwIDE2IDEyIDI4dDI4IDEyaDI0MHExNiAwIDI4LTEydDEyLTI4em0zMTYgNjAwcTAtNTQtMTUuNS0xMDF0LTM1LTc2LjUtNTUtNTkuNS01Ny41LTQzLjUtNjEtMzUuNXEtNDEtMjMtNjguNS02NVQ3MDAgNDMycTAtMTctMTItMzIuNVQ2NjAgMzg0SDQyMHEtMTUgMC0yNS41IDE4LjVUMzg0IDQ0MHY0NXEwIDgzIDY1IDE1Ni41VDU5MiA3NTBxNTkgMjcgODQgNTZ0MjUgNzZxMCA0Mi00Ni41IDc0VDU0NyA5ODhxLTY1IDAtMTA4LTI5LTM1LTI1LTEwNy0xMTUtMTMtMTYtMzEtMTYtMTIgMC0yNSA4TDExMiA5NjFxLTEzIDEwLTE1LjUgMjV0NS41IDI4cTE2MCAyNjYgNDY0IDI2NiA4MCAwIDE2MS0zMXQxNDYtODMgMTA2LTEyNy41IDQxLTE1OC41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMjc5IiB1bmljb2RlPSLvhKkiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik02NDAgMTkyVjY0cTAtMjYtMTktNDVUNTc2IDBINjRRMzggMCAxOSAxOVQwIDY0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0djM4NEg2NHEtMjYgMC00NSAxOVQwIDcwNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NS0xOXQxOS00NVYyNTZoNjRxMjYgMCA0NS0xOXQxOS00NXpNNTEyIDEzNDR2LTE5MnEwLTI2LTE5LTQ1dC00NS0xOUgxOTJxLTI2IDAtNDUgMTl0LTE5IDQ1djE5MnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJleGNsYW1hdGlvbiIgdW5pY29kZT0i74SqIiBob3Jpei1hZHYteD0iNjQwIiBkPSJNNTEyIDI4OFY2NHEwLTI2LTE5LTQ1VDQ0OCAwSDE5MnEtMjYgMC00NSAxOXQtMTkgNDV2MjI0cTAgMjYgMTkgNDV0NDUgMTloMjU2cTI2IDAgNDUtMTl0MTktNDV6bTMwIDEwNTZsLTI4LTc2OHEtMS0yNi0yMC41LTQ1VDQ0OCA1MTJIMTkycS0yNiAwLTQ1LjUgMTlUMTI2IDU3NmwtMjggNzY4cS0xIDI2IDE3LjUgNDV0NDQuNSAxOWgzMjBxMjYgMCA0NC41LTE5dDE3LjUtNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InN1cGVyc2NyaXB0IiB1bmljb2RlPSLvhKsiIGQ9Ik04OTcgMTY3VjBINjQ5TDQ5MCAyNTJsLTI0IDQycS04IDktMTEgMjFoLTNxLTEtMy0yLjUtNi41dC0zLjUtOC0zLTYuNXEtMTAtMjAtMjUtNDRMMjYzIDBINXYxNjdoMTI4bDE5NyAyOTEtMTg1IDI3Mkg4djE2OGgyNzZsMTM5LTIyOHEyLTQgMjMtNDIgOC05IDExLTIxaDNxMyA5IDExIDIxbDI1IDQyIDE0MCAyMjhoMjU3VjczMEg3NjhMNTg0IDQ2M2wyMDQtMjk2aDEwOXptNjM3IDY3OVY2NDBoLTUxNGwtMyAyN3EtNCAyOC00IDQ2IDAgNjQgMjYgMTE3dDY1IDg2LjUgODQgNjUgODQgNTQuNSA2NSA1NCAyNiA2NHEwIDM4LTI5LjUgNjIuNVQxMjYzIDEyNDFxLTUxIDAtOTctMzktMTQtMTEtMzYtMzhsLTEwNSA5MnEyNiAzNyA2MyA2NiA4MyA2NSAxODggNjUgMTEwIDAgMTc4LTU5LjV0NjgtMTU4LjVxMC01Ni0yNC41LTEwM3QtNjItNzYuNVQxMzU0IDkzMXQtODItNTAuNS02NS41LTUxLjUtMzAuNS02M2gyMzJ2ODBoMTI2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdWJzY3JpcHQiIHVuaWNvZGU9Iu+ErCIgZD0iTTg5NyAxNjdWMEg2NDlMNDkwIDI1MmwtMjQgNDJxLTggOS0xMSAyMWgtM3EtMS0zLTIuNS02LjV0LTMuNS04LTMtNi41cS0xMC0yMC0yNS00NEwyNjMgMEg1djE2N2gxMjhsMTk3IDI5MS0xODUgMjcySDh2MTY4aDI3NmwxMzktMjI4cTItNCAyMy00MiA4LTkgMTEtMjFoM3EzIDkgMTEgMjFsMjUgNDIgMTQwIDIyOGgyNTdWNzMwSDc2OEw1ODQgNDYzbDIwNC0yOTZoMTA5em02MzktMjE3di0yMDZoLTUxNGwtNCAyN3EtMyA0NS0zIDQ2IDAgNjQgMjYgMTE3dDY1IDg2LjUgODQgNjUgODQgNTQuNSA2NSA1NCAyNiA2NHEwIDM4LTI5LjUgNjIuNVQxMjY1IDM0NXEtNTEgMC05Ny0zOS0xNC0xMS0zNi0zOGwtMTA1IDkycTI2IDM3IDYzIDY2IDgwIDY1IDE4OCA2NSAxMTAgMCAxNzgtNTkuNXQ2OC0xNTguNXEwLTY2LTM0LjUtMTE4LjV0LTg0LTg2VDEzMDYgNnQtODctNjMtNDEtNzNoMjMydjgwaDEyNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzI4MyIgdW5pY29kZT0i74StIiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTg5NiAxMjhsMzM2IDM4NEg0NjRMMTI4IDEyOGg3Njh6bTEwMTMgMTA3N3ExNS0zNCA5LjUtNzEuNVQxODg4IDEwNjhMOTkyIDQ0UTk1NCAwIDg5NiAwSDEyOFE5MCAwIDU4LjUgMjAuNVQxMSA3NXEtMTUgMzQtOS41IDcxLjVUMzIgMjEybDg5NiAxMDI0cTM4IDQ0IDk2IDQ0aDc2OHEzOCAwIDY5LjUtMjAuNXQ0Ny41LTU0LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InB1enpsZV9waWVjZSIgdW5pY29kZT0i74SuIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgNDM4cTAtODEtNDQuNS0xMzVUMTQ5NiAyNDlxLTQxIDAtNzcuNSAxNy41dC01OSAzOC01Ni41IDM4LTcxIDE3LjVxLTExMCAwLTExMC0xMjQgMC0zOSAxNi0xMTV0MTUtMTE1VjFxLTIyIDAtMzMtMS0zNC0zLTk3LjUtMTEuNVQ5MDctMjV0LTk4LTVxLTYxIDAtMTAzIDI2LjVUNjY0IDgwcTAgMzcgMTcuNSA3MXQzOCA1Ni41IDM4IDU5VDc3NSAzNDRxMCA3OS01NCAxMjMuNVQ1ODYgNTEycS04NCAwLTE0My00NS41VDM4NCAzMzlxMC00MyAxNS04M3QzMy41LTY0LjUgMzMuNS01M1Q0ODEgODhxMC00NS00Ni04OS0zNy0zNS0xMTctMzUtOTUgMC0yNDUgMjQtOSAyLTI3LjUgNFQxOC00TDUtMlE0LTIgMi0xIDAtMSAwIDB2MTAyNHEyLTEgMTcuNS0zLjV0MzQtNVQ3MyAxMDEycTE1MC0yNCAyNDUtMjQgODAgMCAxMTcgMzUgNDYgNDQgNDYgODkgMCAyMi0xNSA1MC41dC0zMy41IDUzVDM5OSAxMjgwdC0xNSA4M3EwIDgyIDU5IDEyNy41dDE0NCA0NS41cTgwIDAgMTM0LTQ0LjV0NTQtMTIzLjVxMC00MS0xNy41LTc3LjV0LTM4LTU5LTM4LTU2LjUtMTcuNS03MXEwLTU3IDQyLTgzLjVUODA5IDk5NHE2NCAwIDE4MCAxNXQxNjMgMTd2LTJxLTEtMi0zLjUtMTcuNXQtNS0zNC0zLjUtMjEuNXEtMjQtMTUwLTI0LTI0NSAwLTgwIDM1LTExNyA0NC00NiA4OS00NiAyMiAwIDUwLjUgMTV0NTMgMzMuNVQxNDA4IDYyNXQ4MyAxNXE4MiAwIDEyNy41LTU5dDQ1LjUtMTQzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJtaWNyb3Bob25lIiB1bmljb2RlPSLvhLAiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTE1MiA4MzJWNzA0cTAtMjIxLTE0Ny41LTM4NC41VDY0MCAxMzJWMGgyNTZxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOUgyNTZxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDI1NnYxMzJxLTIxNyAyNC0zNjQuNSAxODcuNVQwIDcwNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOSAxOS00NVY3MDRxMC0xODUgMTMxLjUtMzE2LjVUNTc2IDI1NnQzMTYuNSAxMzEuNVQxMDI0IDcwNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOSA0NS0xOSAxOS00NXptLTI1NiAzODRWNzA0cTAtMTMyLTk0LTIyNnQtMjI2LTk0LTIyNiA5NC05NCAyMjZ2NTEycTAgMTMyIDk0IDIyNnQyMjYgOTQgMjI2LTk0IDk0LTIyNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWljcm9waG9uZV9vZmYiIHVuaWNvZGU9Iu+EsSIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0yNzEgNTkxTDE3MCA0OTBxLTQyIDEwMy00MiAyMTR2MTI4cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTkgMTktNDVWNzA0cTAtNTMgMTUtMTEzem0xMTE0IDYwMmwtMzYxLTM2MVY3MDRxMC0xMzItOTQtMjI2dC0yMjYtOTRxLTU1IDAtMTA5IDE5bC05Ni05NnE5Ny01MSAyMDUtNTEgMTg1IDAgMzE2LjUgMTMxLjVUMTE1MiA3MDR2MTI4cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTkgMTktNDVWNzA0cTAtMjIxLTE0Ny41LTM4NC41VDc2OCAxMzJWMGgyNTZxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOUgzODRxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDI1NnYxMzJxLTEyNSAxMy0yMzUgODFMMTUxLTQxcS0xMC0xMC0yMy0xMHQtMjMgMTBMMjMgNDFRMTMgNTEgMTMgNjR0MTAgMjNsMTIzNCAxMjM0cTEwIDEwIDIzIDEwdDIzLTEwbDgyLTgycTEwLTEwIDEwLTIzdC0xMC0yM3ptLTM4MCAxMzJMMzg0IDcwNHY1MTJxMCAxMzIgOTQgMjI2dDIyNiA5NHExMDIgMCAxODQuNS01OXQxMTYuNS0xNTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNoaWVsZCIgdW5pY29kZT0i74SyIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwODggNTc2djY0MEg2NDBWNzlxMTE5IDYzIDIxMyAxMzcgMjM1IDE4NCAyMzUgMzYwem0xOTIgNzY4VjU3NnEwLTg2LTMzLjUtMTcwLjV0LTgzLTE1MC0xMTgtMTI3LjVUOTE5IDI1IDc5OC01Mi41IDcwOC41LTEwMiA2NjYtMTIycS0xMi02LTI2LTZ0LTI2IDZxLTE2IDctNDIuNSAyMFQ0ODItNTIuNSAzNjEgMjUgMjM0LjUgMTI4dC0xMTggMTI3LjUtODMgMTUwVDAgNTc2djc2OHEwIDI2IDE5IDQ1dDQ1IDE5aDExNTJxMjYgMCA0NS0xOXQxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY2FsZW5kYXJfZW1wdHkiIHVuaWNvZGU9Iu+EsyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMjgtMTI4aDE0MDhWODk2SDEyOFYtMTI4em0zODQgMTIxNnYyODhxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi0yODhxMC0xNCA5LTIzdDIzLTloNjRxMTQgMCAyMyA5dDkgMjN6bTc2OCAwdjI4OHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMzg0IDY0Vi0xMjhxMC01Mi0zOC05MHQtOTAtMzhIMTI4cS01MiAwLTkwIDM4VDAtMTI4djEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMy00N3Q0Ny0xMTN2LTk2aDEyOHE1MiAwIDkwLTM4dDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaXJlX2V4dGluZ3Vpc2hlciIgdW5pY29kZT0i74S0IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTUxMiAxMzQ0cTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em04OTYgMzJ2LTMyMHEwLTE2LTEyLTI1LTgtNy0yMC03LTQgMC03IDFsLTQ0OCA5NnEtMTEgMi0xOCAxMXQtNyAyMEg2NDB2LTEwMnExMTEtMjMgMTgzLjUtMTExVDg5NiA3MzZWLTY0cTAtMjYtMTktNDV0LTQ1LTE5SDMyMHEtMjYgMC00NSAxOXQtMTkgNDV2ODAwcTAgMTA2IDYyLjUgMTkwLjVUNDgwIDEwNDF2MTExaC0zMnEtNTkgMC0xMTUtMjMuNXQtOTEuNS01My02Ni02Ni41LTQwLjUtNTMuNS0xNC0yNC41cS0xNy0zNS01Ny0zNS0xNiAwLTI5IDctMjMgMTItMzEuNSAzN1Q3IDk4OXE1IDEwIDE0LjUgMjZ0MzcuNSA1My41IDYwLjUgNzAgODUgNjdUMzEzIDEyNThxLTI1IDQyLTI1IDg2IDAgNjYgNDcgMTEzdDExMyA0NyAxMTMtNDcgNDctMTEzcTAtMzMtMTQtNjRoMzAycTAgMTEgNyAyMHQxOCAxMWw0NDggOTZxMyAxIDcgMSAxMiAwIDIwLTcgMTItOSAxMi0yNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0icm9ja2V0IiB1bmljb2RlPSLvhLUiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ0MCAxMDg4cTAgNDAtMjggNjh0LTY4IDI4LTY4LTI4LTI4LTY4IDI4LTY4IDY4LTI4IDY4IDI4IDI4IDY4em0yMjQgMjg4cTAtMjQ5LTc1LjUtNDMwLjVUMTMzNSA1ODVxLTgxLTgwLTE5NS0xNzZsLTIwLTM3OXEtMi0xNi0xNi0yNkw3MjAtMjIwcS03LTQtMTYtNC0xMiAwLTIzIDlsLTY0IDY0cS0xMyAxNC04IDMybDg1IDI3Ni0yODEgMjgxLTI3Ni04NXEtMy0xLTktMS0xNCAwLTIzIDlsLTY0IDY0cS0xNyAxOS01IDM5bDIyNCAzODRxMTAgMTQgMjYgMTZsMzc5IDIwcTk2IDExNCAxNzYgMTk1IDE4OCAxODcgMzU4IDI1OHQ0MzEgNzFxMTQgMCAyNC05LjV0MTAtMjIuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWF4Y2RuIiB1bmljb2RlPSLvhLYiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc0NSA3NjNMMTU4MSAwaC0zMzRsMTc4IDgzMnExMyA1Ni0xNSA4OC0yNyAzMy04MyAzM2gtMTY5TDk1NCAwSDYyMGwyMDQgOTUzSDUzOEwzMzQgMEgwbDIwNCA5NTMtMTUzIDMyN2gxMjc2cTEwMSAwIDE4OS41LTQwLjVUMTY2NCAxMTI2cTYwLTczIDgxLTE2OC41dDAtMTk0LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl9sZWZ0IiB1bmljb2RlPSLvhLciIGQ9Ik05MDkgMTQxbDEwMiAxMDJxMTkgMTkgMTkgNDV0LTE5IDQ1TDcwNCA2NDBsMzA3IDMwN3ExOSAxOSAxOSA0NXQtMTkgNDVsLTEwMiAxMDJxLTE5IDE5LTQ1IDE5dC00NS0xOUwzNjUgNjg1cS0xOS0xOS0xOS00NXQxOS00NWw0NTQtNDU0cTE5LTE5IDQ1LTE5dDQ1IDE5em02MjcgNDk5cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaGV2cm9uX3NpZ25fcmlnaHQiIHVuaWNvZGU9Iu+EuCIgZD0iTTcxNyAxNDFsNDU0IDQ1NHExOSAxOSAxOSA0NXQtMTkgNDVsLTQ1NCA0NTRxLTE5IDE5LTQ1IDE5dC00NS0xOWwtMTAyLTEwMnEtMTktMTktMTktNDV0MTktNDVsMzA3LTMwNy0zMDctMzA3cS0xOS0xOS0xOS00NXQxOS00NWwxMDItMTAycTE5LTE5IDQ1LTE5dDQ1IDE5em04MTkgNDk5cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaGV2cm9uX3NpZ25fdXAiIHVuaWNvZGU9Iu+EuSIgZD0iTTExNjUgMzk3bDEwMiAxMDJxMTkgMTkgMTkgNDV0LTE5IDQ1bC00NTQgNDU0cS0xOSAxOS00NSAxOXQtNDUtMTlMMjY5IDU4OXEtMTktMTktMTktNDV0MTktNDVsMTAyLTEwMnExOS0xOSA0NS0xOXQ0NSAxOWwzMDcgMzA3IDMwNy0zMDdxMTktMTkgNDUtMTl0NDUgMTl6bTM3MSAyNDNxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl9kb3duIiB1bmljb2RlPSLvhLoiIGQ9Ik04MTMgMjM3bDQ1NCA0NTRxMTkgMTkgMTkgNDV0LTE5IDQ1bC0xMDIgMTAycS0xOSAxOS00NSAxOXQtNDUtMTlMNzY4IDU3NiA0NjEgODgzcS0xOSAxOS00NSAxOXQtNDUtMTlMMjY5IDc4MXEtMTktMTktMTktNDV0MTktNDVsNDU0LTQ1NHExOS0xOSA0NS0xOXQ0NSAxOXptNzIzIDQwM3EwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaHRtbDUiIHVuaWNvZGU9Iu+EuyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMTMwIDkzOWwxNiAxNzVIMjYybDQ3LTUzNGg2MTJsLTIyLTIyOC0xOTctNTMtMTk2IDUzLTEzIDE0MEgzMThsMjItMjc4IDM2Mi0xMDBoNHYxbDM1OSA5OSA1MCA1NDRINDcxbC0xNSAxODFoNjc0ek0wIDE0MDhoMTQwOEwxMjgwLTMwIDcwMi0xOTIgMTI4LTMweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjc3MzIiB1bmljb2RlPSLvhLwiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMjc1IDE0MDhoMTUwNUwxNTE0IDc1IDcxMC0xOTIgMTIgNzVsNzEgMzU2aDI5N2wtMjktMTQ3IDQyMi0xNjEgNDg2IDE2MSA2OCAzMzlIMTE5bDU4IDI5N2gxMjA5bDM4IDE5MUgyMTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImFuY2hvciIgdW5pY29kZT0i74S9IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTk2MCAxMjgwcTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1IDE5LTQ1IDQ1LTE5IDQ1IDE5IDE5IDQ1em04MzItOTI4VjBxMC0yMi0yMC0zMC04LTItMTItMi0xMiAwLTIzIDlsLTkzIDkzcS0xMTktMTQzLTMxOC41LTIyNi41VDg5Ni0yNDB0LTQyOS41IDgzLjVUMTQ4IDcwTDU1LTIzcS05LTktMjMtOS00IDAtMTIgMlEwLTIyIDAgMHYzNTJxMCAxNCA5IDIzdDIzIDloMzUycTIyIDAgMzAtMjAgOC0xOS03LTM1TDMwNyAyMjlxNjctOTEgMTg5LjUtMTUzLjVUNzY4LTd2NjQ3SDU3NnEtMjYgMC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTkydjE2M3EtNTggMzQtOTMgOTIuNVQ2NDAgMTI4MHEwIDEwNiA3NSAxODF0MTgxIDc1IDE4MS03NSA3NS0xODFxMC03MC0zNS0xMjguNXQtOTMtOTIuNVY4OTZoMTkycTI2IDAgNDUtMTl0MTktNDVWNzA0cTAtMjYtMTktNDV0LTQ1LTE5aC0xOTJWLTdxMTQ5IDIwIDI3MS41IDgyLjVUMTQ4NSAyMjlsLTEwMCAxMDBxLTE1IDE2LTcgMzUgOCAyMCAzMCAyMGgzNTJxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVubG9ja19hbHQiIHVuaWNvZGU9Iu+EviIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDU2IDc2OHE0MCAwIDY4LTI4dDI4LTY4Vjk2cTAtNDAtMjgtNjh0LTY4LTI4SDk2UTU2IDAgMjggMjhUMCA5NnY1NzZxMCA0MCAyOCA2OHQ2OCAyOGgzMnYzMjBxMCAxODUgMTMxLjUgMzE2LjVUNTc2IDE1MzZ0MzE2LjUtMTMxLjVUMTAyNCAxMDg4cTAtMjYtMTktNDV0LTQ1LTE5aC02NHEtMjYgMC00NSAxOXQtMTkgNDVxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MVY3NjhoNzM2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJidWxsc2V5ZSIgdW5pY29kZT0i74WAIiBkPSJNMTAyNCA2NDBxMC0xMDYtNzUtMTgxdC0xODEtNzUtMTgxIDc1LTc1IDE4MSA3NSAxODEgMTgxIDc1IDE4MS03NSA3NS0xODF6bTEyOCAwcTAgMTU5LTExMi41IDI3MS41VDc2OCAxMDI0IDQ5Ni41IDkxMS41IDM4NCA2NDB0MTEyLjUtMjcxLjVUNzY4IDI1NnQyNzEuNSAxMTIuNVQxMTUyIDY0MHptMTI4IDBxMC0yMTItMTUwLTM2MlQ3NjggMTI4IDQwNiAyNzggMjU2IDY0MHQxNTAgMzYyIDM2MiAxNTAgMzYyLTE1MCAxNTAtMzYyem0xMjggMHEwIDEzMC01MSAyNDguNXQtMTM2LjUgMjA0LTIwNCAxMzYuNS0yNDguNSA1MS0yNDguNS01MS0yMDQtMTM2LjUtMTM2LjUtMjA0VDEyOCA2NDB0NTEtMjQ4LjUgMTM2LjUtMjA0VDUxOS41IDUxIDc2OCAwdDI0OC41IDUxIDIwNCAxMzYuNSAxMzYuNSAyMDQgNTEgMjQ4LjV6bTEyOCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJlbGxpcHNpc19ob3Jpem9udGFsIiB1bmljb2RlPSLvhYEiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMzg0IDgwMFY2MDhxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMCA2MDh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjgtMjh0MjgtNjh6bTUxMiAwVjYwOHEwLTQwLTI4LTY4dC02OC0yOEg2MDhxLTQwIDAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4LTI4dDI4LTY4em01MTIgMFY2MDhxMC00MC0yOC02OHQtNjgtMjhoLTE5MnEtNDAgMC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjgtMjh0MjgtNjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImVsbGlwc2lzX3ZlcnRpY2FsIiB1bmljb2RlPSLvhYIiIGhvcml6LWFkdi14PSIzODQiIGQ9Ik0zODQgMjg4Vjk2cTAtNDAtMjgtNjhUMjg4IDBIOTZRNTYgMCAyOCAyOFQwIDk2djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4LTI4dDI4LTY4em0wIDUxMlY2MDhxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMCA2MDh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjgtMjh0MjgtNjh6bTAgNTEydi0xOTJxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDE5MnE0MCAwIDY4LTI4dDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzAzIiB1bmljb2RlPSLvhYMiIGQ9Ik01MTIgMjU2cTAgNTMtMzcuNSA5MC41VDM4NCAzODR0LTkwLjUtMzcuNVQyNTYgMjU2dDM3LjUtOTAuNVQzODQgMTI4dDkwLjUgMzcuNVQ1MTIgMjU2em0zNTEtOTRxLTEzIDIzMy0xNzYuNSAzOTYuNVQyOTAgNzM1cS0xNCAxLTI0LTl0LTEwLTIzVjU3NXEwLTEzIDguNS0yMnQyMS41LTEwcTE1NC0xMSAyNjQtMTIxdDEyMS0yNjRxMS0xMyAxMC0yMS41dDIyLTguNWgxMjhxMTMgMCAyMyAxMHQ5IDI0em0zODQtMXEtNSAxNTQtNTYgMjk3LjV0LTEzOS41IDI2MC0yMDUgMjA1LTI2MCAxMzkuNS0yOTcuNSA1NnEtMTQgMS0yMy05LTEwLTEwLTEwLTIzVjk1OXEwLTEzIDktMjJ0MjItMTBxMjA0LTcgMzc4LTExMS41VDk0My41IDUzNyAxMDU1IDE1OXExLTEzIDEwLTIydDIyLTloMTI4cTEzIDAgMjMgMTAgMTEgOSA5IDIzem0yODkgOTU5VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InBsYXlfc2lnbiIgdW5pY29kZT0i74WEIiBkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUtMTAzdDI3OS41LTI3OS41VDE1MzYgNjQwdC0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4em0zODQtODIzcTMyIDE4IDMyIDU1dC0zMiA1NWwtNTQ0IDMyMHEtMzEgMTktNjQgMS0zMi0xOS0zMi01NlYzMjBxMC0zNyAzMi01NiAxNi04IDMyLTggMTcgMCAzMiA5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0aWNrZXQiIHVuaWNvZGU9Iu+FhSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMDI0IDEwODRsMzE2LTMxNi01NzItNTcyLTMxNiAzMTZ6TTgxMyAxMDVsNjE4IDYxOHExOSAxOSAxOSA0NXQtMTkgNDVsLTM2MiAzNjJxLTE4IDE4LTQ1IDE4dC00NS0xOEwzNjEgNTU3cS0xOS0xOS0xOS00NXQxOS00NWwzNjItMzYycTE4LTE4IDQ1LTE4dDQ1IDE4em04ODkgNjM3TDc5NS0xNjZxLTM3LTM3LTkwLjUtMzdUNjE0LTE2Nkw0ODgtNDBxNTYgNTYgNTYgMTM2dC01NiAxMzYtMTM2IDU2LTEzNi01Nkw5MSAzNThxLTM3IDM3LTM3IDkwLjVUOTEgNTM5bDkwNyA5MDZxMzcgMzcgOTAuNSAzN3Q5MC41LTM3bDEyNS0xMjVxLTU2LTU2LTU2LTEzNnQ1Ni0xMzYgMTM2LTU2IDEzNiA1NmwxMjYtMTI1cTM3LTM3IDM3LTkwLjV0LTM3LTkwLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Im1pbnVzX3NpZ25fYWx0IiB1bmljb2RlPSLvhYYiIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNi0xOSA0NXQtNDUgMTlIMzIwcS0yNiAwLTQ1LTE5dC0xOS00NVY1NzZxMC0yNiAxOS00NXQ0NS0xOWg4OTZxMjYgMCA0NSAxOXQxOSA0NXptMjU2IDU0NFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVja19taW51cyIgdW5pY29kZT0i74WHIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTExNTIgNzM2di02NHEwLTE0LTktMjN0LTIzLTlIMjg4cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloODMycTE0IDAgMjMtOXQ5LTIzem0xMjgtNDQ4djgzMnEwIDY2LTQ3IDExM3QtMTEzIDQ3SDI4OHEtNjYgMC0xMTMtNDd0LTQ3LTExM1YyODhxMC02NiA0Ny0xMTN0MTEzLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN6bTEyOCA4MzJWMjg4cTAtMTE5LTg0LjUtMjAzLjVUMTEyMCAwSDI4OFExNjkgMCA4NC41IDg0LjVUMCAyODh2ODMycTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoODMycTExOSAwIDIwMy41LTg0LjVUMTQwOCAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsZXZlbF91cCIgdW5pY29kZT0i74WIIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMTggOTMzcS0xOC0zNy01OC0zN0g3NjhWMzJxMC0xNC05LTIzdC0yMy05SDMyUTExIDAgMyAxOHEtOCAyMCA0IDM1bDE2MCAxOTJxOSAxMSAyNSAxMWgzMjB2NjQwSDMyMHEtNDAgMC01OCAzNy0xNyAzNyA5IDY4bDMyMCAzODRxMTggMjIgNDkgMjJ0NDktMjJsMzIwLTM4NHEyNy0zMiA5LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsZXZlbF9kb3duIiB1bmljb2RlPSLvhYkiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMzIgMTI4MGg3MDRxMTMgMCAyMi41LTkuNXQ5LjUtMjMuNVYzODRoMTkycTQwIDAgNTgtMzd0LTktNjlMNjg5LTEwNnEtMTgtMjItNDktMjJ0LTQ5IDIyTDI3MSAyNzhxLTI2IDMxLTkgNjkgMTggMzcgNTggMzdoMTkydjY0MEgxOTJxLTE0IDAtMjUgMTFMNyAxMjI3cS0xMyAxNC00IDM0IDkgMTkgMjkgMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImNoZWNrX3NpZ24iIHVuaWNvZGU9Iu+FiiIgZD0iTTY4NSAyMzdsNjE0IDYxNHExOSAxOSAxOSA0NXQtMTkgNDVsLTEwMiAxMDJxLTE5IDE5LTQ1IDE5dC00NS0xOUw2NDAgNTc2IDQyOSA3ODdxLTE5IDE5LTQ1IDE5dC00NS0xOUwyMzcgNjg1cS0xOS0xOS0xOS00NXQxOS00NWwzNTgtMzU4cTE5LTE5IDQ1LTE5dDQ1IDE5em04NTEgODgzVjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImVkaXRfc2lnbiIgdW5pY29kZT0i74WLIiBkPSJNNDA0IDQyOGwxNTItMTUyLTUyLTUyaC01NnY5NmgtOTZ2NTZ6bTQxNCAzOTBxMTQtMTMtMy0zMEw1MjQgNDk3cS0xNy0xNy0zMC0zLTE0IDEzIDMgMzBsMjkxIDI5MXExNyAxNyAzMCAzek01NDQgMTI4bDU0NCA1NDQtMjg4IDI4OC01NDQtNTQ0VjEyOGgyODh6bTYwOCA2MDhsOTIgOTJxMjggMjggMjggNjh0LTI4IDY4bC0xNTIgMTUycS0yOCAyOC02OCAyOHQtNjgtMjhsLTkyLTkyem0zODQgMzg0VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zMTIiIHVuaWNvZGU9Iu+FjCIgZD0iTTEyODAgNjA4djQ4MHEwIDI2LTE5IDQ1dC00NSAxOUg3MzZxLTQyIDAtNTktMzktMTctNDEgMTQtNzBsMTQ0LTE0NC01MzQtNTM0cS0xOS0xOS0xOS00NXQxOS00NWwxMDItMTAycTE5LTE5IDQ1LTE5dDQ1IDE5bDUzNCA1MzQgMTQ0LTE0NHExOC0xOSA0NS0xOSAxMiAwIDI1IDUgMzkgMTcgMzkgNTl6bTI1NiA1MTJWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic2hhcmVfc2lnbiIgdW5pY29kZT0i74WNIiBkPSJNMTAwNSA0MzVsMzUyIDM1MnExOSAxOSAxOSA0NXQtMTkgNDVsLTM1MiAzNTJxLTMwIDMxLTY5IDE0LTQwLTE3LTQwLTU5di0xNjBxLTExOSAwLTIxNi0xOS41dC0xNjIuNS01MS0xMTQtNzlUMzI3IDc3OXQtNDQuNS0xMDlUMjYxIDU1OC41IDI1NiA0NDhxMC0xODEgMTY3LTQwNCAxMS0xMiAyNS0xMiA3IDAgMTMgMyAyMiA5IDE5IDMzLTQ0IDM1NCA2MiA0NzMgNDYgNTIgMTMwIDc1LjVUODk2IDY0MFY0ODBxMC00MiA0MC01OSAxMi01IDI0LTUgMjYgMCA0NSAxOXptNTMxIDY4NVYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb21wYXNzIiB1bmljb2RlPSLvhY4iIGQ9Ik02NDAgNDQ4bDI1NiAxMjgtMjU2IDEyOFY0NDh6bTM4NCA1OTFWNDk3TDUxMiAyNDF2NTQyem0yODgtMzk5cTAgMTQ4LTczIDI3M3QtMTk4IDE5OC0yNzMgNzMtMjczLTczLTE5OC0xOTgtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzN6bTIyNCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJjb2xsYXBzZSIgdW5pY29kZT0i74WQIiBkPSJNMTE0NSA4NjFxMTgtMzUtNS02Nkw4MjAgMzQ3cS0xOS0yNy01Mi0yN3QtNTIgMjdMMzk2IDc5NXEtMjMgMzEtNSA2NiAxNyAzNSA1NyAzNWg2NDBxNDAgMCA1Ny0zNXptMTM1LTcwMXY5NjBxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMjg4cS0xMyAwLTIyLjUtOS41VDI1NiAxMTIwVjE2MHEwLTEzIDkuNS0yMi41VDI4OCAxMjhoOTYwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6bTI1NiA5NjBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iY29sbGFwc2VfdG9wIiB1bmljb2RlPSLvhZEiIGQ9Ik0xMTQ1IDQxOXEtMTctMzUtNTctMzVINDQ4cS00MCAwLTU3IDM1LTE4IDM1IDUgNjZsMzIwIDQ0OHExOSAyNyA1MiAyN3Q1Mi0yN2wzMjAtNDQ4cTIzLTMxIDUtNjZ6bTEzNS0yNTl2OTYwcTAgMTMtOS41IDIyLjV0LTIyLjUgOS41SDI4OHEtMTMgMC0yMi41LTkuNVQyNTYgMTEyMFYxNjBxMC0xMyA5LjUtMjIuNVQyODggMTI4aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0yNTYgOTYwVjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zMTciIHVuaWNvZGU9Iu+FkiIgZD0iTTEwODggNjQwcTAtMzMtMjctNTJMNjEzIDI2OHEtMzEtMjMtNjYtNS0zNSAxNy0zNSA1N3Y2NDBxMCA0MCAzNSA1NyAzNSAxOCA2Ni01bDQ0OC0zMjBxMjctMTkgMjctNTJ6bTE5Mi00ODB2OTYwcTAgMTQtOSAyM3QtMjMgOUgyODhxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloOTYwcTE0IDAgMjMgOXQ5IDIzem0yNTYgOTYwVjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImV1ciIgdW5pY29kZT0i74WTIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTk3NiAyMjlsMzUtMTU5cTMtMTItMy0yMi41VDk5MSAzM2wtNS0xcS00LTItMTAuNS0zLjV0LTE2LTQuNS0yMS41LTUuNS0yNS41LTUtMzAtNVQ4NDkgNHQtMzYuNS0zVDc3NCAwUTU0MCAwIDM2NSAxMzAuNVQxMjcgNDgySDMycS0xMyAwLTIyLjUgOS41VDAgNTE0djExM3EwIDEzIDkuNSAyMi41VDMyIDY1OWg2NnEtMiA1NyAxIDEwNUgzMnEtMTQgMC0yMyA5dC05IDIzdjExNHEwIDE0IDkgMjN0MjMgOWg5OHE2NyAyMTAgMjQzLjUgMzM4VDc3NCAxNDA4cTEwMiAwIDE5NC0yMyAxMS0zIDIwLTE1IDYtMTEgMy0yNGwtNDMtMTU5cS0zLTEzLTE0LTE5LjV0LTI0LTIuNWwtNCAxcS00IDEtMTEuNSAyLjVMODc3IDExNzJsLTIyLjUgMy41LTI2IDMtMjkgMi41LTI5LjUgMXEtMTI2IDAtMjI2LTY0VDM5NCA5NDJoNDY4cTE2IDAgMjUtMTIgMTAtMTIgNy0yNmwtMjQtMTE0cS01LTI2LTMyLTI2SDM1MHEtMy0zNyAwLTEwNWg0NTlxMTUgMCAyNS0xMiA5LTEyIDYtMjdsLTI0LTExMnEtMi0xMS0xMS0xOC41dC0yMC03LjVIMzk4cTQ4LTExNyAxNDkuNS0xODUuNVQ3NzYgMjI4cTE4IDAgMzYgMS41dDMzLjUgMy41IDI5LjUgNC41IDI0LjUgNVQ5MTggMjQ3bDEyIDMgNSAycTEzIDUgMjYtMiAxMi03IDE1LTIxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJnYnAiIHVuaWNvZGU9Iu+FlCIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDIwIDM5OVYzMnEwLTE0LTktMjN0LTIzLTlIMzJRMTggMCA5IDlUMCAzMnYxNTBxMCAxMyA5LjUgMjIuNVQzMiAyMTRoOTd2MzgzSDM0cS0xNCAwLTIzIDkuNVQyIDYyOXYxMzFxMCAxNCA5IDIzdDIzIDloOTV2MjIzcTAgMTcxIDEyMy41IDI4MlQ1NjcgMTQwOHExODUgMCAzMzUtMTI1IDktOCAxMC0yMC41dC03LTIyLjVsLTEwMy0xMjdxLTktMTEtMjItMTItMTMtMi0yMyA3LTUgNS0yNiAxOXQtNjkgMzItOTMgMThxLTg1IDAtMTM3LTQ3dC01Mi0xMjNWNzkyaDMwNXExMyAwIDIyLjUtOXQ5LjUtMjNWNjI5cTAtMTMtOS41LTIyLjVUNjg1IDU5N0gzODBWMjE4aDQxNHYxODFxMCAxMyA5IDIyLjV0MjMgOS41aDE2MnExNCAwIDIzLTkuNXQ5LTIyLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVzZCIgdW5pY29kZT0i74WVIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTk3OCAzNTFxMC0xNTMtOTkuNS0yNjMuNVQ2MjAtNDl2LTE3NXEwLTE0LTktMjN0LTIzLTlINDUzcS0xMyAwLTIyLjUgOS41VDQyMS0yMjR2MTc1cS02NiA5LTEyNy41IDMxVDE5MiAyNi41dC03NCA0OFQ3MS41IDExMiA1NCAxMzBxLTE3IDIxLTIgNDFsMTAzIDEzNXE3IDEwIDIzIDEyIDE1IDIgMjQtOWwyLTJxMTEzLTk5IDI0My0xMjUgMzctOCA3NC04IDgxIDAgMTQyLjUgNDNUNzI1IDMzOXEwIDI4LTE1IDUzdC0zMy41IDQyLTU4LjUgMzcuNS02NiAzMi04MCAzMi41cS0zOSAxNi02MS41IDI1VDM0OSA1ODcuNXQtNjIuNSAzMVQyMzAgNjU0dC01My41IDQyLjUtNDMuNSA0OS0zNS41IDU4LTIxIDY2LjUtOC41IDc4cTAgMTM4IDk4IDI0MnQyNTUgMTM0djE4MHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNXExNCAwIDIzLTl0OS0yM3YtMTc2cTU3LTYgMTEwLjUtMjN0ODctMzMuNVQ4ODEgMTIzNHQzOS0yOSAxNS0xNHExNy0xOCA1LTM4bC04MS0xNDZxLTgtMTUtMjMtMTYtMTQtMy0yNyA3LTMgMy0xNC41IDEydC0zOSAyNi41LTU4LjUgMzItNzQuNSAyNlQ1MzcgMTEwNnEtOTUgMC0xNTUtNDN0LTYwLTExMXEwLTI2IDguNS00OHQyOS41LTQxLjUgMzkuNS0zMyA1Ni0zMSA2MC41LTI3IDcwLTI3LjVxNTMtMjAgODEtMzEuNXQ3Ni0zNSA3NS41LTQyLjUgNjItNTAgNTMtNjMuNVQ5NjUgNDQ1dDEzLTk0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJpbnIiIHVuaWNvZGU9Iu+FliIgaG9yaXotYWR2LXg9Ijg5OCIgZD0iTTg5OCAxMDY2Vjk2NHEwLTE0LTktMjN0LTIzLTlINjk4cS0yMy0xNDQtMTI5LTIzNFQyOTMgNTg4UTQ2MCA0MTAgNzUyIDUycTE0LTE2IDQtMzQtOC0xOC0yOS0xOEg1MzJxLTE2IDAtMjUgMTJRMjAxIDM3OSA5IDU4M3EtOSA5LTkgMjJ2MTI3cTAgMTMgOS41IDIyLjVUMzIgNzY0aDExMnExMzIgMCAyMTIuNSA0M1Q0NTkgOTMySDMycS0xNCAwLTIzIDl0LTkgMjN2MTAycTAgMTQgOSAyM3QyMyA5aDQxM3EtNTcgMTEzLTI2OCAxMTNIMzJxLTEzIDAtMjIuNSA5LjVUMCAxMjQzdjEzM3EwIDE0IDkgMjN0MjMgOWg4MzJxMTQgMCAyMy05dDktMjN2LTEwMnEwLTE0LTktMjN0LTIzLTlINjMxcTQ3LTYxIDY0LTE0NGgxNzFxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImpweSIgdW5pY29kZT0i74WXIiBob3Jpei1hZHYteD0iMTAyNyIgZD0iTTYwMyAwSDQzMXEtMTMgMC0yMi41IDlUMzk5IDMydjMzMEgxMTFxLTEzIDAtMjIuNSA5VDc5IDM5NHYxMDNxMCAxMyA5LjUgMjIuNVQxMTEgNTI5aDI4OHY4NUgxMTFxLTEzIDAtMjIuNSA5VDc5IDY0NnYxMDRxMCAxMyA5LjUgMjIuNVQxMTEgNzgyaDIxNEw0IDEzNjBxLTggMTYgMCAzMiAxMCAxNiAyOCAxNmgxOTRxMTkgMCAyOS0xOGwyMTUtNDI1cTE5LTM4IDU2LTEyNSAxMCAyNCAzMC41IDY4dDI3LjUgNjFsMTkxIDQyMHE4IDE5IDI5IDE5aDE5MXExNyAwIDI3LTE2IDktMTQgMS0zMUw3MTAgNzgyaDIxNXExMyAwIDIyLjUtOS41VDk1NyA3NTBWNjQ2cTAtMTQtOS41LTIzdC0yMi41LTlINjM1di04NWgyOTBxMTMgMCAyMi41LTkuNVQ5NTcgNDk3VjM5NHEwLTE0LTkuNS0yM3QtMjIuNS05SDYzNVYzMnEwLTEzLTkuNS0yMi41VDYwMyAweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJydWIiIHVuaWNvZGU9Iu+FmCIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMDQzIDk3MXEwIDEwMC02NSAxNjJ0LTE3MSA2Mkg0ODdWNzQ3aDMyMHExMDYgMCAxNzEgNjJ0NjUgMTYyem0yMzcgMHEwLTE5My0xMjYuNS0zMTVUODI3IDUzNEg0ODdWNDE2aDUwNXExNCAwIDIzLTl0OS0yM1YyNTZxMC0xNC05LTIzdC0yMy05SDQ4N1YzMnEwLTE0LTkuNS0yM1Q0NTUgMEgyODhxLTE0IDAtMjMgOXQtOSAyM3YxOTJIMzJxLTE0IDAtMjMgOXQtOSAyM3YxMjhxMCAxNCA5IDIzdDIzIDloMjI0djExOEgzMnEtMTQgMC0yMyA5dC05IDIzdjE0OXEwIDEzIDkgMjIuNXQyMyA5LjVoMjI0djYyOXEwIDE0IDkgMjN0MjMgOWg1MzlxMjAwIDAgMzI2LjUtMTIyVDEyODAgOTcxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJrcnciIHVuaWNvZGU9Iu+FmSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01MTQgMzQxbDgxIDI5OUg0MzZsNzUtMzAwcTEtMSAxLTN0MS0zcTAgMSAuNSAzLjV0LjUgMy41em0xMTYgNDI3bDM1IDEyOEgzNzNsMzItMTI4aDIyNXptMTkyIDBoMTM5bC0zNSAxMjhoLTcwem00NDktNDI4bDc4IDMwMGgtMTYybDgxLTI5OXEwLTEgLjUtMy41dDEuNS0zLjVxMCAxIC41IDN0LjUgM3ptMTExIDQyOGwzMyAxMjhoLTI5N2wzNC0xMjhoMjMwem00MTAtMzJ2LTY0cTAtMTQtOS0yM3QtMjMtOWgtMjEzTDEzODMgMjRxLTctMjQtMzEtMjRoLTE1OXEtMjQgMC0zMSAyNEw5OTYgNjQwSDc4N0w2MjAgMjRxLTctMjQtMzEtMjRINDMwcS0xMSAwLTE5LjUgN1Q0MDAgMjRMMjQwIDY0MEgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3NWwtMzMgMTI4SDMycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTA5bC04OSAzNDRxLTUgMTUgNSAyOCAxMCAxMiAyNiAxMmgxMzdxMjYgMCAzMS0yNGw5MC0zNjBoMzU5bDk3IDM2MHE3IDI0IDMxIDI0aDEyNnEyNCAwIDMxLTI0bDk4LTM2MGgzNjVsOTMgMzYwcTUgMjQgMzEgMjRoMTM3cTE2IDAgMjYtMTIgMTAtMTMgNS0yOGwtOTEtMzQ0aDExMXExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05aC0xNDVsLTM0LTEyOGgxNzlxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImJ0YyIgdW5pY29kZT0i74WaIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNjcgODk2cTE4LTE4Mi0xMzEtMjU4IDExNy0yOCAxNzUtMTAzdDQ1LTIxNHEtNy03MS0zMi41LTEyNXQtNjQuNS04OS05Ny01OC41VDk0MC41IDE0IDc5NS0xdi0yNTVINjQxVi01cS04MCAwLTEyMiAxdi0yNTJIMzY1Vi0xcS0xOCAwLTU0IC41VDI1NiAwSDU2bDMxIDE4M2gxMTFxNTAgMCA1OCA1MXY0MDJoMTZxLTYgMS0xNiAxdjI4N3EtMTMgNjgtODkgNjhINTZ2MTY0bDIxMi0xcTY0IDAgOTcgMXYyNTJoMTU0di0yNDdxODIgMiAxMjIgMnYyNDVoMTU0di0yNTJxNzktNyAxNDAtMjIuNXQxMTMtNDUgODIuNS03OFQxMTY3IDg5NnpNOTUyIDM1MXEwIDM2LTE1IDY0dC0zNyA0Ni01Ny41IDMwLjVUNzc3IDUxMHQtNzQgOS02OSAzLTY0LjUtMS00Ny41LTFWMTgycTggMCAzNy0uNXQ0OC0uNSA1MyAxLjUgNTguNSA0IDU3IDguNSA1NS41IDE0IDQ3LjUgMjEgMzkuNSAzMCAyNC41IDQwIDkuNSA1MXptLTcxIDQ3NnEwIDMzLTEyLjUgNTguNXQtMzAuNSA0Mi00OCAyOC01NSAxNi41LTYxLjUgOC01OCAyLjUtNTQtMS0zOS41LS41VjY3NHE1IDAgMzQuNS0uNXQ0Ni41IDAgNTAgMiA1NSA1LjUgNTEuNSAxMSA0OC41IDE4LjUgMzcgMjcgMjcgMzguNSA5IDUxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlIiB1bmljb2RlPSLvhZsiIGQ9Ik0xMDI0IDEwMjR2NDcycTIyLTE0IDM2LTI4bDQwOC00MDhxMTQtMTQgMjgtMzZoLTQ3MnptLTEyOC0zMnEwLTQwIDI4LTY4dDY4LTI4aDU0NFYtMTYwcTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMTYwdjE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4MDBWOTkyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlX3RleHQiIHVuaWNvZGU9Iu+FnCIgZD0iTTE0NjggMTA2MHExNC0xNCAyOC0zNmgtNDcydjQ3MnEyMi0xNCAzNi0yOHpNOTkyIDg5Nmg1NDRWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwLTE2MHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODAwVjk5MnEwLTQwIDI4LTY4dDY4LTI4em0xNjAtNzM2djY0cTAgMTQtOSAyM3QtMjMgOUg0MTZxLTE0IDAtMjMtOXQtOS0yM3YtNjRxMC0xNCA5LTIzdDIzLTloNzA0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDlINDE2cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDcwNHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5SDQxNnEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg3MDRxMTQgMCAyMyA5dDkgMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNvcnRfYnlfYWxwaGFiZXQiIHVuaWNvZGU9Iu+FnSIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTkxIDExMjhoMTc3bC03MiAyMTgtMTIgNDdxLTIgMTYtMiAyMGgtNGwtMy0yMHEwLTEtMy41LTE4dC03LjUtMjl6TTczNiA5NnEwLTEyLTEwLTI0TDQwNy0yNDdxLTEwLTktMjMtOS0xMiAwLTIzIDlMNDEgNzNxLTE1IDE2LTcgMzUgOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjNWMTI4aDE5MnExNCAwIDIzLTl0OS0yM3ptODM2LTExOXYtMjMzSDk4OHY5MGwzNjkgNTI5cTEyIDE4IDIxIDI3bDExIDl2M3EtMiAwLTYuNS0uNXQtNy41LS41cS0xMi0zLTMwLTNoLTIzMlYyODNIOTkzdjIyOWg1Njd2LTg5bC0zNjktNTMwcS02LTgtMjEtMjZsLTExLTExdi0ybDE0IDJxOSAyIDMwIDJoMjQ4djExOWgxMjF6bTg5IDg5N1Y3NjhoLTI4OHYxMDZoNzVsLTQ3IDE0NGgtMjQzbC00Ny0xNDRoNzVWNzY4SDg5OXYxMDZoNzBsMjMwIDY2MmgxNjJsMjMwLTY2Mmg3MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzMyOSIgdW5pY29kZT0i74WeIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExOTEgMTA0aDE3N2wtNzIgMjE4LTEyIDQ3cS0yIDE2LTIgMjBoLTRsLTMtMjBxMC0xLTMuNS0xOHQtNy41LTI5em0tNDU1LThxMC0xMi0xMC0yNEw0MDctMjQ3cS0xMC05LTIzLTktMTIgMC0yMyA5TDQxIDczcS0xNSAxNi03IDM1IDggMjAgMzAgMjBoMTkydjEzNzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzVjEyOGgxOTJxMTQgMCAyMy05dDktMjN6bTkyNS0yNDZ2LTEwNmgtMjg4djEwNmg3NUwxNDAxLTZoLTI0M2wtNDctMTQ0aDc1di0xMDZIODk5djEwNmg3MGwyMzAgNjYyaDE2MmwyMzAtNjYyaDcwem0tODkgMTE1MVY3NjhIOTg4djkwbDM2OSA1MjlxMTIgMTggMjEgMjdsMTEgOXYzcS0yIDAtNi41LS41dC03LjUtLjVxLTEyLTMtMzAtM2gtMjMydi0xMTVIOTkzdjIyOWg1Njd2LTg5bC0zNjktNTMwcS02LTgtMjEtMjZsLTExLTEwdi0zbDE0IDNxOSAxIDMwIDFoMjQ4djExOWgxMjF6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNvcnRfYnlfYXR0cmlidXRlcyIgdW5pY29kZT0i74WgIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTczNiA5NnEwLTEyLTEwLTI0TDQwNy0yNDdxLTEwLTktMjMtOS0xMiAwLTIzIDlMNDEgNzNxLTE1IDE2LTcgMzUgOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMy05dDktMjNWMTI4aDE5MnExNCAwIDIzLTl0OS0yM3pNMTc5Mi0zMnYtMTkycTAtMTQtOS0yM3QtMjMtOUg5MjhxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloODMycTE0IDAgMjMtOXQ5LTIzem0tMTkyIDUxMlYyODhxMC0xNC05LTIzdC0yMy05SDkyOHEtMTQgMC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg2NDBxMTQgMCAyMy05dDktMjN6bS0xOTIgNTEyVjgwMHEwLTE0LTktMjN0LTIzLTlIOTI4cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDQ0OHExNCAwIDIzLTl0OS0yM3ptLTE5MiA1MTJ2LTE5MnEwLTE0LTktMjN0LTIzLTlIOTI4cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDI1NnExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9ieV9hdHRyaWJ1dGVzX2FsdCIgdW5pY29kZT0i74WhIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyMTYtMzJ2LTE5MnEwLTE0LTktMjN0LTIzLTlIOTI4cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDI1NnExNCAwIDIzLTl0OS0yM3pNNzM2IDk2cTAtMTItMTAtMjRMNDA3LTI0N3EtMTAtOS0yMy05LTEyIDAtMjMgOUw0MSA3M3EtMTUgMTYtNyAzNSA4IDIwIDMwIDIwaDE5MnYxMzc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM1YxMjhoMTkycTE0IDAgMjMtOXQ5LTIzem02NzIgMzg0VjI4OHEwLTE0LTktMjN0LTIzLTlIOTI4cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDQ0OHExNCAwIDIzLTl0OS0yM3ptMTkyIDUxMlY4MDBxMC0xNC05LTIzdC0yMy05SDkyOHEtMTQgMC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg2NDBxMTQgMCAyMy05dDktMjN6bTE5MiA1MTJ2LTE5MnEwLTE0LTktMjN0LTIzLTlIOTI4cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDgzMnExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9ieV9vcmRlciIgdW5pY29kZT0i74WiIiBkPSJNMTM0NiAyMjNxMCA2My00NCAxMTZ0LTEwMyA1M3EtNTIgMC04My0zN3QtMzEtOTQgMzYuNS05NSAxMDQuNS0zOHE1MCAwIDg1IDI3dDM1IDY4ek03MzYgOTZxMC0xMi0xMC0yNEw0MDctMjQ3cS0xMC05LTIzLTktMTIgMC0yMyA5TDQxIDczcS0xNSAxNi03IDM1IDggMjAgMzAgMjBoMTkydjEzNzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzVjEyOGgxOTJxMTQgMCAyMy05dDktMjN6bTc1MCA2OXEwLTYyLTEzLTEyMS41dC00MS0xMTQtNjgtOTUuNS05OC41LTY1LjVUMTEzOC0yNTZxLTYyIDAtMTA4IDE2LTI0IDgtNDIgMTVsMzkgMTEzcTE1LTcgMzEtMTEgMzctMTMgNzUtMTMgODQgMCAxMzQuNSA1OC41VDEzMzQgNjhoLTJxLTIxLTIzLTYxLjUtMzdUMTE4NiAxN3EtMTA2IDAtMTczIDcxLjVUOTQ2IDI2MXEwIDEwNSA3MiAxNzh0MTgxIDczcTEyMyAwIDIwNS05NC41dDgyLTI1Mi41em0tMzAgNzE3Vjc2OEg5ODd2MTE0aDE2N3Y0MzJxMCA3IC41IDE5dC41IDE3djE2aC0ybC03LTEycS04LTEzLTI2LTMxbC02Mi01OC04MiA4NiAxOTIgMTg1aDEyM1Y4ODJoMTY1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X29yZGVyX2FsdCIgdW5pY29kZT0i74WjIiBkPSJNMTM0NiAxMjQ3cTAgNjMtNDQgMTE2dC0xMDMgNTNxLTUyIDAtODMtMzd0LTMxLTk0IDM2LjUtOTUgMTA0LjUtMzhxNTAgMCA4NSAyN3QzNSA2OHpNNzM2IDk2cTAtMTItMTAtMjRMNDA3LTI0N3EtMTAtOS0yMy05LTEyIDAtMjMgOUw0MSA3M3EtMTUgMTYtNyAzNSA4IDIwIDMwIDIwaDE5MnYxMzc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM1YxMjhoMTkycTE0IDAgMjMtOXQ5LTIzem03MjAtMjM4di0xMTRIOTg3djExNGgxNjd2NDMycTAgNyAuNSAxOXQuNSAxN3YxNmgtMmwtNy0xMnEtOC0xMy0yNi0zMWwtNjItNTgtODIgODYgMTkyIDE4NWgxMjN2LTY1NGgxNjV6bTMwIDEzMzFxMC02Mi0xMy0xMjEuNXQtNDEtMTE0LTY4LTk1LjUtOTguNS02NS41VDExMzggNzY4cS02MiAwLTEwOCAxNi0yNCA4LTQyIDE1bDM5IDExM3ExNS03IDMxLTExIDM3LTEzIDc1LTEzIDg0IDAgMTM0LjUgNTguNVQxMzM0IDEwOTJoLTJxLTIxLTIzLTYxLjUtMzd0LTg0LjUtMTRxLTEwNiAwLTE3MyA3MS41VDk0NiAxMjg1cTAgMTA1IDcyIDE3OHQxODEgNzNxMTIzIDAgMjA1LTk0LjV0ODItMjUyLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zMzQiIHVuaWNvZGU9Iu+FpCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0yNTYgMTkycTAgMjYtMTkgNDV0LTQ1IDE5cS0yNyAwLTQ1LjUtMTlUMTI4IDE5MnEwLTI3IDE4LjUtNDUuNVQxOTIgMTI4cTI2IDAgNDUgMTguNXQxOSA0NS41em0xNjAgNTEyVjY0cTAtMjYtMTktNDVUMzUyIDBINjRRMzggMCAxOSAxOVQwIDY0djY0MHEwIDI2IDE5IDQ1dDQ1IDE5aDI4OHEyNiAwIDQ1LTE5dDE5LTQ1em0xMTg0IDBxMC04Ni01NS0xNDkgMTUtNDQgMTUtNzYgMy03Ni00My0xMzcgMTctNTYgMC0xMTctMTUtNTctNTQtOTQgOS0xMTItNDktMTgxLTY0LTc2LTE5Ny03OGgtMTI5cS02NiAwLTE0NCAxNS41dC0xMjEuNSAyOVQ3MDItNDRRNTc5LTEgNTQ0IDBxLTI2IDEtNDUgMTkuNVQ0ODAgNjR2NjQxcTAgMjUgMTggNDMuNXQ0MyAyMC41cTI0IDIgNzYgNTl0MTAxIDEyMXE2OCA4NyAxMDEgMTIwIDE4IDE4IDMxIDQ4dDE3LjUgNDguNVQ4ODEgMTIyNnE3IDM5IDEyLjUgNjF0MTkuNSA1MiAzNCA1MHExOSAxOSA0NSAxOSA0NiAwIDgyLjUtMTAuNXQ2MC0yNiA0MC00MC41IDI0LTQ1IDEyLTUwIDUtNDUgLjUtMzlxMC0zOC05LjUtNzZ0LTE5LTYwLTI3LjUtNTZxLTMtNi0xMC0xOHQtMTEtMjItOC0yNGgyNzdxNzggMCAxMzUtNTd0NTctMTM1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzM1IiB1bmljb2RlPSLvhaUiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMjU2IDk2MHEwLTI2LTE5LTQ1dC00NS0xOXEtMjcgMC00NS41IDE5VDEyOCA5NjBxMCAyNyAxOC41IDQ1LjVUMTkyIDEwMjRxMjYgMCA0NS0xOC41dDE5LTQ1LjV6bTE2MC01MTJ2NjQwcTAgMjYtMTkgNDV0LTQ1IDE5SDY0cS0yNiAwLTQ1LTE5dC0xOS00NVY0NDhxMC0yNiAxOS00NXQ0NS0xOWgyODhxMjYgMCA0NSAxOXQxOSA0NXptMTEyOSAxNDlxNTUtNjEgNTUtMTQ5LTEtNzgtNTcuNS0xMzVUMTQwOCAyNTZoLTI3N3E0LTE0IDgtMjR0MTEtMjIgMTAtMThxMTgtMzcgMjctNTd0MTktNTguNVQxMjE2IDBxMC0yNC0uNS0zOXQtNS00NS0xMi01MC0yNC00NS00MC00MC41LTYwLTI2VDk5Mi0yNTZxLTI2IDAtNDUgMTktMjAgMjAtMzQgNTB0LTE5LjUgNTJUODgxLTc0cS05IDQyLTEzLjUgNjAuNVQ4NTAgMzV0LTMxIDQ4cS0zMyAzMy0xMDEgMTIwLTQ5IDY0LTEwMSAxMjF0LTc2IDU5cS0yNSAyLTQzIDIwLjVUNDgwIDQ0N3Y2NDFxMCAyNiAxOSA0NC41dDQ1IDE5LjVxMzUgMSAxNTggNDQgNzcgMjYgMTIwLjUgMzkuNXQxMjEuNSAyOSAxNDQgMTUuNWgxMjlxMTMzLTIgMTk3LTc4IDU4LTY5IDQ5LTE4MSAzOS0zNyA1NC05NCAxNy02MSAwLTExNyA0Ni02MSA0My0xMzcgMC0zMi0xNS03NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ieW91dHViZV9zaWduIiB1bmljb2RlPSLvhaYiIGQ9Ik05MTkgMjMzdjE1N3EwIDUwLTI5IDUwLTE3IDAtMzMtMTZWMjAwcTE2LTE2IDMzLTE2IDI5IDAgMjkgNDl6bTE4NCAxMjJoNjZ2MzRxMCA1MS0zMyA1MXQtMzMtNTF2LTM0ek01MzIgNjIxdi03MGgtODBWMTI4aC03NHY0MjNoLTc4djcwaDIzMnptMjAxLTEyNlYxMjhoLTY3djQwcS0zOS00NS03Ni00NS0zMyAwLTQyIDI4LTYgMTctNiA1NHYyOTBoNjZWMjI1cTAtMjQgMS0yNiAxLTE1IDE1LTE1IDIwIDAgNDIgMzF2MjgwaDY3em0yNTItMTExVjIzOHEwLTUyLTctNzMtMTItNDItNTMtNDItMzUgMC02OCA0MXYtMzZoLTY3djQ5M2g2N1Y0NjBxMzIgNDAgNjggNDAgNDEgMCA1My00MiA3LTIxIDctNzR6bTI1MS0xMjl2LTlxMC0yOS0yLTQzLTMtMjItMTUtNDAtMjctNDAtODAtNDAtNTIgMC04MSAzOC0yMSAyNy0yMSA4NnYxMjlxMCA1OSAyMCA4NiAyOSAzOCA4MCAzOHQ3OC0zOHEyMS0yOSAyMS04NnYtNzZoLTEzM3YtNjVxMC01MSAzNC01MSAyNCAwIDMwIDI2IDAgMSAuNSA3dC41IDE2LjVWMjU1aDY4em0tNDUxIDgyNFY5MjNxMC01MS0zMi01MXQtMzIgNTF2MTU2cTAgNTIgMzIgNTJ0MzItNTJ6bTUzMy03MTNxMCAxNzctMTkgMjYwLTEwIDQ0LTQzIDczLjV0LTc2IDM0LjVxLTEzNiAxNS00MTIgMTUtMjc1IDAtNDExLTE1LTQ0LTUtNzYuNS0zNC41VDIzOCA2MjZxLTIwLTg3LTIwLTI2MCAwLTE3NiAyMC0yNjAgMTAtNDMgNDIuNS03M1QzNTYtMnExMzctMTUgNDEyLTE1dDQxMiAxNXE0MyA1IDc1LjUgMzV0NDIuNSA3M3EyMCA4NCAyMCAyNjB6bS03NTUgNjUxbDkwIDI5NmgtNzVsLTUxLTE5NS01MyAxOTVoLTc4cTctMjMgMjMtNjlsMjQtNjlxMzUtMTAzIDQ2LTE1OFY4MTZoNzR2MjAxem0yODktODF2MTMwcTAgNTgtMjEgODctMjkgMzgtNzggMzgtNTEgMC03OC0zOC0yMS0yOS0yMS04N1Y5MzZxMC01OCAyMS04NyAyNy0zOCA3OC0zOCA0OSAwIDc4IDM4IDIxIDI3IDIxIDg3em0xODEtMTIwaDY3djM3MGgtNjdWOTAzcS0yMi0zMS00Mi0zMS0xNSAwLTE2IDE2LTEgMi0xIDI2djI3MmgtNjdWODkzcTAtMzcgNi01NSAxMS0yNyA0My0yNyAzNiAwIDc3IDQ1di00MHptNTAzIDMwNFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ5b3V0dWJlIiB1bmljb2RlPSLvhaciIGQ9Ik05NzEgMjkyVjgxcTAtNjctMzktNjctMjMgMC00NSAyMnYzMDFxMjIgMjIgNDUgMjIgMzkgMCAzOS02N3ptMzM4LTF2LTQ2aC05MHY0NnEwIDY4IDQ1IDY4dDQ1LTY4ek0zNDMgNTA5aDEwN3Y5NEgxMzh2LTk0aDEwNVYtNjBoMTAwdjU2OXpNNjMxLTYwaDg5djQ5NGgtODlWNTZxLTMwLTQyLTU3LTQyLTE4IDAtMjEgMjEtMSAzLTEgMzV2MzY0aC04OVY0M3EwLTQ5IDgtNzMgMTItMzcgNTgtMzcgNDggMCAxMDIgNjF2LTU0em00MjkgMTQ4djE5N3EwIDczLTkgOTktMTcgNTYtNzEgNTYtNTAgMC05My01NHYyMTdoLTg5Vi02MGg4OXY0OHE0NS01NSA5My01NSA1NCAwIDcxIDU1IDkgMjcgOSAxMDB6bTMzOCAxMHYxM2gtOTFxMC01MS0yLTYxLTctMzYtNDAtMzYtNDYgMC00NiA2OXY4N2gxNzl2MTAzcTAgNzktMjcgMTE2LTM5IDUxLTEwNiA1MS02OCAwLTEwNy01MS0yOC0zNy0yOC0xMTZWMTAwcTAtNzkgMjktMTE2IDM5LTUxIDEwOC01MSA3MiAwIDEwOCA1MyAxOCAyNyAyMSA1NCAyIDkgMiA1OHptLTYwOCA5MTN2MjEwcTAgNjktNDMgNjl0LTQzLTY5di0yMTBxMC03MCA0My03MHQ0MyA3MHptNzE5LTc1MXEwLTIzNC0yNi0zNTAtMTQtNTktNTgtOTl0LTEwMi00NnEtMTg0LTIxLTU1NS0yMXQtNTU1IDIxcS01OCA2LTEwMi41IDQ2VDUzLTkwUTI3IDIyIDI3IDI2MHEwIDIzNCAyNiAzNTAgMTQgNTkgNTggOTl0MTAzIDQ3cTE4MyAyMCA1NTQgMjB0NTU1LTIwcTU4LTcgMTAyLjUtNDd0NTcuNS05OXEyNi0xMTIgMjYtMzUwek01MTEgMTUzNmgxMDJsLTEyMS0zOTlWODY2SDM5MnYyNzFxLTE0IDc0LTYxIDIxMi0zNyAxMDMtNjUgMTg3aDEwNmw3MS0yNjN6bTM3MC0zMzN2LTE3NXEwLTgxLTI4LTExOC0zOC01MS0xMDYtNTEtNjcgMC0xMDUgNTEtMjggMzgtMjggMTE4djE3NXEwIDgwIDI4IDExNyAzOCA1MSAxMDUgNTEgNjggMCAxMDYtNTEgMjgtMzcgMjgtMTE3em0zMzUgMTYyVjg2NmgtOTF2NTVxLTUzLTYyLTEwMy02Mi00NiAwLTU5IDM3LTggMjQtOCA3NXYzOTRoOTFWOTk4cTAtMzMgMS0zNSAzLTIyIDIxLTIyIDI3IDAgNTcgNDN2MzgxaDkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ4aW5nIiB1bmljb2RlPSLvhagiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTk3IDg2OXEtMTAtMTgtMjU3LTQ1Ni0yNy00Ni02NS00NkgzNnEtMjEgMC0zMSAxN3QwIDM2bDI1MyA0NDhxMSAwIDAgMUw5NyAxMTQ4cS0xMiAyMi0xIDM3IDkgMTUgMzIgMTVoMjM5cTQwIDAgNjYtNDV6bTgwNiA2NDJxMTEtMTYgMC0zN0w4NzUgNTQwdi0xbDMzNi02MTVxMTEtMjAgMS0zNy0xMC0xNS0zMi0xNUg5NDFxLTQyIDAtNjYgNDVMNTM2IDUzOXExOCAzMiA1MzEgOTQyIDI1IDQ1IDY0IDQ1aDI0MXEyMiAwIDMxLTE1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ4aW5nX3NpZ24iIHVuaWNvZGU9Iu+FqSIgZD0iTTY4NSA3NzFxMCAxLTEyNiAyMjItMjEgMzQtNTIgMzRIMzIzcS0xOCAwLTI2LTExLTctMTIgMS0yOWwxMjUtMjE2di0xTDIyNyA0MjRxLTktMTQgMC0yOCA4LTEzIDI0LTEzaDE4NXEzMSAwIDUwIDM2em02MjQgNDk3cS03IDEyLTI0IDEyaC0xODdxLTMwIDAtNDktMzVMNjM4IDUxNnExLTIgMjYyLTQ4MSAyMC0zNSA1Mi0zNWgxODRxMTggMCAyNSAxMiA4IDEzLTEgMjhMOTAwIDUxNnYxbDQwOSA3MjNxOCAxNiAwIDI4em0yMjctMTQ4VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InlvdXR1YmVfcGxheSIgdW5pY29kZT0i74WqIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTcxMSA0MDhsNDg0IDI1MC00ODQgMjUzVjQwOHptMTg1IDg2MnExNjggMCAzMjQuNS00LjV0MjI5LjUtOS41bDczLTRxMSAwIDE3LTEuNXQyMy0zIDIzLjUtNC41IDI4LjUtOCAyOC0xMyAzMS0xOS41IDI5LTI2LjVxNi02IDE1LjUtMTguNXQyOS01OC41IDI2LjUtMTAxcTgtNjQgMTIuNS0xMzYuNVQxNzkyIDc0OFY1NzJxMS0xNDUtMTgtMjkwLTctNTUtMjUtOTkuNXQtMzItNjEuNWwtMTQtMTdxLTE0LTE1LTI5LTI2LjV0LTMxLTE5LTI4LTEyLjUtMjguNS04LTI0LTQuNS0yMy0zVDE1MjMgMjlxLTI1MS0xOS02MjctMTktMjA3IDItMzU5LjUgNi41VDMzNiAyNGwtNDkgNC0zNiA0cS0zNiA1LTU0LjUgMTB0LTUxIDIxVDg5IDEwNHEtNiA2LTE1LjUgMTguNXQtMjkgNTguNVQxOCAyODJxLTggNjQtMTIuNSAxMzYuNVQwIDUzMnYxNzZxLTEgMTQ1IDE4IDI5MCA3IDU1IDI1IDk5LjV0MzIgNjEuNWwxNCAxN3ExNCAxNSAyOSAyNi41dDMxIDE5LjUgMjggMTMgMjguNSA4IDIzLjUgNC41IDIzIDMgMTcgMS41cTI1MSAxOCA2MjcgMTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImRyb3Bib3giIHVuaWNvZGU9Iu+FqyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00MDIgODI5bDQ5NC0zMDUtMzQyLTI4NUw2NCA1NTh6bTk4Ni01NTVWMTY2TDg5OC0xMjd2LTFsLTEgMS0xLTF2MUw0MDcgMTY2djEwOGwxNDctOTYgMzQyIDI4NHYybDEtMSAxIDF2LTJsMzQzLTI4NHpNNTU0IDE0MThsMzQyLTI4NS00OTQtMzA0LTMzOCAyNzB6bTgzNi01ODlsMzM4LTI3MS00ODktMzE5LTM0MyAyODV6bS0xNTEgNTg5bDQ4OS0zMTktMzM4LTI3MC00OTQgMzA0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdGFja2V4Y2hhbmdlIiB1bmljb2RlPSLvhawiIGQ9Ik0xMjg5LTk2SDE3MXY0ODBIMTF2LTY0MGgxNDM4djY0MGgtMTYwVi05NnpNMzQ3IDQyOGwzMyAxNTcgNzgzLTE2NS0zMy0xNTZ6bTEwMyAzNzRsNjcgMTQ2IDcyNS0zMzktNjctMTQ1em0yMDEgMzU2bDEwMiAxMjMgNjE0LTUxMy0xMDItMTIzem0zOTcgMzc4bDQ3Ny02NDEtMTI4LTk2LTQ3NyA2NDF6TTMzMCA2NXYxNTloODAwVjY1SDMzMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iaW5zdGFncmFtIiB1bmljb2RlPSLvha0iIGQ9Ik0xMDI0IDY0MHEwIDEwNi03NSAxODF0LTE4MSA3NS0xODEtNzUtNzUtMTgxIDc1LTE4MSAxODEtNzUgMTgxIDc1IDc1IDE4MXptMTM4IDBxMC0xNjQtMTE1LTI3OVQ3NjggMjQ2IDQ4OSAzNjEgMzc0IDY0MHQxMTUgMjc5IDI3OSAxMTUgMjc5LTExNSAxMTUtMjc5em0xMDggNDEwcTAtMzgtMjctNjV0LTY1LTI3LTY1IDI3LTI3IDY1IDI3IDY1IDY1IDI3IDY1LTI3IDI3LTY1em0tNTAyIDIyMHEtNyAwLTc2LjUuNXQtMTA1LjUgMC05Ni41LTMtMTAzLTEwVDMxNSAxMjM5cS01MC0yMC04OC01OHQtNTgtODhxLTExLTI5LTE4LjUtNzEuNXQtMTAtMTAzLTMtOTYuNSAwLTEwNS41LjUtNzYuNS0uNS03Ni41IDAtMTA1LjUgMy05Ni41IDEwLTEwM1QxNjkgMTg3cTIwLTUwIDU4LTg4dDg4LTU4cTI5LTExIDcxLjUtMTguNXQxMDMtMTAgOTYuNS0zIDEwNS41IDAgNzYuNS41IDc2LjUtLjUgMTA1LjUgMCA5Ni41IDMgMTAzIDEwVDEyMjEgNDFxNTAgMjAgODggNTh0NTggODhxMTEgMjkgMTguNSA3MS41dDEwIDEwMyAzIDk2LjUgMCAxMDUuNS0uNSA3Ni41LjUgNzYuNSAwIDEwNS41LTMgOTYuNS0xMCAxMDMtMTguNSA3MS41cS0yMCA1MC01OCA4OHQtODggNThxLTI5IDExLTcxLjUgMTguNXQtMTAzIDEwLTk2LjUgMy0xMDUuNSAwLTc2LjUtLjV6bTc2OC02MzBxMC0yMjktNS0zMTctMTAtMjA4LTEyNC0zMjJ0LTMyMi0xMjRxLTg4LTUtMzE3LTV0LTMxNyA1UTI0My0xMTMgMTI5IDFUNSAzMjNxLTUgODgtNSAzMTd0NSAzMTdxMTAgMjA4IDEyNCAzMjJ0MzIyIDEyNHE4OCA1IDMxNyA1dDMxNy01cTIwOC0xMCAzMjItMTI0dDEyNC0zMjJxNS04OCA1LTMxN3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZmxpY2tyIiB1bmljb2RlPSLvha4iIGQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHpNNjk4IDY0MHEwIDg4LTYyIDE1MHQtMTUwIDYyLTE1MC02Mi02Mi0xNTAgNjItMTUwIDE1MC02MiAxNTAgNjIgNjIgMTUwem01NjQgMHEwIDg4LTYyIDE1MHQtMTUwIDYyLTE1MC02Mi02Mi0xNTAgNjItMTUwIDE1MC02MiAxNTAgNjIgNjIgMTUweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhZG4iIHVuaWNvZGU9Iu+FsCIgZD0iTTc2OCA5MTRsMjAxLTMwNkg1Njd6bTM2NS01MzBoOTRsLTQ1OSA2OTEtNDU5LTY5MWg5NGwxMDQgMTYwaDUyMnptNDAzIDI1NnEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZjE3MSIgdW5pY29kZT0i74WxIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTgxNSA2NzdxOC02My01MC41LTEwMVQ2NTMgNTcwcS0zOSAxNy01My41IDU4dC0uNSA4MiA1MiA1OHEzNiAxOCA3Mi41IDEydDY0LTM1LjVUODE1IDY3N3ptMTExIDIxcS0xNCAxMDctMTEzIDE2NHQtMTk3IDEzcS02My0yOC0xMDAuNS04OC41VDQ4MSA2NTdxNC05MSA3Ny41LTE1NVQ3MjQgNDQ2cTkxIDggMTUyIDg0dDUwIDE2OHptMjM5IDU0MnEtMjAgMjctNTYgNDQuNXQtNTggMjItNzEgMTIuNXEtMjkxIDQ3LTU2Ni0yLTQzLTctNjYtMTJ0LTU1LTIyLTUwLTQzcTMwLTI4IDc2LTQ1LjV0NzMuNS0yMlQ0ODAgMTE2MXEyMjgtMjkgNDQ4LTEgNjMgOCA4OS41IDEydDcyLjUgMjEuNSA3NSA0Ni41em01Ny0xMDM1cS04LTI2LTE1LjUtNzYuNXQtMTQtODQtMjguNS03MC01OC01Ni41cS04Ni00OC0xODkuNS03MS41dC0yMDItMjJUNTEzLTE1N3EtNDYgOC04MS41IDE4VDM1NS0xMTJ0LTczIDQzLjVUMjMwLTdxLTI1IDk2LTU3IDI5Mmw2IDE2IDE4IDlxMjIzLTE0OCA1MDYuNS0xNDhUMTIxMSAzMTBxMjEtNiAyNC0yM3QtNS00NS04LTM3em0xODEgOTYxcS0yNi0xNjctMTExLTY1NS01LTMwLTI3LTU2dC00My41LTQwLTU0LjUtMzFxLTI1Mi0xMjYtNjEwLTg4LTI0OCAyNy0zOTQgMTM5LTE1IDEyLTI1LjUgMjYuNXQtMTcgMzUtOSAzNC02IDM5LjUtNS41IDM1cS05IDUwLTI2LjUgMTUwdC0yOCAxNjEuNVQyMiAxMDY0IDAgMTIyMnEzIDI2IDE3LjUgNDguNVQ0OSAxMzA4dDQ1IDMwIDQ2IDIyLjUgNDggMTguNXExMjUgNDYgMzEzIDY0IDM3OSAzNyA2NzYtNTAgMTU1LTQ2IDIxNS0xMjIgMTYtMjAgMTYuNS01MXQtNS41LTU0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJiaXRidWNrZXRfc2lnbiIgdW5pY29kZT0i74WyIiBkPSJNODQ4IDY2NnEwIDQzLTQxIDY2dC03NyAxcS00My0yMC00Mi41LTcyLjVUNzMxIDU5MHEzOS0yMyA4MSA0dDM2IDcyem04MCAxNnE4LTY2LTM2LTEyMXQtMTEwLTYxLTExOSA0MC01NiAxMTNxLTIgNDkgMjUuNSA5M3Q3Mi41IDY0cTcwIDMxIDE0MS41LTEwVDkyOCA2ODJ6bTE3MiAzOTFxLTIwLTIxLTUzLjUtMzR0LTUzLTE2LTYzLjUtOHEtMTU1LTIwLTMyNCAwLTQ0IDYtNjMgOS41dC01Mi41IDE2VDQzNiAxMDczcTEzIDE5IDM2IDMxdDQwIDE1LjUgNDcgOC41cTE5OCAzNSA0MDggMSAzMy01IDUxLTguNXQ0My0xNiAzOS0zMS41em00Mi03NDZxMCA3IDUuNSAyNi41dDMgMzJUMTEzMyA0MDJROTcyIDI5NiA3NjggMjk2VDQwMiA0MDJsLTEyLTYtNS0xMnEyNi0xNTQgNDEtMjEwIDQ3LTgxIDIwNC0xMDggMjQ5LTQ2IDQyOCA1MyAzNCAxOSA0OSA1MS41dDIyLjUgODUuNSAxMi41IDcxem0xMzAgNjkzcTkgNTMtOCA3NS00MyA1NS0xNTUgODgtMjE2IDYzLTQ4NyAzNi0xMzItMTItMjI2LTQ2LTM4LTE1LTU5LjUtMjV0LTQ3LTM0LTI5LjUtNTRxOC02OCAxOS0xMzh0MjktMTcxIDI0LTEzN3ExLTUgNS0zMXQ3LTM2IDEyLTI3IDIyLTI4cTEwNS04MCAyODQtMTAwIDI1OS0yOCA0NDAgNjMgMjQgMTMgMzkuNSAyM3QzMSAyOSAxOS41IDQwcTQ4IDI2NyA4MCA0NzN6bTI2NCAxMDBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idHVtYmxyIiB1bmljb2RlPSLvhbMiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNOTQ0IDIwN2w4MC0yMzdxLTIzLTM1LTExMS02NnQtMTc3LTMycS0xMDQtMi0xOTAuNSAyNlQ0MDMtMjggMzA4IDc4dC01NS41IDEyMFQyMzYgMzE2djU0NEg2OHYyMTVxNzIgMjYgMTI5IDY5LjV0OTEgOTAgNTggMTAyIDM0IDk5IDE1IDg4LjVxMSA1IDQuNSA4LjV0Ny41IDMuNWgyNDR2LTQyNGgzMzNWODYwSDY1MFYzNDJxMC0zMCA2LjUtNTZ0MjIuNS01Mi41IDQ5LjUtNDEuNSA4MS41LTE0cTc4IDIgMTM0IDI5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ0dW1ibHJfc2lnbiIgdW5pY29kZT0i74W0IiBkPSJNMTEzNiA3NWwtNjIgMTgzcS00NC0yMi0xMDMtMjItMzYtMS02MiAxMC41VDg3MC41IDI3OCA4NTMgMzE4LjV0LTUgNDMuNXYzOThoMjU3djE5NEg4NDl2MzI2SDY2MXEtOCAwLTktMTAtNS00NC0xNy41LTg3dC0zOS05NS03Ny05NVQ0MDAgOTI1Vjc2MGgxMzBWMzQycTAtNTcgMjEuNS0xMTV0NjUtMTExIDEyMS04NS41VDkxNCAwcTY5IDEgMTM2LjUgMjV0ODUuNSA1MHptNDAwIDEwNDVWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibG9uZ19hcnJvd19kb3duIiB1bmljb2RlPSLvhbUiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik03NjUgMjM3cTgtMTktNS0zNUw0MTAtMTgycS0xMC0xMC0yMy0xMC0xNCAwLTI0IDEwTDggMjAycS0xMyAxNi01IDM1IDkgMTkgMjkgMTloMjI0djEyNDhxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzVjI1NmgyMjRxMjEgMCAyOS0xOXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibG9uZ19hcnJvd191cCIgdW5pY29kZT0i74W2IiBob3Jpei1hZHYteD0iNzY4IiBkPSJNNzY1IDEwNDNxLTktMTktMjktMTlINTEyVi0yMjRxMC0xNC05LTIzdC0yMy05SDI4OHEtMTQgMC0yMyA5dC05IDIzdjEyNDhIMzJxLTIxIDAtMjkgMTl0NSAzNWwzNTAgMzg0cTEwIDEwIDIzIDEwIDE0IDAgMjQtMTBsMzU1LTM4NHExMy0xNiA1LTM1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJsb25nX2Fycm93X2xlZnQiIHVuaWNvZGU9Iu+FtyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDczNlY1NDRxMC0xNC05LTIzdC0yMy05SDUxMlYyODhxMC0yMS0xOS0yOXQtMzUgNUw3NCA2MTRxLTEwIDEwLTEwIDIzIDAgMTQgMTAgMjRsMzg0IDM1NHExNiAxNCAzNSA2IDE5LTkgMTktMjlWNzY4aDEyNDhxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImxvbmdfYXJyb3dfcmlnaHQiIHVuaWNvZGU9Iu+FuCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzI4IDY0M3EwLTE0LTEwLTI0bC0zODQtMzU0cS0xNi0xNC0zNS02LTE5IDktMTkgMjl2MjI0SDMycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDEyNDh2MjI0cTAgMjEgMTkgMjl0MzUtNWwzODQtMzUwcTEwLTEwIDEwLTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcHBsZSIgdW5pY29kZT0i74W5IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTEzOTMgMzIxcS0zOS0xMjUtMTIzLTI1MC0xMjktMTk2LTI1Ny0xOTYtNDkgMC0xNDAgMzItODYgMzItMTUxIDMyLTYxIDAtMTQyLTMzLTgxLTM0LTEzMi0zNC0xNTIgMC0zMDEgMjU5UTAgMzkyIDAgNjM0cTAgMjI4IDExMyAzNzQgMTEzIDE0NCAyODQgMTQ0IDcyIDAgMTc3LTMwIDEwNC0zMCAxMzgtMzAgNDUgMCAxNDMgMzQgMTAyIDM0IDE3MyAzNCAxMTkgMCAyMTMtNjUgNTItMzYgMTA0LTEwMC03OS02Ny0xMTQtMTE4LTY1LTk0LTY1LTIwNyAwLTEyNCA2OS0yMjN0MTU4LTEyNnptLTM3NiAxMTczcTAtNjEtMjktMTM2LTMwLTc1LTkzLTEzOC01NC01NC0xMDgtNzItMzctMTEtMTA0LTE3IDMgMTQ5IDc4IDI1NyA3NCAxMDcgMjUwIDE0OCAxLTMgMi41LTExdDIuNS0xMXEwLTQgLjUtMTB0LjUtMTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9IndpbmRvd3MiIHVuaWNvZGU9Iu+FuiIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02ODIgNTMwdi02NTFMMC0yN3Y1NTdoNjgyem0wIDc0M1Y2MTRIMHY1NjV6bTk4Mi03NDN2LTc4Nkw3NTctMTMxdjY2MWg5MDd6bTAgODc4VjYxNEg3NTd2NjY5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhbmRyb2lkIiB1bmljb2RlPSLvhbsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNDkzIDEwNTNxMTYgMCAyNy41IDExLjVUNTMyIDEwOTJ0LTExLjUgMjcuNVQ0OTMgMTEzMXQtMjctMTEuNS0xMS0yNy41IDExLTI3LjUgMjctMTEuNXptNDIyIDBxMTYgMCAyNyAxMS41dDExIDI3LjUtMTEgMjcuNS0yNyAxMS41LTI3LjUtMTEuNVQ4NzYgMTA5MnQxMS41LTI3LjVUOTE1IDEwNTN6TTEwMyA4NjlxNDIgMCA3Mi0zMHQzMC03MlYzMzdxMC00My0yOS41LTczVDEwMyAyMzR0LTczIDMwLTMwIDczdjQzMHEwIDQyIDMwIDcydDczIDMwem0xMDYwLTE5VjE4NHEwLTQ2LTMyLTc4dC03Ny0zMmgtNzV2LTIyN3EwLTQzLTMwLTczdC03My0zMC03MyAzMC0zMCA3M1Y3NEg2MzV2LTIyN3EwLTQzLTMwLTczdC03My0zMHEtNDIgMC03MiAzMHQtMzAgNzNsLTEgMjI3aC03NHEtNDYgMC03OCAzMnQtMzIgNzh2NjY2aDkxOHptLTIzMiA0MDVxMTA3LTU1IDE3MS0xNTMuNXQ2NC0yMTUuNUgyNDFxMCAxMTcgNjQgMjE1LjVUNDc3IDEyNTVsLTcxIDEzMXEtNyAxMyA1IDIwIDEzIDYgMjAtNmw3Mi0xMzJxOTUgNDIgMjAxIDQydDIwMS00Mmw3MiAxMzJxNyAxMiAyMCA2IDEyLTcgNS0yMHptNDc3LTQ4OFYzMzdxMC00My0zMC03M3QtNzMtMzBxLTQyIDAtNzIgMzB0LTMwIDczdjQzMHEwIDQzIDMwIDcyLjV0NzIgMjkuNXE0MyAwIDczLTI5LjV0MzAtNzIuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibGludXgiIHVuaWNvZGU9Iu+FvCIgZD0iTTY2MyAxMTI1cS0xMS0xLTE1LjUtMTAuNXQtOC41LTkuNXEtNS0xLTUgNSAwIDEyIDE5IDE1aDEwem04Ny0xNHEtNC0xLTExLjUgNi41VDcyMSAxMTIycTI0IDExIDMyLTIgMy02LTMtOXpNMzk5IDY4NHEtNCAxLTYtM3QtNC41LTEyLjVUMzgzIDY1NXQtMTAtMTNxLTEwLTExLTEtMTIgNC0xIDEyLjUgN3QxMi41IDE4cTEgMyAyIDd0MiA2IDEuNSA0LjUuNSA0djNsLTEgMi41LTMgMnptODU1LTM1OXEwIDE4LTU1IDQyIDQgMTUgNy41IDI3LjV0NSAyNiAzIDIxLjUuNSAyMi41LTEgMTkuNS0zLjUgMjItNCAyMC41LTUgMjUtNS41IDI2LjVxLTEwIDQ4LTQ3IDEwM3QtNzIgNzVxMjQtMjAgNTctODMgODctMTYyIDU0LTI3OC0xMS00MC01MC00Mi0zMS00LTM4LjUgMTguNXQtOCA4My41LTExLjUgMTA3cS05IDM5LTE5LjUgNjl0LTE5LjUgNDUuNS0xNS41IDI0LjUtMTMgMTUtNy41IDdxLTE0IDYyLTMxIDEwM3QtMjkuNSA1Ni0yMy41IDMzLTE1IDQwcS00IDIxIDYgNTMuNXQ0LjUgNDkuNS00NC41IDI1cS0xNSAzLTQ0LjUgMTh0LTM1LjUgMTZxLTggMS0xMSAyNnQ4IDUxIDM2IDI3cTM3IDMgNTEtMzB0NC01OHEtMTEtMTktMi0yNi41dDMwLS41cTEzIDQgMTMgMzZ2MzdxLTUgMzAtMTMuNSA1MHQtMjEgMzAuNS0yMy41IDE1LTI3IDcuNXEtMTA3LTgtODktMTM0IDAtMTUtMS0xNS05IDktMjkuNSAxMC41dC0zMy0uNS0xNS41IDVxMSA1Ny0xNiA5MHQtNDUgMzRxLTI3IDEtNDEuNS0yNy41VDU0OSAxMTg1cS0xLTE1IDMuNS0zN3QxMy0zNy41VDU4MSAxMDk3cTEwIDMgMTYgMTQgNCA5LTcgOC03IDAtMTUuNSAxNC41VDU2NSAxMTY3cS0xIDIyIDkgMzd0MzQgMTRxMTcgMCAyNy0yMXQ5LjUtMzktMS41LTIycS0yMi0xNS0zMS0yOS04LTEyLTI3LjUtMjMuNVQ1NjQgMTA3MXEtMTMtMTQtMTUuNS0yN3Q3LjUtMThxMTQtOCAyNS0xOS41dDE2LTE5IDE4LjUtMTNUNjUxIDk2OHE0Ny0yIDEwMiAxNSAyIDEgMjMgN3QzNC41IDEwLjUgMjkuNSAxMyAyMSAxNy41cTkgMTQgMjAgOCA1LTMgNi41LTguNXQtMy0xMi0xNi41LTkuNXEtMjAtNi01Ni41LTIxLjVUNzY2IDk2OHEtNDQtMTktNzAtMjMtMjUtNS03OSAyLTEwIDItOS0ydDE3LTE5cTI1LTIzIDY3LTIyIDE3IDEgMzYgN3QzNiAxNCAzMy41IDE3LjUgMzAgMTcgMjQuNSAxMiAxNy41IDIuNSA4LjUtMTFxMC0yLTEtNC41dC00LTUtNi00LjUtOC41LTUtOS00LjUtMTAtNS05LjUtNC41cS0yOC0xNC02Ny41LTQ0VDY5NiA4NDN0LTQ5LTFxLTIxIDExLTYzIDczLTIyIDMxLTI1IDIyLTEtMy0xLTEwIDAtMjUtMTUtNTYuNVQ1MTMuNSA4MTV0LTIxLTU4IDExLjUtNjNxLTIzLTYtNjIuNS05MFQzOTQgNDYzcS0yLTE4LTEuNS02OXQtNS41LTU5cS04LTI0LTI5LTMtMzIgMzEtMzYgOTQtMiAyOCA0IDU2IDQgMTktMSAxOC0yLTEtNC01LTM2LTY1IDEwLTE2NiA1LTEyIDI1LTI4dDI0LTIwcTIwLTIzIDEwNC05MC41dDkzLTc2LjVxMTYtMTUgMTcuNS0zOHQtMTQtNDNUNTM1IDEwcTgtMTUgMjktNDQuNXQyOC01NCA3LTcwLjVxNDYgMjQgNyA5Mi00IDgtMTAuNSAxNlQ1ODYtMzl0LTIgNnEzIDUgMTMgOS41dDIwLTIuNXE0Ni01MiAxNjYtMzYgMTMzIDE1IDE3NyA4NyAyMyAzOCAzNCAzMCAxMi02IDEwLTUyLTEtMjUtMjMtOTItOS0yMy02LTM3LjV0MjQtMTUuNXEzIDE5IDE0LjUgNzd0MTMuNSA5MHEyIDIxLTYuNSA3My41dC03LjUgOTcgMjMgNzAuNXExNSAxOCA1MSAxOCAxIDM3IDM0LjUgNTN0NzIuNSAxMC41IDYwLTIyLjV6bS02MjggODI3cTMgMTctMi41IDMwdC0xMS41IDE1cS05IDItOS03IDItNSA1LTYgMTAgMCA3LTE1LTMtMjAgOC0yMCAzIDAgMyAzem00MTktMTk3cS0yIDgtNi41IDExLjV0LTEzIDUtMTQuNSA1LjVxLTUgMy05LjUgOHQtNyA4LTUuNSA2LjUtNCA0LTQtMS41cS0xNC0xNiA3LTQzLjV0MzktMzEuNXE5LTEgMTQuNSA4dDMuNSAyMHptLTE3OCAyMTNxMCAxMS01IDE5LjV0LTExIDEyLjUtOSAzcS02IDAtOC0ydDAtNCA1LTNxMTQtNCAxOC0zMSAwLTMgOCAyIDIgMiAyIDN6bTU0IDIzM3EwIDItMi41IDV0LTkgNy05LjUgNnEtMTUgMTUtMjQgMTUtOS0xLTExLjUtNy41dC0xLTEzLS41LTEyLjVxLTEtNC02LTEwLjV0LTYtOSAzLTguNXE0LTMgOCAwdDExIDkgMTUgOXExIDEgOSAxdDE1IDIgOSA3ek0xNDg2IDYwcTIwLTEyIDMxLTI0LjV0MTItMjQtMi41LTIyLjUtMTUuNS0yMi0yMy41LTE5LjUtMzAtMTguNS0zMS41LTE2LjUtMzItMTUuNS0yNy0xM3EtMzgtMTktODUuNS01NnQtNzUuNS02NHEtMTctMTYtNjgtMTkuNXQtODkgMTQuNXEtMTggOS0yOS41IDIzLjVUMTAwMy0xOTJ0LTIyIDE5LjUtNDcgOS41cS00NCAxLTEzMCAxLTE5IDAtNTctMS41dC01OC0yLjVxLTQ0LTEtNzkuNS0xNVQ1NTYtMjExdC00My41LTI4LjVUNDU5LTI1MXEtMjkgMS0xMTEgMzF0LTE0NiA0M3EtMTkgNC01MSA5LjV0LTUwIDktMzkuNSA5LjVUMjgtMTM0LjUgMTEtMTE1UTEtOTIgMTgtNDguNVQzNiA2cTEgMTYtNCA0MFQyMiA4OC41IDE3LjUgMTI1IDI4IDE1MnExNCAxMiA1NyAxNHQ2MCAxMnEzMCAxOCA0MiAzNXQxMiA1MXEyMS03My0zMi0xMDYtMzItMjAtODMtMTUtMzQgMy00My0xMC0xMy0xNSA1LTU3IDItNiA4LTE4dDguNS0xOFQ2NyAyM3QxLTIycTAtMTUtMTctNDlUMzctOTZxMy0xNyAzNy0yNiAyMC02IDg0LjUtMTguNVQyNTgtMTYxcTI0LTYgNzQtMjJ0ODIuNS0yMyA1NS41LTRxNDMgNiA2NC41IDI4dDIzIDQ4LTcuNSA1OC41LTE5IDUyVDUxMSAxM1EzOTAgMjAzIDM0MiAyNTVxLTY4IDc0LTExMyA0MC0xMS05LTE1IDE1LTMgMTYtMiAzOCAxIDI5IDEwIDUydDI0IDQ3IDIyIDQycTggMjEgMjYuNSA3MnQyOS41IDc4IDMwIDYxIDM5IDU0cTExMCAxNDMgMTI0IDE5NS0xMiAxMTItMTYgMzEwLTIgOTAgMjQgMTUxLjVUNjMxIDE1MTVxMzkgMjEgMTA0IDIxIDUzIDEgMTA2LTEzLjV0ODktNDEuNXE1Ny00MiA5MS41LTEyMS41VDEwNTEgMTIxMnEtNS05NSAzMC0yMTQgMzQtMTEzIDEzMy0yMTggNTUtNTkgOTkuNS0xNjN0NTkuNS0xOTFxOC00OSA1LTg0LjV0LTEyLTU1LjUtMjAtMjJxLTEwLTItMjMuNS0xOXQtMjctMzUuNVQxMjU1IDE3NnQtNjEtMTRxLTE4IDEtMzEuNSA1dC0yMi41IDEzLjUtMTMuNSAxNS41LTExLjUgMjAuNS05IDE5LjVxLTIyIDM3LTQxIDMwdC0yOC00OSA3LTk3cTIwLTcwIDEtMTk1LTEwLTY1IDE4LTEwMC41dDczLTMzIDg1IDM1LjVxNTkgNDkgODkuNSA2Ni41VDE0MTQtNjRxNTMgMTggNzcgMzYuNVQxNTA5LjUgN3QtMjUgMjguNVQxNDMzIDU5cS0zMyAxMS00OS41IDQ4dC0xNSA3Mi41VDEzODQgMjI3cTEtMzEgOC01Ni41dDE0LjUtNDAuNSAyMC41LTI4LjUgMjEtMTkgMjEuNS0xM1QxNDg2IDYweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJkcmliYmxlIiB1bmljb2RlPSLvhb0iIGQ9Ik0xMDI0IDM2cS00MiAyNDEtMTQwIDQ5OGgtMmwtMi0xcS0xNi02LTQzLTE2LjV0LTEwMS00OS0xMzctODJUNDY4IDI3MSAzNjUgMTIzbC0xNSAxMVE1MzQtMTYgNzY4LTE2cTEzMiAwIDI1NiA1MnpNODM5IDY0M3EtMjEgNDktNTMgMTExLTMxMS05My02NzMtOTMtMS03LTEtMjEgMC0xMjQgNDQtMjM2LjVUMjgwIDIwMnE1MCA4OSAxMjMuNSAxNjYuNVQ1NDYgNDkzdDEzMC41IDgxIDk5LjUgNDhsMzcgMTNxNCAxIDEzIDMuNXQxMyA0LjV6TTczMiA4NTVxLTEyMCAyMTMtMjQ0IDM3OC0xMzgtNjUtMjM0LTE4NlQxMjYgNzc1cTMwMiAwIDYwNiA4MHptNjg0LTMxOXEtMjEwIDYwLTQwOSAyOSA4Ny0yMzkgMTI4LTQ2OSAxMTEgNzUgMTg1IDE4OS41dDk2IDI1MC41em0tODA1IDc0MXEtMSAwLTItMSAxIDEgMiAxem01OTAtMTQ1cS0xODUgMTY0LTQzMyAxNjQtNzYgMC0xNTUtMTkgMTMxLTE3MCAyNDYtMzgyIDY5IDI2IDEzMCA2MC41dDk2LjUgNjEuNSA2NS41IDU3IDM3LjUgNDAuNXptMjIzLTQ4NXEtMyAyMzItMTQ5IDQxMGwtMS0xcS05LTEyLTE5LTI0LjV0LTQzLjUtNDQuNS03MS02MC41LTEwMC02NVQ5MDkgNzk3cTI1LTUzIDQ0LTk1IDItNSA2LjUtMTd0Ny41LTE3cTM2IDUgNzQuNSA3dDczLjUgMiA2OS0xLjUgNjQtNCA1Ni41LTUuNSA0OC02LjUgMzYuNS02IDI1LTQuNXptMTEyLTdxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InNreXBlIiB1bmljb2RlPSLvhb4iIGQ9Ik0xMTczIDQ3M3EwIDUwLTE5LjUgOTEuNVQxMTA1IDYzM3QtNzMgNDktODIuNSAzNC04Ny41IDIzbC0xMDQgMjRxLTMwIDctNDQgMTAuNVQ2NzkgNzg1dC0zMCAxNi0xNi41IDIxLTcuNSAzMHEwIDc3IDE0NCA3NyA0MyAwIDc3LTEydDU0LTI4LjUgMzgtMzMuNSA0MC0yOSA0OC0xMnE0NyAwIDc1LjUgMzJ0MjguNSA3N3EwIDU1LTU2IDk5LjVUOTMyIDEwOTB0LTE4MiAyM3EtNjggMC0xMzItMTUuNXQtMTE5LjUtNDctODktODdUMzc2IDgzNXEwLTYxIDE5LTEwNi41dDU2LTc1LjUgODAtNDguNVQ2MzQgNTcybDE0Ni0zNnE5MC0yMiAxMTItMzYgMzItMjAgMzItNjAgMC0zOS00MC02NC41VDc3OSAzNTBxLTUxIDAtOTEuNSAxNnQtNjUgMzguNS00NS41IDQ1LTQ2IDM4LjUtNTQgMTZxLTUwIDAtNzUuNS0zMFQzNzYgMzk5cTAtOTIgMTIyLTE1Ny41VDc4OSAxNzZxNzMgMCAxNDAgMTguNXQxMjIuNSA1My41IDg4LjUgOTMuNSAzMyAxMzEuNXptMzYzLTIxN3EwLTE1OS0xMTIuNS0yNzEuNVQxMTUyLTEyOHEtMTMwIDAtMjM0IDgwLTc3LTE2LTE1MC0xNi0xNDMgMC0yNzMuNSA1NS41dC0yMjUgMTUwLTE1MCAyMjVUNjQgNjQwcTAgNzMgMTYgMTUwUTAgODk0IDAgMTAyNHEwIDE1OSAxMTIuNSAyNzEuNVQzODQgMTQwOHExMzAgMCAyMzQtODAgNzcgMTYgMTUwIDE2IDE0MyAwIDI3My41LTU1LjV0MjI1LTE1MCAxNTAtMjI1VDE0NzIgNjQwcTAtNzMtMTYtMTUwIDgwLTEwNCA4MC0yMzR6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZvdXJzcXVhcmUiIHVuaWNvZGU9Iu+GgCIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMDAwIDExMDJsMzcgMTk0cTUgMjMtOSA0MHQtMzUgMTdIMjgxcS0yMyAwLTM4LjUtMTd0LTE1LjUtMzdWMTk4cTAtNyA2LTFsMjkxIDM1MnEyMyAyNiAzOCAzMy41dDQ4IDcuNWgyMzlxMjIgMCAzNyAxNC41dDE4IDI5LjVxMjQgMTMwIDM3IDE5MSA0IDIxLTExLjUgNDBUODkzIDg4NEg1OTlxLTI5IDAtNDggMTl0LTE5IDQ4djQycTAgMjkgMTkgNDcuNXQ0OCAxOC41aDM0NnExOCAwIDM1IDEzLjV0MjAgMjkuNXptMjI3IDIyMnEtMTUtNzMtNTMuNS0yNjYuNXQtNjkuNS0zNTAtMzUtMTczLjVxLTYtMjItOS0zMi41dC0xNC0zMi41LTI0LjUtMzMtMzguNS0yMS01OC0xMEg2NTRxLTEzIDAtMjItMTAtOC05LTQyNi00OTQtMjItMjUtNTguNS0yOC41VDk5LTEyMnEtNTUgMjItNTUgOTh2MTQxMHEwIDU1IDM4IDEwMi41dDEyMCA0Ny41aDg4OHE5NSAwIDEyNy01M3QxMC0xNTl6bTAgMGwtMTU4LTc5MHE0IDE3IDM1IDE3My41dDY5LjUgMzUwVDEyMjcgMTMyNHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idHJlbGxvIiB1bmljb2RlPSLvhoEiIGQ9Ik03MDQgMTkydjEwMjRxMCAxNC05IDIzdC0yMyA5SDE5MnEtMTQgMC0yMy05dC05LTIzVjE5MnEwLTE0IDktMjN0MjMtOWg0ODBxMTQgMCAyMyA5dDkgMjN6bTY3MiAzODR2NjQwcTAgMTQtOSAyM3QtMjMgOUg4NjRxLTE0IDAtMjMtOXQtOS0yM1Y1NzZxMC0xNCA5LTIzdDIzLTloNDgwcTE0IDAgMjMgOXQ5IDIzem0xNjAgNzY4Vi02NHEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOVQwLTY0djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImZlbWFsZSIgdW5pY29kZT0i74aCIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEyODAgNDgwcTAtNDAtMjgtNjh0LTY4LTI4cS01MSAwLTgwIDQzTDg3NyA3NjhoLTQ1VjYzNmwyNDctNDExcTktMTUgOS0zMyAwLTI2LTE5LTQ1dC00NS0xOUg4MzJ2LTI3MnEwLTQ2LTMzLTc5dC03OS0zM0g1NjBxLTQ2IDAtNzkgMzN0LTMzIDc5djI3MkgyNTZxLTI2IDAtNDUgMTl0LTE5IDQ1cTAgMTggOSAzM2wyNDcgNDExdjEzMmgtNDVMMTc2IDQyN3EtMjktNDMtODAtNDMtNDAgMC02OCAyOFQwIDQ4MHEwIDI5IDE2IDUzbDI1NiAzODRxNzMgMTA3IDE3NiAxMDdoMzg0cTEwMyAwIDE3Ni0xMDdsMjU2LTM4NHExNi0yNCAxNi01M3ptLTQxNiA4MDBxMC05My02NS41LTE1OC41VDY0MCAxMDU2dC0xNTguNSA2NS41VDQxNiAxMjgwdDY1LjUgMTU4LjVUNjQwIDE1MDR0MTU4LjUtNjUuNVQ4NjQgMTI4MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibWFsZSIgdW5pY29kZT0i74aDIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgODMyVjQxNnEwLTQwLTI4LTY4dC02OC0yOC02OCAyOC0yOCA2OHYzNTJoLTY0di05MTJxMC00Ni0zMy03OXQtNzktMzMtNzkgMzMtMzMgNzl2NDY0aC02NHYtNDY0cTAtNDYtMzMtNzl0LTc5LTMzLTc5IDMzLTMzIDc5djkxMmgtNjRWNDE2cTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4djQxNnEwIDgwIDU2IDEzNnQxMzYgNTZoNjQwcTgwIDAgMTM2LTU2dDU2LTEzNnptLTI4OCA0NDhxMC05My02NS41LTE1OC41VDUxMiAxMDU2dC0xNTguNSA2NS41VDI4OCAxMjgwdDY1LjUgMTU4LjVUNTEyIDE1MDR0MTU4LjUtNjUuNVQ3MzYgMTI4MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZ2l0dGlwIiB1bmljb2RlPSLvhoQiIGQ9Ik03NzMgMjM0bDM1MCA0NzNxMTYgMjIgMjQuNSA1OXQtNiA4NS02MS41IDc5cS00MCAyNi04MyAyNS41VDkyMy41IDkzOCA4NjkgODkzcS0zNi00MC05Ni00MC01OSAwLTk1IDQwLTI0IDI4LTU0LjUgNDVUNTUwIDk1NS41IDQ2NiA5MzBxLTQ2LTMxLTYwLjUtNzl0LTYtODUgMjQuNS01OXptNzYzIDQwNnEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0ic3VuIiB1bmljb2RlPSLvhoUiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQ3MiA2NDBxMCAxMTctNDUuNSAyMjMuNXQtMTIzIDE4NC0xODQgMTIzVDg5NiAxMjE2dC0yMjMuNS00NS41LTE4NC0xMjMtMTIzLTE4NFQzMjAgNjQwdDQ1LjUtMjIzLjUgMTIzLTE4NCAxODQtMTIzVDg5NiA2NHQyMjMuNSA0NS41IDE4NCAxMjMgMTIzIDE4NFQxNDcyIDY0MHptMjc2LTI3N3EtNC0xNS0yMC0yMGwtMjkyLTk2Vi01OXEwLTE2LTEzLTI2LTE1LTEwLTI5LTRMMTEwMiA1IDkyMi0yNDNxLTEwLTEzLTI2LTEzdC0yNiAxM0w2OTAgNSAzOTgtODlxLTE0LTYtMjkgNC0xMyAxMC0xMyAyNnYzMDZMNjQgMzQzcS0xNiA1LTIwIDIwLTUgMTcgNCAyOWwxODAgMjQ4TDQ4IDg4OHEtOSAxMy00IDI5IDQgMTUgMjAgMjBsMjkyIDk2djMwNnEwIDE2IDEzIDI2IDE1IDEwIDI5IDRsMjkyLTk0IDE4MCAyNDhxOSAxMiAyNiAxMnQyNi0xMmwxODAtMjQ4IDI5MiA5NHExNCA2IDI5LTQgMTMtMTAgMTMtMjZ2LTMwNmwyOTItOTZxMTYtNSAyMC0yMCA1LTE2LTQtMjlsLTE4MC0yNDggMTgwLTI0OHE5LTEyIDQtMjl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zNjYiIHVuaWNvZGU9Iu+GhiIgZD0iTTEyNjIgMjMzcS01NC05LTExMC05LTE4MiAwLTMzNyA5MFQ1NzAgNTU5dC05MCAzMzdxMCAxOTIgMTA0IDM1Ny0yMDEtNjAtMzI4LjUtMjI5VDEyOCA2NDBxMC0xMzAgNTEtMjQ4LjV0MTM2LjUtMjA0VDUxOS41IDUxIDc2OCAwcTE0NCAwIDI3My41IDYxLjVUMTI2MiAyMzN6bTIwMyA4NXEtOTQtMjAzLTI4My41LTMyNC41VDc2OC0xMjhxLTE1NiAwLTI5OCA2MVQyMjUgOTcgNjEgMzQyIDAgNjQwcTAgMTUzIDU3LjUgMjkyLjV0MTU2IDI0MS41VDQ0OSAxMzM4LjV0MjkwIDY4LjVxNDQgMiA2MS0zOSAxOC00MS0xNS03Mi04Ni03OC0xMzEuNS0xODEuNVQ2MDggODk2cTAtMTQ4IDczLTI3M3QxOTgtMTk4IDI3My03M3ExMTggMCAyMjggNTEgNDEgMTggNzItMTMgMTQtMTQgMTcuNS0zNHQtNC41LTM4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcmNoaXZlIiB1bmljb2RlPSLvhociIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTA4OCA3MDRxMCAyNi0xOSA0NXQtNDUgMTlINzY4cS0yNiAwLTQ1LTE5dC0xOS00NSAxOS00NSA0NS0xOWgyNTZxMjYgMCA0NSAxOXQxOSA0NXptNTc2IDE5MlYtNjRxMC0yNi0xOS00NXQtNDUtMTlIMTkycS0yNiAwLTQ1IDE5dC0xOSA0NXY5NjBxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUtMTl0MTktNDV6bTY0IDQ0OHYtMjU2cTAtMjYtMTktNDV0LTQ1LTE5SDEyOHEtMjYgMC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTUzNnEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJidWciIHVuaWNvZGU9Iu+GiCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjMyIDU3NnEwLTI2LTE5LTQ1dC00NS0xOWgtMjI0cTAtMTcxLTY3LTI5MGwyMDgtMjA5cTE5LTE5IDE5LTQ1dC0xOS00NXEtMTgtMTktNDUtMTl0LTQ1IDE5bC0xOTggMTk3cS01LTUtMTUtMTN0LTQyLTI4LjUtNjUtMzYuNS04Mi0yOS05Ny0xM3Y4OTZINzY4VjBxLTUxIDAtMTAxLjUgMTMuNXQtODcgMzMtNjYgMzlUNDcwIDExOGwtMTUgMTRMMjcyLTc1cS0yMC0yMS00OC0yMS0yNCAwLTQzIDE2LTE5IDE4LTIwLjUgNDQuNVQxNzYgMTFsMjAyIDIyN3EtNTggMTE0LTU4IDI3NEg5NnEtMjYgMC00NSAxOXQtMTkgNDUgMTkgNDUgNDUgMTloMjI0djI5NGwtMTczIDE3M3EtMTkgMTktMTkgNDV0MTkgNDUgNDUgMTkgNDUtMTlsMTczLTE3M2g4NDRsMTczIDE3M3ExOSAxOSA0NSAxOXQ0NS0xOSAxOS00NS0xOS00NWwtMTczLTE3M1Y2NDBoMjI0cTI2IDAgNDUtMTl0MTktNDV6bS00ODAgNTc2SDUxMnEwIDEzMyA5My41IDIyNi41VDgzMiAxNDcydDIyNi41LTkzLjVUMTE1MiAxMTUyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ2ayIgdW5pY29kZT0i74aJIiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE5MTcgMTAxNnEyMy02NC0xNTAtMjk0LTI0LTMyLTY1LTg1LTQwLTUxLTU1LTcydC0zMC41LTQ5LjUtMTItNDIgMTMtMzQuNSAzMi41LTQzIDU3LTUzcTQtMiA1LTQgMTQxLTEzMSAxOTEtMjIxIDMtNSA2LjUtMTIuNXQ3LTI2LjUtLjUtMzQtMjUtMjcuNVQxODMyIDVsLTI1Ni00cS0yNC01LTU2IDV0LTUyIDIybC0yMCAxMnEtMzAgMjEtNzAgNjR0LTY4LjUgNzcuNS02MSA1OFQxMTkyIDI1NXEtMy0xLTgtMy41dC0xNy0xNC41LTIxLjUtMjkuNS0xNy01MlQxMTIyIDc4cTAtMTUtMy41LTI3LjVUMTExMSAzMmwtNC01cS0xOC0xOS01My0yMkg5MzlxLTcxLTQtMTQ2IDE2LjV0LTEzMS41IDUzLTEwMyA2NlQ0ODggMTk4bC0yNSAyNHEtMTAgMTAtMjcuNSAzMFQzNjQgMzQzIDI1OCA0OTQgMTM1LjUgNzA1IDUgOTc3cS02IDE2LTYgMjd0MyAxNmw0IDZxMTUgMTkgNTcgMTlsMjc0IDJxMTItMiAyMy02LjV0MTYtOC41bDUtM3ExNi0xMSAyNC0zMiAyMC01MCA0Ni0xMDMuNXQ0MS04MS41bDE2LTI5cTI5LTYwIDU2LTEwNHQ0OC41LTY4LjVUNjU0IDU3MnQzNC0xNCAyNyA1cTIgMSA1IDV0MTIgMjIgMTMuNSA0NyA5LjUgODEgMCAxMjVxLTIgNDAtOSA3M3QtMTQgNDZsLTYgMTJxLTI1IDM0LTg1IDQzLTEzIDIgNSAyNCAxNiAxOSAzOCAzMCA1MyAyNiAyMzkgMjQgODItMSAxMzUtMTMgMjAtNSAzMy41LTEzLjV0MjAuNS0yNCAxMC41LTMyIDMuNS00NS41LTEtNTUtMi41LTcwLjUtMS41LTgyLjVxMC0xMS0xLTQydC0uNS00OCAzLjUtNDAuNSAxMS41LTM5VDExNTcgNTY1cTgtMiAxNy00dDI2IDExIDM4IDM0LjUgNTIgNjcgNjggMTA3LjVxNjAgMTA0IDEwNyAyMjUgNCAxMCAxMCAxNy41dDExIDEwLjVsNCAzIDUgMi41IDEzIDMgMjAgLjUgMjg4IDJxMzkgNSA2NC0yLjV0MzEtMTYuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0id2VpYm8iIHVuaWNvZGU9Iu+GiiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NzUgMjUycTIxIDM0IDExIDY5dC00NSA1MHEtMzQgMTQtNzMgMXQtNjAtNDZxLTIyLTM0LTEzLTY4LjV0NDMtNTAuNSA3NC41LTIuNVQ2NzUgMjUyem05NCAxMjFxOCAxMyAzLjUgMjYuNVQ3NTUgNDE4cS0xNCA1LTI4LjUtLjVUNzA1IDM5OXEtMTctMzEgMTMtNDUgMTQtNSAyOSAuNXQyMiAxOC41em0xNzQtMTA3cS00NS0xMDItMTU4LTE1MHQtMjI0LTEycS0xMDcgMzQtMTQ3LjUgMTI2LjVUNDIwIDQxOHE0NyA5MyAxNTEuNSAxMzlUNzgyIDU3NnExMTEtMjkgMTU4LjUtMTE5LjVUOTQzIDI2NnptMzEyIDE2MHEtOSA5Ni04OSAxNzBUOTU3LjUgNzA1IDY4MyA3MjZxLTIyMy0yMy0zNjkuNS0xNDEuNVQxODEgMzIwcTktOTYgODktMTcwVDQ3OC41IDQxIDc1MyAyMHEyMjMgMjMgMzY5LjUgMTQxLjVUMTI1NSA0MjZ6bTMwOC00cTAtNjgtMzctMTM5LjV0LTEwOS0xMzdUMTI0OC41IDI4dC0yMjYtODNUNzUyLTg2IDQ3Ny01Mi41dC0yNDAuNSA5M1Q2NSAxOTEuNSAwIDM5MXEwIDExNSA2OS41IDI0NVQyNjcgODk0cTE2OSAxNjkgMzQxLjUgMjM2dDI0Ni41LTdxNjUtNjQgMjAtMjA5LTQtMTQtMS0yMHQxMC03IDE0LjUuNVQ5MTIgODkxbDYgMnExMzkgNTkgMjQ2IDU5dDE1My02MXE0NS02MyAwLTE3OC0yLTEzLTQuNS0yMHQ0LjUtMTIuNSAxMi03LjUgMTctNnE1Ny0xOCAxMDMtNDd0ODAtODEuNSAzNC0xMTYuNXptLTc0IDYyNHE0Mi00NyA1NC41LTEwOC41VDE1MzcgODIwcS04LTIzLTI5LjUtMzR0LTQ0LjUtNHEtMjMgOC0zNCAyOS41dC00IDQ0LjVxMjAgNjMtMjQgMTExdC0xMDcgMzVxLTI0LTUtNDUgOHQtMjUgMzdxLTUgMjQgOCA0NC41dDM3IDI1LjVxNjAgMTMgMTE5LTUuNXQxMDEtNjUuNXptMTgxIDE2M3E4Ny05NiAxMTIuNS0yMjIuNVQxNzY5IDc0NXEtOS0yNy0zNC00MHQtNTItNC00MCAzNC01IDUycTI4IDgyIDEwIDE3MnQtODAgMTU4cS02MiA2OS0xNDggOTUuNXQtMTczIDguNXEtMjgtNi01MiA5LjV0LTMwIDQzLjUgOS41IDUxLjUgNDMuNSAyOS41cTEyMyAyNiAyNDQtMTEuNXQyMDgtMTM0LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InJlbnJlbiIgdW5pY29kZT0i74aLIiBkPSJNMTEzMy0zNHEtMTcxLTk0LTM2OC05NC0xOTYgMC0zNjcgOTQgMTM4IDg3IDIzNS41IDIxMVQ3NjUgNDQ1cTM1LTE0NCAxMzIuNS0yNjhUMTEzMy0zNHpNNjM4IDEzOTRWOTA5cTAtMjUyLTEyNi41LTQ1OS41VDE4MSAxNDNRMCAzNTggMCA2MzhxMCAxODcgODMuNSAzNDkuNVQzMTMgMTI1N3QzMjUgMTM3em04OTgtNzU2cTAtMjgwLTE4MS00OTUtMjA0IDk5LTMzMC41IDMwNi41VDg5OCA5MDl2NDg1cTE3OS0zMCAzMjUtMTM3dDIyOS41LTI2OS41VDE1MzYgNjM4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzcyIiB1bmljb2RlPSLvhowiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwMiA0MzNxLTMyLTgwLTc2LTEzOHQtOTEtODguNS05OS00Ni41LTEwMS41LTE0LjVUOTM4IDE1NHQtODYuNSAyMi02OS41IDI3LjUtNDYgMjIuNWwtMTcgMTBRNjA2IDggNDI5LjUtMTIzLjVUNDUtMjU2cS0xOSAwLTMyIDEzVDAtMjExdDEzIDMxLjVUNDUtMTY3cTE3MyAxIDMyMi41IDEwNy41VDYxOSAyMzVxLTM2LTE0LTcyLTIzdC04My0xMy05MSAyLjUtOTMgMjguNS05MiA1OS04NC41IDEwMFQyOSA1MzVxMTE0IDQ3IDIxNCA1N3QxNjcuNS03LjVUNTM1IDUyOHQ4OC41LTc3IDU2LjUtODJxNTMgMTMxIDc5IDI5MS03LTEtMTgtMi41dC00Ni41LTIuNS02OS41LjUtODEuNSAxMC04OC41IDIzLTg0IDQyLjUtNzUgNjUtNTQuNSA5NC41VDIxMyAxMDE4cTcwIDI4IDEzMy41IDM2LjV0MTEyLjUtMSA5Mi0zMCA3My41LTUwIDU2LTYxIDQyLTYzIDI3LjUtNTYgMTYtMzkuNWw0LTE2cTEyIDEyMiAxMiAxOTUtOCA2LTIxLjUgMTZ0LTQ5IDQ0LjVUNjQ4IDEwNjV0LTU0IDkzLTMzIDExMi41IDEyIDEyNyA3MCAxMzguNXE3My0yNSAxMjcuNS02MS41VDg1NSAxMzk4dDQ4LTg1IDIwLjUtODktLjUtODUuNS0xMy03Ni41LTE5LTYyLTE3LTQybC03LTE1cTEtNCAxLTUwdC0xLTcycTMgNyAxMCAxOC41dDMwLjUgNDMgNTAuNSA1OCA3MSA1NS41IDkxLjUgNDQuNSAxMTIgMTQuNSAxMzIuNS0yNHEtMi03OC0yMS41LTE0MS41dC01MC0xMDQuNS02OS41LTcxLjUtODEuNS00NS41LTg0LjUtMjQtODAtOS41LTY3LjUgMVQ4NjQgNjQwbC0xNyAzcS0yMy0xNDctNzMtMjgzIDYgNyAxOCAxOC41dDQ5LjUgNDFUOTE5IDQ3MnQ5OS41IDQyIDExNy41IDIwIDEyOS0yMy41IDEzNy03Ny41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJzdGFja19leGNoYW5nZSIgdW5pY29kZT0i74aNIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEyNTkgMjgzdi02NnEwLTg1LTU3LjUtMTQ0LjVUMTA2MyAxM2gtNTdMNzQ2LTI1NlYxM0gyMTdxLTgxIDAtMTM4LjUgNTkuNVQyMSAyMTd2NjZoMTIzOHptMCAzMjZWMzU0SDIxdjI1NWgxMjM4em0wIDMyOFY2ODJIMjF2MjU1aDEyMzh6bTAgMTQwdi02N0gyMXY2N3EwIDg0IDU3LjUgMTQzLjVUMjE3IDEyODBoODQ2cTgxIDAgMTM4LjUtNTkuNVQxMjU5IDEwNzd6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zNzQiIHVuaWNvZGU9Iu+GjiIgZD0iTTExNTIgNjQwcTAtMTQtOS0yM0w4MjMgMjk3cS05LTktMjMtOS0xMyAwLTIyLjUgOS41VDc2OCAzMjB2MTkySDQxNnEtMTMgMC0yMi41IDkuNVQzODQgNTQ0djE5MnEwIDEzIDkuNSAyMi41VDQxNiA3NjhoMzUydjE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0LTEwbDMxOS0zMTlxOS05IDktMjN6bTE2MCAwcTAgMTQ4LTczIDI3M3QtMTk4IDE5OC0yNzMgNzMtMjczLTczLTE5OC0xOTgtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03MyAyNzMgNzMgMTk4IDE5OCA3MyAyNzN6bTIyNCAwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19jaXJjbGVfYWx0X2xlZnQiIHVuaWNvZGU9Iu+GkCIgZD0iTTExNTIgNzM2VjU0NHEwLTEzLTkuNS0yMi41VDExMjAgNTEySDc2OFYzMjBxMC0xNC05LTIzdC0yMy05cS0xMiAwLTI0IDEwTDM5MyA2MTdxLTkgOS05IDIzdDkgMjNsMzIwIDMyMHE5IDkgMjMgOSAxMyAwIDIyLjUtOS41VDc2OCA5NjBWNzY4aDM1MnExMyAwIDIyLjUtOS41dDkuNS0yMi41em0xNjAtOTZxMCAxNDgtNzMgMjczdC0xOTggMTk4LTI3MyA3My0yNzMtNzMtMTk4LTE5OC03My0yNzMgNzMtMjczIDE5OC0xOTggMjczLTczIDI3MyA3MyAxOTggMTk4IDczIDI3M3ptMjI0IDBxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zNzYiIHVuaWNvZGU9Iu+GkSIgZD0iTTEwMjQgOTYwVjMyMHEwLTI2LTE5LTQ1dC00NS0xOXEtMjAgMC0zNyAxMkw0NzUgNTg4cS0yNyAxOS0yNyA1MnQyNyA1Mmw0NDggMzIwcTE3IDEyIDM3IDEyIDI2IDAgNDUtMTl0MTktNDV6bTI1Ni04MDB2OTYwcTAgMTMtOS41IDIyLjV0LTIyLjUgOS41SDI4OHEtMTMgMC0yMi41LTkuNVQyNTYgMTEyMFYxNjBxMC0xMyA5LjUtMjIuNVQyODggMTI4aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0yNTYgOTYwVjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImRvdF9jaXJjbGVfYWx0IiB1bmljb2RlPSLvhpIiIGQ9Ik0xMDI0IDY0MHEwLTEwNi03NS0xODF0LTE4MS03NS0xODEgNzUtNzUgMTgxIDc1IDE4MSAxODEgNzUgMTgxLTc1IDc1LTE4MXptLTI1NiA1NDRxLTE0OCAwLTI3My03M1QyOTcgOTEzdC03My0yNzMgNzMtMjczIDE5OC0xOTggMjczLTczIDI3MyA3MyAxOTggMTk4IDczIDI3My03MyAyNzMtMTk4IDE5OC0yNzMgNzN6bTc2OC01NDRxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zNzgiIHVuaWNvZGU9Iu+GkyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMDIzIDM0OWwxMDItMjA0cS01OC0xNzktMjEwLTI5MFQ1NzYtMjU2cS0xNTYgMC0yODguNSA3Ny41dC0yMTAgMjEwVDAgMzIwcTAgMTgxIDEwNC41IDMzMFQzNzkgODYxbDE3LTEzMXEtMTIyLTU0LTE5NS0xNjUuNVQxMjggMzIwcTAtMTg1IDEzMS41LTMxNi41VDU3Ni0xMjhxMTI2IDAgMjMyLjUgNjV0MTY1IDE3NS41VDEwMjMgMzQ5em01NDgtMTAwbDU4LTExNEwxMzczIDdxLTEzLTctMjktNy00MCAwLTU3IDM1bC0yMzkgNDc3SDU3NnEtMjQgMC00Mi41IDE2LjVUNTEyIDU2OWwtOTYgNzc5cS0yIDE3IDYgNDIgMTQgNTEgNTcgODIuNXQ5NyAzMS41cTY2IDAgMTEzLTQ3dDQ3LTExM3EwLTY5LTUyLTExNy41VDU2NCAxMTg1bDM3LTI4OWg0MjNWNzY4SDYxN2wxNi0xMjhoNDU1cTQwIDAgNTctMzVsMjI4LTQ1NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idmltZW9fc3F1YXJlIiB1bmljb2RlPSLvhpQiIGQ9Ik0xMjkyIDg5OHExMCAyMTYtMTYxIDIyMi0yMzEgOC0zMTItMjYxIDQ0IDE5IDgyIDE5IDg1IDAgNzQtOTYtNC01Ny03NC0xNjdUNzk2IDUwNXEtNDMgMC04MiAxNjktMTMgNTQtNDUgMjU1LTMwIDE4OS0xNjAgMTc3LTU5LTctMTY0LTEwMGwtODEtNzItODEtNzIgNTItNjdxNzYgNTIgODcgNTIgNTcgMCAxMDctMTc5IDE1LTU1IDQ1LTE2NC41VDUxOSAzMzlxNjgtMTc5IDE2NC0xNzkgMTU3IDAgMzgzIDI5NCAyMjAgMjgzIDIyNiA0NDR6bTI0NCAyMjJWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM4MCIgdW5pY29kZT0i74aVIiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTExNTIgNzA0cTAtMTkxLTk0LjUtMzUzVDgwMSA5NC41IDQ0OCAwSDI4OHEtMTQgMC0yMyA5dC05IDIzdjYxMUw0MSA1NzdxLTMtMS05LTEtMTAgMC0xOSA2LTEzIDEwLTEzIDI2djEyOHEwIDIzIDIzIDMxbDIzMyA3MXY5M0w0MSA4NjVxLTMtMS05LTEtMTAgMC0xOSA2LTEzIDEwLTEzIDI2djEyOHEwIDIzIDIzIDMxbDIzMyA3MXYyNTBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMtOXQ5LTIzdi0xODFsMzc1IDExNnExNSA1IDI4LTV0MTMtMjZ2LTEyOHEwLTIzLTIzLTMxbC0zOTMtMTIxdi05M2wzNzUgMTE2cTE1IDUgMjgtNXQxMy0yNlY4NjRxMC0yMy0yMy0zMUw0ODAgNzEyVjIyNXExODggMTMgMzE4IDE1MXQxMzAgMzI4cTAgMTQgOSAyM3QyMyA5aDE2MHExNCAwIDIzLTl0OS0yM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0icGx1c19zcXVhcmVfbyIgdW5pY29kZT0i74aWIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTExNTIgNzM2di02NHEwLTE0LTktMjN0LTIzLTlINzY4VjI4OHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2MzUySDI4OHEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDM1MnYzNTJxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMy05dDktMjNWNzY4aDM1MnExNCAwIDIzLTl0OS0yM3ptMTI4LTQ0OHY4MzJxMCA2Ni00NyAxMTN0LTExMyA0N0gyODhxLTY2IDAtMTEzLTQ3dC00Ny0xMTNWMjg4cTAtNjYgNDctMTEzdDExMy00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzem0xMjggODMyVjI4OHEwLTExOS04NC41LTIwMy41VDExMjAgMEgyODhRMTY5IDAgODQuNSA4NC41VDAgMjg4djgzMnEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDgzMnExMTkgMCAyMDMuNS04NC41VDE0MDggMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM4MiIgdW5pY29kZT0i74aXIiBob3Jpei1hZHYteD0iMjE3NiIgZD0iTTYyMCA0MTZxLTExMC02NC0yNjgtNjRIMjI0djY0aC02NHEtMTMgMC0yMi41IDIzLjVUMTI4IDQ5NnEwIDI0IDcgNDktNTggMi05Ni41IDEwLjVUMCA1NzZ0MzguNSAyMC41VDEzNSA2MDdxLTcgMjUtNyA0OSAwIDMzIDkuNSA1Ni41VDE2MCA3MzZoNjR2NjRoMTI4cTE1OCAwIDI2OC02NGgxMTEzcTQyLTcgMTA2LjUtMTh0ODAuNS0xNHE4OS0xNSAxNTAtNDAuNXQ4My41LTQ3LjUgMjIuNS00MC0yMi41LTQwLTgzLjUtNDcuNS0xNTAtNDAuNXEtMTYtMy04MC41LTE0VDE3MzMgNDE2SDYyMHptMTExOSAyNTJxNTMtMzYgNTMtOTJ0LTUzLTkybDgxLTMwcTY4IDQ4IDY4IDEyMnQtNjggMTIyek02MjUgNDAwaDEwMTVxLTIxNy0zOC00NTYtODAtNTcgMC0xMTMtMjR0LTgzLTQ4bC0yOC0yNEw2NzItNjRxLTI2LTI2LTcwLjUtNDVUNTEyLTEyOGgtOTZsLTkzIDQ2NGgyOXExNTcgMCAyNzMgNjR6TTM1MiA4MTZoLTI5bDkzIDQ2NGg5NnE0NiAwIDkwLTE5dDcwLTQ1bDI4OC0yODhxNC00IDExLTEwLjV0MzAuNS0yMyA0OC41LTI5IDYxLjUtMjNUMTE4NCA4MzJsNDU2LTgwSDYyNXEtMTE2IDY0LTI3MyA2NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM4MyIgdW5pY29kZT0i74aYIiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE1MTkgNzYwcTYyIDAgMTAzLjUtNDAuNVQxNjY0IDYxOHEwLTk3LTkzLTEzMGwtMTcyLTU5IDU2LTE2N3E3LTIxIDctNDcgMC01OS00Mi0xMDJ0LTEwMS00M3EtNDcgMC04NS41IDI3dC01My41IDcybC01NSAxNjUtMzEwLTEwNiA1NS0xNjRxOC0yNCA4LTQ3IDAtNTktNDItMTAydC0xMDItNDNxLTQ3IDAtODUgMjd0LTUzIDcybC01NSAxNjMtMTUzLTUzcS0yOS05LTUwLTktNjEgMC0xMDEuNSA0MFQxOTYgMjEzcTAgNDcgMjcuNSA4NXQ3MS41IDUzbDE1NiA1My0xMDUgMzEzLTE1Ni01NHEtMjYtOC00OC04LTYwIDAtMTAxIDQwLjVUMCA3OTZxMCA0NyAyNy41IDg1VDk5IDkzNGwxNTcgNTMtNTMgMTU5cS04IDI0LTggNDcgMCA2MCA0MiAxMDIuNXQxMDIgNDIuNXE0NyAwIDg1LTI3dDUzLTcybDU0LTE2MCAzMTAgMTA1LTU0IDE2MHEtOCAyNC04IDQ3IDAgNTkgNDIuNSAxMDJ0MTAxLjUgNDNxNDcgMCA4NS41LTI3LjV0NTMuNS03MS41bDUzLTE2MSAxNjIgNTVxMjEgNiA0MyA2IDYwIDAgMTAyLjUtMzkuNXQ0Mi41LTk4LjVxMC00NS0zMC04MS41dC03NC01MS41bC0xNTctNTQgMTA1LTMxNiAxNjQgNTZxMjQgOCA0NiA4ek03MjUgNDk4bDMxMCAxMDUtMTA1IDMxNS0zMTAtMTA3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzg0IiB1bmljb2RlPSLvhpkiIGQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHptMzItMTA1NnY0MzZxLTMxLTM1LTY0LTU1LTM0LTIyLTEzMi41LTg1VDkzMiA1NDlxLTk4LTY5LTE2NC02OXQtMTY0IDY5cS00NyAzMi0xNDIgOTIuNVQzMjAgNzM0cS0xMiA4LTMzIDI3dC0zMSAyN1YzNTJxMC00MCAyOC02OHQ2OC0yOGg4MzJxNDAgMCA2OCAyOHQyOCA2OHptMCA1NzNxMCA0MS0yNy41IDcwdC02OC41IDI5SDM1MnEtNDAgMC02OC0yOHQtMjgtNjhxMC0zNyAzMC41LTc2LjVUMzU0IDc4N3E0Ny0zMiAxMzcuNS04OVQ2MjEgNjE1cTMtMiAxNy0xMS41dDIxLTE0IDIxLTEzIDIzLjUtMTNUNzI1IDU1NHQyMi41LTcuNVQ3NjggNTQ0dDIwLjUgMi41VDgxMSA1NTR0MjEuNSA5LjUgMjMuNSAxMyAyMSAxMyAyMSAxNCAxNyAxMS41bDI2NyAxNzRxMzUgMjMgNjYuNSA2Mi41VDEyODAgOTI1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzg1IiB1bmljb2RlPSLvhpoiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI3IDY0MHEwIDE2MyA2NyAzMTNMNTYxLTUyUTM2NSA0MyAyNDYgMjI5VDEyNyA2NDB6bTEyODggMzlxMC0xOS0yLjUtMzguNXQtMTAtNDkuNS0xMS41LTQ0LTE3LjUtNTktMTcuNS01OGwtNzYtMjU2LTI3OCA4MjZxNDYgMyA4OCA4IDE5IDIgMjYgMTguNXQtMi41IDMxLTI4LjUgMTMuNWwtMjA1LTEwcS03NSAxLTIwMiAxMC0xMiAxLTIwLjUtNXQtMTEuNS0xNS0xLjUtMTguNSA5LTE2LjUgMTkuNS04bDgwLTggMTIwLTMyOC0xNjgtNTA0LTI4MCA4MzJxNDYgMyA4OCA4IDE5IDIgMjYgMTguNXQtMi41IDMxVDUwOCAxMDcxbC0yMDUtMTBxLTcgMC0yMyAuNXQtMjYgLjVxMTA1IDE2MCAyNzQuNSAyNTMuNVQ4OTYgMTQwOXExNDcgMCAyODAuNS01M3QyMzguNS0xNDloLTEwcS01NSAwLTkyLTQwLjV0LTM3LTk1LjVxMC0xMiAyLTI0dDQtMjEuNSA4LTIzIDktMjEgMTItMjIuNSAxMi41LTIxIDE0LjUtMjQgMTQtMjNxNjMtMTA3IDYzLTIxMnpNOTA5IDU3M2wyMzctNjQ3cTEtNiA1LTExLTEyNi00NC0yNTUtNDQtMTEyIDAtMjE3IDMyem02NjEgNDM2cTk1LTE3NCA5NS0zNjkgMC0yMDktMTA0LTM4NS41VDEyODItMjRsMjM1IDY3OHE1OSAxNjkgNTkgMjc2IDAgNDItNiA3OXptLTY3NCA1MjdxMTgyIDAgMzQ4LTcxdDI4Ni0xOTEgMTkxLTI4NiA3MS0zNDgtNzEtMzQ4VDE1MzAgNnQtMjg2LTE5MS0zNDgtNzEtMzQ4IDcxVDI2MiA2IDcxIDI5MiAwIDY0MHQ3MSAzNDggMTkxIDI4NiAyODYgMTkxIDM0OCA3MXptMC0xNzUxcTE3MyAwIDMzMS41IDY4dDI3MyAxODIuNSAxODIuNSAyNzMgNjggMzMxLjUtNjggMzMxLjUtMTgyLjUgMjczLTI3MyAxODIuNS0zMzEuNSA2OC0zMzEuNS02OC0yNzMtMTgyLjUtMTgyLjUtMjczVDQxIDY0MHQ2OC0zMzEuNSAxODIuNS0yNzMgMjczLTE4Mi41VDg5Ni0yMTV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zODYiIHVuaWNvZGU9Iu+GmyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMDg2IDE1MzZWMEw4MTQtMTI4UTU4Ni0xMDggNDAwLTI2VDEwNyAxODIuNSAwIDQ1NXEwIDE0MCAxMDAuNSAyNjMuNXQyNzUgMjA1LjVUNzY3IDEwMzJWODYwcS0yMTctMzgtMzU2LjUtMTUwVDI3MSA0NTVxMC0xNTIgMTU0LjUtMjY3VDgxNCA0M3YxMzYwem02NjktNTgybDM3LTM5MC01MjUgMTE0IDE0NyA4M3EtMTE5IDcwLTI4MCA5OXYxNzJxMjc3LTMzIDQ4MS0xNTd6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zODciIHVuaWNvZGU9Iu+GnCIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik05NjAgMTUzNmw5NjAtMzg0di0xMjhoLTEyOHEwLTI2LTIwLjUtNDV0LTQ4LjUtMTlIMTk3cS0yOCAwLTQ4LjUgMTl0LTIwLjUgNDVIMHYxMjh6TTI1NiA4OTZoMjU2VjEyOGgxMjh2NzY4aDI1NlYxMjhoMTI4djc2OGgyNTZWMTI4aDEyOHY3NjhoMjU2VjEyOGg1OXEyOCAwIDQ4LjUtMTl0MjAuNS00NVYwSDEyOHY2NHEwIDI2IDIwLjUgNDV0NDguNSAxOWg1OXY3Njh6TTE4NTEtNjRxMjggMCA0OC41LTE5dDIwLjUtNDV2LTEyOEgwdjEyOHEwIDI2IDIwLjUgNDVUNjktNjRoMTc4MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM4OCIgdW5pY29kZT0i74adIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTE3NzQgNzAwbDE4LTMxNnE0LTY5LTgyLTEyOHQtMjM1LTkzLjUtMzIzLTM0LjUtMzIzIDM0LjVUNTk0IDI1NnQtODIgMTI4bDE4IDMxNiA1NzQtMTgxcTIyLTcgNDgtN3Q0OCA3em01MzAgMzI0cTAtMjMtMjItMzFMMTE2MiA2NDFxLTQtMS0xMC0xdC0xMCAxTDQ5MCA4NDdxLTQzLTM0LTcxLTExMS41VDM4NSA1NTdxNjMtMzYgNjMtMTA5IDAtNjktNTgtMTA3bDU4LTQzM3EyLTE0LTgtMjUtOS0xMS0yNC0xMUgyMjRxLTE1IDAtMjQgMTEtMTAgMTEtOCAyNWw1OCA0MzNxLTU4IDM4LTU4IDEwNyAwIDczIDY1IDExMSAxMSAyMDcgOTggMzMwTDIyIDk5M3EtMjIgOC0yMiAzMXQyMiAzMWwxMTIwIDM1MnE0IDEgMTAgMXQxMC0xbDExMjAtMzUycTIyLTggMjItMzF6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zODkiIHVuaWNvZGU9Iu+GniIgZD0iTTg1OSA1NzlsMTMtNzA3cS02MiAxMS0xMDUgMTEtNDEgMC0xMDUtMTFsMTMgNzA3cS00MCA2OS0xNjguNSAyOTUuNVQyOTAgMTI0OXQtMTgxIDI4N3E1OC0xNSAxMDgtMTUgNDQgMCAxMTEgMTUgNjMtMTExIDEzMy41LTIyOS41dDE2Ny0yNzYuNVQ3NjcgODAzcTM3IDYxIDEwOS41IDE3Ny41dDExNy41IDE5MCAxMDUgMTc2IDEwNyAxODkuNXE1NC0xNCAxMDctMTQgNTYgMCAxMTQgMTQtMjgtMzktNjAtODguNXQtNDkuNS03OC41LTU2LjUtOTYtNDktODRxLTE0Ni0yNDgtMzUzLTYxMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFBMCIgdW5pY29kZT0i74agIiBkPSJNNzY4IDc1MGg3MjVxMTItNjcgMTItMTI4IDAtMjE3LTkxLTM4Ny41VDExNTQuNS0zMiA3NjgtMTI4cS0xNTcgMC0yOTkgNjAuNVQyMjQgOTYgNjAuNSAzNDEgMCA2NDB0NjAuNSAyOTlUMjI0IDExODR0MjQ1IDE2My41IDI5OSA2MC41cTMwMCAwIDUxNS0yMDFsLTIwOS0yMDFxLTEyMyAxMTktMzA2IDExOS0xMjkgMC0yMzguNS02NVQzNTYgODgzLjUgMjkyIDY0MHQ2NC0yNDMuNVQ1MjkuNSAyMjAgNzY4IDE1NXE4NyAwIDE2MCAyNHQxMjAgNjAgODIgODIgNTEuNSA4NyAyMi41IDc4SDc2OHYyNjR6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImYxYTEiIHVuaWNvZGU9Iu+GoSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMDk1IDM2OXExNi0xNiAwLTMxLTYyLTYyLTE5OS02MnQtMTk5IDYycS0xNiAxNSAwIDMxIDYgNiAxNSA2dDE1LTZxNDgtNDkgMTY5LTQ5IDEyMCAwIDE2OSA0OSA2IDYgMTUgNnQxNS02ek03ODggNTUwcTAtMzctMjYtNjN0LTYzLTI2LTYzLjUgMjYtMjYuNSA2M3EwIDM4IDI2LjUgNjR0NjMuNSAyNiA2My0yNi41IDI2LTYzLjV6bTM5NSAwcTAtMzctMjYuNS02M3QtNjMuNS0yNi02MyAyNi0yNiA2MyAyNiA2My41IDYzIDI2LjUgNjMuNS0yNiAyNi41LTY0em0yNTEgMTIwcTAgNDktMzUgODR0LTg1IDM1LTg2LTM2cS0xMzAgOTAtMzExIDk2bDYzIDI4MyAyMDAtNDVxMC0zNyAyNi02M3Q2My0yNiA2My41IDI2LjUgMjYuNSA2My41LTI2LjUgNjMuNS02My41IDI2LjVxLTU0IDAtODAtNTBsLTIyMSA0OXEtMTkgNS0yNS0xNmwtNjktMzEycS0xODAtNy0zMDktOTctMzUgMzctODcgMzctNTAgMC04NS0zNXQtMzUtODRxMC0zNSAxOC41LTY0dDQ5LjUtNDRxLTYtMjctNi01NiAwLTE0MiAxNDAtMjQzdDMzNy0xMDFxMTk4IDAgMzM4IDEwMXQxNDAgMjQzcTAgMzItNyA1NyAzMCAxNSA0OCA0My41dDE4IDYzLjV6bTM1OC0zMHEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzkyIiB1bmljb2RlPSLvhqIiIGQ9Ik05MzkgNDA3cTEzLTEzIDAtMjYtNTMtNTMtMTcxLTUzdC0xNzEgNTNxLTEzIDEzIDAgMjYgNSA2IDEzIDZ0MTMtNnE0Mi00MiAxNDUtNDJ0MTQ1IDQycTUgNiAxMyA2dDEzLTZ6TTY3NiA1NjNxMC0zMS0yMy01NHQtNTQtMjMtNTQgMjMtMjMgNTRxMCAzMiAyMi41IDU0LjVUNTk5IDY0MHQ1NC41LTIyLjVUNjc2IDU2M3ptMzM4IDBxMC0zMS0yMy01NHQtNTQtMjMtNTQgMjMtMjMgNTRxMCAzMiAyMi41IDU0LjVUOTM3IDY0MHQ1NC41LTIyLjVUMTAxNCA1NjN6bTIxNSAxMDNxMCA0Mi0zMCA3MnQtNzMgMzBxLTQyIDAtNzMtMzEtMTEzIDc4LTI2NyA4Mmw1NCAyNDMgMTcxLTM5cTEtMzIgMjMuNS01NHQ1My41LTIycTMyIDAgNTQuNSAyMi41dDIyLjUgNTQuNS0yMi41IDU0LjUtNTQuNSAyMi41cS00OCAwLTY5LTQzbC0xODkgNDJxLTE3IDUtMjEtMTNsLTYwLTI2OHEtMTU0LTYtMjY1LTgzLTMwIDMyLTc0IDMyLTQzIDAtNzMtMzB0LTMwLTcycTAtMzAgMTYtNTV0NDItMzhxLTUtMjUtNS00OCAwLTEyMiAxMjAtMjA4LjVUNzY5IDIzMHExNzAgMCAyOTAgODYuNVQxMTc5IDUyNXEwIDI1LTYgNDkgMjUgMTMgNDAuNSAzNy41VDEyMjkgNjY2em0zMDcgNDU0VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il8zOTMiIHVuaWNvZGU9Iu+GoyIgZD0iTTg2NiA2OTdsOTAgMjd2NjJxMCA3OS01OCAxMzV0LTEzOCA1Ni0xMzgtNTUuNVQ1NjQgNzg3VjUwNHEwLTIwLTE0LTMzLjVUNTE3IDQ1N3QtMzIuNSAxMy41VDQ3MSA1MDR2MTIwSDMyMFY1MDJxMC04MiA1Ny41LTEzOVQ1MTcgMzA2cTgxIDAgMTM4LjUgNTYuNVQ3MTMgNDk5djI4MHEwIDE5IDEzLjUgMzN0MzMuNSAxNHExOSAwIDMyLjUtMTR0MTMuNS0zM3YtNTR6bTMzMy0xOTV2MTIyaC0xNTBWNDk4cTAtMjAtMTMuNS0zMy41VDEwMDIgNDUxcS0xOSAwLTMyLjUgMTRUOTU2IDQ5OHYxMjNsLTkwLTI2LTYwIDI4VjUwMHEwLTgwIDU4LTEzN3QxMzktNTcgMTM4LjUgNTcgNTcuNSAxMzl6bTMzNyAxMzhxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImYxYTQiIHVuaWNvZGU9Iu+GpCIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMDYyIDgyNHYxMThxMCA0Mi0zMCA3MnQtNzIgMzAtNzItMzAtMzAtNzJWMzMwcTAtMTc1LTEyNi0yOTlUNDI5LTkzUTI1MS05MyAxMjUuNSAzMi41VDAgMzM2djI2NmgzMjhWMzQwcTAtNDMgMzAtNzIuNXQ3Mi0yOS41IDcyIDI5LjUgMzAgNzIuNXY2MjBxMCAxNzEgMTI2LjUgMjkyVDk2MCAxMzczcTE3NiAwIDMwMi0xMjJ0MTI2LTI5NFY4MjFsLTE5NS01OHptNTMwLTIyMmgzMjhWMzM2cTAtMTc4LTEyNS41LTMwMy41VDE0OTEtOTNxLTE3NyAwLTMwMyAxMjQuNVQxMDYyIDMzMnYyNjhsMTMxLTYxIDE5NSA1OFYzMjdxMC00MiAzMC03MS41dDcyLTI5LjUgNzIgMjkuNSAzMCA3MS41djI3NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM5NSIgdW5pY29kZT0i74alIiBkPSJNMTQ3MiAxNjB2NDgwSDc2OHY3MDRIMjg4cS05MyAwLTE1OC41LTY1LjVUNjQgMTEyMFY2NDBoNzA0Vi02NGg0ODBxOTMgMCAxNTguNSA2NS41VDE0NzIgMTYwem02NCA5NjBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM5NiIgdW5pY29kZT0i74amIiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTMyOCAxMjU0aDIwNFYyNzFIMHY2OTdoMzI4djI4NnptMC04MTl2MzY5SDIwNVY0MzVoMTIzem0yODYgNTMzVjI3MWgyMDV2Njk3SDYxNHptMCAyODZ2LTIwNGgyMDV2MjA0SDYxNHptMjg3LTI4Nmg1MzNWMjZIOTAxdjE2M2gzMjh2ODJIOTAxdjY5N3ptMzI4LTUzM3YzNjloLTEyM1Y0MzVoMTIzem0yODcgNTMzaDUzMlYyNmgtNTMydjE2M2gzMjd2ODJoLTMyN3Y2OTd6bTMyNy01MzN2MzY5aC0xMjNWNDM1aDEyM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM5NyIgdW5pY29kZT0i74anIiBkPSJNMTA0NiA1MTZxMC02NC0zOC0xMDl0LTkxLTQ1cS00MyAwLTcwIDE1djI3N3EyOCAxNyA3MCAxNyA1MyAwIDkxLTQ1LjV0MzgtMTA5LjV6TTcwMyA5NDRxMC02NC0zOC0xMDkuNVQ1NzQgNzg5cS00MyAwLTcwIDE1djI3N3EyOCAxNyA3MCAxNyA1MyAwIDkxLTQ1dDM4LTEwOXptNTYyLTQzMXEwIDEzNC04OCAyMjl0LTIxMyA5NXEtMjAgMC0zOS0zLTIzLTc4LTc4LTEzNi04Ny05NS0yMTEtMTAxVi0zOUw4NDcgMnYyMDZxNTEtMTkgMTE3LTE5IDEyNSAwIDIxMyA5NXQ4OCAyMjl6TTkyMiA5NDBxMCAxMzQtODguNSAyMjlUNjIwIDEyNjRxLTc0IDAtMTQxLTM2SDI5M1YzODhsMjExIDQxdjIwNnE1NS0xOSAxMTYtMTkgMTI1IDAgMjEzLjUgOTVUOTIyIDk0MHptNjE0IDE4MFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfMzk4IiB1bmljb2RlPSLvhqgiIGhvcml6LWFkdi14PSIyMDM4IiBkPSJNMTIyMiA2MDdxNzUgMyAxNDMuNS0yMC41dDExOC01OC41IDEwMS05NC41IDg0LTEwOFQxNzQ0IDIwNXEzMy01NiA3OC41LTEwOXQ3NS41LTgwLjUgOTktODguNXEtNDgtMzAtMTA4LjUtNTcuNXQtMTM4LjUtNTktMTE0LTQ3LjVxLTQ0IDM3LTc0IDExNXQtNDMuNSAxNjQuNS0zMyAxODAuNS00Mi41IDE2OC41LTcyLjUgMTIzVDEyNDggNTYzbC0xMC0yLTYtNHE0LTUgMTMtMTQgNi01IDI4LTIzLjV0MjUuNS0yMiAxOS0xOCAxOC0yMC41IDExLjUtMjEgMTAuNS0yNy41IDQuNS0zMSA0LTQwLjVsMS0zM3ExLTI2LTIuNS01Ny41dC03LjUtNTItMTIuNS01OC41LTExLjUtNTNxLTM1IDEtMTAxLTkuNVQxMTM0IDY1cS0zOSAwLTcyIDEwLTIgMTYtMiA0NyAwIDc0IDMgOTYgMiAxMyAzMS41IDQxLjV0NTcgNTlUMTE3OCAzNzBxLTI0IDItNDMtMjQtMzYtNTMtMTExLjUtOTkuNVQ4ODcgMjAwcS0yNSAwLTc1LjUgNjNUNzA1IDQwMi41IDYyMSA0OTlxLTYgNC0yNyAzMFExMTIgNDE3IDgxIDQxN3EtMTYgMC0yOCAxMXQtMTIgMjdxMCAxNSA4LjUgMjYuNVQ3MiA0OTZsNDg2IDEwNnEtOCAxNC04IDI1dDUuNSAxNy41IDE2IDExLjUgMjAgNyAyMyA0LjVUNjMzIDY3MnE0IDEgMTUuNSA3LjVUNjY2IDY4NnExNSAwIDI4LTE2dDIwLTMzcTE2MyAzNyAxNzIgMzcgMTcgMCAyOS41LTExdDEyLjUtMjhxMC0xNS04LjUtMjZUODk2IDU5NWwtMTgyLTQwLTEtMTZxLTEtMjYgODEuNS0xMTcuNVQ4OTkgMzMwcTQ3IDAgMTE5IDgwdDcyIDEyOXEwIDM2LTIzLjUgNTN0LTUxIDE4LjUtNTEgMTEuNS0yMy41IDM0cTAgMTYgMTAgMzRsLTY4IDE5cTQzIDQ0IDQzIDExNyAwIDI2LTUgNTggODIgMTYgMTQ0IDE2IDQ0IDAgNzEuNS0xLjV0NDguNS04LjUgMzEtMTMuNSAyMC41LTI0LjUgMTUuNS0zMy41IDE3LTQ3LjUgMjQtNjBsNTAgMjVxLTMtNDAtMjMtNjB0LTQyLjUtMjEtNDAtNi41VDEyMjEgNjI4em02MCAyMzVxLTUgNS0xMy41IDE1LjV0LTEyIDE0LjUtMTAuNSAxMS41LTEwIDEwLjVsLTggOC04LjUgNy41LTggNS04LjUgNC41cS03IDMtMTQuNSA1dC0yMC41IDIuNS0yMiAuNWgtNzBxLTEyNiAwLTIxNy00MyAxNiAzMCAzNiA0Ni41dDU0IDI5LjUgNjUuNSAzNiA0NiAzNi41IDUwIDU1IDQzLjUgNTAuNXExMi05IDI4LTMxLjV0MzItMzYuNSAzOC0xM2wxMiAxdi03NmwyMi0xcTI0NyA5NSAzNzEgMTkwIDI4IDIxIDUwIDM5dDQyLjUgMzcuNSAzMyAzMSAyOS41IDM0IDI0IDMxIDI0LjUgMzcgMjMgMzggMjcgNDcuNSAyOS41IDUzbDcgOXEtMi01My00My0xMzktNzktMTY1LTIwNS0yNjR0LTMwNi0xNDJxLTE0LTMtNDItNy41dC01MC05LjUtMzktMTRxMy0xOSAyNC41LTQ2dDIxLjUtMzRxMC0xMS0yNi0zMHpNMTA2MS03OXEzOSAyNiAxMzEuNSA0Ny41VDEzMzktMTBxOSAwIDIyLjUtMTUuNXQyOC00Mi41IDI2LTUwIDI0LTUxIDE0LjUtMzNxLTEyMS00NS0yNDQtNDUtNjEgMC0xMjUgMTF6TTgyMiA1NjhsNDggMTIgMTA5LTE3Ny03My00OHptNTAxLTUxN3EzLTE1IDMtMTYgMC03LTE3LjUtMTQuNXQtNDYtMTMtNTQtOS41LTUzLjUtNy41LTMyLTQuNWwtNyA0M3EyMSAyIDYwLjUgOC41dDcyIDEwVDEzMDkgNTFoMTR6TTg2NiA2NzlsLTk2LTIwLTYgMTdxMTAgMSAzMi41IDd0MzQuNSA2cTE5IDAgMzUtMTB6bTE5NS02MzRoMzFsMTAtODMtNDEtMTJ2OTV6bTg4OSAxNDkwdjEtMXptMCAwbC0xLTUtMi0yIDEgM3ptMCAwbDEgMXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzM5OSIgdW5pY29kZT0i74apIiBkPSJNMTE2Ny01MHEtNSAxOS0yNCA1LTMwLTIyLTg3LTM5dC0xMzEtMTdxLTEyOSAwLTE5MyA0OS01IDQtMTMgNC0xMSAwLTI2LTEyLTctNi03LjUtMTZ0Ny41LTIwcTM0LTMyIDg3LjUtNDZUODgzLTE1NC41dDk5IDQuNXE0MSA0IDg0LjUgMjAuNXQ2NSAzMFQxMTYwLTc5cTEyIDEyIDcgMjl6bS0zOSAxMTVxLTE5IDQ3LTM5IDYxLTIzIDE1LTc2IDE1LTQ3IDAtNzEtMTAtMjktMTItNzgtNTYtMjYtMjQtMTItNDQgOS04IDE3LjUtNC41VDkwMSA1MHEzIDIgMTAuNSA4LjVUOTIyIDY3dDEwIDcgMTEuNSA3IDEyLjUgNSAxNSA0LjUgMTYuNSAyLjUgMjAuNSAxcTI3IDAgNDQuNS03LjV0MjMtMTQuNSAxMy41LTIycTEwLTE3IDEyLjUtMjB0MTIuNSAxcTIzIDEyIDE0IDM0em0zNTUgMjgxcTAgMjItNSA0NC41dC0xNi41IDQ1LTM0IDM2LjUtNTIuNSAxNHEtMzMgMC05Ny00MS41VDExNDkgMzYxdC0xMDEtNDJxLTI3LTEtNjMuNSAxOXQtNzYgNDktODMuNSA1OC0xMDAgNDktMTExIDE5cS0xMTUtMS0xOTctNzguNVQzMzMgMjU2cS0yLTExMiA3NC0xNjQgMjktMjAgNjIuNS0yOC41VDU3MyA1NXE1NyAwIDEzMiAzMi41dDEzNCA3MVQ5NTkgMjI5dDkzIDMxcTI2LTEgNjUtMzEuNXQ3MS41LTY3IDY4LTY3LjUgNTUuNS0zMnEzNS0zIDU4LjUgMTR0NTUuNSA2M3EyOCA0MSA0Mi41IDEwMXQxNC41IDEwNnptNTMgMTYwcTAtMTY0LTYyLTMwNC41dC0xNjYtMjM2VDEwNjUuNS0xODQgNzc1LTIzOHQtMjkzIDU3LjUtMjQ3LjUgMTU3VDY0IDIxOCAwIDUyMHEwIDg5IDE5LjUgMTcyLjV0NDkgMTQ1LjVUMTM5IDk1Ni41dDc4LjUgOTRUMjk2IDExMjB0NjQuNSA0Ni41VDQwMyAxMTkxcTE0IDggNTEgMjYuNXQ1NC41IDI4LjUgNDggMzAgNjAuNSA0NHEzNiAyOCA1OCA3Mi41dDMwIDEyNS41cTEyOS0xNTUgMTg2LTE5MyA0NC0yOSAxMzAtNjh0MTI5LTY2cTIxLTEzIDM5LTI1dDYwLjUtNDYuNSA3Ni03MC41IDc1LTk1IDY5LTEyMiA0Ny0xNDguNVQxNTM2IDUwNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQwMCIgdW5pY29kZT0i74aqIiBkPSJNMTA3MCA0NjNMOTEwIDMwMyA3NTkgMTUxbC0zMC0zMHEtNjUtNjQtMTUxLjUtODdUNDA2IDMycS0xNi03MC03Mi0xMTV0LTEyOS00NXEtODUgMC0xNDUgNjAuNVQwIDc4cTAgNzIgNDQuNSAxMjhUMTU4IDI3OHEtMjIgODYgMSAxNzN0ODggMTUybDEyIDEyIDE1MS0xNTItMTEtMTFxLTM3LTM3LTM3LTg5dDM3LTkwcTM3LTM3IDg5LTM3dDg5IDM3bDMwIDMwIDE1MSAxNTIgMTYxIDE2MHptLTM0MSA2ODJsMTItMTItMTUyLTE1Mi0xMiAxMnEtMzcgMzctODkgMzd0LTg5LTM3LTM3LTg5LjUgMzctODkuNWwyOS0yOSAxNTItMTUyIDE2MC0xNjAtMTUxLTE1Mi0xNjEgMTYwLTE1MSAxNTItMzAgMzBxLTY4IDY3LTkwIDE1OS41dDUgMTc5LjVxLTcwIDE1LTExNSA3MVQyIDEyMDJxMCA4NSA2MCAxNDUuNXQxNDUgNjAuNXE3NiAwIDEzMy41LTQ5dDY5LjUtMTIzcTg0IDIwIDE2OS41LTMuNVQ3MjkgMTE0NXpNMTUzNiA3OHEwLTg1LTYwLTE0NS41VDEzMzEtMTI4cS03NCAwLTEzMSA0N3QtNzEgMTE4cS04Ni0yOC0xNzkuNS02VDc4OCAxMjFsLTExIDEyIDE1MSAxNTIgMTItMTJxMzctMzcgODktMzd0ODkgMzcgMzcgODktMzcgODlsLTMwIDMwLTE1MiAxNTItMTYwIDE2MCAxNTIgMTUyIDE2MC0xNjAgMTUyLTE1MiAyOS0zMHE2NC02NCA4Ny41LTE1MC41VDEzNTkgMjgxcTc2LTExIDEyNi41LTY4LjVUMTUzNiA3OHptLTIgMTEyNHEwLTc3LTUxLTEzNXQtMTI3LTY5cTI2LTg1IDMtMTc2LjVUMTI2OSA2NjNsLTEyLTEyLTE1MSAxNTIgMTIgMTJxMzcgMzcgMzcgODl0LTM3IDg5LTg5IDM3LTg5LTM3bC0zMC0zMC0xNTItMTUyLTE2MC0xNjAtMTUyIDE1MiAxNjEgMTYwIDE1MiAxNTIgMjkgMzBxNjcgNjcgMTU5IDg5LjV0MTc4LTMuNXExMSA3NSA2OC41IDEyNnQxMzUuNSA1MXE4NSAwIDE0NS02MC41dDYwLTE0NS41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmMWFiIiB1bmljb2RlPSLvhqsiIGQ9Ik02NTQgNDU4cS0xLTMtMTIuNS41VDYxMCA0NzBsLTIwIDlxLTQ0IDIwLTg3IDQ5LTcgNS00MSAzMS41VDQyNCA1ODhxLTY3LTEwMy0xMzQtMTgxLTgxLTk1LTEwNS0xMTAtNC0yLTE5LjUtNHQtMTguNSAwcTYgNCA4MiA5MiAyMSAyNCA4NS41IDExNVQzOTMgNjE4cTE3IDMwIDUxIDk4LjV0MzYgNzcuNXEtOCAxLTExMC0zMy04LTItMjcuNS03LjVUMzA4IDc0NHQtMTctNXEtMi0yLTItMTAuNXQtMS05LjVxLTUtMTAtMzEtMTUtMjMtNy00NyAwLTE4IDQtMjggMjEtNCA2LTUgMjMgNiAyIDI0LjUgNXQyOS41IDZxNTggMTYgMTA1IDMyIDEwMCAzNSAxMDIgMzUgMTAgMiA0MyAxOS41dDQ0IDIxLjVxOSAzIDIxLjUgOHQxNC41IDUuNSA2LS41cTItMTItMS0zMyAwLTItMTIuNS0yN1Q1MjcgNzY2LjUgNTEwIDczM3EtMjUtNTAtNzctMTMxbDY0LTI4cTEyLTYgNzQuNS0zMnQ2Ny41LTI4cTQtMSAxMC41LTI1LjVUNjU0IDQ1OHpNNDQ5IDk0NHEzLTE1LTQtMjgtMTItMjMtNTAtMzgtMzAtMTItNjAtMTItMjYgMy00OSAyNi0xNCAxNS0xOCA0MWwxIDNxMy0zIDE5LjUtNXQyNi41IDAgNTggMTZxMzYgMTIgNTUgMTQgMTcgMCAyMS0xN3ptNjk4LTEyOWw2My0yMjctMTM5IDQyek0zOSAxNWw2OTQgMjMydjEwMzJMMzkgMTA0NlYxNXptMTI0MSAzMTdsMTAyLTMxLTE4MSA2NTctMTAwIDMxLTIxNi01MzYgMTAyLTMxIDQ1IDExMCAyMTEtNjV6bS01MDMgOTYybDU3My0xODR2Mzgwek0xMDg4LTI5bDE1OC0xMy01NC0xNjAtNDAgNjZxLTEzMC04My0yNzYtMTA4LTU4LTEyLTkxLTEyaC04NHEtNzkgMC0xOTkuNSAzOVQzMTgtMTMycS04IDctOCAxNiAwIDggNSAxMy41dDEzIDUuNXE0IDAgMTgtNy41dDMwLjUtMTYuNSAyMC41LTExcTczLTM3IDE1OS41LTYxLjVUNzE0LTIxOHE5NSAwIDE2NyAxNC41dDE1NyA1MC41cTE1IDcgMzAuNSAxNS41dDM0IDE5VDExMzEtMTAyem00NDggMTA3OVYtMjlMNzYyIDIxN3EtMTQtNi0zNzUtMTI3LjVUMTktMzJRNi0zMiAxLTE5cTAgMS0xIDN2MTA3OHEzIDkgNCAxMCA1IDYgMjAgMTEgMTA3IDM2IDE0OSA1MHYzODRsNTU4LTE5OHEyIDAgMTYwLjUgNTV0MzE2IDEwOC41VDEzNjkgMTUzNnEyMCAwIDIwLTIxdi00MTh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MDIiIHVuaWNvZGU9Iu+GrCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yODggMTE1MnE2NiAwIDExMy00N3Q0Ny0xMTNWLTk2cTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwLTk2Vjk5MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTI4em0xMzc2LTE2M3E1OC0zNCA5My05M3QzNS0xMjhWMHEwLTEwNi03NS0xODF0LTE4MS03NUg2NzJxLTY2IDAtMTEzIDQ3VDUxMi05NnYxNTM2cTAgNDAgMjggNjh0NjggMjhoNjcycTQwIDAgODgtMjB0NzYtNDhsMTUyLTE1MnEyOC0yOCA0OC03NnQyMC04OFY5ODl6TTkyOCAwdjEyOHEwIDE0LTkgMjN0LTIzIDlINzY4cS0xNCAwLTIzLTl0LTktMjNWMHEwLTE0IDktMjN0MjMtOWgxMjhxMTQgMCAyMyA5dDkgMjN6bTAgMjU2djEyOHEwIDE0LTkgMjN0LTIzIDlINzY4cS0xNCAwLTIzLTl0LTktMjNWMjU2cTAtMTQgOS0yM3QyMy05aDEyOHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2MTI4cTAgMTQtOSAyM3QtMjMgOUg3NjhxLTE0IDAtMjMtOXQtOS0yM1Y1MTJxMC0xNCA5LTIzdDIzLTloMTI4cTE0IDAgMjMgOXQ5IDIzek0xMTg0IDB2MTI4cTAgMTQtOSAyM3QtMjMgOWgtMTI4cS0xNCAwLTIzLTl0LTktMjNWMHEwLTE0IDktMjN0MjMtOWgxMjhxMTQgMCAyMyA5dDkgMjN6bTAgMjU2djEyOHEwIDE0LTkgMjN0LTIzIDloLTEyOHEtMTQgMC0yMy05dC05LTIzVjI1NnEwLTE0IDktMjN0MjMtOWgxMjhxMTQgMCAyMyA5dDkgMjN6bTAgMjU2djEyOHEwIDE0LTkgMjN0LTIzIDloLTEyOHEtMTQgMC0yMy05dC05LTIzVjUxMnEwLTE0IDktMjN0MjMtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgMHYxMjhxMCAxNC05IDIzdC0yMyA5aC0xMjhxLTE0IDAtMjMtOXQtOS0yM1YwcTAtMTQgOS0yM3QyMy05aDEyOHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2MTI4cTAgMTQtOSAyM3QtMjMgOWgtMTI4cS0xNCAwLTIzLTl0LTktMjNWMjU2cTAtMTQgOS0yM3QyMy05aDEyOHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2MTI4cTAgMTQtOSAyM3QtMjMgOWgtMTI4cS0xNCAwLTIzLTl0LTktMjNWNTEycTAtMTQgOS0yM3QyMy05aDEyOHExNCAwIDIzIDl0OSAyM3ptOTYgMzg0djI1NmgtMTYwcS00MCAwLTY4IDI4dC0yOCA2OHYxNjBINjQwVjg5Nmg4OTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MDMiIHVuaWNvZGU9Iu+GrSIgZD0iTTEzNDQgMTUzNnEyNiAwIDQ1LTE5dDE5LTQ1Vi0xOTJxMC0yNi0xOS00NXQtNDUtMTlINjRxLTI2IDAtNDUgMTlUMC0xOTJ2MTY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODB6bS04MzItMjg4di02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN6bTAtMjU2di02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN6bTAtMjU2di02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN6bTAtMjU2di02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN6TTM4NCAxNjB2NjRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3pNODk2LTk2Vjk2cTAgMTQtOSAyM3QtMjMgOUg1NDRxLTE0IDAtMjMtOXQtOS0yM1YtOTZxMC0xNCA5LTIzdDIzLTloMzIwcTE0IDAgMjMgOXQ5IDIzem0wIDUxMnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0yNTYtMTAyNHY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0wIDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDA0IiB1bmljb2RlPSLvhq4iIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTE4OCA5ODhMODk2IDY5NnYtODI0cTAtNDYtMzMtNzl0LTc5LTMzLTc5IDMzLTMzIDc5djM4NGgtNjR2LTM4NHEwLTQ2LTMzLTc5dC03OS0zMy03OSAzMy0zMyA3OXY4MjRMOTIgOTg4cS0yOCAyOC0yOCA2OHQyOCA2OHEyOSAyOCA2OC41IDI4dDY3LjUtMjhsMjI4LTIyOGgzNjhsMjI4IDIyOHEyOCAyOCA2OCAyOHQ2OC0yOHEyOC0yOSAyOC02OC41dC0yOC02Ny41em0tMzI0IDE2NHEwLTkzLTY1LjUtMTU4LjVUNjQwIDkyOHQtMTU4LjUgNjUuNVQ0MTYgMTE1MnQ2NS41IDE1OC41VDY0MCAxMzc2dDE1OC41LTY1LjVUODY0IDExNTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYxQjEiIHVuaWNvZGU9Iu+GsCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03ODAgMTA2NHEwLTYwLTE5LTExMy41VDY5OCA4NTh0LTEwNS0zOXEtNzYgMC0xMzggNTcuNVQzNjMgMTAxMnQtMzAgMTUxcTAgNjAgMTkgMTEzLjV0NjMgOTIuNSAxMDUgMzlxNzcgMCAxMzguNS01Ny41dDkxLjUtMTM1IDMwLTE1MS41ek00MzggNTgxcTAtODAtNDItMTM5dC0xMTktNTlxLTc2IDAtMTQxLjUgNTUuNVQzNSA1NzIgMCA3MjRxMCA4MCA0MiAxMzkuNVQxNjEgOTIzcTc2IDAgMTQxLjUtNTUuNXQxMDAuNS0xMzRUNDM4IDU4MXptMzk0IDI3cTExOCAwIDI1NS05Ny41dDIyOS0yMzdUMTQwOCAxOXEwLTQ2LTE3LTc2LjV0LTQ4LjUtNDUtNjQuNS0yMC03Ni01LjVxLTY4IDAtMTg3LjUgNDVUODMyLTM4cS02NiAwLTE5Mi41LTQ0LjVUNDM5LTEyN3EtMTgzIDAtMTgzIDE0NiAwIDg2IDU2IDE5MS41VDQ1MS41IDQwMyA2MzkgNTQ5dDE5MyA1OXptMjM5IDIxMXEtNjEgMC0xMDUgMzl0LTYzIDkyLjUtMTkgMTEzLjVxMCA3NCAzMCAxNTEuNXQ5MS41IDEzNVQxMTQ0IDE0MDhxNjEgMCAxMDUtMzl0NjMtOTIuNSAxOS0xMTMuNXEwLTczLTMwLTE1MXQtOTItMTM1LjUtMTM4LTU3LjV6bTQzMiAxMDRxNzcgMCAxMTktNTkuNXQ0Mi0xMzkuNXEwLTc0LTM1LTE1MnQtMTAwLjUtMTMzLjVUMTM4NyAzODNxLTc3IDAtMTE5IDU5dC00MiAxMzlxMCA3NCAzNSAxNTIuNXQxMDAuNSAxMzRUMTUwMyA5MjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MDYiIHVuaWNvZGU9Iu+GsSIgaG9yaXotYWR2LXg9Ijc2OCIgZD0iTTcwNCAxMDA4cTAtMTQ1LTU3LTI0My41VDQ5NSA2MjlsNDUtODIxcTItMjYtMTYtNDV0LTQ0LTE5SDI4OHEtMjYgMC00NCAxOXQtMTYgNDVsNDUgODIxcS05NSAzNy0xNTIgMTM1LjVUNjQgMTAwOHEwIDEyOCA0Mi41IDI0OS41dDExNy41IDIwMCAxNjAgNzguNSAxNjAtNzguNSAxMTcuNS0yMDBUNzA0IDEwMDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MDciIHVuaWNvZGU9Iu+GsiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04OTYtOTNsNjQwIDM0OXY2MzZMODk2IDY1OVYtOTN6bS02NCA4NjVsNjk4IDI1NC02OTggMjU0LTY5OC0yNTR6bTgzMiAyNTJWMjU2cTAtMzUtMTgtNjV0LTQ5LTQ3TDg5My0yNDBxLTI4LTE2LTYxLTE2dC02MSAxNkw2NyAxNDRxLTMxIDE3LTQ5IDQ3VDAgMjU2djc2OHEwIDQwIDIzIDczdDYxIDQ3bDcwNCAyNTZxMjIgOCA0NCA4dDQ0LThsNzA0LTI1NnEzOC0xNCA2MS00N3QyMy03M3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQwOCIgdW5pY29kZT0i74azIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTY0MC05NmwzODQgMTkydjMxNEw2NDAgMjQ2Vi05NnptLTY0IDQ1NGw0MDQgMTczLTQwNCAxNzMtNDA0LTE3M3pNMTY2NC05NmwzODQgMTkydjMxNGwtMzg0LTE2NFYtOTZ6bS02NCA0NTRsNDA0IDE3My00MDQgMTczLTQwNC0xNzN6bS00NDggMjkzbDM4NCAxNjV2MjY2bC0zODQtMTY0VjY1MXptLTY0IDM3OWw0NDEgMTg5LTQ0MSAxODktNDQxLTE4OXptMTA4OC01MThWOTZxMC0zNi0xOS02N3QtNTItNDdsLTQ0OC0yMjRxLTI1LTE0LTU3LTE0dC01NyAxNEwxMDk1LTE4cS00IDItNyA0LTItMi03LTRMNjMzLTI0MnEtMjUtMTQtNTctMTR0LTU3IDE0TDcxLTE4UTM4LTIgMTkgMjlUMCA5NnY0MTZxMCAzOCAyMS41IDcwVDc4IDYzMGw0MzQgMTg2djQwMHEwIDM4IDIxLjUgNzB0NTYuNSA0OGw0NDggMTkycTIzIDEwIDUwIDEwdDUwLTEwbDQ0OC0xOTJxMzUtMTYgNTYuNS00OHQyMS41LTcwVjgxNmw0MzQtMTg2cTM2LTE2IDU3LTQ4dDIxLTcweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDA5IiB1bmljb2RlPSLvhrQiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTg0OCAxMTk3aC01MTF2LTEyNGg1MTF2MTI0em0tMjUyLTQyNnEtOTAgMC0xNDYtNTIuNVQxMzg4IDU3Nmg0MDhxLTE4IDE5NS0yMDAgMTk1em0xNi01ODVxNjMgMCAxMjIgMzJ0NzYgODdoMjIxUTE5MzEtMiAxNjA0LTJxLTIxNCAwLTM0MC41IDEzMlQxMTM3IDQ3N3EwIDIwOCAxMzAuNSAzNDUuNVQxNjA0IDk2MHExMzggMCAyNDAuNS02OHQxNTMtMTc5IDUwLjUtMjQ4cTAtMTctMi00N2gtNjU4cTAtMTExIDU3LjUtMTcxLjVUMTYxMiAxODZ6TTI3NyAyMzZoMjk2cTIwNSAwIDIwNSAxNjcgMCAxODAtMTk5IDE4MEgyNzdWMjM2em0wIDUzN2gyODFxNzggMCAxMjMuNSAzNi41VDcyNyA5MjNxMCAxNDQtMTkwIDE0NEgyNzdWNzczek0wIDEyODJoNTk0cTg3IDAgMTU1LTE0dDEyNi41LTQ3LjUgOTAtOTYuNVQ5OTcgOTcwcTAtMTgxLTE3Mi0yNjMgMTE0LTMyIDE3Mi0xMTV0NTgtMjA0cTAtNzUtMjQuNS0xMzYuNXQtNjYtMTAzLjVUODY2IDc3IDc0NSAzNSA2MTEgMjJIMHYxMjYweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDEwIiB1bmljb2RlPSLvhrUiIGQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjBWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHptLTc0OS0zNjdIMTI4VjI1NGgzODJxMTE3IDAgMTk3IDU3LjVUNzg3IDQ4MnEwIDE1OC0xNDMgMjAwIDEwNyA1MiAxMDcgMTY0IDAgNTctMTkuNSA5Ni41VDY3NSAxMDAzdC03OSAyOS41LTk3IDguNXptLTIyLTMxOEgzMDF2MTg0aDE2M3ExMTkgMCAxMTktOTAgMC05NC0xMDYtOTR6bTktMzM1SDMwMXYyMTdoMTg5cTEyNCAwIDEyNC0xMTMgMC0xMDQtMTI4LTEwNHptNjUwLTMycS02OCAwLTEwNCAzOHQtMzYgMTA3aDQxMXExIDEwIDEgMzAgMCAxMzItNzQuNSAyMjAuNVQxMTMwIDg0MHEtMTI4IDAtMjEwLTg2dC04Mi0yMTZxMC0xMzUgNzktMjE3dDIxMy04MnEyMDUgMCAyNjcgMTkxaC0xMzhxLTExLTM0LTQ3LjUtNTR0LTc1LjUtMjB6bS0xMCAzNjZxMTEzIDAgMTI0LTEyMkg5OTZxNCA1NiAzOSA4OXQ5MSAzM3pNOTY0IDk4OGgzMTl2LTc3SDk2NHY3N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQxMSIgdW5pY29kZT0i74a2IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE1ODIgOTU0cTAtMTAxLTcxLjUtMTcyLjVUMTMzOCA3MTB0LTE3Mi41IDcxLjVUMTA5NCA5NTR0NzEuNSAxNzIuNVQxMzM4IDExOTh0MTcyLjUtNzEuNVQxNTgyIDk1NHpNODEyIDIxMnEwIDEwNC03MyAxNzd0LTE3NyA3M3EtMjcgMC01NC02bDEwNC00MnE3Ny0zMSAxMDkuNS0xMDYuNVQ3MjMgMTU2UTY5MiA3OSA2MTYgNDd0LTE1Mi0xcS0yMSA4LTYyIDI0LjVUMzQxIDk1cTMyLTYwIDkxLTk2LjVUNTYyLTM4cTEwNCAwIDE3NyA3M3Q3MyAxNzd6bTgzMCA3NDFxMCAxMjYtODkuNSAyMTUuNVQxMzM3IDEyNThxLTEyNyAwLTIxNi41LTg5LjVUMTAzMSA5NTNxMC0xMjcgODkuNS0yMTZ0MjE2LjUtODlxMTI2IDAgMjE1LjUgODl0ODkuNSAyMTZ6bTE1MCAwcTAtMTg5LTEzMy41LTMyMlQxMzM3IDQ5OEw5MDAgMTc5UTg4OCA1MCA3OTEtMzl0LTIyOS04OXEtMTIxIDAtMjE0IDc2VDIzMCAxNDBMMCAyMzJ2NDI5bDM4OS0xNTdxNzkgNDggMTczIDQ4IDEzIDAgMzUtMmwyODQgNDA3cTIgMTg3IDEzNS41IDMxOXQzMjAuNSAxMzJxMTg4IDAgMzIxLjUtMTMzLjVUMTc5MiA5NTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MTIiIHVuaWNvZGU9Iu+GtyIgZD0iTTEyNDIgODg5cTAgODAtNTcgMTM2LjV0LTEzNyA1Ni41LTEzNi41LTU3VDg1NSA4ODlxMC04MCA1Ni41LTEzNi41VDEwNDggNjk2dDEzNyA1Ni41IDU3IDEzNi41ek02MzIgMzAxcTAtODMtNTgtMTQwLjVUNDM0IDEwM3EtNTYgMC0xMDMgMjl0LTcyIDc3cTUyLTIwIDk4LTQwIDYwLTI0IDEyMCAxLjV0ODUgODYuNXEyNCA2MC0xLjUgMTIwVDQ3NCA0NjFsLTgyIDMzcTIyIDUgNDIgNSA4MiAwIDE0MC01Ny41VDYzMiAzMDF6bTkwNCA4MTlWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjE1M2wxNzItNjlxMjAtOTIgOTMuNS0xNTJUNDM0IDMycTEwNCAwIDE4MSA3MHQ4NyAxNzNsMzQ1IDI1MnExNTAgMCAyNTUuNSAxMDUuNVQxNDA4IDg4N3EwIDE1MC0xMDUuNSAyNTUuNVQxMDQ3IDEyNDhxLTE0OCAwLTI1My0xMDQuNVQ2ODcgODkxTDQ2MiA1NjlxLTkgMS0yOCAxLTc1IDAtMTM3LTM3TDAgNjUydjQ2OHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHptLTI0Ny0yMzNxMC0xMDAtNzEtMTcwLjVUMTA0NyA2NDZ0LTE3MC41IDcwLjVUODA2IDg4N3Q3MC41IDE3MSAxNzAuNSA3MXExMDEgMCAxNzEuNS03MC41VDEyODkgODg3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDEzIiB1bmljb2RlPSLvhrgiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODM2IDM2N0w4MjEtMWwtMi0yMkwzOTkgNnEtMzYgMy02NyAzMS41VDI4NSAxMDNxLTExIDI3LTE0LjUgNTV0NCA2NSAxMiA1NSAyMS41IDY0IDE5IDUzcTc4LTEyIDUwOS0yOHpNNDQ5IDk1M2wxODAtMzc5LTE0NyA5MnEtNjMtNzItMTExLjUtMTQ0LjV0LTcyLjUtMTI1LTM5LjUtOTQuNS0xOC41LTYzbC00LTIxTDQ2IDU3NXEtMTcgMjYtMTggNTZ0NiA0N2w4IDE4cTM1IDYzIDExNCAxODhMMTYgOTcwem0xMjMxLTUxN0wxNDkyIDc3cS0xMi0yOS0zNi41LTQ2LjVUMTQxMiAxMGwtMTgtNHEtNzEtNy0yMTktMTJsOC0xNjQtMjMwIDM2NyAyMTEgMzYyIDctMTczcTE3MC0xNiAyODMtNXQxNzAgMzN6bS03ODUgOTI0cS00Ny02My0yNjUtNDM1bC0zMTcgMTg3LTE5IDEyIDIyNSAzNTZxMjAgMzEgNjAgNDV0ODAgMTBxMjQtMiA0OC41LTEydDQyLTIxIDQxLjUtMzMgMzYtMzQuNSAzNi0zOS41IDMyLTM1em02NTUtMzA3bDIxMi0zNjNxMTgtMzcgMTIuNS03NnQtMjcuNS03NHEtMTMtMjAtMzMtMzd0LTM4LTI4LTQ4LjUtMjItNDctMTYtNTEuNS0xNC00Ni0xMnEtMzQgNzItMjY1IDQzNmwzMTMgMTk1em0tMTQzIDIyNmwxNDIgODMtMjIwLTM3My00MTkgMjAgMTUxIDg2cS0zNCA4OS03NSAxNjZ0LTc1LjUgMTIzLjUtNjQuNSA4MC00NyA0Ni41bC0xNyAxMyA0MDUtMXEzMSAzIDU4LTEwLjV0MzktMjguNWwxMS0xNXEzOS02MSAxMTItMTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDE0IiB1bmljb2RlPSLvhrkiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNNDgwIDQ0OHEwIDY2LTQ3IDExM3QtMTEzIDQ3LTExMy00Ny00Ny0xMTMgNDctMTEzIDExMy00NyAxMTMgNDcgNDcgMTEzem0zNiAzMjBoMTAxNmwtODkgMzU3cS0yIDgtMTQgMTcuNXQtMjEgOS41SDY0MHEtOSAwLTIxLTkuNXQtMTQtMTcuNXptMTM3Mi0zMjBxMCA2Ni00NyAxMTN0LTExMyA0Ny0xMTMtNDctNDctMTEzIDQ3LTExMyAxMTMtNDcgMTEzIDQ3IDQ3IDExM3ptMTYwIDk2VjE2MHEwLTE0LTktMjN0LTIzLTloLTk2VjBxMC04MC01Ni0xMzZ0LTEzNi01Ni0xMzYgNTYtNTYgMTM2djEyOEg1MTJWMHEwLTgwLTU2LTEzNnQtMTM2LTU2LTEzNiA1NlQxMjggMHYxMjhIMzJxLTE0IDAtMjMgOXQtOSAyM3YzODRxMCA5MyA2NS41IDE1OC41VDIyNCA3NjhoMjhsMTA1IDQxOXEyMyA5NCAxMDQgMTU3LjV0MTc5IDYzLjVoNzY4cTk4IDAgMTc5LTYzLjV0MTA0LTE1Ny41bDEwNS00MTloMjhxOTMgMCAxNTguNS02NS41VDIwNDggNTQ0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDE1IiB1bmljb2RlPSLvhroiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTgyNCA2NDBxOTMgMCAxNTguNS02NS41VDIwNDggNDE2VjMycTAtMTQtOS0yM3QtMjMtOWgtOTZ2LTY0cTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNlYwSDUxMnYtNjRxMC04MC01Ni0xMzZ0LTEzNi01Ni0xMzYgNTYtNTYgMTM2VjBIMzJRMTggMCA5IDlUMCAzMnYzODRxMCA5MyA2NS41IDE1OC41VDIyNCA2NDBoMjhsMTA1IDQxOXEyMyA5NCAxMDQgMTU3LjV0MTc5IDYzLjVoMTI4djIyNHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN2LTIyNGgxMjhxOTggMCAxNzktNjMuNXQxMDQtMTU3LjVsMTA1LTQxOWgyOHpNMzIwIDE2MHE2NiAwIDExMyA0N3Q0NyAxMTMtNDcgMTEzLTExMyA0Ny0xMTMtNDctNDctMTEzIDQ3LTExMyAxMTMtNDd6bTE5NiA0ODBoMTAxNmwtODkgMzU3cS0yIDgtMTQgMTcuNXQtMjEgOS41SDY0MHEtOSAwLTIxLTkuNVQ2MDUgOTk3em0xMjEyLTQ4MHE2NiAwIDExMyA0N3Q0NyAxMTMtNDcgMTEzLTExMyA0Ny0xMTMtNDctNDctMTEzIDQ3LTExMyAxMTMtNDd6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MTYiIHVuaWNvZGU9Iu+GuyIgZD0iTTE1MDQgNjRxMC0yNi0xOS00NXQtNDUtMTlIOTc4cTEtMTcgNi04Ny41dDUtMTA4LjVxMC0yNS0xOC00Mi41VDkyOC0yNTZINjA4cS0yNSAwLTQzIDE3LjVUNTQ3LTE5NnEwIDM4IDUgMTA4LjVUNTU4IDBIOTZRNzAgMCA1MSAxOVQzMiA2NHQxOSA0NWw0MDIgNDAzSDIyNHEtMjYgMC00NSAxOXQtMTkgNDUgMTkgNDVsNDAyIDQwM0gzODRxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1bDM4NCAzODRxMTkgMTkgNDUgMTl0NDUtMTlsMzg0LTM4NHExOS0xOSAxOS00NXQtMTktNDUtNDUtMTlIOTU1bDQwMi00MDNxMTktMTkgMTktNDV0LTE5LTQ1LTQ1LTE5aC0yMjlsNDAyLTQwM3ExOS0xOSAxOS00NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNyIgdW5pY29kZT0i74a8IiBkPSJNMTEyNyAzMjZxMCAzMi0zMCA1MS0xOTMgMTE1LTQ0NyAxMTUtMTMzIDAtMjg3LTM0LTQyLTktNDItNTIgMC0yMCAxMy41LTM0LjVUMzcwIDM1N3E1IDAgMzcgOCAxMzIgMjcgMjQzIDI3IDIyNiAwIDM5Ny0xMDMgMTktMTEgMzMtMTEgMTkgMCAzMyAxMy41dDE0IDM0LjV6bTk2IDIxNXEwIDQwLTM1IDYxLTIzNyAxNDEtNTQ4IDE0MS0xNTMgMC0zMDMtNDItNDgtMTMtNDgtNjQgMC0yNSAxNy41LTQyLjVUMzQ5IDU3N3E3IDAgMzcgOCAxMjIgMzMgMjUxIDMzIDI3OSAwIDQ4OC0xMjQgMjQtMTMgMzgtMTMgMjUgMCA0Mi41IDE3LjVUMTIyMyA1NDF6bTEwOCAyNDhxMCA0Ny00MCA3MC0xMjYgNzMtMjkzIDExMC41VDY1NSAxMDA3cS0yMDQgMC0zNjQtNDctMjMtNy0zOC41LTI1LjVUMjM3IDg4NnEwLTMxIDIwLjUtNTJ0NTEuNS0yMXExMSAwIDQwIDggMTMzIDM3IDMwNyAzNyAxNTkgMCAzMDkuNS0zNHQyNTMuNS05NXEyMS0xMiA0MC0xMiAyOSAwIDUwLjUgMjAuNVQxMzMxIDc4OXptMjA1LTE0OXEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQxOCIgdW5pY29kZT0i74a9IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgMTIzM0w3MjEgNjUxbDI0LTMxaDI3OVYyMDVINTE3bC00NC0zMEwzMzEtOThsLTMwLTMwSDB2MzAzbDMwMyA1ODMtMjQgMzBIMHY0MTVoNTA3bDQ0IDMwIDE0MiAyNzMgMzAgMzBoMzAxdi0zMDN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MTkiIHVuaWNvZGU9Iu+GviIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik03ODQgMTY0bDE2IDI0MS0xNiA1MjNxLTEgMTAtNy41IDE3dC0xNi41IDdxLTkgMC0xNi03dC03LTE3bC0xNC01MjMgMTQtMjQxcTEtMTAgNy41LTE2LjVUNzYwIDE0MXEyMiAwIDI0IDIzem0yOTYgMjlsMTEgMjExLTEyIDU4NnEwIDE2LTEzIDI0LTggNS0xNiA1dC0xNi01cS0xMy04LTEzLTI0bC0xLTYtMTAtNTc5cTAtMSAxMS0yMzZ2LTFxMC0xMCA2LTE3IDktMTEgMjMtMTEgMTEgMCAyMCA5IDkgNyA5IDIwek0zNSA1MzNsMjAtMTI4LTIwLTEyNnEtMi05LTktOXQtOSA5TDAgNDA1bDE3IDEyOHEyIDkgOSA5dDktOXptODYgNzlsMjYtMjA3LTI2LTIwM3EtMi05LTEwLTktOSAwLTkgMTBMNzkgNDA1bDIzIDIwN3EwIDkgOSA5IDggMCAxMC05em0yODAtNDUzek0yMTMgNjUwbDI1LTI0NS0yNS0yMzdxMC0xMS0xMS0xMS0xMCAwLTEyIDExbC0yMSAyMzcgMjEgMjQ1cTIgMTIgMTIgMTIgMTEgMCAxMS0xMnptOTQgN2wyMy0yNTItMjMtMjQ0cS0yLTEzLTE0LTEzLTEzIDAtMTMgMTNsLTIxIDI0NCAyMSAyNTJxMCAxMyAxMyAxMyAxMiAwIDE0LTEzem05NC0xOGwyMS0yMzQtMjEtMjQ2cS0yLTE2LTE2LTE2LTYgMC0xMC41IDQuNVQzNzAgMTU5bC0yMCAyNDYgMjAgMjM0cTAgNiA0LjUgMTAuNVQzODUgNjU0cTE0IDAgMTYtMTV6bTM4My00NzV6TTQ5NSA3ODVsMjEtMzgwLTIxLTI0NnEwLTctNS0xMi41dC0xMi01LjVxLTE2IDAtMTggMThsLTE4IDI0NiAxOCAzODBxMiAxOCAxOCAxOCA3IDAgMTItNS41dDUtMTIuNXptOTQgODZsMTktNDY4LTE5LTI0NHEwLTgtNS41LTEzLjVUNTcwIDE0MHEtMTggMC0yMCAxOWwtMTYgMjQ0IDE2IDQ2OHEyIDE5IDIwIDE5IDggMCAxMy41LTUuNVQ1ODkgODcxem05OCA0MGwxOC01MDYtMTgtMjQycS0yLTIxLTIyLTIxLTE5IDAtMjEgMjFsLTE2IDI0MiAxNiA1MDZxMCA5IDYuNSAxNS41VDY2NSA5MzNxOSAwIDE1LTYuNXQ3LTE1LjV6bTM5Mi03NDJ6TTg4MSA5MTVsMTUtNTEwLTE1LTIzOXEwLTEwLTcuNS0xNy41VDg1NiAxNDF0LTE3IDctOCAxOGwtMTQgMjM5IDE0IDUxMHEwIDExIDcuNSAxOHQxNy41IDcgMTcuNS03IDcuNS0xOHptOTktMTlsMTQtNDkyLTE0LTIzNnEwLTExLTgtMTl0LTE5LTgtMTkgOC05IDE5bC0xMiAyMzYgMTIgNDkycTEgMTIgOSAyMHQxOSA4IDE4LjUtOCA4LjUtMjB6bTIxMi00OTJsLTE0LTIzMXEwLTEzLTktMjJ0LTIyLTktMjIgOS0xMCAyMmwtNiAxMTQtNiAxMTcgMTIgNjM2djNxMiAxNSAxMiAyNCA5IDcgMjAgNyA4IDAgMTUtNSAxNC04IDE2LTI2em0xMTEyIDE5cTAtMTE3LTgzLTE5OS41VDIwMjEgMTQxaC03ODZxLTEzIDItMjIgMTF0LTkgMjJ2ODk5cTAgMjMgMjggMzMgODUgMzQgMTgxIDM0IDE5NSAwIDMzOC0xMzEuNVQxOTExIDY4NXE1MyAyMiAxMTAgMjIgMTE3IDAgMjAwLTgzdDgzLTIwMXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFDMCIgdW5pY29kZT0i74eAIiBkPSJNNzY4IDc2OHEyMzcgMCA0NDMgNDN0MzI1IDEyN1Y3NjhxMC02OS0xMDMtMTI4dC0yODAtOTMuNVQ3NjggNTEydC0zODUgMzQuNVQxMDMgNjQwIDAgNzY4djE3MHExMTktODQgMzI1LTEyN3Q0NDMtNDN6bTAtNzY4cTIzNyAwIDQ0MyA0M3QzMjUgMTI3VjBxMC02OS0xMDMtMTI4dC0yODAtOTMuNVQ3NjgtMjU2dC0zODUgMzQuNVQxMDMtMTI4IDAgMHYxNzBRMTE5IDg2IDMyNSA0M1Q3NjggMHptMCAzODRxMjM3IDAgNDQzIDQzdDMyNSAxMjdWMzg0cTAtNjktMTAzLTEyOHQtMjgwLTkzLjVUNzY4IDEyOHQtMzg1IDM0LjVUMTAzIDI1NiAwIDM4NHYxNzBxMTE5LTg0IDMyNS0xMjd0NDQzLTQzem0wIDExNTJxMjA4IDAgMzg1LTM0LjV0MjgwLTkzLjUgMTAzLTEyOHYtMTI4cTAtNjktMTAzLTEyOHQtMjgwLTkzLjVUNzY4IDg5NnQtMzg1IDM0LjUtMjgwIDkzLjVUMCAxMTUydjEyOHEwIDY5IDEwMyAxMjh0MjgwIDkzLjUgMzg1IDM0LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYxQzEiIHVuaWNvZGU9Iu+HgSIgZD0iTTE0NjggMTE1NnEyOC0yOCA0OC03NnQyMC04OFYtMTYwcTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMTYwdjE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OC0yMHQ3Ni00OHptLTQ0NCAyNDR2LTM3NmgzNzZxLTEwIDI5LTIyIDQxbC0zMTMgMzEzcS0xMiAxMi00MSAyMnptMzg0LTE1MjhWODk2SDk5MnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDEyOFYtMTI4aDEyODB6TTg5NCA0NjVxMzMtMjYgODQtNTYgNTkgNyAxMTcgNyAxNDcgMCAxNzctNDkgMTYtMjIgMi01MiAwLTEtMS0ybC0yLTJ2LTFxLTYtMzgtNzEtMzgtNDggMC0xMTUgMjB0LTEzMCA1M3EtMjIxLTI0LTM5Mi04M1E0MTAgMCAzMjEgMHEtMTUgMC0yOCA3bC0yNCAxMnEtMSAxLTYgNS0xMCAxMC02IDM2IDkgNDAgNTYgOTEuNVQ0NDUgMjQ4cTE0IDkgMjMtNiAyLTIgMi00IDUyIDg1IDEwNyAxOTcgNjggMTM2IDEwNCAyNjItMjQgODItMzAuNSAxNTkuNVQ2NTcgOTg0cTExIDQwIDQyIDQwaDIycTIzIDAgMzUtMTUgMTgtMjEgOS02OC0yLTYtNC04IDEtMyAxLTh2LTMwcS0yLTEyMy0xNC0xOTIgNTUtMTY0IDE0Ni0yMzh6TTMxOCA1NHE1MiAyNCAxMzcgMTU4LTUxLTQwLTg3LjUtODRUMzE4IDU0em0zOTggOTIwcS0xNS00Mi0yLTEzMiAxIDcgNyA0NCAwIDMgNyA0MyAxIDQgNCA4LTEgMS0xIDItMSAyLTEgMy0xIDIyLTEzIDM2IDAtMS0xLTJ2LTJ6TTU5MiAzMTNxMTM1IDU0IDI4NCA4MS0yIDEtMTMgOS41VDg0NyA0MTdxLTc2IDY3LTEyNyAxNzYtMjctODYtODMtMTk3LTMwLTU2LTQ1LTgzem02NDYgMTZxLTI0IDI0LTE0MCAyNCA3Ni0yOCAxMjQtMjggMTQgMCAxOCAxIDAgMS0yIDN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MjIiIHVuaWNvZGU9Iu+HgiIgZD0iTTE0NjggMTE1NnEyOC0yOCA0OC03NnQyMC04OFYtMTYwcTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMTYwdjE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OC0yMHQ3Ni00OHptLTQ0NCAyNDR2LTM3NmgzNzZxLTEwIDI5LTIyIDQxbC0zMTMgMzEzcS0xMiAxMi00MSAyMnptMzg0LTE1MjhWODk2SDk5MnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDEyOFYtMTI4aDEyODB6TTIzMyA3NjhWNjYxaDcwTDQ2NyAwaDE1OWwxMjggNDg1cTcgMjAgMTAgNDYgMiAxNiAyIDI0aDRsMy0yNHExLTMgMy41LTIwdDUuNS0yNkw5MTAgMGgxNTlsMTY0IDY2MWg3MHYxMDdoLTMwMFY2NjFoOTBsLTk5LTQzOHEtNS0yMC03LTQ2bC0yLTIxaC00cTAgMy0uNSA2LjV0LTEuNSA4LTEgNi41cS0xIDUtNCAyMXQtNSAyNUw4MjUgNzY4SDcxMUw1NjcgMjIzcS0yLTktNC41LTI0LjVUNTU5IDE3N2wtNC0yMWgtNGwtMiAyMXEtMiAyNi03IDQ2bC05OSA0MzhoOTB2MTA3SDIzM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQyMyIgdW5pY29kZT0i74eDIiBkPSJNMTQ2OCAxMTU2cTI4LTI4IDQ4LTc2dDIwLTg4Vi0xNjBxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMC0xNjB2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4LTIwdDc2LTQ4em0tNDQ0IDI0NHYtMzc2aDM3NnEtMTAgMjktMjIgNDFsLTMxMyAzMTNxLTEyIDEyLTQxIDIyem0zODQtMTUyOFY4OTZIOTkycS00MCAwLTY4IDI4dC0yOCA2OHY0MTZIMTI4Vi0xMjhoMTI4MHpNNDI5IDEwNlYwaDI4MXYxMDZoLTc1bDEwMyAxNjFxNSA3IDEwIDE2LjV0Ny41IDEzLjUgMy41IDRoMnExLTQgNS0xMCAyLTQgNC41LTcuNXQ2LTggNi41LTguNWwxMDctMTYxaC03NlYwaDI5MXYxMDZoLTY4TDg0NSAzNzlsMTk1IDI4Mmg2N3YxMDdIODI4VjY2MWg3NEw3OTkgNTAycS00LTctMTAtMTYuNXQtOS0xMy41bC0yLTNoLTJxLTEgNC01IDEwLTYgMTEtMTcgMjNMNjQ4IDY2MWg3NnYxMDdINDM0VjY2MWg2OGwxODktMjcyLTE5NC0yODNoLTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDI0IiB1bmljb2RlPSLvh4QiIGQ9Ik0xNDY4IDExNTZxMjgtMjggNDgtNzZ0MjAtODhWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwLTE2MHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODgtMjB0NzYtNDh6bS00NDQgMjQ0di0zNzZoMzc2cS0xMCAyOS0yMiA0MWwtMzEzIDMxM3EtMTIgMTItNDEgMjJ6bTM4NC0xNTI4Vjg5Nkg5OTJxLTQwIDAtNjggMjh0LTI4IDY4djQxNkgxMjhWLTEyOGgxMjgwek00MTYgMTA2VjBoMzI3djEwNmgtOTN2MTY3aDEzN3E3NiAwIDExOCAxNSA2NyAyMyAxMDYuNSA4N3QzOS41IDE0NnEwIDgxLTM3IDE0MXQtMTAwIDg3cS00OCAxOS0xMzAgMTlINDE2VjY2MWg5MlYxMDZoLTkyem0zNTMgMjgwSDY1MHYyNjhoMTIwcTUyIDAgODMtMTggNTYtMzMgNTYtMTE1IDAtODktNjItMTIwLTMxLTE1LTc4LTE1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDI1IiB1bmljb2RlPSLvh4UiIGQ9Ik0xNDY4IDExNTZxMjgtMjggNDgtNzZ0MjAtODhWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwLTE2MHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODgtMjB0NzYtNDh6bS00NDQgMjQ0di0zNzZoMzc2cS0xMCAyOS0yMiA0MWwtMzEzIDMxM3EtMTIgMTItNDEgMjJ6bTM4NC0xNTI4Vjg5Nkg5OTJxLTQwIDAtNjggMjh0LTI4IDY4djQxNkgxMjhWLTEyOGgxMjgwem0tMTI4IDQ0OFYwSDI1NnYxOTJsMTkyIDE5MiAxMjgtMTI4IDM4NCAzODR6TTQ0OCA1MTJxLTgwIDAtMTM2IDU2dC01NiAxMzYgNTYgMTM2IDEzNiA1NiAxMzYtNTYgNTYtMTM2LTU2LTEzNi0xMzYtNTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MjYiIHVuaWNvZGU9Iu+HhiIgZD0iTTY0MCAxMTUydjEyOEg1MTJ2LTEyOGgxMjh6bTEyOC0xMjh2MTI4SDY0MHYtMTI4aDEyOHpNNjQwIDg5NnYxMjhINTEyVjg5NmgxMjh6bTEyOC0xMjh2MTI4SDY0MFY3NjhoMTI4em03MDAgMzg4cTI4LTI4IDQ4LTc2dDIwLTg4Vi0xNjBxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMC0xNjB2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4LTIwdDc2LTQ4em0tNDQ0IDI0NHYtMzc2aDM3NnEtMTAgMjktMjIgNDFsLTMxMyAzMTNxLTEyIDEyLTQxIDIyem0zODQtMTUyOFY4OTZIOTkycS00MCAwLTY4IDI4dC0yOCA2OHY0MTZINzY4di0xMjhINjQwdjEyOEgxMjhWLTEyOGgxMjgwek03ODEgNTkzbDEwNy0zNDlxOC0yNyA4LTUyIDAtODMtNzIuNS0xMzcuNVQ2NDAgMCA0NTYuNSA1NC41IDM4NCAxOTJxMCAyNSA4IDUyIDIxIDYzIDEyMCAzOTZ2MTI4aDEyOFY2NDBoNzlxMjIgMCAzOS0xM3QyMy0zNHpNNjQwIDEyOHE1MyAwIDkwLjUgMTl0MzcuNSA0NS0zNy41IDQ1LTkwLjUgMTktOTAuNS0xOS0zNy41LTQ1IDM3LjUtNDUgOTAuNS0xOXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNyIgdW5pY29kZT0i74eHIiBkPSJNMTQ2OCAxMTU2cTI4LTI4IDQ4LTc2dDIwLTg4Vi0xNjBxMC00MC0yOC02OHQtNjgtMjhIOTZxLTQwIDAtNjggMjhUMC0xNjB2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4LTIwdDc2LTQ4em0tNDQ0IDI0NHYtMzc2aDM3NnEtMTAgMjktMjIgNDFsLTMxMyAzMTNxLTEyIDEyLTQxIDIyem0zODQtMTUyOFY4OTZIOTkycS00MCAwLTY4IDI4dC0yOCA2OHY0MTZIMTI4Vi0xMjhoMTI4MHpNNjIwIDY4NnEyMC04IDIwLTMwVjExMnEwLTIyLTIwLTMwLTgtMi0xMi0yLTEyIDAtMjMgOUw0MTkgMjU2SDI4OHEtMTQgMC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxMzFsMTY2IDE2N3ExNiAxNSAzNSA3ek0xMDM3LTNxMzEgMCA1MCAyNCAxMjkgMTU5IDEyOSAzNjN0LTEyOSAzNjNxLTE2IDIxLTQzIDI0dC00Ny0xNHEtMjEtMTctMjMuNS00My41VDk4OCA2NjZxMTAwLTEyMyAxMDAtMjgyVDk4OCAxMDJxLTE3LTIxLTE0LjUtNDcuNVQ5OTcgMTJxMTgtMTUgNDAtMTV6TTgyNiAxNDVxMjcgMCA0NyAyMCA4NyA5MyA4NyAyMTl0LTg3IDIxOXEtMTggMTktNDUgMjB0LTQ2LTE3LTIwLTQ0LjUgMTgtNDYuNXE1Mi01NyA1Mi0xMzF0LTUyLTEzMXEtMTktMjAtMTgtNDYuNXQyMC00NC41cTIwLTE3IDQ0LTE3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDI4IiB1bmljb2RlPSLvh4giIGQ9Ik0xNDY4IDExNTZxMjgtMjggNDgtNzZ0MjAtODhWLTE2MHEwLTQwLTI4LTY4dC02OC0yOEg5NnEtNDAgMC02OCAyOFQwLTE2MHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODgtMjB0NzYtNDh6bS00NDQgMjQ0di0zNzZoMzc2cS0xMCAyOS0yMiA0MWwtMzEzIDMxM3EtMTIgMTItNDEgMjJ6bTM4NC0xNTI4Vjg5Nkg5OTJxLTQwIDAtNjggMjh0LTI4IDY4djQxNkgxMjhWLTEyOGgxMjgwek03NjggNzY4cTUyIDAgOTAtMzh0MzgtOTBWMjU2cTAtNTItMzgtOTB0LTkwLTM4SDM4NHEtNTIgMC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoMzg0em00OTItMnEyMC04IDIwLTMwVjE2MHEwLTIyLTIwLTMwLTgtMi0xMi0yLTE0IDAtMjMgOUw5NjAgNDAzdjkwbDI2NSAyNjZxOSA5IDIzIDkgNCAwIDEyLTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MjkiIHVuaWNvZGU9Iu+HiSIgZD0iTTE0NjggMTE1NnEyOC0yOCA0OC03NnQyMC04OFYtMTYwcTAtNDAtMjgtNjh0LTY4LTI4SDk2cS00MCAwLTY4IDI4VDAtMTYwdjE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OC0yMHQ3Ni00OHptLTQ0NCAyNDR2LTM3NmgzNzZxLTEwIDI5LTIyIDQxbC0zMTMgMzEzcS0xMiAxMi00MSAyMnptMzg0LTE1MjhWODk2SDk5MnEtNDAgMC02OCAyOHQtMjggNjh2NDE2SDEyOFYtMTI4aDEyODB6TTQ4MCA3NjhxOCAxMSAyMSAxMi41dDI0LTYuNWw1MS0zOHExMS04IDEyLjUtMjF0LTYuNS0yNEw0MDAgNDQ4bDE4Mi0yNDNxOC0xMSA2LjUtMjRUNTc2IDE2MGwtNTEtMzhxLTExLTgtMjQtNi41VDQ4MCAxMjhMMjU0IDQyOXEtMTQgMTkgMCAzOHptODAyLTMwMXExNC0xOSAwLTM4bC0yMjYtMzAxcS04LTExLTIxLTEyLjV0LTI0IDYuNWwtNTEgMzhxLTExIDgtMTIuNSAyMXQ2LjUgMjRsMTgyIDI0My0xODIgMjQzcS04IDExLTYuNSAyNHQxMi41IDIxbDUxIDM4cTExIDggMjQgNi41dDIxLTEyLjV6TTY2MiA2cS0xMyAyLTIwLjUgMTNUNjM2IDQzbDEzOCA4MzFxMiAxMyAxMyAyMC41dDI0IDUuNWw2My0xMHExMy0yIDIwLjUtMTN0NS41LTI0TDc2MiAyMnEtMi0xMy0xMy0yMC41VDcyNS00eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDMwIiB1bmljb2RlPSLvh4oiIGQ9Ik0xNDk3IDcwOVY1MTFxLTEwMS0yMy0xOTgtMjMtNjUtMTM2LTE2NS41LTI3MVQ5NTIgMS41IDgyNC0xMDVxLTgwLTQ1LTE2MiAzLTI4IDE3LTYwLjUgNDMuNXQtODUgODMuNVQ0MTQgMTUzLjV0LTEwNy41IDE4NC0xMDUuNSAyNDRUMTA5LjUgODk2IDM5IDEyODZoMjgzcTI2LTIxOCA3MC0zOTguNXQxMDQuNS0zMTdUNjE4IDMzNXQxNDAtMTk1cTE2OSAxNjkgMjg3IDQwNi0xNDIgNzItMjIzIDIyMHQtODEgMzMzcTAgMTkyIDEwNCAzMTQuNXQyODQgMTIyLjVxMTc4IDAgMjczLTEwNS41dDk1LTI5Ny41cTAtMTU5LTU4LTI4Ni03LTEtMTkuNS0zdC00Ni0yLTYzIDYtNjIgMjUuNVQxMTk4IDkyNXEzMSAxMDMgMzEgMTg0IDAgODctMjkgMTMydC03OSA0NXEtNTMgMC04NS00OS41dC0zMi0xNDAuNXEwLTE4NiAxMDUtMjkzLjVUMTM3NiA2OTVxNjIgMCAxMjEgMTR6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MzEiIHVuaWNvZGU9Iu+HiyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yMTYgMzY3TDgxOS0zNXYzNTlMNDg1IDU0N3ptLTYyIDE0NGwxOTMgMTI5LTE5MyAxMjlWNTExek05NzMtMzVsNjAzIDQwMi0yNjkgMTgwLTMzNC0yMjNWLTM1em0tNzcgNDkzbDI3MiAxODItMjcyIDE4Mi0yNzItMTgyek00ODUgNzMzbDMzNCAyMjN2MzU5TDIxNiA5MTN6bTk2MC05M2wxOTMtMTI5djI1OHptLTEzOCA5M2wyNjkgMTgwLTYwMyA0MDJWOTU2em00ODUgMTgwVjM2N3EwLTQxLTM0LTY0TDkzOS0yNDNxLTIxLTEzLTQzLTEzdC00MyAxM0wzNCAzMDNRMCAzMjYgMCAzNjd2NTQ2cTAgNDEgMzQgNjRsODE5IDU0NnEyMSAxMyA0MyAxM3Q0My0xM2w4MTktNTQ2cTM0LTIzIDM0LTY0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDMyIiB1bmljb2RlPSLvh4wiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTgwMCA3NjRxMTExLTQ2IDE3OS41LTE0NS41VDIwNDggMzk3cTAtMTY0LTExOC0yODAuNVQxNjQ1IDBxLTQgMC0xMS41LjVUMTYyMyAxSDQwNlEyMzYgMTEgMTE4IDEyNi41VDAgNDA3cTAgMTEwIDU1IDIwM3QxNDcgMTQ3cS0xMiAzOS0xMiA4MiAwIDExNSA4MiAxOTZ0MTk5IDgxcTk1IDAgMTcyLTU4IDc1IDE1NCAyMjIuNSAyNDh0MzI2LjUgOTRxMTY2IDAgMzA2LTgwLjV0MjIxLjUtMjE4LjUgODEuNS0zMDFxMC02LS41LTE4dC0uNS0xOHpNNDY4IDQ5OHEwLTEyMiA4NC0xOTN0MjA4LTcxcTEzNyAwIDI0MCA5OS0xNiAyMC00Ny41IDU2LjVUOTA5IDQ0MHEtNjctNjUtMTQ0LTY1LTU1IDAtOTMuNSAzMy41VDYzMyA0OTZxMCA1MyAzOC41IDg3dDkxLjUgMzRxNDQgMCA4NC41LTIxdDczLTU1IDY1LTc1IDY5LTgyIDc3LTc1IDk3LTU1IDEyMS41LTIxcTEyMSAwIDIwNC41IDcxLjVUMTYzOCA0OTVxMCAxMjEtODQgMTkydC0yMDcgNzFxLTE0MyAwLTI0MS05N2w5My0xMDhxNjYgNjQgMTQyIDY0IDUyIDAgOTItMzN0NDAtODRxMC01Ny0zNy05MS41dC05NC0zNC41cS00MyAwLTgyLjUgMjF0LTcyIDU1LTY1LjUgNzUtNjkuNSA4Mi03Ny41IDc1LTk2LjUgNTVUNzYwIDc1OHEtMTIyIDAtMjA3LTcwLjVUNDY4IDQ5OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQzMyIgdW5pY29kZT0i74eNIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg5NiAxNTM2cTE4MiAwIDM0OC03MXQyODYtMTkxIDE5MS0yODYgNzEtMzQ4LTcxLTM0OFQxNTMwIDZ0LTI4Ni0xOTEtMzQ4LTcxLTM0OCA3MVQyNjIgNiA3MSAyOTIgMCA2NDB0NzEgMzQ4IDE5MSAyODYgMjg2IDE5MSAzNDggNzF6bTAtMTI4cS0xOTAgMC0zNjEtOTBsMTk0LTE5NHE4MiAyOCAxNjcgMjh0MTY3LTI4bDE5NCAxOTRxLTE3MSA5MC0zNjEgOTB6TTIxOCAyNzlsMTk0IDE5NHEtMjggODItMjggMTY3dDI4IDE2N2wtMTk0IDE5NHEtOTAtMTcxLTkwLTM2MXQ5MC0zNjF6bTY3OC00MDdxMTkwIDAgMzYxIDkwbC0xOTQgMTk0cS04Mi0yOC0xNjctMjh0LTE2NyAyOEw1MzUtMzhxMTcxLTkwIDM2MS05MHptMCAzODRxMTU5IDAgMjcxLjUgMTEyLjVUMTI4MCA2NDB0LTExMi41IDI3MS41VDg5NiAxMDI0IDYyNC41IDkxMS41IDUxMiA2NDB0MTEyLjUtMjcxLjVUODk2IDI1NnptNDg0IDIxN2wxOTQtMTk0cTkwIDE3MSA5MCAzNjF0LTkwIDM2MWwtMTk0LTE5NHEyOC04MiAyOC0xNjd0LTI4LTE2N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQzNCIgdW5pY29kZT0i74eOIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3NjAgNjQwcTAtMTc2LTY4LjUtMzM2dC0xODQtMjc1LjUtMjc1LjUtMTg0VDg5Ni0yMjR0LTMzNiA2OC41LTI3NS41IDE4NC0xODQgMjc1LjVUMzIgNjQwcTAgMjEzIDk3IDM5OC41VDM5NCAxMzQ0dDM3NCAxNTF2LTIyOHEtMjIxLTQ1LTM2Ni41LTIyMVQyNTYgNjQwcTAtMTMwIDUxLTI0OC41dDEzNi41LTIwNFQ2NDcuNSA1MSA4OTYgMHQyNDguNSA1MSAyMDQgMTM2LjUgMTM2LjUgMjA0IDUxIDI0OC41cTAgMjMwLTE0NS41IDQwNlQxMDI0IDEyNjd2MjI4cTIwNi0zMSAzNzQtMTUxdDI2NS0zMDUuNSA5Ny0zOTguNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFEMCIgdW5pY29kZT0i74eQIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE5IDY2MnE4IDIxNyAxMTYgNDA2dDMwNSAzMThoNXEwLTEtMS0zLTgtOC0yOC0zMy41dC01Mi03Ni41LTYwLTExMC41LTQ0LjUtMTM1LjUtMTQtMTUwLjUgMzktMTU3LjVUMzkzIDU2NXE1MC01MCAxMDItNjkuNXQ5MC41LTExLjUgNjkuNSAyMy41IDQ3IDMyLjVsMTYgMTZxMzkgNTEgNTMgMTE2LjV0Ni41IDEyMi41LTIxIDEwNy0yNi41IDgwbC0xNCAyOXEtMTAgMjUtMzAuNSA0OS41dC00MyA0MVQ1OTkgMTEzMXQtMzUgMTlsLTEzIDYgMTA0IDExNXEzOS0xNyA3OC01MnQ1OS02MWwxOS0yN3ExIDQ4LTE4LjUgMTAzLjVUNzUyIDEzMjJsLTIwIDMxIDE2MSAxODMgMTYwLTE4MXEtMzMtNDYtNTIuNS0xMDIuNVQ5NzggMTE2MmwtNC0zM3EyMiAzNyA2MS41IDcyLjV0NjcuNSA1Mi41bDI4IDE3IDEwMy0xMTVxLTQ0LTE0LTg1LTUwdC02MC02NWwtMTktMjlxLTMxLTU2LTQ4LTEzMy41dC03LTE3MCA1Ny0xNTYuNXEzMy00NSA3Ny41LTYwLjV0ODUtNS41IDc2IDI2LjVUMTM2OCA1NDZsMjEgMTZxNjAgNTMgOTYuNSAxMTV0NDguNSAxMjEuNSAxMCAxMjEuNS0xOCAxMTgtMzcgMTA3LjUtNDUuNSA5My00NSA3Mi0zNC41IDQ3LjVsLTEzIDE3cS0xNCAxMy03IDEzbDEwLTNxNDAtMjkgNjIuNS00NnQ2Mi01MCA2NC01OCA1OC41LTY1IDU1LjUtNzcgNDUuNS04OCAzOC0xMDMgMjMuNS0xMTcgMTAuNS0xMzZxMy0yNTktMTA4LTQ2NXQtMzEyLTMyMS00NTYtMTE1cS0xODUgMC0zNTEgNzRUMjYzLjUgMTZ0LTE4NCAyOTNUMTkgNjYyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQxIiB1bmljb2RlPSLvh5EiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODc0LTEwMnYtNjZxLTIwOCA2LTM4NSAxMDkuNVQyMDYgMjE3bDU4IDM0cTI5LTQ5IDczLTk5bDY1IDU3UTU1MCA0MSA3NzAtM2wtMTctODZxNjUtMTIgMTIxLTEzek0yNzYgNDI4bC04My0yOHEyMi02MCA0OS0xMTJsLTU3LTMzUTg3IDQzNSA4NyA2NDB0OTggMzg1bDU3LTMzcS0zMC01Ni00OS0xMTJsODItMjhxLTM1LTEwMC0zNS0yMTIgMC0xMDkgMzYtMjEyem0xMjUyLTE3N2w1OC0zNFExNDgwIDQ1IDEzMDMtNTguNVQ5MTgtMTY4djY2cTU2IDEgMTIxIDEzbC0xNyA4NnEyMjAgNDQgMzY4IDIxMmw2NS01N3E0NCA1MCA3MyA5OXptLTE1MSA1NTRsLTIzMy04MHExNC00MiAxNC04NXQtMTQtODVsMjMyLTgwcS0zMS05Mi05OC0xNjlsLTE4NSAxNjJxLTU3LTY3LTE0Ny04NWw0OC0yNDFxLTUyLTEwLTk4LTEwdC05OCAxMGw0OCAyNDFxLTkwIDE4LTE0NyA4NUw1MTQgMzA2cS02NyA3Ny05OCAxNjlsMjMyIDgwcS0xNCA0Mi0xNCA4NXQxNCA4NWwtMjMzIDgwcTMzIDkzIDk5IDE2OWwxODUtMTYycTU5IDY4IDE0NyA4NmwtNDggMjQwcTQ0IDEwIDk4IDEwdDk4LTEwbC00OC0yNDBxODgtMTggMTQ3LTg2bDE4NSAxNjJxNjYtNzYgOTktMTY5em0tNTAzIDY0M3YtNjZxLTY1LTItMTIxLTEzbDE3LTg2cS0yMjAtNDItMzY4LTIxMWwtNjUgNTZxLTM4LTQyLTczLTk4bC01NyAzM3ExMDYgMTcyIDI4MiAyNzUuNVQ4NzQgMTQ0OHptODMxLTgwOHEwLTIwNS05OC0zODVsLTU3IDMzcTI3IDUyIDQ5IDExMmwtODMgMjhxMzYgMTAzIDM2IDIxMiAwIDExMi0zNSAyMTJsODIgMjhxLTE5IDU2LTQ5IDExMmw1NyAzM3E5OC0xODAgOTgtMzg1em0tMTIwIDQyM2wtNTctMzNxLTM1IDU2LTczIDk4bC02NS01NnEtMTQ4IDE2OS0zNjggMjExbDE3IDg2cS01NiAxMS0xMjEgMTN2NjZxMjA5LTYgMzg1LTEwOS41dDI4Mi0yNzUuNXptMTYzLTQyM3EwIDE3My02Ny41IDMzMVQxNDk5IDEyNDN0LTI3MiAxODEuNS0zMzEgNjcuNS0zMzEtNjcuNVQyOTMgMTI0MyAxMTEuNSA5NzEgNDQgNjQwdDY3LjUtMzMxVDI5MyAzN3QyNzItMTgxLjVUODk2LTIxMnQzMzEgNjcuNVQxNDk5IDM3dDE4MS41IDI3MiA2Ny41IDMzMXptNDQgMHEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQyIiB1bmljb2RlPSLvh5IiIGQ9Ik01ODIgMjI4cTAtNjYtOTMtNjYtMTA3IDAtMTA3IDYzIDAgNjQgOTggNjQgMTAyIDAgMTAyLTYxem0tMzYgNDY2cTAtODUtNzQtODUtNzcgMC03NyA4NCAwIDkwIDc3IDkwIDM2IDAgNTUtMjUuNXQxOS02My41em0xNjYgNzV2MTI1cS03OC0yOS0xMzUtMjktNTAgMjktMTEwIDI5LTg2IDAtMTQ1LTU3dC01OS0xNDNxMC01MCAyOS41LTEwMnQ3My41LTY3di0zcS0zOC0xNy0zOC04NSAwLTUzIDQxLTc3di0zcS0xMTMtMzctMTEzLTEzOSAwLTQ1IDIwLTc4LjV0NTQtNTFUNDAyIDYzdDgxLThxMjI0IDAgMjI0IDE4OCAwIDY3LTQ4IDk5dC0xMjYgNDZxLTI3IDUtNTEuNSAyMC41VDQ1NyA0NDhxMCA0NCA0OSA1MiA3NyAxNSAxMjIgNzB0NDUgMTM0cTAgMjQtMTAgNTIgMzcgOSA0OSAxM3ptNTktNDE5aDEzN3EtMiAyNy0yIDgydjM4N3EwIDQ2IDIgNjlINzcxcTMtMjMgMy03MVY0MjVxMC01MC0zLTc1em01MDkgMTZ2MTIxcS0zMC0yMS02OC0yMS01MyAwLTUzIDgydjIyNWg1MnE5IDAgMjYuNS0xdDI2LjUtMXYxMTdoLTEwNXEwIDgyIDMgMTAyaC0xNDBxNC0yNCA0LTU1di00N2gtNjBWNzcxcTM2IDMgMzcgMyAzIDAgMTEtLjV0MTItLjV2LTJoLTJWNTU0cTAtMzcgMi41LTY0dDExLjUtNTYuNSAyNC41LTQ4LjUgNDMuNS0zMSA2Ni0xMnE2NCAwIDEwOCAyNHptLTM1NiA3MDZxMCAzNi0yNCA2My41dC02MCAyNy41LTYwLjUtMjctMjQuNS02NHEwLTM2IDI1LTYyLjV0NjAtMjYuNSA1OS41IDI3IDI0LjUgNjJ6bTYxMiA0OFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDM4IiB1bmljb2RlPSLvh5MiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNTk1IDIycTAgMTAwLTE2NSAxMDAtMTU4IDAtMTU4LTEwNCAwLTEwMSAxNzItMTAxIDE1MSAwIDE1MSAxMDV6bS01OSA3NTVxMCA2MS0zMCAxMDJ0LTg5IDQxcS0xMjQgMC0xMjQtMTQ1IDAtMTM1IDEyNC0xMzUgMTE5IDAgMTE5IDEzN3ptMjY5IDMyNFY4OTlxLTM2LTEyLTc5LTIyIDE2LTQzIDE2LTg0IDAtMTI3LTczLTIxNi41VDQ3MiA0NjRxLTQwLTgtNTkuNS0yN1QzOTMgMzc5cTAtMzEgMjIuNS01MS41dDU4LTMyIDc4LjUtMjIgODYtMjUuNSA3OC41LTM3LjUgNTgtNjRUNzk3IDQ4cTAtMzA0LTM2My0zMDQtNjkgMC0xMzAgMTIuNXQtMTE2IDQxLTg3LjUgODJUNjggN3EwIDE2NSAxODIgMjI1djRxLTY3IDQxLTY3IDEyNiAwIDEwOSA2MyAxMzd2NHEtNzIgMjQtMTE5LjUgMTA4LjVUNzkgNzc3cTAgMTM5IDk1IDIzMS41dDIzNSA5Mi41cTk2IDAgMTc4LTQ3IDk4IDAgMjE4IDQ3em0zMTgtODgxSDkwMXE0IDQ1IDQgMTM0djYwOXEwIDk0LTQgMTI4aDIyMnEtNC0zMy00LTEyNFYzNTRxMC04OSA0LTEzNHptNjAxIDIyMlYyNDZxLTcxLTM5LTE3NC0zOS02MiAwLTEwNyAyMHQtNzAgNTAtMzkuNSA3OC0xOC41IDkyLTQgMTAzdjM1MWgydjRxLTcgMC0xOSAxdC0xOCAxcS0yMSAwLTU5LTZ2MTkwaDk2djc2cTAgNTQtNiA4OWgyMjdxLTYtNDEtNi0xNjVoMTcxVjkwMXEtMTUgMC00My41IDJ0LTQyLjUgMmgtODVWNTQwcTAtMTMxIDg3LTEzMSA2MSAwIDEwOSAzM3ptLTU3NiA5NDdxMC01OC0zOS0xMDEuNXQtOTYtNDMuNXEtNTggMC05OCA0My41VDg3NSAxMzg5cTAgNTkgMzkuNSAxMDN0OTguNSA0NHE1OCAwIDk2LjUtNDQuNVQxMTQ4IDEzODl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80MzkiIHVuaWNvZGU9Iu+HlCIgZD0iTTgwOSA1MzJsMjY2IDQ5OUg5NjNMODA2IDcxOXEtMjQtNDgtNDQtOTJsLTQyIDkyLTE1NSAzMTJINDQ1bDI2My00OTNWMjE0aDEwMXYzMTh6bTcyNyA1ODhWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFENSIgdW5pY29kZT0i74eVIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTg0MiA5NjRxMC04MC01Ny0xMzYuNVQ2NDkgNzcxcS02MCAwLTExMSAzNS02Mi02Ny0xMTUtMTQ2LTI0Ny0zNzEtMjAyLTg1OSAxLTIyLTEyLjUtMzguNVQxNzQtMjU2aC01cS0yMCAwLTM1IDEzLjVUMTE3LTIwOXEtMTQgMTI2LTMuNSAyNDcuNXQyOS41IDIxNyA1NCAxODZUMjY2IDU5N3Q3NCAxMjVxNjEgOTAgMTMyIDE2NS0xNiAzNS0xNiA3NyAwIDgwIDU2LjUgMTM2LjVUNjQ5IDExNTd0MTM2LjUtNTYuNVQ4NDIgOTY0em0zODEtMTFxMC0xNTgtNzgtMjkyVDkzMi41IDQ0OSA2NDAgMzcxcS02NCAwLTEzMSAxNC0yMSA1LTMyLjUgMjMuNVQ0NzAgNDQ4cTUgMjAgMjMgMzEuNXQzOSA3LjVxNTEtMTMgMTA4LTEzIDk3IDAgMTg2IDM4dDE1MyAxMDIgMTAyIDE1MyAzOCAxODYtMzggMTg2LTEwMiAxNTMtMTUzIDEwMi0xODYgMzgtMTg2LTM4LTE1My0xMDItMTAyLTE1My0zOC0xODZxMC0xMTQgNTItMjE4IDEwLTIwIDMuNS00MFQxOTEgNjY1dC0zOS41LTMtMzAuNSAyNlE1NyA4MTEgNTcgOTUzcTAgMTE5IDQ2LjUgMjI3VDIyOCAxMzY2dDE4NiAxMjQgMjI2IDQ2cTE1OCAwIDI5Mi41LTc4dDIxMi41LTIxMi41IDc4LTI5Mi41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQ2IiB1bmljb2RlPSLvh5YiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMjcwIDczMHEtOCAxOS04IDUyIDAgMjAgMTEgNDl0MjQgNDVxLTEgMjIgNy41IDUzdDIyLjUgNDNxMCAxMzkgOTIuNSAyODguNVQ2MzcgMTQ3MHExMzkgNjYgMzI0IDY2IDEzMyAwIDI2Ni01NSA0OS0yMSA5MC00OHQ3MS01NiA1NS02OCA0Mi03NCAzMi41LTg0LjUgMjUuNS04OS41IDIyLTk4bDEtNXE1NS04MyA1NS0xNTAgMC0xNC05LTQwdC05LTM4cTAtMSAxLjUtMy41dDMuNS01IDItMy41cTc3LTExNCAxMjAuNS0yMTQuNVQxNzc0IDI5NXEwLTQzLTE5LjUtMTAwdC01NS41LTU3cS05IDAtMTkuNSA3LjV0LTE5IDE3LjUtMTkgMjYtMTYgMjYuNS0xMy41IDI2LTkgMTcuNXEtMSAxLTMgMWwtNS00cS01OS0xNTQtMTMyLTIyMyAyMC0yMCA2MS41LTM4LjV0NjktNDEuNSAzNS41LTY1cS0yLTQtNC0xNnQtNy0xOHEtNjQtOTctMzAyLTk3LTUzIDAtMTEwLjUgOXQtOTggMjAtMTA0LjUgMzBxLTE1IDUtMjMgNy0xNCA0LTQ2IDQuNXQtNDAgMS41cS00MS00NS0xMjcuNS02NVQ1OTgtMjU2cS0zNSAwLTY5IDEuNXQtOTMgOVQzMzUtMjI1dC03NC41IDQwLTMyLjUgNjRxMCA0MCAxMCA1OS41VDI3OS0xM3ExMSAyIDQwLjUgMTNUMzY5IDEycTQgMCAxNCAyIDIgMiAyIDRsLTIgM3EtNDggMTEtMTA4IDEwNS41VDIwMiAyODNsLTUgM3EtNCAwLTEyLTIwLTE4LTQxLTU0LjUtNzQuNVQ1MyAxNTRoLTFxLTQgMC02IDQuNXQtNSA1LjVxLTIzIDU0LTIzIDEwMCAwIDI3NSAyNTIgNDY2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQ3IiB1bmljb2RlPSLvh5ciIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNNTgwIDEwNzVxMCA0MS0yNSA2NnQtNjYgMjVxLTQzIDAtNzYtMjUuNXQtMzMtNjUuNXEwLTM5IDMzLTY0LjV0NzYtMjUuNXE0MSAwIDY2IDI0LjV0MjUgNjUuNXptNzQzLTUwN3EwIDI4LTI1LjUgNTB0LTY1LjUgMjJxLTI3IDAtNDkuNS0yMi41VDExNjAgNTY4cTAtMjggMjIuNS01MC41VDEyMzIgNDk1cTQwIDAgNjUuNSAyMnQyNS41IDUxem0tMjM2IDUwN3EwIDQxLTI0LjUgNjZ0LTY1LjUgMjVxLTQzIDAtNzYtMjUuNXQtMzMtNjUuNXEwLTM5IDMzLTY0LjV0NzYtMjUuNXE0MSAwIDY1LjUgMjQuNXQyNC41IDY1LjV6bTYzNS01MDdxMCAyOC0yNiA1MHQtNjUgMjJxLTI3IDAtNDkuNS0yMi41VDE1NTkgNTY4cTAtMjggMjIuNS01MC41VDE2MzEgNDk1cTM5IDAgNjUgMjJ0MjYgNTF6bS0yNjYgMzk3cS0zMSA0LTcwIDQtMTY5IDAtMzExLTc3VDg1MS41IDY4My41IDc3MCAzOTZxMC03OCAyMy0xNTItMzUtMy02OC0zLTI2IDAtNTAgMS41dC01NSA2LjUtNDQuNSA3LTU0LjUgMTAuNS01MCAxMC41TDIxOCAxNTBsNzIgMjE4UTAgNTcxIDAgODU4cTAgMTY5IDk3LjUgMzExdDI2NCAyMjMuNVQ3MjUgMTQ3NHExNzYgMCAzMzIuNS02NnQyNjItMTgyLjVUMTQ1NiA5NjV6bTU5Mi01NjFxMC0xMTctNjguNS0yMjMuNVQxNzk0LTEzbDU1LTE4MS0xOTkgMTA5cS0xNTAtMzctMjE4LTM3LTE2OSAwLTMxMSA3MC41VDg5Ny41IDE0MCA4MTYgNDA0dDgxLjUgMjY0VDExMjEgODU5LjV0MzExIDcwLjVxMTYxIDAgMzAzLTcwLjV0MjI3LjUtMTkyVDIwNDggNDA0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDQzIiB1bmljb2RlPSLvh5giIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc2NCAxNTI1cTMzLTI0IDI3LTY0TDE1MzUtNzVxLTUtMjktMzItNDUtMTQtOC0zMS04LTExIDAtMjQgNUw5OTUgNjIgNzUzLTIzM3EtMTgtMjMtNDktMjMtMTMgMC0yMiA0LTE5IDctMzAuNSAyMy41VDY0MC0xOTJ2MzQ5bDg2NCAxMDU5TDQzNSAyOTEgNDAgNDUzUTMgNDY3IDAgNTA4cS0yIDQwIDMyIDU5bDE2NjQgOTYwcTE1IDkgMzIgOSAyMCAwIDM2LTExeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ0IiB1bmljb2RlPSLvh5kiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc2NCAxNTI1cTMzLTI0IDI3LTY0TDE1MzUtNzVxLTUtMjktMzItNDUtMTQtOC0zMS04LTExIDAtMjQgNUw5MjEgOTIgNjIzLTIzNXEtMTgtMjEtNDctMjEtMTQgMC0yMyA0LTE5IDctMzAgMjMuNVQ1MTItMTkydjQ1Mkw0MCA0NTNRMyA0NjcgMCA1MDhxLTMgMzkgMzIgNTlsMTY2NCA5NjBxMzUgMjEgNjgtMnpNMTQyMiAyNmwyMjEgMTMyM0wyMDkgNTIybDMzNi0xMzcgODYzIDYzOS00NzgtNzk3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ1IiB1bmljb2RlPSLvh5oiIGQ9Ik0xNTM2IDY0MHEwLTE1Ni02MS0yOThUMTMxMSA5NyAxMDY2LTY3dC0yOTgtNjFxLTE3MiAwLTMyNyA3Mi41VDE3NyAxNDlxLTcgMTAtNi41IDIyLjVUMTc5IDE5MmwxMzcgMTM4cTEwIDkgMjUgOSAxNi0yIDIzLTEyIDczLTk1IDE3OS0xNDd0MjI1LTUycTEwNCAwIDE5OC41IDQwLjVUMTEzMCAyNzh0MTA5LjUgMTYzLjVUMTI4MCA2NDB0LTQwLjUgMTk4LjVUMTEzMCAxMDAydC0xNjMuNSAxMDkuNVQ3NjggMTE1MnEtOTggMC0xODgtMzUuNVQ0MjAgMTAxNWwxMzctMTM4cTMxLTMwIDE0LTY5LTE3LTQwLTU5LTQwSDY0cS0yNiAwLTQ1IDE5VDAgODMydjQ0OHEwIDQyIDQwIDU5IDM5IDE3IDY5LTE0bDEzMC0xMjlxMTA3IDEwMSAyNDQuNSAxNTYuNVQ3NjggMTQwOHExNTYgMCAyOTgtNjF0MjQ1LTE2NCAxNjQtMjQ1IDYxLTI5OHpNODk2IDkyOFY0ODBxMC0xNC05LTIzdC0yMy05SDU0NHEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDIyNHYzNTJxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NDYiIHVuaWNvZGU9Iu+HmyIgZD0iTTc2OCAxMjgwcS0xMzAgMC0yNDguNS01MXQtMjA0LTEzNi41LTEzNi41LTIwNFQxMjggNjQwdDUxLTI0OC41IDEzNi41LTIwNFQ1MTkuNSA1MSA3NjggMHQyNDguNSA1MSAyMDQgMTM2LjUgMTM2LjUgMjA0IDUxIDI0OC41LTUxIDI0OC41LTEzNi41IDIwNC0yMDQgMTM2LjUtMjQ4LjUgNTF6bTc2OC02NDBxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NDciIHVuaWNvZGU9Iu+HnCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjgyLTEyOHEtNDQgMC0xMzIuNSAzLjVUMTQxNi0xMjFxLTQ0IDAtMTMyLTMuNXQtMTMyLTMuNXEtMjQgMC0zNyAyMC41VDExMDItNjJxMCAzMSAxNyA0NnQzOSAxNyA1MSA3IDQ1IDE1cTMzIDIxIDMzIDE0MGwtMSAzOTFxMCAyMS0xIDMxLTEzIDQtNTAgNEg1NjBxLTM4IDAtNTEtNC0xLTEwLTEtMzFsLTEtMzcxcTAtMTQyIDM3LTE2NCAxNi0xMCA0OC0xM3Q1Ny0zLjUgNDUtMTVUNzE0LTU4cTAtMjYtMTIuNS00OFQ2NjUtMTI4cS00NyAwLTEzOS41IDMuNVQzODctMTIxcS00MyAwLTEyOC0zLjVUMTMyLTEyOHEtMjMgMC0zNS41IDIxVDg0LTYycTAgMzAgMTUuNSA0NXQzNiAxNy41VDE4MyA4dDQyIDE1cTMzIDIzIDMzIDE0M2wtMSA1N3Y4MTNxMCAzIC41IDI2dDAgMzYuNS0xLjUgMzguNS0zLjUgNDItNi41IDM2LjUtMTEgMzEuNS0xNiAxOHEtMTUgMTAtNDUgMTJ0LTUzIDItNDEgMTQtMTggNDVxMCAyNiAxMiA0OHQzNiAyMnE0NiAwIDEzOC41LTMuNVQzODcgMTQwMXE0MiAwIDEyNi41IDMuNVQ2NDAgMTQwOHEyNSAwIDM3LjUtMjJ0MTIuNS00OHEwLTMwLTE3LTQzLjV0LTM4LjUtMTQuNS00OS41LTQtNDMtMTNxLTM1LTIxLTM1LTE2MGwxLTMyMHEwLTIxIDEtMzIgMTMtMyAzOS0zaDY5OXEyNSAwIDM4IDMgMSAxMSAxIDMybDEgMzIwcTAgMTM5LTM1IDE2MC0xOCAxMS01OC41IDEyLjV0LTY2IDEzLTI1LjUgNDkuNXEwIDI2IDEyLjUgNDh0MzcuNSAyMnE0NCAwIDEzMi0zLjV0MTMyLTMuNXE0MyAwIDEyOSAzLjV0MTI5IDMuNXEyNSAwIDM3LjUtMjJ0MTIuNS00OHEwLTMwLTE3LjUtNDR0LTQwLTE0LjUtNTEuNS0zLTQ0LTEyLjVxLTM1LTIzLTM1LTE2MWwxLTk0M3EwLTExOSAzNC0xNDAgMTYtMTAgNDYtMTMuNXQ1My41LTQuNSA0MS41LTE1LjUgMTgtNDQuNXEwLTI2LTEyLTQ4dC0zNi0yMnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ0OCIgdW5pY29kZT0i74edIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEyNzggMTM0N3YtNzNxMC0yOS0xOC41LTYxdC00Mi41LTMycS01MCAwLTU0LTEtMjYtNi0zMi0zMS0zLTExLTMtNjRWLTY3cTAtMjUtMTgtNDN0LTQzLTE4SDk1OXEtMjUgMC00MyAxOHQtMTggNDN2MTIxOEg3NTVWLTY3cTAtMjUtMTcuNS00M1Q2OTQtMTI4SDU4NnEtMjYgMC00My41IDE4VDUyNS02N3Y0OTZxLTE0NyAxMi0yNDUgNTktMTI2IDU4LTE5MiAxNzktNjQgMTE3LTY0IDI1OSAwIDE2NiA4OCAyODYgODggMTE4IDIwOSAxNTkgMTExIDM3IDQxNyAzN2g0NzlxMjUgMCA0My0xOHQxOC00M3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ0OSIgdW5pY29kZT0i74eeIiBkPSJNMzUyIDEyOFYwSDB2MTI4aDM1MnptMzUyIDEyOHEyNiAwIDQ1LTE5dDE5LTQ1Vi02NHEwLTI2LTE5LTQ1dC00NS0xOUg0NDhxLTI2IDAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnptMTYwIDM4NFY1MTJIMHYxMjhoODY0em0tNjQwIDUxMnYtMTI4SDB2MTI4aDIyNHpNMTUzNiAxMjhWMEg4MDB2MTI4aDczNnpNNTc2IDEyODBxMjYgMCA0NS0xOXQxOS00NVY5NjBxMC0yNi0xOS00NXQtNDUtMTlIMzIwcS0yNiAwLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgyNTZ6bTY0MC01MTJxMjYgMCA0NS0xOXQxOS00NVY0NDhxMC0yNi0xOS00NXQtNDUtMTlIOTYwcS0yNiAwLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgyNTZ6bTMyMC0xMjhWNTEyaC0yMjR2MTI4aDIyNHptMCA1MTJ2LTEyOEg2NzJ2MTI4aDg2NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFFMCIgdW5pY29kZT0i74egIiBkPSJNMTIxNiA1MTJxMTMzIDAgMjI2LjUtOTMuNVQxNTM2IDE5MnQtOTMuNS0yMjYuNVQxMjE2LTEyOCA5ODkuNS0zNC41IDg5NiAxOTJxMCAxMiAyIDM0TDUzOCA0MDZxLTkyLTg2LTIxOC04Ni0xMzMgMC0yMjYuNSA5My41VDAgNjQwdDkzLjUgMjI2LjVUMzIwIDk2MHExMjYgMCAyMTgtODZsMzYwIDE4MHEtMiAyMi0yIDM0IDAgMTMzIDkzLjUgMjI2LjVUMTIxNiAxNDA4dDIyNi41LTkzLjVUMTUzNiAxMDg4dC05My41LTIyNi41VDEyMTYgNzY4cS0xMjYgMC0yMTggODZMNjM4IDY3NHEyLTIyIDItMzR0LTItMzRsMzYwLTE4MHE5MiA4NiAyMTggODZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTEiIHVuaWNvZGU9Iu+HoSIgZD0iTTEyODAgMzQxcTAgODgtNjIuNSAxNTFUMTA2NyA1NTVxLTg0IDAtMTQ1LTU4TDY4MSA2MTdxMiAxNiAyIDIzdC0yIDIzbDI0MSAxMjBxNjEtNTggMTQ1LTU4IDg4IDAgMTUwLjUgNjN0NjIuNSAxNTEtNjIuNSAxNTAuNVQxMDY3IDExNTJ0LTE1MS02Mi41VDg1MyA5MzlxMC03IDItMjNMNjE0IDc5NnEtNjIgNTctMTQ1IDU3LTg4IDAtMTUwLjUtNjIuNVQyNTYgNjQwdDYyLjUtMTUwLjVUNDY5IDQyN3E4MyAwIDE0NSA1N2wyNDEtMTIwcS0yLTE2LTItMjMgMC04OCA2My0xNTAuNXQxNTEtNjIuNSAxNTAuNSA2Mi41VDEyODAgMzQxem0yNTYgNzc5VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTIiIHVuaWNvZGU9Iu+HoiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01NzEgOTQ3cS0xMCAyNS0zNCAzNXQtNDkgMHEtMTA4LTQ0LTE5MS0xMjdUMTcwIDY2NHEtMTAtMjUgMC00OXQzNS0zNHExMy01IDI0LTUgNDIgMCA2MCA0MCAzNCA4NCA5OC41IDE0OC41VDUzNiA4NjNxMjUgMTEgMzUgMzV0MCA0OXptOTQyIDM1Nmw0Ni00Ni0yNDQtMjQzIDY4LTY4cTE5LTE5IDE5LTQ1LjV0LTE5LTQ1LjVsLTY0LTY0cTg5LTE2MSA4OS0zNDMgMC0xNDMtNTUuNS0yNzMuNXQtMTUwLTIyNS0yMjUtMTUwVDcwNC0yNTZ0LTI3My41IDU1LjUtMjI1IDE1MC0xNTAgMjI1VDAgNDQ4dDU1LjUgMjczLjUgMTUwIDIyNSAyMjUgMTUwVDcwNCAxMTUycTE4MiAwIDM0My04OWw2NCA2NHExOSAxOSA0NS41IDE5dDQ1LjUtMTlsNjgtNjh6bTggNTZxLTEwLTEwLTIyLTEwLTEzIDAtMjMgMTBsLTkxIDkwcS05IDEwLTkgMjN0OSAyM3ExMCA5IDIzIDl0MjMtOWw5MC05MXExMC05IDEwLTIyLjV0LTEwLTIyLjV6bTIzMC0yMzBxLTExLTktMjMtOXQtMjMgOWwtOTAgOTFxLTEwIDktMTAgMjIuNXQxMCAyMi41cTkgMTAgMjIuNSAxMHQyMi41LTEwbDkxLTkwcTktMTAgOS0yM3QtOS0yM3ptNDEgMTgzcTAtMTQtOS0yM3QtMjMtOWgtOTZxLTE0IDAtMjMgOXQtOSAyMyA5IDIzIDIzIDloOTZxMTQgMCAyMy05dDktMjN6bS0xOTIgMTkydi05NnEwLTE0LTktMjN0LTIzLTktMjMgOS05IDIzdjk2cTAgMTQgOSAyM3QyMyA5IDIzLTkgOS0yM3ptMTUxLTU1bC05MS05MHEtMTAtMTAtMjItMTAtMTMgMC0yMyAxMC0xMCA5LTEwIDIyLjV0MTAgMjIuNWw5MCA5MXExMCA5IDIzIDl0MjMtOXE5LTEwIDktMjN0LTktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTMiIHVuaWNvZGU9Iu+HoyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02MDkgNzIwbDI4NyAyMDggMjg3LTIwOC0xMDktMzM2SDcxOXptMjg3IDgxNnExODIgMCAzNDgtNzF0Mjg2LTE5MSAxOTEtMjg2IDcxLTM0OC03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxem02MTktMTM1MHExNDkgMjAzIDE0OSA0NTR2M2wtMTAyLTg5LTI0MCAyMjQgNjMgMzIzIDEzNC0xMnEtMTUwIDIwNi0zODkgMjgybDUzLTEyNC0yODctMTU5LTI4NyAxNTkgNTMgMTI0cS0yMzktNzYtMzg5LTI4MmwxMzUgMTIgNjItMzIzLTI0MC0yMjQtMTAyIDg5di0zcTAtMjUxIDE0OS00NTRsMzAgMTMyIDMyNi00MEw3NzItMjAgNjU2LTg5cTExNy0zOSAyNDAtMzl0MjQwIDM5bC0xMTYgNjkgMTM5IDI5OCAzMjYgNDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTQiIHVuaWNvZGU9Iu+HpCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00NDggMjI0VjMycTAtMTQtOS0yM3QtMjMtOUgyMjRxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzek0yNTYgNjA4VjQxNnEwLTE0LTktMjN0LTIzLTlIMzJxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem01NzYtMzg0VjMycTAtMTQtOS0yM3QtMjMtOUg2MDhxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzek02NDAgNjA4VjQxNnEwLTE0LTktMjN0LTIzLTlINDE2cS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3pNNjYgNzY4cS0yOCAwLTQ3IDE5VDAgODMzdjEyOWg1MTRWODMzcTAtMjctMTktNDZ0LTQ2LTE5SDY2em0xMTUwLTU0NFYzMnEwLTE0LTktMjN0LTIzLTlIOTkycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptLTE5MiAzODRWNDE2cTAtMTQtOS0yM3QtMjMtOUg4MDBxLTE0IDAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem01NzYtMzg0VjMycTAtMTQtOS0yM3QtMjMtOWgtMTkycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptLTE5MiAzODRWNDE2cTAtMTQtOS0yM3QtMjMtOWgtMTkycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptMzg0IDQwOHYtMTNoLTUxNHYxMHEwIDEwNC0zODIgMTAyLTM4Mi0xLTM4Mi0xMDJ2LTEwSDB2MTNxMCAxNyA4LjUgNDN0MzQgNjQgNjUuNSA3NS41IDExMC41IDc2IDE2MCA2Ny41IDIyNCA0Ny41VDg5NiAxNDA4dDI5My0xOC41IDIyNC00Ny41IDE2MC41LTY3LjUgMTEwLjUtNzYgNjUuNS03NS41IDM0LTY0IDguNS00M3ptMC00MDhWNDE2cTAtMTQtOS0yM3QtMjMtOWgtMTkycS0xNCAwLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptMCAzNTRWODMzcTAtMjctMTktNDZ0LTQ2LTE5aC0zODRxLTI3IDAtNDYgMTl0LTE5IDQ2djEyOWg1MTR6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTUiIHVuaWNvZGU9Iu+HpSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik03MDQgMTIxNlY0NDhxMC0yNi0xOS00NXQtNDUtMTl2LTU3NnEwLTI2LTE5LTQ1dC00NS0xOUg2NHEtMjYgMC00NSAxOVQwLTE5MnY1MTJsMjQ5IDg3M3E3IDIzIDMxIDIzaDQyNHptMzIwIDBWNTEySDc2OHY3MDRoMjU2em03NjgtODk2di01MTJxMC0yNi0xOS00NXQtNDUtMTloLTUxMnEtMjYgMC00NSAxOXQtMTkgNDV2NTc2cS0yNiAwLTQ1IDE5dC0xOSA0NXY3NjhoNDI0cTI0IDAgMzEtMjN6TTczNiAxNTA0di0yMjRIMzg0djIyNHEwIDE0IDkgMjN0MjMgOWgyODhxMTQgMCAyMy05dDktMjN6bTY3MiAwdi0yMjRoLTM1MnYyMjRxMCAxNCA5IDIzdDIzIDloMjg4cTE0IDAgMjMtOXQ5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDU2IiB1bmljb2RlPSLvh6YiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc1NSAxMDgzcTM3LTM4IDM3LTkwLjV0LTM3LTkwLjVsLTQwMS00MDAgMTUwLTE1MC0xNjAtMTYwUTExODEgMjkgOTU0LjUgNS41VDU0MyAxMDZMMTgxLTI1NkgwdjE4MWwzNjIgMzYyUTIzOCA0NzIgMjYxLjUgNjk4LjVUNDQ4IDEwODhsMTYwIDE2MCAxNTAtMTUwIDQwMCA0MDFxMzggMzcgOTEgMzd0OTAtMzcgMzctOTAuNS0zNy05MC41TDkzOSA5MTdsMjM0LTIzNCA0MDEgNDAwcTM4IDM3IDkxIDM3dDkwLTM3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDU3IiB1bmljb2RlPSLvh6ciIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODczIDc5NnEwLTgzLTYzLjUtMTQyLjVUNjU3IDU5NHQtMTUyLjUgNTkuNVQ0NDEgNzk2cTAgODQgNjMuNSAxNDNUNjU3IDk5OHQxNTIuNS01OVQ4NzMgNzk2em01MDIgMHEwLTgzLTYzLTE0Mi41VDExNTkgNTk0cS04OSAwLTE1Mi41IDU5LjVUOTQzIDc5NnEwIDg0IDYzLjUgMTQzdDE1Mi41IDU5cTkwIDAgMTUzLTU5dDYzLTE0M3ptMjI1LTE4MHY2NjdxMCA4Ny0zMiAxMjMuNXQtMTExIDM2LjVIMzQ1cS04MyAwLTExMi41LTM0VDIwMyAxMjgzVjYxMHE0My0yMyA4OC41LTQwdDgxLTI4IDgxLTE4LjUgNzEtMTEgNzAtNCA1OC41LS41IDU2LjUgMiA0NC41IDJxNjggMSA5NS0yNyA2LTYgMTAtOSAyNi0yNSA2MS01MSA3IDkxIDExOCA4NyA1IDAgMzYuNS0xLjV0NDMtMiA0NS41LTEgNTMgMSA1NC41IDQuNSA2MSA4LjUgNjIgMTMuNSA2NyAxOS41IDY3LjUgMjcgNzIgMzQuNXptMTYzIDVxLTEyMS0xNDktMzcyLTI1MiA4NC0yODUtMjMtNDY1LTY2LTExMy0xODMtMTQ4LTEwNC0zMi0xODIgMTUtODYgNTEtODIgMTY0bC0xIDMyNnYxcS04IDItMjQuNSA2dC0yMy41IDVsLTEtMzM4cTQtMTE0LTgzLTE2NC03OS00Ny0xODMtMTUtMTE3IDM2LTE4MiAxNTAtMTA1IDE4MC0yMiA0NjNRMTUwIDQ3MiAyOSA2MjFxLTI1IDM3LTQgNjN0NjAtMXE0LTIgMTEuNS03dDEwLjUtOHY2OTRxMCA3MiA0NyAxMjN0MTE0IDUxaDEyNTdxNjcgMCAxMTQtNTF0NDctMTIzVjY2OGwyMSAxNXEzOSAyNyA2MCAxdC00LTYzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDU4IiB1bmljb2RlPSLvh6giIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDExMDJWNjY4SDc1MXY0MzRoMTQ1em0zOTggMFY2NjhoLTE0NXY0MzRoMTQ1em0wLTc2MGwyNTMgMjU0djc5NUgzNTNWMzQyaDMyNlYxMjVsMjE3IDIxN2gzOTh6bTM5OCAxMTk0VjUyM0wxMjU4IDg5SDkzMkw3MTUtMTI4SDQ5OFY4OUgxMDB2MTE1OGwxMDkgMjg5aDE0ODN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NTkiIHVuaWNvZGU9Iu+HqSIgZD0iTTc3MyAyMTdWOTBxLTEtMjkyLTYtMzA1LTEyLTMyLTUxLTQwLTU0LTktMTgxLjUgMzhUMzcyLTEyOHEtMTMgMTUtMTcgMzYtMSAxMiA0IDI2IDQgMTAgMzQgNDd0MTgxIDIxNnExIDAgNjAgNzAgMTUgMTkgMzkuNSAyNC41VDcyMyAyODhxMjQtMTAgMzcuNS0yOXQxMi41LTQyek02MjQgNDY4cS0zLTU1LTUyLTcwbC0xMjAtMzlxLTI3NS04OC0yOTItODgtMzUgMi01NCAzNi0xMiAyNS0xNyA3NS04IDc2IDEgMTY2LjVUMTIwIDY3M3Q1NiAzMnExMyAwIDIwMi03NyA3MS0yOSAxMTUtNDdsODQtMzRxMjMtOSAzNS41LTMwLjVUNjI0IDQ2OHptODI2LTI5N3EtNy01NC05MS41LTE2MVQxMjIzLTExN3EtMzctMTQtNjMgNy0xNCAxMC0xODQgMjg3bC00NyA3N3EtMTQgMjEtMTEuNSA0NnQxOS41IDQ2cTM1IDQzIDgzIDI2IDEtMSAxMTktNDAgMjAzLTY2IDI0Mi03OS41dDQ3LTIwLjVxMjgtMjIgMjItNjF6TTc3OCA4MDNxNS0xMDItNTQtMTIyLTU4LTE3LTExNCA3MWwtMzc4IDU5OHEtOCAzNSAxOSA2MiA0MSA0MyAyMDcuNSA4OS41VDY4MyAxNTMzcTQwLTEwIDQ5LTQ1IDMtMTggMjItMzA1LjVUNzc4IDgwM3ptNjYyLTEwOHEzLTM5LTI2LTU5LTE1LTEwLTMyOS04Ni02Ny0xNS05MS0yM2wxIDJxLTIzLTYtNDYgNHQtMzcgMzJxLTMwIDQ3IDAgODcgMSAxIDc1IDEwMiAxMjUgMTcxIDE1MCAyMDR0MzQgMzlxMjggMTkgNjUgMiA0OC0yMyAxMjMtMTMzLjV0ODEtMTY3LjV2LTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NjAiIHVuaWNvZGU9Iu+HqiIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xMDI0IDEwMjRINjQwVjY0MGgzODR2Mzg0em0xMjgtNjQwVjI1Nkg1MTJ2MTI4aDY0MHptMCA3NjhWNTEySDUxMnY2NDBoNjQwem02NDAtNzY4VjI1NmgtNTEydjEyOGg1MTJ6bTAgMjU2VjUxMmgtNTEydjEyOGg1MTJ6bTAgMjU2Vjc2OGgtNTEydjEyOGg1MTJ6bTAgMjU2di0xMjhoLTUxMnYxMjhoNTEyek0yNTYgMTkydjk2MEgxMjhWMTkycTAtMjYgMTktNDV0NDUtMTkgNDUgMTkgMTkgNDV6bTE2NjQgMHYxMDg4SDM4NFYxOTJxMC0zMy0xMS02NGgxNDgzcTI2IDAgNDUgMTl0MTkgNDV6bTEyOCAxMjE2VjE5MnEwLTgwLTU2LTEzNlQxODU2IDBIMTkyUTExMiAwIDU2IDU2VDAgMTkydjEwODhoMjU2djEyOGgxNzkyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDYxIiB1bmljb2RlPSLvh6siIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTAyNCAxM3EtMjAgMC05MyA3My41VDg1OCAxODBxMCAzMiA2Mi41IDU0dDEwMy41IDIyIDEwMy41LTIyIDYyLjUtNTRxMC0yMC03My05My41VDEwMjQgMTN6bTI3MCAyNzFxLTIgMC00MCAyNXQtMTAxLjUgNTAtMTI4LjUgMjUtMTI4LjUtMjUtMTAxLTUwLTQwLjUtMjVxLTE4IDAtOTMuNSA3NVQ1ODUgNDUycTAgMTMgMTAgMjMgNzggNzcgMTk2IDEyMXQyMzMgNDQgMjMzLTQ0IDE5Ni0xMjFxMTAtMTAgMTAtMjMgMC0xOC03NS41LTkzdC05My41LTc1em0yNzMgMjcycS0xMSAwLTIzIDgtMTM2IDEwNS0yNTIgMTU0LjVUMTAyNCA3NjhxLTg1IDAtMTcwLjUtMjJ0LTE0OS01M1Q1OTEgNjMxdC03OS01My0zMS0yMnEtMTcgMC05MiA3NXQtNzUgOTNxMCAxMiAxMCAyMiAxMzIgMTMyIDMyMCAyMDV0MzgwIDczIDM4MC03MyAzMjAtMjA1cTEwLTEwIDEwLTIyIDAtMTgtNzUtOTN0LTkyLTc1em0yNzEgMjcxcS0xMSAwLTIyIDktMTc5IDE1Ny0zNzEuNSAyMzYuNVQxMDI0IDExNTJ0LTQyMC41LTc5LjVUMjMyIDgzNnEtMTEtOS0yMi05LTE3IDAtOTIuNSA3NVQ0MiA5OTVxMCAxMyAxMCAyMyAxODcgMTg2IDQ0NSAyODh0NTI3IDEwMiA1MjctMTAyIDQ0NS0yODhxMTAtMTAgMTAtMjMgMC0xOC03NS41LTkzdC05Mi41LTc1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDYyIiB1bmljb2RlPSLvh6wiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDBxMCA1My0zNy41IDkwLjVUMjU2IDEyOHQtOTAuNS0zNy41VDEyOCAwdDM3LjUtOTAuNVQyNTYtMTI4dDkwLjUgMzcuNVQzODQgMHptMzg0IDBxMCA1My0zNy41IDkwLjVUNjQwIDEyOHQtOTAuNS0zNy41VDUxMiAwdDM3LjUtOTAuNVQ2NDAtMTI4dDkwLjUgMzcuNVQ3NjggMHpNMzg0IDM4NHEwIDUzLTM3LjUgOTAuNVQyNTYgNTEydC05MC41LTM3LjVUMTI4IDM4NHQzNy41LTkwLjVUMjU2IDI1NnQ5MC41IDM3LjVUMzg0IDM4NHpNMTE1MiAwcTAgNTMtMzcuNSA5MC41VDEwMjQgMTI4dC05MC41LTM3LjVUODk2IDB0MzcuNS05MC41VDEwMjQtMTI4dDkwLjUgMzcuNVQxMTUyIDB6TTc2OCAzODRxMCA1My0zNy41IDkwLjVUNjQwIDUxMnQtOTAuNS0zNy41VDUxMiAzODR0MzcuNS05MC41VDY0MCAyNTZ0OTAuNSAzNy41VDc2OCAzODR6TTM4NCA3NjhxMCA1My0zNy41IDkwLjVUMjU2IDg5NnQtOTAuNS0zNy41VDEyOCA3Njh0MzcuNS05MC41VDI1NiA2NDB0OTAuNSAzNy41VDM4NCA3Njh6bTc2OC0zODRxMCA1My0zNy41IDkwLjVUMTAyNCA1MTJ0LTkwLjUtMzcuNVQ4OTYgMzg0dDM3LjUtOTAuNVQxMDI0IDI1NnQ5MC41IDM3LjVUMTE1MiAzODR6TTc2OCA3NjhxMCA1My0zNy41IDkwLjVUNjQwIDg5NnQtOTAuNS0zNy41VDUxMiA3Njh0MzcuNS05MC41VDY0MCA2NDB0OTAuNSAzNy41VDc2OCA3Njh6TTE1MzYgMHYzODRxMCA1Mi0zOCA5MHQtOTAgMzgtOTAtMzgtMzgtOTBWMHEwLTUyIDM4LTkwdDkwLTM4IDkwIDM4IDM4IDkwem0tMzg0IDc2OHEwIDUzLTM3LjUgOTAuNVQxMDI0IDg5NnQtOTAuNS0zNy41VDg5NiA3Njh0MzcuNS05MC41VDEwMjQgNjQwdDkwLjUgMzcuNVQxMTUyIDc2OHptMzg0IDMyMHYyNTZxMCAyNi0xOSA0NXQtNDUgMTlIMTkycS0yNiAwLTQ1LTE5dC0xOS00NXYtMjU2cTAtMjYgMTktNDV0NDUtMTloMTI4MHEyNiAwIDQ1IDE5dDE5IDQ1em0wLTMyMHEwIDUzLTM3LjUgOTAuNVQxNDA4IDg5NnQtOTAuNS0zNy41VDEyODAgNzY4dDM3LjUtOTAuNVQxNDA4IDY0MHQ5MC41IDM3LjVUMTUzNiA3Njh6bTEyOCA2NDBWLTEyOHEwLTUyLTM4LTkwdC05MC0zOEgxMjhxLTUyIDAtOTAgMzhUMC0xMjh2MTUzNnEwIDUyIDM4IDkwdDkwIDM4aDE0MDhxNTIgMCA5MC0zOHQzOC05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2MyIgdW5pY29kZT0i74etIiBkPSJNMTUxOSA4OTBxMTgtODQtNC0yMDQtODctNDQ0LTU2NS00NDRoLTQ0cS0yNSAwLTQ0LTE2LjVUODM4IDE4M2wtNC0xOS01NS0zNDYtMi0xNXEtNS0yNi0yNC41LTQyLjVUNzA4LTI1Nkg0NTdxLTIxIDAtMzMgMTV0LTkgMzZxOSA1NiAyNi41IDE2OFQ0NjggMTMxdDI3IDE2Ny41VDUyMiA0NjZxNSAzNyA0MyAzN2gxMzFxMTMzLTIgMjM2IDIxIDE3NSAzOSAyODcgMTQ0IDEwMiA5NSAxNTUgMjQ2IDI0IDcwIDM1IDEzMyAxIDYgMi41IDcuNXQzLjUgMSA2LTMuNXE3OS01OSA5OC0xNjJ6bS0xNzIgMjgycTAtMTA3LTQ2LTIzNi04MC0yMzMtMzAyLTMxNS0xMTMtNDAtMjUyLTQyIDAtMS05MC0xbC05MCAxcS0xMDAgMC0xMTgtOTYtMi04LTg1LTUzMC0xLTEwLTEyLTEwSDU3cS0yMiAwLTM2LjUgMTYuNVQ5LTJsMjMyIDE0NzFxNSAyOSAyNy41IDQ4dDUxLjUgMTloNTk4cTM0IDAgOTcuNS0xM3QxMTEuNS0zMnExMDctNDEgMTYzLjUtMTIzdDU2LjUtMTk2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDY0IiB1bmljb2RlPSLvh64iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNDQxIDg2NHEzMyAwIDUyLTI2UTc1OSA0NzQgODU1IDY0SDQwOVEyODIgNTA1IDQyIDgxM3EtMTIgMTYtMyAzMy41VDY4IDg2NGgzNzN6bTU1OS0zNTdxLTQ5LTE5OS0xMjUtMzkzLTc5IDMxMC0yNTYgNTk0IDQwIDIyMSA0NCA0NDkgMjExLTM0MCAzMzctNjUwem05OSA3MDlxMjM1LTMyNCAzODQuNS02OTguNVQxNjY4LTI1NmgtNDUxcS00MSA2NjUtNTUzIDE0NzJoNDM1em02OTMtNTc2cTAtNDI0LTEwMS04MTItNjcgNTYwLTM1OSAxMDgzLTI1IDMwMS0xMDYgNTg0LTQgMTYgNS41IDI4LjV0MjUuNSAxMi41aDM1OXEyMSAwIDM4LjUtMTN0MjIuNS0zM3ExMTUtNDA5IDExNS04NTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYxRjAiIHVuaWNvZGU9Iu+HsCIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0xOTc1IDU0NmgtMTM4cTE0IDM3IDY2IDE3OWwzIDlxNCAxMCAxMCAyNnQ5IDI2bDEyLTU1ek01MzEgNjExbC01OCAyOTVxLTExIDU0LTc1IDU0SDEzMGwtMi0xM3EzMTEtNzkgNDAzLTMzNnptMTc5IDM0OUw1NDggNTIybC0xNyA4OXEtMjYgNzAtODUgMTI5LjVUMzE1IDgyOWwxMzUtNTEwaDE3NWwyNjEgNjQxSDcxMHptMTM5LTY0MmgxNjZsMTA0IDY0Mkg5NTN6bTc2OCA2MjZxLTY5IDI3LTE0OSAyNy0xMjMgMC0yMDEtNTl0LTc5LTE1M3EtMS0xMDIgMTQ1LTE3NCA0OC0yMyA2Ny00MXQxOS0zOXEwLTMwLTMwLTQ2dC02OS0xNnEtODYgMC0xNTYgMzNsLTIyIDExLTIzLTE0NHE3NC0zNCAxODUtMzQgMTMwLTEgMjA4LjUgNTl0ODAuNSAxNjBxMCAxMDYtMTQwIDE3NC00OSAyNS03MSA0MnQtMjIgMzhxMCAyMiAyNC41IDM4LjVUMTQ1NSA4MzdxNzAgMSAxMjQtMjRsMTUtOHptNDI1IDE2aC0xMjhxLTY1IDAtODctNTRsLTI0Ni01ODhoMTc0bDM1IDk2aDIxMnE1LTIyIDIwLTk2aDE1NHptMjYyIDMyMFYwcTAtNTItMzgtOTB0LTkwLTM4SDEyOHEtNTIgMC05MCAzOFQwIDB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MC0zOHQzOC05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2NiIgdW5pY29kZT0i74exIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTExMTkgMTE5NXEtMTI4IDg1LTI4MSA4NS0xMDMgMC0xOTcuNS00MC41VDQ3OCAxMTMxIDM2OS41IDk2OSAzMjkgNzcycTAtMTA0IDQwLjUtMTk4VDQ3OCA0MTJ0MTYyLTEwOC41VDgzOCAyNjNxMTUzIDAgMjgxIDg1LTEzMSAxMDctMTc4IDI2NS41dC41IDMxNi41IDE3Ny41IDI2NXptMzMtMjRxLTEyNi05OS0xNzItMjQ5LjV0LS41LTMwMC41VDExNTIgMzcycTEyNyA5OSAxNzIuNSAyNDl0LS41IDMwMC41LTE3MiAyNDkuNXptMzMgMjRxMTMwLTEwNyAxNzcuNS0yNjUuNXQuNS0zMTdUMTE4NSAzNDhxMTI4LTg1IDI4MS04NSAxMDQgMCAxOTggNDAuNVQxODI2IDQxMnQxMDguNSAxNjIgNDAuNSAxOThxMCAxMDMtNDAuNSAxOTdUMTgyNiAxMTMxdC0xNjIuNSAxMDguNVQxNDY2IDEyODBxLTE1MyAwLTI4MS04NXptNzQxLTcyMmg3djNoLTE3di0zaDd2LTE3aDN2MTd6bTI5LTE3aDR2MjBoLTVsLTYtMTMtNiAxM2gtNXYtMjBoM3YxNWw2LTEzaDRsNSAxM3YtMTV6bS04LTQ0MHYtMmgtNXYzaDV2LTF6bTAtOWgzbC00IDVoMmwxIDFxMSAxIDEgM3QtMSAzbC0xIDFoLTlWN2gzdjVoMXpNNjg1IDc1cTAgMTkgMTEgMzF0MzAgMTJxMTggMCAyOS0xMi41VDc2NiA3NXEwLTE5LTExLTMxdC0yOS0xMnEtMTkgMC0zMCAxMnQtMTEgMzF6bTQ3MyA0NHEzMCAwIDM1LTMyaC03MHE1IDMyIDM1IDMyem0zNTYtNDRxMCAxOSAxMSAzMXQyOSAxMiAyOS41LTEyLjVUMTU5NSA3NXEwLTE5LTExLTMxdC0zMC0xMnEtMTggMC0yOSAxMnQtMTEgMzF6bTI3MiAwcTAgMTggMTEuNSAzMC41VDE4MjcgMTE4dDI5LjUtMTIuNVQxODY4IDc1cTAtMTktMTEuNS0zMVQxODI3IDMydC0yOS41IDEyLjVUMTc4NiA3NXptMTU4LTcycS0yIDAtNCAxLTEgMC0zIDJ0LTIgM3EtMSAyLTEgNCAwIDMgMSA0IDAgMiAyIDRsMSAxcTIgMCAyIDEgMiAxIDQgMSAzIDAgNC0xbDQtMiAyLTR2LTFxMS0yIDEtM2wtMS0xVjlsLTEtMS0xLTJxLTItMi00LTItMS0xLTQtMXpNNTk5IDdoMzB2ODVxMCAyNC0xNC41IDM4LjVUNTc1IDE0NnEtMzIgMC00Ny0yNC0xNCAyNC00NSAyNC0yNCAwLTM5LTIwdjE2aC0zMFY3aDMwdjc1cTAgMzYgMzMgMzYgMzAgMCAzMC0zNlY3aDI5djc1cTAgMzYgMzMgMzYgMzAgMCAzMC0zNlY3em0xNjYgMGgyOXYxMzVoLTI5di0xNnEtMTcgMjAtNDMgMjAtMjkgMC00OC0yMHQtMTktNTEgMTktNTEgNDgtMjBxMjggMCA0MyAyMFY3em0xNzggNDFxMCAzNC00NyA0MGwtMTQgMnEtMjMgNC0yMyAxNCAwIDE1IDI1IDE1IDIzIDAgNDMtMTFsMTIgMjRxLTIyIDE0LTU1IDE0LTI2IDAtNDEtMTJ0LTE1LTMycTAtMzMgNDctMzlsMTMtMnEyNC00IDI0LTE0IDAtMTctMzEtMTctMjUgMC00NSAxNGwtMTMtMjNxMjUtMTcgNTgtMTcgMjkgMCA0NS41IDEyVDk0MyA0OHptMTMwLTM0bC04IDI1cS0xMy03LTI2LTctMTkgMC0xOSAyMnY2MWg0OHYyN2gtNDh2NDFoLTMwdi00MWgtMjh2LTI3aDI4VjU0cTAtNTAgNDctNTAgMjEgMCAzNiAxMHptODYgMTMycS0yOSAwLTQ4LTIwdC0xOS01MXEwLTMyIDE5LjUtNTEuNVQxMTYxIDRxMzMgMCA1NSAxOWwtMTQgMjJxLTE4LTE1LTM5LTE1LTM0IDAtNDEgMzNoMTAxdjEycTAgMzItMTggNTEuNXQtNDYgMTkuNXptMTU5IDBxLTIzIDAtMzUtMjB2MTZoLTMwVjdoMzB2NzZxMCAzNSAyOSAzNSAxMCAwIDE4LTRsOSAyOHEtOSA0LTIxIDR6bTMwLTcxcTAtMzEgMTkuNS01MVQxNDIwIDRxMjkgMCA0OCAxNmwtMTQgMjRxLTE4LTEzLTM1LTEyLTE4IDAtMjkuNSAxMlQxMzc4IDc1dDExLjUgMzEgMjkuNSAxMnExOSAwIDM1LTEybDE0IDI0cS0yMCAxNi00OCAxNi0zMyAwLTUyLjUtMjBUMTM0OCA3NXptMjQ1LTY4aDMwdjEzNWgtMzB2LTE2cS0xNSAyMC00MiAyMC0yOSAwLTQ4LjUtMjBUMTQ4MyA3NXQxOS41LTUxVDE1NTEgNHEyOCAwIDQyIDIwVjd6bTEzMyAxMzlxLTIzIDAtMzUtMjB2MTZoLTI5VjdoMjl2NzZxMCAzNSAyOSAzNSAxMCAwIDE4LTRsOSAyOHEtOCA0LTIxIDR6TTE4NjYgN2gyOXYxOTBoLTI5di03MXEtMTUgMjAtNDMgMjB0LTQ3LjUtMjAuNVQxNzU2IDc1dDE5LjUtNTAuNVQxODIzIDRxMjkgMCA0MyAyMFY3em03OCAyMGwtMi0xaC0zcS0yLTEtNC0zLTMtMS0zLTQtMS0yLTEtNiAwLTMgMS01IDAtMiAzLTQgMi0yIDQtM3Q1LTFxNCAwIDYgMSAwIDEgMiAybDIgMXExIDEgMyA0IDEgMiAxIDUgMCA0LTEgNi0xIDEtMyA0IDAgMS0yIDJsLTIgMXEtMSAwLTMgLjV0LTMgLjV6bTM2MCAxMjUzVjBxMC01Mi0zOC05MHQtOTAtMzhIMTI4cS01MiAwLTkwIDM4VDAgMHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMjA0OHE1MiAwIDkwLTM4dDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDY3IiB1bmljb2RlPSLvh7IiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMzEzIDc1OXEwLTUxLTM2LTg0LTI5LTI2LTg5LTI2aC0xN3YyMjBoMTdxNjEgMCA4OS0yNyAzNi0zMSAzNi04M3ptMTc3NiA2NXEwLTUyLTY0LTUyaC0xOXYxMDFoMjBxNjMgMCA2My00OXpNMzgwIDc1OXEwIDc0LTUwIDEyMC41VDIwMSA5MjZoLTk1VjU5M2g5NXE3NCAwIDExOSAzOCA2MCA1MSA2MCAxMjh6bTMwLTE2Nmg2NXYzMzNoLTY1VjU5M3ptMzIwIDEwMXEwIDQwLTIwLjUgNjJUNjM0IDc5OHEtMjkgMTAtMzkuNSAxOVQ1ODQgODQwcTAgMTYgMTMuNSAyNi41VDYzMiA4NzdxMjkgMCA1My0yN2wzNCA0NHEtNDEgMzctOTggMzctNDQgMC03NC0yNy41VDUxNyA4MzZxMC0zNSAxOC01NS41dDY0LTM2LjVxMzctMTMgNDUtMTkgMTktMTIgMTktMzQgMC0yMC0xNC0zMy41VDYxMyA2NDRxLTQ4IDAtNzEgNDRsLTQyLTQwcTQ0LTY0IDExNS02NCA1MSAwIDgzIDMwLjV0MzIgNzkuNXptMjc4LTkwdjc3cS0zNy0zNy03OC0zNy00OSAwLTgwLjUgMzIuNVQ4MTggNzU5cTAgNDggMzEuNSA4MS41VDkyNyA4NzRxNDMgMCA4MS0zOHY3N3EtNDAgMjAtODAgMjAtNzQgMC0xMjUuNS01MC41VDc1MSA3NTl0NTEtMTIzLjVUOTI3IDU4NXE0MiAwIDgxIDE5ek0yMjQwIDB2NTI3cS02NS00MC0xNDQuNS04NFQxODU4IDMyNnQtMzI5LjUtMTM3LjVUMTExMSA1NCA2MDctNjRoMTU2OXEyNiAwIDQ1IDE5dDE5IDQ1em0tODUxIDc1N3EwIDc1LTUzIDEyOHQtMTI4IDUzLTEyOC01My01My0xMjggNTMtMTI4IDEyOC01MyAxMjggNTMgNTMgMTI4em0xNTItMTczbDE0NCAzNDJoLTcxbC05MC0yMjQtODkgMjI0aC03MWwxNDItMzQyaDM1em0xNzMgOWgxODR2NTZoLTExOXY5MGgxMTV2NTZoLTExNXY3NGgxMTl2NTdoLTE4NFY1OTN6bTM5MSAwaDgwbC0xMDUgMTQwcTc2IDE2IDc2IDk0IDAgNDctMzEgNzN0LTg3IDI2aC05N1Y1OTNoNjV2MTMzaDl6bTE5OSA2ODFWNnEwLTU2LTM4LjUtOTV0LTkzLjUtMzlIMTMycS01NSAwLTkzLjUgMzlUMCA2djEyNjhxMCA1NiAzOC41IDk1dDkzLjUgMzloMjA0MHE1NSAwIDkzLjUtMzl0MzguNS05NXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZjFmMyIgdW5pY29kZT0i74ezIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTExOSA4NTRoODlsLTQ1IDEwOHptNjIxLTUyNmw3NCA3OS03MCA3OUg1ODF2LTQ5aDE0MnYtNTVINTgxdi01NGgxNTl6bTE1OCA3OGw5OS0xMTB2MjE3em0yODggNDdxMCAzMy00MCAzM2gtODR2LTY5aDgzcTQxIDAgNDEgMzZ6bTI4OSA0cTAgMjktNDIgMjloLTgydi02MWg4MXE0MyAwIDQzIDMyem0tMjc4IDQ2NnEwIDI5LTQyIDI5aC04MnYtNjBoODFxNDMgMCA0MyAzMXptNDU5LTY5aDg5bC00NCAxMDh6bS05NTcgMTU1VjczOGgtNjZ2MjEybC05NC0yMTJoLTU3bC05NCAyMTJWNzM4SDI1NmwtMjUgNjBIOTZsLTI1LTYwSDFsMTE2IDI3MWg5NmwxMTAtMjU3djI1N2gxMDZsODUtMTg0IDc3IDE4NGgxMDh6bTU1Ni01NTZxMC0yMC01LjUtMzV0LTE0LTI1LTIyLjUtMTYuNS0yNi0xMC0zMS41LTQuNS0zMS41LTEtMzIuNS41LTI5LjUuNXYtOTFIOTM2bC04MCA5MC04My05MEg1MTd2MjcxaDI2MGw4MC04OSA4MiA4OWgyMDdxMTA5IDAgMTA5LTg5ek05NjQgNzk0di01Nkg3NDd2MjcxaDIxN3YtNTdIODEydi00OWgxNDh2LTU1SDgxMnYtNTRoMTUyem0xMzQwLTU1OVY2cTAtNTUtMzguNS05NC41VDIxNzItMTI4SDEzMnEtNTUgMC05My41IDM5LjVUMCA2djY3OGgxMTFsMjUgNjFoNTVsMjUtNjFoMjE4djQ2bDE5LTQ2aDExM2wyMCA0N3YtNDdoNTQxdjk5bDEwIDFxMTAgMCAxMC0xNHYtODZoMjc5djIzcTIzLTEyIDU1LTE4dDUyLjUtNi41IDYzIC41IDUxLjUgMWwyNSA2MWg1NmwyNS02MWgyMjd2NThsMzQtNThoMTgydjM3OGgtMTgwdi00NGwtMjUgNDRoLTE4NXYtNDRsLTIzIDQ0aC0yNDlxLTY5IDAtMTA5LTIydjIyaC0xNzJ2LTIycS0yNCAyMi03MyAyMkg1NTNsLTQzLTk3LTQzIDk3SDI2OXYtNDRsLTIyIDQ0SDc4TDAgODgzdjM5MXEwIDU1IDM4LjUgOTQuNVQxMzIgMTQwOGgyMDQwcTU1IDAgOTMuNS0zOS41dDM4LjUtOTQuNVY1OTZoLTEyMHEtNTEgMC04MS0yMnYyMmgtMTc3cS01NSAwLTc4LTIydjIyaC0zMTZ2LTIycS0zMSAyMi04NyAyMmgtMjA5di0yMnEtMjMgMjItOTEgMjJIOTExbC01NC01OC01MCA1OEg0NThWMjE4aDM0M2w1NSA1OSA1Mi01OWgyMTF2ODloMjFxNTkgMCA5MCAxM1YyMThoMTc0djk5aDhxOCAwIDEwLTJ0Mi0xMHYtODdoNTI5cTU3IDAgODggMjR2LTI0aDE2OHE2MCAwIDk1IDE3em0tNzU4IDIzNHEwLTIzLTEyLTQzdC0zNC0yOXEyNS05IDM0LTI2dDktNDZ2LTU0aC02NXY0NXEwIDMzLTEyIDQzLjV0LTQ2IDEwLjVoLTY5di05OWgtNjV2MjcxaDE1NHE0OCAwIDc3LTE1dDI5LTU4em0tMjc3IDQ2N3EwLTI0LTEyLjUtNDR0LTMzLjUtMjlxMjYtOSAzNC41LTI1LjV0OC41LTQ2LjV2LTUzaC02NXEwIDkgLjUgMjYuNXQwIDI1LTMgMTguNS04LjUgMTYtMTcuNSA4LjUtMjkuNSAzLjVoLTcwdi05OGgtNjR2MjcxbDE1My0xcTQ5IDAgNzgtMTQuNXQyOS01Ny41em01MjktNjA5di01NmgtMjE2djI3MWgyMTZ2LTU2aC0xNTF2LTQ5aDE0OHYtNTVoLTE0OHYtNTR6bS00MjYgNjgyVjczOGgtNjZ2MjcxaDY2em02OTMtNjUycTAtODYtMTAyLTg2aC0xMjZ2NThoMTI2cTM0IDAgMzQgMjUgMCAxNi0xNyAyMXQtNDEuNSA1LTQ5LjUgMy41LTQyIDIyLjUtMTcgNTVxMCAzOSAyNiA2MHQ2NiAyMWgxMzB2LTU3aC0xMTlxLTM2IDAtMzYtMjUgMC0xNiAxNy41LTIwLjV0NDItNCA0OS0yLjUgNDItMjEuNVQyMDY1IDM1N3ptMjM5IDUwVjMwNnEtMjQtMzUtODgtMzVoLTEyNXY1OGgxMjVxMzMgMCAzMyAyNSAwIDEzLTEyLjUgMTl0LTMxIDUuNS00MCAyLTQwIDgtMzEgMjRUMjA4MiA0NjFxMCAzOSAyNi41IDYwdDY2LjUgMjFoMTI5di01N2gtMTE4cS0zNiAwLTM2LTI1IDAtMjAgMjktMjJ0NjguNS01IDU2LjUtMjZ6bS0xNjUgNjAxVjczOGgtOTJsLTEyMiAyMDNWNzM4aC0xMzJsLTI2IDYwaC0xMzRsLTI1LTYwaC03NXEtMTI5IDAtMTI5IDEzMyAwIDEzOCAxMzMgMTM4aDYzdi01OXEtNyAwLTI4IDF0LTI4LjUuNS0yMy0yLTIxLjUtNi41LTE0LjUtMTMuNS0xMS41LTIzLTMtMzMuNXEwLTM4IDEzLjUtNTh0NDkuNS0yMGgyOWw5MiAyMTNoOTdsMTA5LTI1NnYyNTZoOTlsMTE0LTE4OHYxODhoNjZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NjkiIHVuaWNvZGU9Iu+HtCIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik03NDUgNjMwcTAtMzctMjUuNS02MS41VDY1NyA1NDRxLTI5IDAtNDYuNSAxNlQ1OTMgNjA0cTAgMzcgMjUgNjIuNXQ2MiAyNS41cTI4IDAgNDYuNS0xNi41VDc0NSA2MzB6bTc4NSAxNDlxMC00Mi0yMi01N3QtNjYtMTVsLTMyLTEgMTcgMTA3cTIgMTEgMTMgMTFoMThxMjIgMCAzNS0ydDI1LTEyLjUgMTItMzAuNXptMzUxLTE0OXEwLTM2LTI1LjUtNjF0LTYxLjUtMjVxLTI5IDAtNDcgMTZ0LTE4IDQ0cTAgMzcgMjUgNjIuNXQ2MiAyNS41cTI4IDAgNDYuNS0xNi41VDE4ODEgNjMwek01MTMgODAxcTAgNTktMzguNSA4NS41VDM3NCA5MTNIMjE0cS0xOSAwLTIxLTE5bC02NS00MDhxLTEtNiAzLTExdDEwLTVoNzZxMjAgMCAyMiAxOWwxOCAxMTBxMSA4IDcgMTN0MTUgNi41IDE3IDEuNSAxOS0xIDE0LTFxODYgMCAxMzUgNDguNVQ1MTMgODAxem0zMDktMzEybDQxIDI2MXExIDYtMyAxMXQtMTAgNWgtNzZxLTE0IDAtMTctMzMtMjcgNDAtOTUgNDAtNzIgMC0xMjIuNS01NFQ0ODkgNTkycTAtNTkgMzQuNS05NHQ5Mi41LTM1cTI4IDAgNTggMTJ0NDggMzJxLTQtMTItNC0yMSAwLTE2IDEzLTE2aDY5cTE5IDAgMjIgMTl6bTQ0NyAyNjNxMCA1LTQgOS41dC05IDQuNWgtNzdxLTExIDAtMTgtMTBsLTEwNi0xNTYtNDQgMTUwcS01IDE2LTIyIDE2aC03NXEtNSAwLTktNC41dC00LTkuNXEwLTIgMTkuNS01OXQ0Mi0xMjMgMjMuNS03MHEtODItMTEyLTgyLTEyMCAwLTEzIDEzLTEzaDc3cTExIDAgMTggMTBsMjU1IDM2OHEyIDIgMiA3em0zODAgNDlxMCA1OS0zOC41IDg1LjVUMTUxMCA5MTNoLTE1OXEtMjAgMC0yMi0xOWwtNjUtNDA4cS0xLTYgMy0xMXQxMC01aDgycTEyIDAgMTYgMTNsMTggMTE2cTEgOCA3IDEzdDE1IDYuNSAxNyAxLjUgMTktMSAxNC0xcTg2IDAgMTM1IDQ4LjV0NDkgMTM0LjV6bTMwOS0zMTJsNDEgMjYxcTEgNi0zIDExdC0xMCA1aC03NnEtMTQgMC0xNy0zMy0yNiA0MC05NSA0MC03MiAwLTEyMi41LTU0VDE2MjUgNTkycTAtNTkgMzQuNS05NHQ5Mi41LTM1cTI5IDAgNTkgMTJ0NDcgMzJxMC0xLTItOXQtMi0xMnEwLTE2IDEzLTE2aDY5cTE5IDAgMjIgMTl6bTIxOCA0MDl2MXEwIDE0LTEzIDE0aC03NHEtMTEgMC0xMy0xMWwtNjUtNDE2LTEtMnEwLTUgNC05LjV0MTAtNC41aDY2cTE5IDAgMjEgMTl6TTM5MiA3NjRxLTUtMzUtMjYtNDZ0LTYwLTExbC0zMy0xIDE3IDEwN3EyIDExIDEzIDExaDE5cTQwIDAgNTgtMTEuNXQxMi00OC41em0xOTEyIDUxNlYwcTAtNTItMzgtOTB0LTkwLTM4SDEyOHEtNTIgMC05MCAzOFQwIDB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MC0zOHQzOC05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MCIgdW5pY29kZT0i74e1IiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTE1OTcgNjMzcTAtNjktMjEtMTA2LTE5LTM1LTUyLTM1LTIzIDAtNDEgOXYyMjRxMjkgMzAgNTcgMzAgNTcgMCA1Ny0xMjJ6bTQzOCAzNmgtMTEwcTYgOTggNTYgOTggNTEgMCA1NC05OHpNNDc2IDUzNHEwIDU5LTMzIDkxLjVUMzQyIDY4M3EtMzYgMTMtNTIgMjR0LTE2IDI1cTAgMjYgMzggMjYgNTggMCAxMjQtMzNsMTggMTEycS02NyAzMi0xNDkgMzItNzcgMC0xMjMtMzgtNDgtMzktNDgtMTA5IDAtNTggMzIuNS05MC41VDI2NiA1NzVxMzktMTQgNTQuNS0yNS41VDMzNiA1MjJxMC0zMS00OC0zMS0yOSAwLTcwIDEyLjVUMTQ2IDUzNGwtMTgtMTEzcTcyLTQxIDE2OC00MSA4MSAwIDEyOSAzNyA1MSA0MSA1MSAxMTd6bTI5NSAyMTVsMTkgMTExaC05NnYxMzVsLTEyOS0yMS0xOC0xMTQtNDYtOC0xNy0xMDNoNjJWNTMwcTAtODQgNDQtMTIwIDM4LTMwIDExMS0zMCAzMiAwIDc5IDExdjExOHEtMzItNy00NC03LTQyIDAtNDIgNTB2MTk3aDc3em0zMTYtMjV2MTM5cS0xNSAzLTI4IDMtMzIgMC01NS41LTE2VDk3MCA4MDRsLTEwIDU2SDgyOVYzODloMTUwdjMwNnEyNiAzMSA4MiAzMSAxNiAwIDI2LTJ6bTM3LTMzNWgxNTB2NDcxaC0xNTBWMzg5em02MjIgMjQ5cTAgMTIyLTQ1IDE3OS00MCA1Mi0xMTEgNTItNjQgMC0xMTctNTZsLTggNDdoLTEzMlYyMTVsMTUwIDI1djE1MXEzNi0xMSA2OC0xMSA4MyAwIDEzNCA1NiA2MSA2NSA2MSAyMDJ6bS00NjggMzQ4cTAgMzMtMjMgNTZ0LTU2IDIzLTU2LTIzLTIzLTU2IDIzLTU2LjUgNTYtMjMuNSA1NiAyMy41IDIzIDU2LjV6bTg5OC0zNTdxMCAxMTMtNDggMTc2LTUwIDY0LTE0NCA2NC05NiAwLTE1MS41LTY2VDE3NzcgNjIzcTAtMTI4IDYzLTE4OCA1NS01NSAxNjEtNTUgMTAxIDAgMTYwIDQwbC0xNiAxMDNxLTU3LTMxLTEyOC0zMS00MyAwLTYzIDE5LTIzIDE5LTI4IDY2aDI0OHEyIDE0IDIgNTJ6bTEyOCA2NTFWMHEwLTUyLTM4LTkwdC05MC0zOEgxMjhxLTUyIDAtOTAgMzhUMCAwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAtMzh0MzgtOTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NzEiIHVuaWNvZGU9Iu+HtiIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xNTU4IDY4NHE2MS0zNTYgMjk4LTU1NiAwLTUyLTM4LTkwdC05MC0zOGgtNDQ4cTAtMTA2LTc1LTE4MXQtMTgxLTc1LTE4MC41IDc0LjVUNzY4LTF6bS01MzQtODYwcTE2IDAgMTYgMTZ0LTE2IDE2cS01OSAwLTEwMS41IDQyLjVUODgwIDBxMCAxNi0xNiAxNlQ4NDggMHEwLTczIDUxLjUtMTI0LjVUMTAyNC0xNzZ6bTEwMDIgMTYwMHE4LTEwIDcuNS0yMy41VDIwMjMgMTM3OEwxNTEtMjQ0cS0xMC04LTIzLjUtN1QxMDYtMjQwbC04NCA5NnEtOCAxMC03LjUgMjMuNVQyNS05OUwyMTEgNjJxLTE5IDMyLTE5IDY2IDUwIDQyIDkxIDg4dDg1IDExOS41VDQ0Mi41IDQ5NHQ1MCAyMDZUNTEyIDk2MHEwIDE1MiAxMTcgMjgyLjVUOTM2IDE0MDFxLTggMTktOCAzOSAwIDQwIDI4IDY4dDY4IDI4IDY4LTI4IDI4LTY4cTAtMjAtOC0zOSAxMjQtMTggMjE5LTgyLjV0MTQ4LTE1Ny41bDQxOCAzNjNxMTAgOCAyMy41IDd0MjEuNS0xMXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MiIgdW5pY29kZT0i74e3IiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTEwNDAtMTYwcTAgMTYtMTYgMTYtNTkgMC0xMDEuNSA0Mi41VDg4MCAwcTAgMTYtMTYgMTZUODQ4IDBxMC03MyA1MS41LTEyNC41VDEwMjQtMTc2cTE2IDAgMTYgMTZ6TTUwMyAzMTVsODc3IDc2MHEtNDIgODgtMTMyLjUgMTQ2LjVUMTAyNCAxMjgwcS05MyAwLTE2OS41LTMxLjVUNzMzIDExNjh0LTY5LTEwMy0yNC0xMDVxMC0zODQtMTM3LTY0NXptMTM1My0xODdxMC01Mi0zOC05MHQtOTAtMzhoLTQ0OHEwLTEwNi03NS0xODF0LTE4MS03NS0xODAuNSA3NC41VDc2OC0xbDE0OSAxMjloNzU3cS0xNjYgMTg3LTIyNyA0NTlsMTExIDk3cTYxLTM1NiAyOTgtNTU2em04NiAxMzkybDg0LTk2cTgtMTAgNy41LTIzLjVUMjAyMyAxMzc4TDE1MS0yNDRxLTEwLTgtMjMuNS03VDEwNi0yNDBsLTg0IDk2cS04IDEwLTcuNSAyMy41VDI1LTk5TDIxMSA2MnEtMTkgMzItMTkgNjYgNTAgNDIgOTEgODh0ODUgMTE5LjVUNDQyLjUgNDk0dDUwIDIwNlQ1MTIgOTYwcTAgMTUyIDExNyAyODIuNVQ5MzYgMTQwMXEtOCAxOS04IDM5IDAgNDAgMjggNjh0NjggMjggNjgtMjggMjgtNjhxMC0yMC04LTM5IDEyNC0xOCAyMTktODIuNXQxNDgtMTU3LjVsNDE4IDM2M3ExMCA4IDIzLjUgN3QyMS41LTExeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDczIiB1bmljb2RlPSLvh7giIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTEyIDE2MHY3MDRxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzVjE2MHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMjU2IDB2NzA0cTAgMTQtOSAyM3QtMjMgOWgtNjRxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloNjRxMTQgMCAyMyA5dDkgMjN6bTI1NiAwdjcwNHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjNWMTYwcTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0tNTQ0IDk5Mmg0NDhsLTQ4IDExN3EtNyA5LTE3IDExSDU0NnEtMTAtMi0xNy0xMXptOTI4LTMydi02NHEwLTE0LTktMjN0LTIzLTloLTk2Vjc2cTAtODMtNDctMTQzLjVUMTEyMC0xMjhIMjg4cS02NiAwLTExMyA1OC41VDEyOCA3MnY5NTJIMzJxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgzMDlsNzAgMTY3cTE1IDM3IDU0IDYzdDc5IDI2aDMyMHE0MCAwIDc5LTI2dDU0LTYzbDcwLTE2N2gzMDlxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NzQiIHVuaWNvZGU9Iu+HuSIgZD0iTTExNTAgNDYyVjM1M3EwLTUwLTM2LjUtODl0LTk0LTYwLjUtMTE4LTMyLjVUNzg0IDE2MHEtMjA1IDAtMzQyLjUgMTM5VDMwNCA2NDVxMCAyMDMgMTM2IDMzOXQzMzkgMTM2cTM0IDAgNzUuNS00LjV0OTMtMTggOTIuNS0zNCA2OS01Ni41IDI4LTgxVjgxN3EwLTE2LTE2LTE2aC0xMThxLTE2IDAtMTYgMTZ2NzBxMCA0My02NS41IDY3LjVUNzg0IDk3OXEtMTQwIDAtMjI4LjUtOTEuNVQ0NjcgNjUwcTAtMTUxIDkxLjUtMjQ5LjVUNzkyIDMwMnE2OCAwIDEzOCAyNHQ3MCA2NnY3MHEwIDcgNC41IDExLjV0MTAuNSA0LjVoMTE5cTYgMCAxMS00LjV0NS0xMS41em0tMzgyIDgxOHEtMTMwIDAtMjQ4LjUtNTF0LTIwNC0xMzYuNS0xMzYuNS0yMDRUMTI4IDY0MHQ1MS0yNDguNSAxMzYuNS0yMDRUNTE5LjUgNTEgNzY4IDB0MjQ4LjUgNTEgMjA0IDEzNi41IDEzNi41IDIwNCA1MSAyNDguNS01MSAyNDguNS0xMzYuNSAyMDQtMjA0IDEzNi41LTI0OC41IDUxem03NjgtNjQwcTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDc1IiB1bmljb2RlPSLvh7oiIGQ9Ik05NzIgNzYxcTAgMTA4LTUzLjUgMTY5VDc3MSA5OTFxLTYzIDAtMTI0LTMwLjVUNTM3IDg3NnQtNzkuNS0xMzdUNDI3IDU1OXEwLTExMiA1My41LTE3M1Q2MzEgMzI1cTk2IDAgMTc2IDY2LjV0MTIyLjUgMTY2VDk3MiA3NjF6bTU2NC0xMjFxMC0xMTEtMzctMTk3dC05OC41LTEzNS0xMzEuNS03NC41LTE0NS0yNy41cS02IDAtMTUuNS0uNXQtMTYuNS0uNXEtOTUgMC0xNDIgNTMtMjggMzMtMzMgODMtNTItNjYtMTMxLjUtMTEwVDYxMiAxODdxLTE2MSAwLTI0OS41IDk1LjVUMjc0IDU1MnEwIDE1NyA2NiAyOTB0MTc5IDIxMC41IDI0NiA3Ny41cTg3IDAgMTU1LTM1LjV0MTA2LTk5LjVsMiAxOSAxMSA1NnExIDYgNS41IDEydDkuNSA2aDExOHE1IDAgMTMtMTEgNS01IDMtMTZsLTEyMC02MTRxLTUtMjQtNS00OCAwLTM5IDEyLjUtNTJ0NDQuNS0xM3EyOCAxIDU3IDUuNXQ3MyAyNCA3NyA1MCA1NyA4OS41IDI0IDEzN3EwIDI5Mi0xNzQgNDY2dC00NjYgMTc0cS0xMzAgMC0yNDguNS01MXQtMjA0LTEzNi41LTEzNi41LTIwNFQxMjggNjQwdDUxLTI0OC41IDEzNi41LTIwNFQ1MTkuNSA1MSA3NjggMHEyMjggMCA0MDUgMTQ0IDExIDkgMjQgOHQyMS0xMmw0MS00OXE4LTEyIDctMjQtMi0xMy0xMi0yMi0xMDItODMtMjI3LjUtMTI4VDc2OC0xMjhxLTE1NiAwLTI5OCA2MVQyMjUgOTcgNjEgMzQyIDAgNjQwdDYxIDI5OCAxNjQgMjQ1IDI0NSAxNjQgMjk4IDYxcTM0NCAwIDU1Ni0yMTJ0MjEyLTU1NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3NiIgdW5pY29kZT0i74e7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2OTggMTQ0MnE5NC05NCA5NC0yMjYuNVQxNjk4IDk5MGwtMjI1LTIyMyAxMDQtMTA0cTEwLTEwIDEwLTIzdC0xMC0yM2wtMjEwLTIxMHEtMTAtMTAtMjMtMTB0LTIzIDEwbC0xMDUgMTA1TDYxMy05MXEtMzctMzctOTAtMzdIMzIwTDY0LTI1NiAwLTE5MiAxMjggNjR2MjAzcTAgNTMgMzcgOTBsNjAzIDYwMy0xMDUgMTA1cS0xMCAxMC0xMCAyM3QxMCAyM2wyMTAgMjEwcTEwIDEwIDIzIDEwdDIzLTEwbDEwNC0xMDQgMjIzIDIyNXE5MyA5NCAyMjUuNSA5NHQyMjYuNS05NHpNNTEyIDY0bDU3NiA1NzYtMTkyIDE5Mi01NzYtNTc2VjY0aDE5MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZjFmYyIgdW5pY29kZT0i74e8IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2MTUgMTUzNnE3MCAwIDEyMi41LTQ2LjVUMTc5MCAxMzczcTAtNjMtNDUtMTUxLTMzMi02MjktNDY1LTc1Mi05Ny05MS0yMTgtOTEtMTI2IDAtMjE2LjUgOTIuNVQ3NTUgNjkxcTAgMTI4IDkyIDIxMmw2MzggNTc5cTU5IDU0IDEzMCA1NHpNNzA2IDUwMnEzOS03NiAxMDYuNS0xMzBUOTYzIDI5NmwxLTcxcTQtMjEzLTEyOS41LTM0N1Q0ODYtMjU2cS0xMjMgMC0yMTggNDYuNVQxMTUuNS04MiAyOSAxMDEgMCAzMjFxNy01IDQxLTMwdDYyLTQ0LjUgNTktMzYuNSA0Ni0xN3E0MSAwIDU1IDM3IDI1IDY2IDU3LjUgMTEyLjV0NjkuNSA3NiA4OCA0Ny41IDEwMyAyNS41VDcwNiA1MDJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80NzgiIHVuaWNvZGU9Iu+HvSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDEyOHYtMzg0SDB2Mzg0cTQ1IDAgODUgMTR0NTkgMjcuNSA0NyAzNy41cTMwIDI3IDUxLjUgMzh0NTYuNSAxMXEyNCAwIDQ0LTd0MzEtMTUgMzMtMjdxMjktMjUgNDctMzh0NTgtMjcgODYtMTRxNDUgMCA4NSAxNC41dDU4IDI3IDQ4IDM3LjVxMjEgMTkgMzIuNSAyN3QzMSAxNSA0My41IDdxMzUgMCA1Ni41LTExdDUxLjUtMzhxMjgtMjQgNDctMzcuNXQ1OS0yNy41IDg1LTE0IDg1IDE0IDU5IDI3LjUgNDcgMzcuNXEzMCAyNyA1MS41IDM4dDU2LjUgMTFxMzQgMCA1NS41LTExdDUxLjUtMzhxMjgtMjQgNDctMzcuNXQ1OS0yNy41IDg1LTE0em0wIDMyMFYyNTZxLTI0IDAtNDQgN3QtMzEgMTUtMzMgMjdxLTI5IDI1LTQ3IDM4dC01OCAyNy04NSAxNHEtNDYgMC04Ni0xNHQtNTgtMjctNDctMzhxLTIyLTE5LTMzLTI3dC0zMS0xNS00NC03cS0zNSAwLTU2LjUgMTF0LTUxLjUgMzhxLTI5IDI1LTQ3IDM4dC01OCAyNy04NiAxNHEtNDUgMC04NS0xNC41dC01OC0yNy00OC0zNy41cS0yMS0xOS0zMi41LTI3dC0zMS0xNS00My41LTdxLTM1IDAtNTYuNSAxMVQ0OTAgMzA1cS0yOCAyNC00NyAzNy41VDM4NCAzNzB0LTg1IDE0cS00NiAwLTg2LTE0dC01OC0yNy00Ny0zOHEtMzAtMjctNTEuNS0zOFQwIDI1NnYxOTJxMCA4MCA1NiAxMzZ0MTM2IDU2aDY0djQ0OGgyNTZWNjQwaDI1NnY0NDhoMjU2VjY0MGgyNTZ2NDQ4aDI1NlY2NDBoNjRxODAgMCAxMzYtNTZ0NTYtMTM2ek01MTIgMTMxMnEwLTc3LTM2LTExOC41dC05Mi00MS41cS01MyAwLTkwLjUgMzcuNVQyNTYgMTI4MHEwIDI5IDkuNSA1MXQyMy41IDM0IDMxIDI4IDMxIDMxLjUgMjMuNSA0NC41IDkuNSA2N3EzOCAwIDgzLTc0dDQ1LTE1MHptNTEyIDBxMC03Ny0zNi0xMTguNXQtOTItNDEuNXEtNTMgMC05MC41IDM3LjVUNzY4IDEyODBxMCAyOSA5LjUgNTF0MjMuNSAzNCAzMSAyOCAzMSAzMS41IDIzLjUgNDQuNSA5LjUgNjdxMzggMCA4My03NHQ0NS0xNTB6bTUxMiAwcTAtNzctMzYtMTE4LjV0LTkyLTQxLjVxLTUzIDAtOTAuNSAzNy41VDEyODAgMTI4MHEwIDI5IDkuNSA1MXQyMy41IDM0IDMxIDI4IDMxIDMxLjUgMjMuNSA0NC41IDkuNSA2N3EzOCAwIDgzLTc0dDQ1LTE1MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3OSIgdW5pY29kZT0i74e+IiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTIwNDggMHYtMTI4SDB2MTUzNmgxMjhWMGgxOTIwem0tMzg0IDEwMjRsMjU2LTg5NkgyNTZ2NTc2bDQ0OCA1NzYgNTc2LTU3NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MCIgdW5pY29kZT0i74iAIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTc2OCA2NDZsNTQ2LTU0NlExMjA4LTggMTA2Ni41LTY4VDc2OC0xMjhxLTIwOSAwLTM4NS41IDEwM1QxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDhWNjQ2em0xODctNmg3NzNxMC0xNTctNjAtMjk4LjVUMTUwMCA5NHptNzA5IDEyOEg4OTZ2NzY4cTIwOSAwIDM4NS41LTEwM3QyNzkuNS0yNzkuNVQxNjY0IDc2OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MSIgdW5pY29kZT0i74iBIiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTIwNDggMHYtMTI4SDB2MTUzNmgxMjhWMGgxOTIwem0tMTI4IDEyNDhWODEzcTAtMjEtMTkuNS0yOS41VDE4NjUgNzkxbC0xMjEgMTIxLTYzMy02MzNxLTEwLTEwLTIzLTEwdC0yMyAxMEw4MzIgNTEyIDQxNiA5NiAyMjQgMjg4bDU4NSA1ODVxMTAgMTAgMjMgMTB0MjMtMTBsMjMzLTIzMyA0NjQgNDY0LTEyMSAxMjFxLTE2IDE2LTcuNSAzNS41dDI5LjUgMTkuNWg0MzVxMTQgMCAyMy05dDktMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80ODIiIHVuaWNvZGU9Iu+IgiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMjkyIDgzMnEwLTYgMTAtNDEgMTAtMjkgMjUtNDkuNXQ0MS0zNCA0NC0yMCA1NS0xNi41cTMyNS05MSAzMjUtMzMyIDAtMTQ2LTEwNS41LTI0Mi41VDE0MzIgMHEtNTkgMC0xMTEuNSAxOC41VDEyMjkgNjR0LTc3IDc0LjUtNjMgODcuNS01My41IDEwMy41LTQzLjUgMTAzVDk1Mi41IDUzOSA5MTcgNjM0cS0zMiA4MS02MS41IDEzMy41VDc4MiA4NjR0LTEwNCA2NC0xNDIgMjBxLTk2IDAtMTgzLTU1LjVUMjE1IDc0OHQtNTEtMTg1cTAtMTYwIDEwNi41LTI3OS41VDUzNCAxNjRxMTc3IDAgMjU4IDk1IDU2IDYzIDgzIDExNmw4NC0xNTJxLTE1LTM0LTQ0LTcwbDEtMVE3ODUgMCA1MjggMCAzODEgMCAyNTguNSA3OVQ2OCAyODYuNSAwIDU2MXEwIDEwNSA0My41IDIwNnQxMTYgMTc2LjUgMTcyIDEyMS41IDIwNC41IDQ2cTg3IDAgMTU5LTE5dDEyMy41LTUwIDk1LTgwIDcyLjUtOTkgNTguNS0xMTcgNTAuNS0xMjQuNSA1MC0xMzAuNSA1NS0xMjdxOTYtMjAwIDIzMy0yMDAgODEgMCAxMzguNSA0OC41VDE2MjkgMzQxcTAgNDItMTkgNzJ0LTUwLjUgNDYtNzIuNSAzMS41LTg0LjUgMjctODcuNSAzNC04MSA1Mi02NSA4Mi0zOSAxMjIuNXEtMyAxNi0zIDMzIDAgMTEwIDg3LjUgMTkydDE5OC41IDc4cTc4LTMgMTIwLjUtMTQuNXQ5MC41LTUzLjVoLTFxMTItMTEgMjMtMjQuNXQyNi0zNiAxOS0yNy41bC0xMjktOTlxLTI2IDQ5LTU0IDcwdjFxLTIzIDIxLTk3IDIxLTQ5IDAtODQtMzN0LTM1LTgzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDgzIiB1bmljb2RlPSLviIMiIGQ9Ik0xNDMyIDQ4NHEwIDE3My0yMzQgMjM5LTM1IDEwLTUzIDE2LjV0LTM4IDI1LTI5IDQ2LjVxMCAyLTIgOC41dC0zIDEyLTEgNy41cTAgMzYgMjQuNSA1OS41VDExNTcgOTIycTU0IDAgNzEtMTVoLTFxMjAtMTUgMzktNTFsOTMgNzFxLTM5IDU0LTQ5IDY0LTMzIDI5LTY3LjUgMzl0LTg1LjUgMTBxLTgwIDAtMTQyLTU3LjVUOTUzIDg0NXEwLTcgMi0yMyAxNi05NiA2NC41LTE0MHQxNDguNS03M3EyOS04IDQ5LTE1LjV0NDUtMjEuNSAzOC41LTM0LjVUMTMxNCA0OTF2LTVxMS01OC00MC41LTkzVDExNzMgMzU4cS05NyAwLTE2NyAxNDQtMjMgNDctNTEuNSAxMjEuNXQtNDggMTI1LjUtNTQgMTEwLjUtNzQgOTUuNS0xMDMuNSA2MC41LTE0NyAyNC41cS0xMDEgMC0xOTItNTZUMTkyIDgzNnQtNTAtMTkydi0xcTQtMTA4IDUwLjUtMTk5VDMyNiAyOTYuNSA1MjIgMjQwcTE4NiAwIDI3OSAxMTAgMjAgMjcgMzEgNTFsLTYwIDEwOXEtNDItODAtOTktMTE2dC0xNDYtMzZxLTExNSAwLTE5MSA4N3QtNzYgMjA0cTAgMTA1IDgyIDE4OXQxODYgODRxMTEyIDAgMTcwLTUzLjVUODAyIDY5NnE4LTIxIDI1LjUtNjguNVQ4NTYgNTUxdDMxLjUtNzQuNSAzOC41LTc0IDQ1LjUtNjIuNSA1NS41LTUzLjUgNjYtMzMgODAtMTMuNXExMDcgMCAxODMgNjkuNXQ3NiAxNzQuNXptMTA0IDYzNlYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDg0IiB1bmljb2RlPSLviIQiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTE1MiA2NDBxMCAxMDQtNDAuNSAxOTguNVQxMDAyIDEwMDJ0LTE2My41IDEwOS41VDY0MCAxMTUydC0xOTguNS00MC41VDI3OCAxMDAyIDE2OC41IDgzOC41IDEyOCA2NDB0NDAuNS0xOTguNVQyNzggMjc4dDE2My41LTEwOS41VDY0MCAxMjh0MTk4LjUgNDAuNVQxMDAyIDI3OHQxMDkuNSAxNjMuNVQxMTUyIDY0MHptNzY4IDBxMCAxMDQtNDAuNSAxOTguNVQxNzcwIDEwMDJ0LTE2My41IDEwOS41VDE0MDggMTE1MmgtMzg2cTExOS05MCAxODguNS0yMjR0NjkuNS0yODgtNjkuNS0yODhUMTAyMiAxMjhoMzg2cTEwNCAwIDE5OC41IDQwLjVUMTc3MCAyNzh0MTA5LjUgMTYzLjVUMTkyMCA2NDB6bTEyOCAwcTAtMTMwLTUxLTI0OC41dC0xMzYuNS0yMDQtMjA0LTEzNi41VDE0MDggMEg2NDBRNTEwIDAgMzkxLjUgNTF0LTIwNCAxMzYuNVQ1MSAzOTEuNSAwIDY0MHQ1MSAyNDguNSAxMzYuNSAyMDQgMjA0IDEzNi41IDI0OC41IDUxaDc2OHExMzAgMCAyNDguNS01MXQyMDQtMTM2LjUgMTM2LjUtMjA0IDUxLTI0OC41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDg1IiB1bmljb2RlPSLviIUiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMCA2NDBxMCAxMzAgNTEgMjQ4LjV0MTM2LjUgMjA0IDIwNCAxMzYuNSAyNDguNSA1MWg3NjhxMTMwIDAgMjQ4LjUtNTF0MjA0LTEzNi41IDEzNi41LTIwNCA1MS0yNDguNS01MS0yNDguNS0xMzYuNS0yMDQtMjA0LTEzNi41VDE0MDggMEg2NDBRNTEwIDAgMzkxLjUgNTF0LTIwNCAxMzYuNVQ1MSAzOTEuNSAwIDY0MHptMTQwOC01MTJxMTA0IDAgMTk4LjUgNDAuNVQxNzcwIDI3OHQxMDkuNSAxNjMuNVQxOTIwIDY0MHQtNDAuNSAxOTguNVQxNzcwIDEwMDJ0LTE2My41IDEwOS41VDE0MDggMTE1MnQtMTk4LjUtNDAuNVQxMDQ2IDEwMDIgOTM2LjUgODM4LjUgODk2IDY0MHQ0MC41LTE5OC41VDEwNDYgMjc4dDE2My41LTEwOS41VDE0MDggMTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDg2IiB1bmljb2RlPSLviIYiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNNzYyIDM4NEg0NDhxLTQwIDAtNTcuNSAzNXQ2LjUgNjdsMTg4IDI1MXEtNjUgMzEtMTM3IDMxLTEzMiAwLTIyNi05NHQtOTQtMjI2IDk0LTIyNiAyMjYtOTRxMTE1IDAgMjAzIDcyLjVUNzYyIDM4NHpNNTc2IDUxMmgxODZxLTE4IDg1LTc1IDE0OHptNDgwIDBsMjg4IDM4NEg4NjRsLTk5LTEzMnExMDUtMTAzIDEyNi0yNTJoMTY1em0xMTIwLTY0cTAgMTMyLTk0IDIyNnQtMjI2IDk0cS02MCAwLTEyMS0yNGwxNzQtMjYwcTE1LTIzIDEwLTQ5dC0yNy00MHEtMTUtMTEtMzYtMTEtMzUgMC01MyAyOWwtMTc0IDI2MHEtOTMtOTUtOTMtMjI1IDAtMTMyIDk0LTIyNnQyMjYtOTQgMjI2IDk0IDk0IDIyNnptMTI4IDBxMC0xODUtMTMxLjUtMzE2LjVUMTg1NiAwdC0zMTYuNSAxMzEuNVQxNDA4IDQ0OHEwIDk3IDM5LjUgMTgzLjVUMTU1NyA3ODFsLTY1IDk4LTM1My00NjlxLTE4LTI2LTUxLTI2SDg5MXEtMjMtMTY0LTE0OS0yNzRUNDQ4IDBRMjYzIDAgMTMxLjUgMTMxLjVUMCA0NDh0MTMxLjUgMzE2LjVUNDQ4IDg5NnExMTQgMCAyMTUtNTVsMTM3IDE4M0g1NzZxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDM4NHYtMTI4aDQzNWwtODUgMTI4aC0yMjJxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDI1NnEzMyAwIDUzLTI4bDI2Ny00MDBxOTEgNDQgMTkyIDQ0IDE4NSAwIDMxNi41LTEzMS41VDIzMDQgNDQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDg3IiB1bmljb2RlPSLviIciIGQ9Ik0zODQgMzIwcTAgNTMtMzcuNSA5MC41VDI1NiA0NDh0LTkwLjUtMzcuNVQxMjggMzIwdDM3LjUtOTAuNVQyNTYgMTkydDkwLjUgMzcuNVQzODQgMzIwem0xMDI0IDBxMCA1My0zNy41IDkwLjVUMTI4MCA0NDh0LTkwLjUtMzcuNVQxMTUyIDMyMHQzNy41LTkwLjVUMTI4MCAxOTJ0OTAuNSAzNy41VDE0MDggMzIwem0tNDYgMzk2bC03MiAzODRxLTUgMjMtMjIuNSAzNy41VDEyMjcgMTE1MkgzMDlxLTIzIDAtNDAuNS0xNC41VDI0NiAxMTAwbC03Mi0zODRxLTUtMzAgMTQtNTN0NDktMjNoMTA2MnEzMCAwIDQ5IDIzdDE0IDUzem0tMjI2IDYxMnEwIDIwLTE0IDM0dC0zNCAxNEg0NDhxLTIwIDAtMzQtMTR0LTE0LTM0IDE0LTM0IDM0LTE0aDY0MHEyMCAwIDM0IDE0dDE0IDM0em00MDAtNzI1VjBoLTEyOHYtMTI4cTAtNTMtMzcuNS05MC41VDEyODAtMjU2dC05MC41IDM3LjVUMTE1Mi0xMjhWMEgzODR2LTEyOHEwLTUzLTM3LjUtOTAuNVQyNTYtMjU2dC05MC41IDM3LjVUMTI4LTEyOFYwSDB2NjAzcTAgMTEyIDI1IDIyM2wxMDMgNDU0cTkgNzggOTcuNSAxMzd0MjMwIDg5IDMxMi41IDMwIDMxMi41LTMwIDIzMC04OSA5Ny41LTEzN2wxMDUtNDU0cTIzLTEwMiAyMy0yMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80ODgiIHVuaWNvZGU9Iu+IiCIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xNDYzIDcwNHEwLTM1LTI1LTYwLjV0LTYxLTI1LjVINjc1cS0zNiAwLTYxIDI1LjVUNTg5IDcwNHQyNSA2MC41IDYxIDI1LjVoNzAycTM2IDAgNjEtMjUuNXQyNS02MC41em0yMTQgMHEwIDg2LTIzIDE3MEg2NzJxLTM2IDAtNjEgMjV0LTI1IDYwcTAgMzYgMjUgNjF0NjEgMjVoOTA4cS04OCAxNDMtMjM1IDIyN3QtMzIwIDg0cS0xNzcgMC0zMjcuNS04Ny41dC0yMzgtMjM3LjVUMzcyIDcwNHEwLTg2IDIzLTE3MGg5ODJxMzYgMCA2MS0yNXQyNS02MHEwLTM2LTI1LTYxdC02MS0yNUg0NjlxODgtMTQzIDIzNS41LTIyN1QxMDI1IDUycTEzMiAwIDI1MyA1MS41dDIwOCAxMzkgMTM5IDIwOCA1MiAyNTMuNXptMzcxIDI1NXEwLTM1LTI1LTYwdC02MS0yNWgtMTMxcTE3LTg1IDE3LTE3MCAwLTE2Ny02NS41LTMxOS41dC0xNzUuNS0yNjMtMjYyLjUtMTc2VDEwMjUtMTIwcS0yNDYgMC00NDguNSAxMzNUMjc1IDM2M0g4NnEtMzYgMC02MSAyNVQwIDQ0OXEwIDM1IDI1IDYwdDYxIDI1aDEzMnEtMTcgODUtMTcgMTcwIDAgMTY3IDY1LjUgMzE5LjV0MTc1LjUgMjYzIDI2Mi41IDE3NlQxMDI1IDE1MjhxMjQ1IDAgNDQ3LjUtMTMzdDMwMS41LTM1MGgxODhxMzYgMCA2MS0yNXQyNS02MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4OSIgdW5pY29kZT0i74iJIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTk1MyAxMTU4TDgzOSA4MzBsMTE3LTIxcTE2NSA0NTEgMTY1IDUxOCAwIDU2LTM4IDU2LTU3IDAtMTMwLTIyNXpNNjU0IDQ3MWwzMy04OHEzNyA0MiA3MSA2N2wtMzMgNS41LTM4LjUgN0w2NTQgNDcxem0tMjkyIDg5NnEwLTk4IDE1OS01MjEgMTcgMTAgNDkgMTAgMTUgMCA3NS01bC0xMjEgMzUxcS03NSAyMjAtMTIzIDIyMC0xOSAwLTI5LTE3LjV0LTEwLTM3LjV6bS03OS03NTlxMC0zNiA1MS41LTExOVQ0NTIgMzM2dDEwMC03MHExNCAwIDI1LjUgMTN0MTEuNSAyN3EwIDI0LTMyIDEwMi0xMyAzMi0zMiA3MnQtNDcuNSA4OS02MS41IDgxLTYyIDMycS0yMCAwLTQ1LjUtMjdUMjgzIDYwOHpNMTI1IDI3M3EwLTQxIDI1LTEwNFEyMDkgMjQgMzMzLjUtNThUNjE1LTE0MHEyMjcgMCAzODIgMTcwIDE1MiAxNjkgMTUyIDQyNyAwIDQzLTEgNjd0LTExLjUgNjItMzAuNSA1NnEtNTYgNDktMjExLjUgNzUuNVQ2MjQgNzQ0cS0zNyAwLTQ5LTExLTEyLTUtMTItMzUgMC0zNCAyMS41LTYwdDU1LjUtNDAgNzcuNS0yMy41VDgwNSA1NjN0ODUtNCA3MCAwaDIzcTI0IDAgNDAtMTkgMTUtMTkgMTktNTUtMjgtMjgtOTYtNTQtNjEtMjItOTMtNDYtNjQtNDYtMTA4LjUtMTE0VDcwMCAxMzRxMC0zMSAxOC41LTg4LjVUNzM3LTQybC0zLTEycS00LTEyLTQtMTQtMTM3IDEwLTE0NiAyMTYtOC0yLTQxLTIgMi03IDItMjEgMC01My00MC41LTg5LjVUNDEwLTFxLTgyIDAtMTY2LjUgNzhUMTU5IDIzNnEwIDM0IDMzIDY3IDUyLTY0IDYwLTc2IDc3LTEwNCAxMzMtMTA0IDEyIDAgMjYuNSA4LjVUNDI2IDE1MnEwIDM0LTg3LjUgMTQ1VDIyMiA0MDhxLTQzIDAtNzAtNDQuNVQxMjUgMjczem0tMTE0LTlxMCAxMDEgNDIuNSAxNjNUMTkwIDUxNXEtMjggNzQtMjggMTA0IDAgNjIgNjEgMTIzdDEyMiA2MXEyOSAwIDcwLTE1LTE2MyA0NjItMTYzIDU2NyAwIDgwIDQxIDEzMC41dDExOSA1MC41cTEzMSAwIDMyNS01ODEgNi0xNyA4LTIzIDYgMTYgMjkgNzkuNXQ0My41IDExOC41IDU0IDEyNy41IDY0LjUgMTIzIDcwLjUgODYuNSA3Ni41IDM2cTcxIDAgMTEyLTQ5dDQxLTEyMnEwLTEwOC0xNTktNTUwIDYxLTE1IDEwMC41LTQ2dDU4LjUtNzggMjYtOTMuNSA3LTExMC41cTAtMTUwLTQ3LTI4MFQxMDkwLTUxIDg3OS0yMDF0LTI3OC01NXEtMTExIDAtMjIzIDQyLTE0OSA1Ny0yNTggMTkxLjVUMTEgMjY0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDkwIiB1bmljb2RlPSLviIoiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNNzg1IDUyOGgyMDdxLTE0LTE1OC05OC41LTI0OC41VDY3OSAxODlxLTE2MiAwLTI1NC41IDExNlQzMzIgNjIxcTAgMTk0IDkzIDMxMS41VDY1OCAxMDUwcTE0OCAwIDIzMi04N3Q5Ny0yNDdINzg0cS01IDY0LTM1LjUgOTlUNjY3IDg1MHEtNTcgMC04OC41LTYwLjVUNTQ3IDYxMnEwLTQ4IDUtODR0MTgtNjkuNSA0MC01MS41IDY2LTE4cTk1IDAgMTA5IDEzOXptNzEyIDBoMjA2cS0xNC0xNTgtOTgtMjQ4LjVUMTM5MSAxODlxLTE2MiAwLTI1NC41IDExNlQxMDQ0IDYyMXEwIDE5NCA5MyAzMTEuNXQyMzMgMTE3LjVxMTQ4IDAgMjMyLTg3dDk3LTI0N2gtMjA0cS00IDY0LTM1IDk5dC04MSAzNXEtNTcgMC04OC41LTYwLjVUMTI1OSA2MTJxMC00OCA1LTg0dDE4LTY5LjUgMzkuNS01MS41IDY1LjUtMThxNDkgMCA3Ni41IDM4dDMzLjUgMTAxem0zNTkgMTE5cTAgMjA3LTE1LjUgMzA3dC02MC41IDE2MXEtNiA4LTEzLjUgMTR0LTIxLjUgMTUtMTYgMTFxLTg2IDYzLTY5NyA2My02MjUgMC03MTAtNjMtNS00LTE3LjUtMTEuNXQtMjEtMTRUMjY5IDExMTVxLTQ1LTYwLTYwLTE1OS41VDE5NCA2NDdxMC0yMDggMTUtMzA3LjVUMjY5IDE3OXE2LTggMTUtMTV0MjAuNS0xNCAxNy41LTEycTQ0LTMzIDIzOS41LTQ5VDEwMzIgNzNxNjEwIDAgNjk3IDY1IDUgNCAxNyAxMXQyMC41IDE0IDEzLjUgMTZxNDYgNjAgNjEgMTU5dDE1IDMwOXptMTkyIDc2MVYtMTI4SDB2MTUzNmgyMDQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDkxIiB1bmljb2RlPSLviIsiIGQ9Ik05OTIgOTEyVjQxNnEwLTE0LTktMjN0LTIzLTlIODAwcS0xNCAwLTIzIDl0LTkgMjN2NDk2cTAgMTEyLTgwIDE5MnQtMTkyIDgwSDIyNFYzMnEwLTE0LTktMjN0LTIzLTlIMzJRMTggMCA5IDlUMCAzMnYxMzQ0cTAgMTQgOSAyM3QyMyA5aDQ2NHExMzUgMCAyNDktNjYuNVQ5MjUuNSAxMTYxIDk5MiA5MTJ6bTM4NCA0NjRWNDk2cTAtMTM1LTY2LjUtMjQ5VDExMjkgNjYuNSA4ODAgMEg0MTZxLTE0IDAtMjMgOXQtOSAyM3Y5NjBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMtOXQ5LTIzVjIyNGgyNzJxMTEyIDAgMTkyIDgwdDgwIDE5MnY4ODBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMtOXQ5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDkyIiB1bmljb2RlPSLviIwiIGQ9Ik0xMzExIDY5NFY1ODBxMC0yNC0xMy41LTM4dC0zNy41LTE0aC0yMDJxLTI0IDAtMzggMTR0LTE0IDM4djExNHEwIDI0IDE0IDM4dDM4IDE0aDIwMnEyNCAwIDM3LjUtMTR0MTMuNS0zOHpNODIxIDQ2NHYyNTBxMCA1My0zMi41IDg1LjVUNzAzIDgzMkg1NzBxLTY4IDAtOTYtNTItMjggNTItOTYgNTJIMjQ4cS01MyAwLTg1LjUtMzIuNVQxMzAgNzE0VjQ2NHEwLTIyIDIxLTIyaDU1cTIyIDAgMjIgMjJ2MjMwcTAgMjQgMTMuNSAzOHQzOC41IDE0aDk0cTI0IDAgMzgtMTR0MTQtMzhWNDY0cTAtMjIgMjEtMjJoNTRxMjIgMCAyMiAyMnYyMzBxMCAyNCAxNCAzOHQzOCAxNGg5N3EyNCAwIDM3LjUtMTR0MTMuNS0zOFY0NjRxMC0yMiAyMi0yMmg1NXEyMSAwIDIxIDIyem01ODkgOTZ2MTU0cTAgNTMtMzMgODUuNXQtODYgMzIuNWgtMjY0cS01MyAwLTg2LTMyLjVUOTA4IDcxNFYzMDRxMC0yMSAyMi0yMWg1NXEyMSAwIDIxIDIxdjE4MHEzMS00MiA5NC00MmgxOTFxNTMgMCA4NiAzMi41dDMzIDg1LjV6bTEyNiA2MTZWMTA0cTAtOTYtNjgtMTY0dC0xNjQtNjhIMjMycS05NiAwLTE2NCA2OFQwIDEwNHYxMDcycTAgOTYgNjggMTY0dDE2NCA2OGgxMDcycTk2IDAgMTY0LTY4dDY4LTE2NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5MyIgdW5pY29kZT0i74iNIiBkPSJNOTE1IDQ1MEg2MjFsMTQ3IDU1MXptODYtMzIyaDMxMUw5ODggMTE1Mkg1NDhMMjI0IDEyOGgzMTFsMzgzIDMxNHptNTM1IDk5MlYxNjBxMC0xMTgtODUtMjAzdC0yMDMtODVIMjg4cS0xMTggMC0yMDMgODVUMCAxNjB2OTYwcTAgMTE4IDg1IDIwM3QyMDMgODVoOTYwcTExOCAwIDIwMy04NXQ4NS0yMDN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80OTQiIHVuaWNvZGU9Iu+IjiIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0yMDQ4IDY0MXEwLTIxLTEzLTM2LjV0LTMzLTE5LjVsLTIwNS0zNTZxMy05IDMtMTggMC0yMC0xMi41LTM1LjVUMTc1NSAxNTZsLTE5My0zMzdxMy04IDMtMTYgMC0yMy0xNi41LTQwdC00MC41LTE3cS0yNSAwLTQxIDE4aC00MDBxLTE3LTIwLTQzLTIwdC00MyAyMEg1ODJxLTE3LTIwLTQzLTIwLTIzIDAtNDAgMTYuNVQ0ODItMTk5cTAgOCA0IDIwTDI5MyAxNTZxLTIwIDQtMzIuNSAxOS41VDI0OCAyMTFxMCA5IDMgMThMNDUgNTg1cS0yMCA1LTMyLjUgMjAuNVQwIDY0MXEwIDIxIDEzLjUgMzYuNVQ0NyA2OTdsMTk5IDM0NHEwIDEtLjUgM3QtLjUgM3EwIDM2IDM0IDUxbDIwOSAzNjNxLTQgMTAtNCAxOCAwIDI0IDE3IDQwLjV0NDAgMTYuNXEyNiAwIDQ0LTIxaDM5NnExNiAyMSA0MyAyMXQ0My0yMWgzOThxMTggMjEgNDQgMjEgMjMgMCA0MC0xNi41dDE3LTQwLjVxMC02LTQtMThsMjA3LTM1OHEyMy0xIDM5LTE3LjV0MTYtMzguNXEwLTEzLTctMjdsMTg3LTMyNHExOS00IDMxLjUtMTkuNVQyMDQ4IDY0MXptLTk4NS03OTloMzg5bC0zNDIgMzU0SDk2N0w2MjUtMTU4aDM2MHExOCAxNiAzOSAxNnQzOS0xNnpNMTEyIDY1NHExLTQgMS0xMyAwLTEwLTItMTVsMjA4LTM2MCAxNS02IDE4OCAxOTl2MzQ3bC0xODcgMTk0cS0xMy04LTI5LTEwem04NzQgNzg0SDU5OGwxOTAtMjAwIDU1NCAyMDBoLTI4MHEtMTYtMTYtMzgtMTZ0LTM4IDE2em03MDMtMTIxMnExIDYgNSAxMWwtNjQgNjgtMTctNzloNzZ6bS0xMDYgMGwyMiAxMDUtMjUyIDI2Ni0yOTYtMzA3IDYzLTY0aDQ2M3ptLTg4LTM2OGwxNiAyOCA2NSAzMTBoLTQyN2wzMzMtMzQzcTggNCAxMyA1em0tOTE3LTE2aDVsMzQyIDM1NEg1NTJ2LTMzNWw0LTZxMTQtNSAyMi0xM3ptLTI2IDM4NGg0MDJsNjQgNjYtMzA5IDMyMS0xNTctMTY2VjIyNnptLTE5MyAwaDE2M3YxODlMMzU0IDIzOHE0LTggNS0xMnptLTEgODI1cTAtMSAuNS0ydC41LTJxMC0xNi04LTI5bDE3MS0xNzd2MjY5em0xOTQgNzBWODEwbDE1My0xNTcgMjk3IDMxNC0yMjMgMjM2em00IDMwNGwtNC04di0yNjRsMjA1IDc0LTE5MSAyMDFxLTYtMi0xMC0zem04OTEgMTNoLTE2bC02MjEtMjI0IDIxMy0yMjV6bS00MjQtNDkyTDcyNiA2MzFsMzExLTMxOSAyOTYgMzA3ek02ODggNjM0TDU1MiA3NzVWNDkxem0zNTAtMzY0bC00Mi00NGg4NXptMzM2IDM0OGwyMzgtMjUxIDEzMiA2MjQtMyA1LTEgMXptMzQ0IDQwMHEtOCAxMy04IDI5djJsLTIxNiAzNzZxLTUgMS0xMyA1bC00MzctNDYzIDMxMC0zMjd6TTUyMiAxMTQydjIyM2wtMTYzLTI4MnptMC05NDZIMzU5TDUyMi04N3YyODN6bTEwODUgMGwtNDgtMjI3IDEzMCAyMjdoLTgyem0xMjIgNzBsMjA3IDM2MXEtMiAxMC0yIDE0IDAgMSAzIDE2bC0xNzEgMjk2LTEyOS02MTIgNzctODJxNSAzIDE1IDd6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImYyMTAiIHVuaWNvZGU9Iu+IkCIgZD0iTTAgODU2cTAgMTMxIDkxLjUgMjI2LjVUMzE0IDExNzhoNzQybDM1MiAzNThWNjZxMC0xMzItOTEuNS0yMjdUMTA5NC0yNTZIMzE0cS0xMzEgMC0yMjIuNSA5NVQwIDY2djc5MHptMTIzMi03NTRsLTE3NiAxODB2NDI1cTAgNDYtMzIgNzl0LTc4IDMzSDQ2MnEtNDYgMC03OC0zM3QtMzItNzlWMjE1cTAtNDYgMzIuNS03OS41VDQ2MiAxMDJoNzcweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNDk2IiB1bmljb2RlPSLviJEiIGQ9Ik05MzQgMTM4NnEtMzE3LTEyMS01NTYtMzYyLjVUMjAgNDYzUTAgNTUyIDAgNjM5cTAgMjA4IDEwMi41IDM4NC41dDI3OC41IDI3OVQ3NjUgMTQwNXE4MiAwIDE2OS0xOXptMjY5LTExOXE5My02NSAxNjQtMTU1LTM4OS0xMTMtNjc0LjUtNDAwLjVUMjk2IDM1cS05MyA3Mi0xNTUgMTYyIDExMiAzODYgMzk1IDY3MXQ2NjcgMzk5ek00NzAtNjdxMTE1IDM1NiAzNzkuNSA2MjJUMTQ2OSA5MzlxNDAtOTIgNTQtMTk1LTI5Mi0xMjAtNTE2LTM0NVQ2NjQtMTE5cS0xMDMgMTQtMTk0IDUyem0xMDY2LTU4cS0xOTMgNTAtMzY3IDExNS0xMzUtODQtMjkwLTEwNyAxMDkgMjA1IDI3NCAzNzAuNVQxNTIyIDUyOXEtMjEtMTUyLTEwMS0yODQgNjUtMTc1IDExNS0zNzB6Ii8+PGdseXBoIGdseXBoLW5hbWU9ImYyMTIiIHVuaWNvZGU9Iu+IkiIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xODkzIDExNDRsMTU1LTEyNzJxLTEzMSAwLTI1NyA1Ny0yMDAgOTEtMzkzIDkxLTIyNiAwLTM3NC0xNDhRODc2IDIwIDY1MCAyMHEtMTkzIDAtMzkzLTkxLTEyOC01Ny0yNTItNTdIMGwxNTUgMTI3MnEyMjQgMTI3IDQ4MiAxMjcgMjMzIDAgMzg3LTEwNiAxNTQgMTA2IDM4NyAxMDYgMjU4IDAgNDgyLTEyN3ptLTQ5NS05ODdxMTI5IDAgMjMyLTI4LjVUMTg5MCAzNWwtMTI0IDEwMjFxLTE3MSA3OC0zNjggNzgtMjI0IDAtMzc0LTE0MS0xNTAgMTQxLTM3NCAxNDEtMTk3IDAtMzY4LTc4TDE1OCAzNXExMDUgNDMgMTY1LjUgNjVUNDcyIDEzOS41IDY1MCAxNTdxMjAyIDAgMzc0LTEwOCAxNzIgMTA4IDM3NCAxMDh6bTQwIDM0bC01NSA5MDdxLTIxMS00LTM1OS0xNTUtMTUyIDE1NS0zNzQgMTU1LTE3NiAwLTMzNi02NkwyMDAgOTFxMTI0IDUxIDIyOC41IDc2VDY1MCAxOTJxMjA5IDAgMzc0LTEwMiAxNzIgMTA3IDM3NCAxMDJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il80OTgiIHVuaWNvZGU9Iu+IkyIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xNTAwIDE2NXY3MzNxMCAyMS0xNSAzNnQtMzUgMTVoLTkzcS0yMCAwLTM1LTE1dC0xNS0zNlYxNjVxMC0yMCAxNS0zNXQzNS0xNWg5M3EyMCAwIDM1IDE1dDE1IDM1em0tMjg0IDB2NTMxcTAgMjAtMTUgMzV0LTM1IDE1aC0xMDFxLTIwIDAtMzUtMTV0LTE1LTM1VjE2NXEwLTIwIDE1LTM1dDM1LTE1aDEwMXEyMCAwIDM1IDE1dDE1IDM1em0tMjkyIDB2NDI5cTAgMjAtMTUgMzV0LTM1IDE1SDc3M3EtMjAgMC0zNS0xNXQtMTUtMzVWMTY1cTAtMjAgMTUtMzV0MzUtMTVoMTAxcTIwIDAgMzUgMTV0MTUgMzV6bS0yOTIgMHYzNjJxMCAyMC0xNSAzNXQtMzUgMTVINDgxcS0yMCAwLTM1LTE1dC0xNS0zNVYxNjVxMC0yMCAxNS0zNXQzNS0xNWgxMDFxMjAgMCAzNSAxNXQxNSAzNXptMTQxNiAxNDZxMC0xNjYtMTE4LTI4NFQxNjQ2LTkxSDQwMlEyMzYtOTEgMTE4IDI3VDAgMzExcTAgMTE2IDYzIDIxNC41VDIzMSA2NzRxLTEwIDM0LTEwIDczIDAgMTEzIDgwLjUgMTkzLjVUNDk1IDEwMjFxMTAyIDAgMTgwLTY3IDQ1IDE4MyAxOTQgMzAwdDMzOCAxMTdxMTQ5IDAgMjc1LTczLjV0MTk5LjUtMTk5LjUgNzMuNS0yNzVxMC02Ni0xNC0xMjIgMTM1LTMzIDIyMS0xNDIuNXQ4Ni0yNDcuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5OSIgdW5pY29kZT0i74iUIiBkPSJNMCAxNTM2aDE1MzZWMTQ0TDc2MC0xOTQgMCAxNDR2MTM5MnpNMTQzNiAyMDl2OTI2SDEwMFYyMDlMNzYxLTg1em0wIDEwMjZ2MjAxSDEwMHYtMjAxaDEzMzZ6TTE4MSA5MzdWODIyaC0zN3YxMTVoMzd6bTAtMTQ4VjY3NGgtMzd2MTE1aDM3em0wLTE0OFY1MjZoLTM3djExNWgzN3ptMC0xNDhWMzc4aC0zN3YxMTVoMzd6bTAtMTQ4VjIzMGgtMzd2MTE1aDM3em0yNi0xNDNsMTUgMzQgMTA1LTQ3LTE1LTMzem0xMzYtNjBsMTUgMzQgMTA1LTQ2LTE1LTM0em0xMzUtNjBsMTUgMzQgMTA1LTQ2LTE1LTM0em0xMzYtNTlsMTUgMzMgMTA0LTQ2LTE1LTM0em0xODMtMTNsMTA1IDQ2IDE1LTMzLTEwNS00N3ptMTM1IDYwbDEwNSA0NiAxNS0zNC0xMDUtNDZ6bTEzNiA2MGwxMDUgNDYgMTUtMzQtMTA1LTQ2em0xMzUgNTlsMTA1IDQ3IDE1LTM0LTEwNS00NnpNMjU5IDEzODl2LTM2SDE0NXYzNmgxMTR6bTE2MiAwdi0zNkgzMDZ2MzZoMTE1em0xNjIgMHYtMzZINDY4djM2aDExNXptMTYxIDB2LTM2SDYzMHYzNmgxMTR6bTE2MiAwdi0zNkg3OTJ2MzZoMTE0em0xNjIgMHYtMzZIOTUzdjM2aDExNXptMTYyIDB2LTM2aC0xMTV2MzZoMTE1em0xNjEgMHYtMzZoLTExNHYzNmgxMTR6TTE4MSAxMDQ5di03OWgtMzd2MTE1aDExNXYtMzZoLTc4em0yNDAgMzZ2LTM2SDMwNnYzNmgxMTV6bTE2MiAwdi0zNkg0Njh2MzZoMTE1em0xNjEgMHYtMzZINjMwdjM2aDExNHptMTYyIDB2LTM2SDc5MnYzNmgxMTR6bTE2MiAwdi0zNkg5NTN2MzZoMTE1em0xNjIgMHYtMzZoLTExNXYzNmgxMTV6bTEyNS0xMTV2NzloLTc4djM2aDExNVY5NzBoLTM3em0wLTE0OHYxMTVoMzdWODIyaC0zN3ptMC0xNDh2MTE1aDM3VjY3NGgtMzd6bTAtMTQ4djExNWgzN1Y1MjZoLTM3em0wLTE0OHYxMTVoMzdWMzc4aC0zN3ptMC0xNDh2MTE1aDM3VjIzMGgtMzd6bS01OTUgMzVxLTEyOSAwLTIyMSA5MS41VDQ0NyA1NzhxMCAxMjkgOTIgMjIxdDIyMSA5MnExMzAgMCAyMjEuNS05MnQ5MS41LTIyMXEwLTEzMC05MS41LTIyMS41VDc2MCAyNjV6TTU5NSA2NDZxMC0zNiAxOS41LTU2LjV0NDkuNS0yNSA2NC03IDY0LTIgNDkuNS05VDg2MSA1MTZxMC00OS0xMTItNDktOTcgMC0xMjMgNTFoLTNsLTMxLTYzcTY3LTQyIDE2Mi00MiAyOSAwIDU2LjUgNXQ1NS41IDE2IDQ1LjUgMzMgMTcuNSA1M3EwIDQ2LTI3LjUgNjkuNXQtNjcuNSAyNy03OS41IDMtNjcgNVQ2NjAgNjUwcTAgMjEgMjAuNSAzM3Q0MC41IDE1IDQxIDNxMzQgMCA3MC41LTExdDUxLjUtMzRoM2wzMCA1OHEtMyAxLTIxIDguNXQtMjIuNSA5LTE5LjUgNy0yMiA3LTIwIDQuNS0yNCA0LTIzIDFxLTI5IDAtNTYuNS01dC01NC0xNi41LTQzLTM0VDU5NSA2NDZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MDAiIHVuaWNvZGU9Iu+IlSIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik04NjMgNTA0cTAgMTEyLTc5LjUgMTkxLjVUNTkyIDc3NXQtMTkxLTc5LjVUMzIyIDUwNHQ3OS0xOTEgMTkxLTc5IDE5MS41IDc5VDg2MyA1MDR6bTg2MyAxcTAgMTEyLTc5IDE5MXQtMTkxIDc5LTE5MS41LTc5LTc5LjUtMTkxcTAtMTEzIDc5LjUtMTkydDE5MS41LTc5IDE5MSA3OS41IDc5IDE5MS41em0zMjIgODA5Vi0zNHEwLTQ0LTMxLjUtNzUuNVQxOTQwLTE0MUgxMDhxLTQ1IDAtNzYuNSAzMS41VDAtMzR2MTM0OHEwIDQ0IDMxLjUgNzUuNVQxMDggMTQyMWg0MzFxNDQgMCA3Ni0zMS41dDMyLTc1LjV2LTE2MWg3NTR2MTYxcTAgNDQgMzIgNzUuNXQ3NiAzMS41aDQzMXE0NSAwIDc2LjUtMzEuNXQzMS41LTc1LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MDEiIHVuaWNvZGU9Iu+IliIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xNDMwIDk1M3ptMjYwLTIwNHExNDggMCAyNTMtOTguNVQyMDQ4IDQwNnEwLTE1Ny0xMDktMjYxLjVUMTY3MiA0MHEtODUgMC0xNjIgMjcuNVQxMzcyIDE0MXQtMTE4IDEwNi0xMDkgMTI2LTEwMy41IDEzMi41VDkzMyA2MzIgODE2IDczOHQtMTM2IDczLjVUNTIxIDgzOXEtMTU0IDAtMjUxLjUtOTEuNVQxNzIgNTAzcTAtMTU3IDEwNC0yNTB0MjYzLTkzcTEwMCAwIDIwOCAzNy41VDk0MCAyOTZxNSA0IDIxIDE4LjV0MzAgMjQgMjIgOS41cTE0IDAgMjQuNS0xMC41VDEwNDggMzEzcTAtMjQtNjAtNzctMTAxLTg4LTIzNC41LTE0MlQ0OTMgNDBxLTEzMyAwLTI0NS41IDU4dC0xODAgMTY1VDAgNTA0cTAgMjA1IDE0MS41IDM0MVQ0ODkgOTgxcTEyMCAwIDIyNi41LTQzLjV0MTg1LjUtMTEzIDE1MS41LTE1MyAxMzktMTY3LjVUMTMyNSAzNTAuNXQxNDkuNS0xMTNUMTY0NyAxOTRxMTAyIDAgMTY4LjUgNjEuNVQxODgyIDQxOHEwIDk1LTY0LjUgMTU5VDE2NTggNjQxcS0zMCAwLTgxLjUtMTguNVQxNTA4IDYwNHEtMjAgMC0zNS41IDE1dC0xNS41IDM1cTAgMTggOC41IDU3dDguNSA1OXEwIDE1OS0xMDcuNSAyNjNUMTEwMCAxMTM3cS01OCAwLTExMS41LTE4LjV0LTg0LTQwLjUtNTUuNS00MC41LTMzLTE4LjVxLTE1IDAtMjUuNSAxMC41VDc4MCAxMDU1cTAgMTkgMjUgNDYgNTkgNjcgMTQ3IDEwMy41dDE4MiAzNi41cTE5MSAwIDMxOC0xMjUuNVQxNTc5IDgwMHEwLTM3LTQtNjYgNTcgMTUgMTE1IDE1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTAyIiB1bmljb2RlPSLviJciIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTIxNiA4MzJxMCAyNi0xOSA0NXQtNDUgMTloLTEyOHYxMjhxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTktMTktNDVWODk2SDc2OHEtMjYgMC00NS0xOXQtMTktNDUgMTktNDUgNDUtMTloMTI4VjY0MHEwLTI2IDE5LTQ1dDQ1LTE5IDQ1IDE5IDE5IDQ1djEyOGgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNNjQwIDBxMC01My0zNy41LTkwLjVUNTEyLTEyOHQtOTAuNSAzNy41VDM4NCAwdDM3LjUgOTAuNVQ1MTIgMTI4dDkwLjUtMzcuNVQ2NDAgMHptODk2IDBxMC01My0zNy41LTkwLjVUMTQwOC0xMjh0LTkwLjUgMzcuNVQxMjgwIDB0MzcuNSA5MC41VDE0MDggMTI4dDkwLjUtMzcuNVQxNTM2IDB6bTEyOCAxMDg4VjU3NnEwLTI0LTE2LTQyLjV0LTQxLTIxLjVMNTYzIDM5MHExLTcgNC41LTIxLjV0Ni0yNi41IDIuNS0yMnEwLTE2LTI0LTY0aDkyMHEyNiAwIDQ1LTE5dDE5LTQ1LTE5LTQ1LTQ1LTE5SDQ0OHEtMjYgMC00NSAxOXQtMTkgNDVxMCAxNCAxMSAzOS41dDI5LjUgNTkuNSAyMC41IDM4bC0xNzcgODIzSDY0cS0yNiAwLTQ1IDE5dC0xOSA0NSAxOSA0NSA0NSAxOWgyNTZxMTYgMCAyOC41LTYuNXQyMC0xNS41IDEzLTI0LjUgNy41LTI2LjUgNS41LTI5LjUgNC41LTI1LjVoMTIwMXEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTAzIiB1bmljb2RlPSLviJgiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTI4MCA4MzJxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTlsLTE0Ny0xNDZ2MjkzcTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1VjczMUw3NDkgODc3cS0xOSAxOS00NSAxOXQtNDUtMTktMTktNDUgMTktNDVsMjU2LTI1NnExOS0xOSA0NS0xOXQ0NSAxOWwyNTYgMjU2cTE5IDE5IDE5IDQ1ek02NDAgMHEwLTUzLTM3LjUtOTAuNVQ1MTItMTI4dC05MC41IDM3LjVUMzg0IDB0MzcuNSA5MC41VDUxMiAxMjh0OTAuNS0zNy41VDY0MCAwem04OTYgMHEwLTUzLTM3LjUtOTAuNVQxNDA4LTEyOHQtOTAuNSAzNy41VDEyODAgMHQzNy41IDkwLjVUMTQwOCAxMjh0OTAuNS0zNy41VDE1MzYgMHptMTI4IDEwODhWNTc2cTAtMjQtMTYtNDIuNXQtNDEtMjEuNUw1NjMgMzkwcTEtNyA0LjUtMjEuNXQ2LTI2LjUgMi41LTIycTAtMTYtMjQtNjRoOTIwcTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTlINDQ4cS0yNiAwLTQ1IDE5dC0xOSA0NXEwIDE0IDExIDM5LjV0MjkuNSA1OS41IDIwLjUgMzhsLTE3NyA4MjNINjRxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5aDI1NnExNiAwIDI4LjUtNi41dDIwLTE1LjUgMTMtMjQuNSA3LjUtMjYuNSA1LjUtMjkuNSA0LjUtMjUuNWgxMjAxcTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MDQiIHVuaWNvZGU9Iu+ImSIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0yMTIgNzY4bDYyMy02NjUtMzAwIDY2NUgyMTJ6TTEwMjQtNGwzNDkgNzcySDY3NXpNNTM4IDg5NmwyMDQgMzg0SDQ4MEwxOTIgODk2aDM0NnptNjc1LTc5M2w2MjMgNjY1aC0zMjN6TTY4MyA4OTZoNjgybC0yMDQgMzg0SDg4N3ptODI3IDBoMzQ2bC0yODggMzg0aC0yNjJ6bTE0MSA0ODZsMzg0LTUxMnExNC0xOCAxMy00MS41dC0xNy00MC41TDEwNzEtMjM2cS0xOC0yMC00Ny0yMHQtNDcgMjBMMTcgNzg4UTEgODA1IDAgODI4LjVUMTMgODcwbDM4NCA1MTJxMTggMjYgNTEgMjZoMTE1MnEzMyAwIDUxLTI2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTA1IiB1bmljb2RlPSLviJoiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTgxMS0xOXExOSAxOSA0NSAxOXQ0NS0xOWwxMjgtMTI4LTkwLTkwLTgzIDgzLTgzLTgzcS0xOC0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlMMTktMTA5bDkwIDkwIDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzIDgzIDgzcTE5IDE5IDQ1IDE5dDQ1LTE5bDgzLTgzek0yMzcgMTlRMjE4IDAgMTkyIDB0LTQ1IDE5TDE5IDE0N2w5MCA5MCA4My04MiA4MyA4MnExOSAxOSA0NSAxOXQ0NS0xOWw4My04MiA2NCA2NHYyOTNMMzAyIDgyNnEtMTcgMjYtNyA1Ni41dDQwIDQwLjVsMTc3IDU4djI5OWgxMjh2MTI4aDI1NnYxMjhoMjU2di0xMjhoMjU2di0xMjhoMTI4Vjk4MWwxNzctNThxMzAtMTAgNDAtNDAuNXQtNy01Ni41bC0yMTAtMzE0VjIxOWwxOSAxOHExOSAxOSA0NSAxOXQ0NS0xOWw4My04MiA4MyA4MnExOSAxOSA0NSAxOXQ0NS0xOWwxMjgtMTI4LTkwLTkwLTgzIDgzLTgzLTgzcS0xOC0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzcS0xOS0xOS00NS0xOXQtNDUgMTlsLTgzIDgzLTgzLTgzUTk4NiAwIDk2MCAwdC00NSAxOWwtODMgODMtODMtODNRNzMwIDAgNzA0IDB0LTQ1IDE5bC04MyA4My04My04M1E0NzQgMCA0NDggMHQtNDUgMTlsLTgzIDgzem00MDMgMTEzM3YtMTI4bDM4NCAxMjggMzg0LTEyOHYxMjhoLTEyOHYxMjhINzY4di0xMjhINjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTA2IiB1bmljb2RlPSLviJsiIGQ9Ik01NzYgMGw5NiA0NDgtOTYgMTI4LTEyOCA2NHptMjU2IDBsMTI4IDY0MC0xMjgtNjQtOTYtMTI4em0xNjAgMTAxMHEtMiA0LTQgNi0xMCA4LTk2IDgtNzAgMC0xNjctMTktNy0yLTIxLTJ0LTIxIDJxLTk3IDE5LTE2NyAxOS04NiAwLTk2LTgtMi0yLTQtNiAyLTE4IDQtMjcgMi0zIDcuNS02LjVUNDM1IDk2NnEyLTQgNy41LTIwLjV0Ny0yMC41IDcuNS0xNyA4LjUtMTcgOS0xNCAxMi0xMy41IDE0LTkuNSAxNy41LTggMjAuNS00IDI0LjUtMnEzNiAwIDU5IDEyLjV0MzIuNSAzMFQ2NjkgOTE3dDExLjUgMjkuNVQ2OTggOTU5aDEycTExIDAgMTcuNS0xMi41VDczOSA5MTd0MTQuNS0zNC41IDMyLjUtMzAgNTktMTIuNXExMyAwIDI0LjUgMnQyMC41IDQgMTcuNSA4IDE0IDkuNSAxMiAxMy41IDkgMTQgOC41IDE3IDcuNSAxNyA3IDIwLjVUOTczIDk2NnEyIDcgNy41IDEwLjV0Ny41IDYuNXEyIDkgNCAyN3ptNDE2LTg3OXEwLTEyMS03My0xOTB0LTE5NC02OUgyNjdxLTEyMSAwLTE5NCA2OVQwIDEzMXEwIDYxIDQuNSAxMTh0MTkgMTI1LjVUNjEgNDk4dDYzLjUgMTAzLjVUMjE4IDY3NmwtOTAgMjIwaDIxNHEtMjIgNjQtMjIgMTI4IDAgMTIgMiAzMi0xOTQgNDAtMTk0IDk2IDAgNTcgMjEwIDk5IDE3IDYyIDUxLjUgMTM0dDcwLjUgMTE0cTMyIDM3IDc2IDM3IDMwIDAgODQtMzF0ODQtMzEgODQgMzEgODQgMzFxNDQgMCA3Ni0zNyAzNi00MiA3MC41LTExNHQ1MS41LTEzNHEyMTAtNDIgMjEwLTk5IDAtNTYtMTk0LTk2IDctODEtMjAtMTYwaDIxNGwtODItMjI1cTYzLTMzIDEwNy41LTk2LjVUMTM3MSA0MzF0MjktMTUxLjUgOC0xNDguNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUwNyIgdW5pY29kZT0i74icIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTIzMDEgNTAwcTEyLTEwMy0yMi0xOTguNVQyMTgwIDEzOCAyMDIxLjUgMzIgMTgyNSAxcS0xNjEgMTEtMjc5LjUgMTI1VDE0MTEgNDAwcS0xMiAxMTEgMjcuNSAyMTAuNVQxNTU3IDc4MWwtNzEgMTA3cS05Ni04MC0xNTEtMTk0dC01NS0yNDRxMC0yNy0xOC41LTQ2LjVUMTIxNiAzODRIODkxcS0yMy0xNjQtMTQ5LTI3NFQ0NDggMFEyNjMgMCAxMzEuNSAxMzEuNVQwIDQ0OHQxMzEuNSAzMTYuNVQ0NDggODk2cTc2IDAgMTUyLTI3bDI0IDQ1cS0xMjMgMTEwLTMwNCAxMTBoLTY0cS0yNiAwLTQ1IDE5dC0xOSA0NSAxOSA0NSA0NSAxOWgxMjhxNzggMCAxNDUtMTMuNXQxMTYuNS0zOC41IDcxLjUtMzkuNSA1MS0zNi41aDYyN2wtODUgMTI4aC0yMjJxLTMwIDAtNDkgMjIuNXQtMTQgNTIuNXE0IDIzIDIzIDM4dDQzIDE1aDI1M3EzMyAwIDUzLTI4bDcwLTEwNSAxMTQgMTE0cTE5IDE5IDQ2IDE5aDEwMXEyNiAwIDQ1LTE5dDE5LTQ1di0xMjhxMC0yNi0xOS00NXQtNDUtMTloLTE3OWwxMTUtMTcycTEzMSA2MyAyNzUgMzYgMTQzLTI2IDI0NC0xMzQuNVQyMzAxIDUwMHpNNDQ4IDEyOHExMTUgMCAyMDMgNzIuNVQ3NjIgMzg0SDQ0OHEtMzUgMC01NSAzMS0xOCAzMi0xIDYzbDE0NyAyNzdxLTQ3IDEzLTkxIDEzLTEzMiAwLTIyNi05NHQtOTQtMjI2IDk0LTIyNiAyMjYtOTR6bTE0MDggMHExMzIgMCAyMjYgOTR0OTQgMjI2LTk0IDIyNi0yMjYgOTRxLTYwIDAtMTIxLTI0bDE3NC0yNjBxMTUtMjMgMTAtNDl0LTI3LTQwcS0xNS0xMS0zNi0xMS0zNSAwLTUzIDI5bC0xNzQgMjYwcS05My05NS05My0yMjUgMC0xMzIgOTQtMjI2dDIyNi05NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUwOCIgdW5pY29kZT0i74idIiBkPSJNMTQwOCAwcTAtNjMtNjEuNS0xMTMuNXQtMTY0LTgxLTIyNS00NlQ3MDQtMjU2dC0yNTMuNSAxNS41LTIyNSA0Ni0xNjQgODFUMCAwcTAgNDkgMzMgODguNXQ5MSA2Ni41IDExOCA0NC41VDM3MyAyMjlxMjYgNSA0OC0xMC41dDI2LTQxLjVxNS0yNi0xMC41LTQ4VDM5NSAxMDNxLTU4LTEwLTEwNi0yMy41VDIxMi41IDU0IDE2NCAzMC41IDEzNi41IDExIDEyOC0xcTMtMTEgMjctMjYuNXQ3My0zM1QzNDItOTN0MTYwLjUtMjVUNzA0LTEyOHQyMDEuNSAxMFQxMDY2LTkzdDExNCAzMyA3MyAzMy41VDEyODAgMXEtMSA0LTguNSAxMVQxMjQ0IDMxdC00OC41IDIzLjUtNzYuNSAyNS0xMDYgMjMuNXEtMjYgNC00MS41IDI2VDk2MSAxNzdxNCAyNiAyNiA0MS41dDQ4IDEwLjVxNzEtMTIgMTMxLTI5LjV0MTE4LTQ0LjUgOTEtNjYuNVQxNDA4IDB6bS0zODQgODk2VjUxMnEwLTI2LTE5LTQ1dC00NS0xOWgtNjRWNjRxMC0yNi0xOS00NVQ4MzIgMEg1NzZxLTI2IDAtNDUgMTl0LTE5IDQ1djM4NGgtNjRxLTI2IDAtNDUgMTl0LTE5IDQ1djM4NHEwIDUzIDM3LjUgOTAuNVQ1MTIgMTAyNGgzODRxNTMgMCA5MC41LTM3LjVUMTAyNCA4OTZ6bS05NiAzODRxMC05My02NS41LTE1OC41VDcwNCAxMDU2dC0xNTguNSA2NS41VDQ4MCAxMjgwdDY1LjUgMTU4LjVUNzA0IDE1MDR0MTU4LjUtNjUuNVQ5MjggMTI4MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUwOSIgdW5pY29kZT0i74ieIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyODAgNTEyaDMwNXEtNS02LTEwLTEwLjV0LTktNy41bC0zLTQtNjIzLTYwMHEtMTgtMTgtNDQtMTh0LTQ0IDE4TDIyOCA0OTJxLTUgMi0yMSAyMGgzNjlxMjIgMCAzOS41IDEzLjVUNjM4IDU2MGw3MCAyODEgMTkwLTY2N3E2LTIwIDIzLTMzdDM5LTEzcTIxIDAgMzggMTN0MjMgMzNsMTQ2IDQ4NSA1Ni0xMTJxMTgtMzUgNTctMzV6bTUxMiA0MjhxMC0xNDUtMTAzLTMwMGgtMzY5bC0xMTEgMjIxcS04IDE3LTI1LjUgMjd0LTM2LjUgOHEtNDUtNS01Ni00Nkw5NjIgNDIwbC0xOTYgNjg2cS02IDIwLTIzLjUgMzN0LTM5LjUgMTMtMzktMTMuNS0yMi0zNC41TDUyNiA2NDBIMTAzUTAgNzk1IDAgOTQwcTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41LTIxLjV0MTIwLTU4VDgyMCAxMjYwdDc2LTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNSAxMjAgNThUMTMxNCAxNDA4cTIyNCAwIDM1MS0xMjR0MTI3LTM0NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idmVudXMiIHVuaWNvZGU9Iu+IoSIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTUyIDk2MHEwLTIyMS0xNDcuNS0zODQuNVQ2NDAgMzg4VjEyOGgyMjRxMTQgMCAyMy05dDktMjNWMzJxMC0xNC05LTIzdC0yMy05SDY0MHYtMjI0cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM1YwSDI4OHEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDIyNHYyNjBxLTE1MCAxNi0yNzEuNSAxMDN0LTE4NiAyMjRUMiAxMDA3cTExIDEzNCA4MC41IDI0OXQxODIgMTg4IDI0NS41IDg4cTE3MCAxOSAzMTktNTR0MjM2LTIxMiA4Ny0zMDZ6bS0xMDI0IDBxMC0xODUgMTMxLjUtMzE2LjVUNTc2IDUxMnQzMTYuNSAxMzEuNVQxMDI0IDk2MHQtMTMxLjUgMzE2LjVUNTc2IDE0MDh0LTMxNi41LTEzMS41VDEyOCA5NjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MTEiIHVuaWNvZGU9Iu+IoiIgZD0iTTE0NzIgMTQwOHEyNiAwIDQ1LTE5dDE5LTQ1VjkyOHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2MjYybC0zODItMzgzcTEyNi0xNTYgMTI2LTM1OSAwLTExNy00NS41LTIyMy41dC0xMjMtMTg0LTE4NC0xMjNUNTc2LTEyOCAzNTIuNS04Mi41dC0xODQgMTIzLTEyMyAxODRUMCA0NDh0NDUuNSAyMjMuNSAxMjMgMTg0IDE4NCAxMjNUNTc2IDEwMjRxMjAzIDAgMzU5LTEyNmwzODIgMzgyaC0yNjFxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg0MTZ6TTU3NiAwcTE4NSAwIDMxNi41IDEzMS41VDEwMjQgNDQ4IDg5Mi41IDc2NC41IDU3NiA4OTYgMjU5LjUgNzY0LjUgMTI4IDQ0OHQxMzEuNS0zMTYuNVQ1NzYgMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUxMiIgdW5pY29kZT0i74ijIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTgzMCAxMjIwcTE0NS03MiAyMzMuNS0yMTAuNVQxMTUyIDcwNHEwLTIyMS0xNDcuNS0zODQuNVQ2NDAgMTMyVjBoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ2LTk2cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTIxNyAyNC0zNjQuNSAxODcuNVQwIDcwNHEwIDE2NyA4OC41IDMwNS41VDMyMiAxMjIwcS0xNjUgOTYtMjI4IDI3My02IDE2IDMuNSAyOS41VDEyNCAxNTM2aDY5cTIxIDAgMjktMjAgNDQtMTA2IDE0MC0xNzF0MjE0LTY1IDIxNCA2NSAxNDAgMTcxcTggMjAgMzcgMjBoNjFxMTcgMCAyNi41LTEzLjV0My41LTI5LjVxLTYzLTE3Ny0yMjgtMjczek01NzYgMjU2cTE4NSAwIDMxNi41IDEzMS41VDEwMjQgNzA0dC0xMzEuNSAzMTYuNVQ1NzYgMTE1MnQtMzE2LjUtMTMxLjVUMTI4IDcwNHQxMzEuNS0zMTYuNVQ1NzYgMjU2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTEzIiB1bmljb2RlPSLviKQiIGQ9Ik0xMDI0IDE1MDRxMCAxNCA5IDIzdDIzIDloMjg4cTI2IDAgNDUtMTl0MTktNDV2LTI4OHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2MTM0bC0yNTQtMjU1cTEyNi0xNTggMTI2LTM1OSAwLTIyMS0xNDcuNS0zODQuNVQ2NDAgMTMyVjBoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ2LTk2cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTE0OSAxNi0yNzAuNSAxMDNUNTUgNDU4LjUgMiA3NTBxMTYgMjA0IDE2MCAzNTMuNVQ1MDkgMTI3NnExMTggMTQgMjI4LTE5dDE5OC0xMDNsMjU1IDI1NGgtMTM0cS0xNCAwLTIzIDl0LTkgMjN2NjR6TTU3NiAyNTZxMTg1IDAgMzE2LjUgMTMxLjVUMTAyNCA3MDR0LTEzMS41IDMxNi41VDU3NiAxMTUydC0zMTYuNS0xMzEuNVQxMjggNzA0dDEzMS41LTMxNi41VDU3NiAyNTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MTQiIHVuaWNvZGU9Iu+IpSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMjgwIDE1MDRxMCAxNCA5IDIzdDIzIDloMjg4cTI2IDAgNDUtMTl0MTktNDV2LTI4OHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjN2MTM0bC0yNTQtMjU1cTEyNi0xNTggMTI2LTM1OSAwLTIyMS0xNDcuNS0zODQuNVQ4OTYgMTMyVjBoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ2LTk2cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTIxNyAyNC0zNjQuNSAxODcuNVQyNTYgNzA0cTAgMjAxIDEyNiAzNTlsLTUyIDUzLTEwMS0xMTFxLTktMTAtMjItMTAuNXQtMjMgNy41bC00OCA0NHEtMTAgOC0xMC41IDIxLjV0OC41IDIzLjVsMTA1IDExNS0xMTEgMTEydi0xMzRxMC0xNC05LTIzdC0yMy05SDMycS0xNCAwLTIzIDl0LTkgMjN2Mjg4cTAgMjYgMTkgNDV0NDUgMTloMjg4cTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlIMjE5bDEwNi0xMDcgODYgOTRxOSAxMCAyMiAxMC41dDIzLTcuNWw0OC00NHExMC04IDEwLjUtMjEuNVQ1MDYgMTMwOWwtOTAtOTkgNTctNTZxMTU4IDEyNiAzNTkgMTI2dDM1OS0xMjZsMjU1IDI1NGgtMTM0cS0xNCAwLTIzIDl0LTkgMjN2NjR6TTgzMiAyNTZxMTg1IDAgMzE2LjUgMTMxLjVUMTI4MCA3MDR0LTEzMS41IDMxNi41VDgzMiAxMTUydC0zMTYuNS0xMzEuNVQzODQgNzA0dDEzMS41LTMxNi41VDgzMiAyNTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MTUiIHVuaWNvZGU9Iu+IpiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkwIDEwMDdxMTItMTU1LTUyLjUtMjkydC0xODYtMjI0VDEyODAgMzg4VjEyOGgyMjRxMTQgMCAyMy05dDktMjNWMzJxMC0xNC05LTIzdC0yMy05aC0yMjR2LTIyNHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjNWMEg2NDB2LTIyNHEwLTE0LTktMjN0LTIzLTloLTY0cS0xNCAwLTIzIDl0LTkgMjNWMEgyODhxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyMjR2MjYwcS0xNTAgMTYtMjcxLjUgMTAzdC0xODYgMjI0VDIgMTAwN3ExNyAyMDYgMTY0LjUgMzU2LjVUNTE5IDE1MzNxMjA2IDIxIDM3Ny05NCAxNzEgMTE1IDM3NyA5NCAyMDUtMTkgMzUyLjUtMTY5LjVUMTc5MCAxMDA3ek04OTYgNjQ3cTEyOCAxMzEgMTI4IDMxM3QtMTI4IDMxM3EtMTI4LTEzMS0xMjgtMzEzdDEyOC0zMTN6TTU3NiA1MTJxMTE1IDAgMjE4IDU3LTE1NCAxNjUtMTU0IDM5MSAwIDIyNCAxNTQgMzkxLTEwMyA1Ny0yMTggNTctMTg1IDAtMzE2LjUtMTMxLjVUMTI4IDk2MHQxMzEuNS0zMTYuNVQ1NzYgNTEyem01NzYtMzg0djI2MHEtMTM3IDE1LTI1NiA5NC0xMTktNzktMjU2LTk0VjEyOGg1MTJ6bTY0IDM4NHExODUgMCAzMTYuNSAxMzEuNVQxNjY0IDk2MHQtMTMxLjUgMzE2LjVUMTIxNiAxNDA4cS0xMTUgMC0yMTgtNTcgMTU0LTE2NyAxNTQtMzkxIDAtMjI2LTE1NC0zOTEgMTAzLTU3IDIxOC01N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUxNiIgdW5pY29kZT0i74inIiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE1MzYgMTEyMHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NS0xOXQxOS00NVY4MDBxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjEzNGwtMjU0LTI1NXE3Ni05NSAxMDcuNS0yMTR0OS41LTI0N3EtMzEtMTgyLTE2Ni0zMTJ0LTMxOC0xNTZxLTIxMC0yOS0zODQuNSA4MFQ1NDUgMTMwcS0xMTcgNi0yMjEgNTcuNXQtMTc3LjUgMTMzVDMzIDUxMyAxIDc0M3E5IDEzNSA3OCAyNTJ0MTgyIDE5MS41IDI0OCA4OS41cTExOCAxNCAyMjcuNS0xOVQ5MzUgMTE1NGwyNTUgMjU0aC0xMzRxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NS0xOXQxOS00NXYtMjg4cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3YxMzRsLTI1NC0yNTVxNTktNzQgOTMtMTY5IDE4Mi05IDMyOC0xMjRsMjU1IDI1NGgtMTM0cS0xNCAwLTIzIDl0LTkgMjN2NjR6bS01MTItNDE2cTAgMjAtNCA1OC0xNjItMjUtMjcxLTE1MFQ2NDAgMzIwcTAtMjAgNC01OCAxNjIgMjUgMjcxIDE1MHQxMDkgMjkyem0tODk2IDBxMC0xNjggMTExLTI5NHQyNzYtMTQ5cS0zIDI5LTMgNTkgMCAyMTAgMTM1IDM2OS41VDk4NSA4ODZxLTUzIDEyMC0xNjMuNSAxOTNUNTc2IDExNTJxLTE4NSAwLTMxNi41LTEzMS41VDEyOCA3MDR6bTk2MC04MzJxMTg1IDAgMzE2LjUgMTMxLjVUMTUzNiAzMjBxMCAxNjgtMTExIDI5NHQtMjc2IDE0OXEzLTI4IDMtNTkgMC0yMTAtMTM1LTM2OS41VDY3OSAxMzhRNzMyIDE4IDg0Mi41LTU1dDI0NS41LTczeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTE3IiB1bmljb2RlPSLviKgiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTY2NCAxNTA0cTAgMTQgOSAyM3QyMyA5aDI4OHEyNiAwIDQ1LTE5dDE5LTQ1di0yODhxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjEzNGwtMjU0LTI1NXE3Ni05NSAxMDcuNS0yMTR0OS41LTI0N3EtMzItMTgwLTE2NC41LTMxMFQxMzA1IDEzNXEtMjIzLTM0LTQwOSA5MC0xMTctNzgtMjU2LTkzVjBoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ2LTk2cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTE1NSAxNy0yNzkuNSAxMDkuNVQ0NS41IDQ3OSA2IDc4NnEyNSAxODcgMTU5LjUgMzIyLjVUNDg2IDEyNzNxMjI0IDM0IDQxMC05MCAxNDYgOTcgMzIwIDk3IDIwMSAwIDM1OS0xMjZsMjU1IDI1NGgtMTM0cS0xNCAwLTIzIDl0LTkgMjN2NjR6TTg5NiAzOTFxMTI4IDEzMSAxMjggMzEzdC0xMjggMzEzUTc2OCA4ODYgNzY4IDcwNHQxMjgtMzEzek0xMjggNzA0cTAtMTg1IDEzMS41LTMxNi41VDU3NiAyNTZxMTE3IDAgMjE4IDU3LTE1NCAxNjctMTU0IDM5MXQxNTQgMzkxcS0xMDEgNTctMjE4IDU3LTE4NSAwLTMxNi41LTEzMS41VDEyOCA3MDR6bTEwODgtNDQ4cTE4NSAwIDMxNi41IDEzMS41VDE2NjQgNzA0dC0xMzEuNSAzMTYuNVQxMjE2IDExNTJxLTExNyAwLTIxOC01NyAxNTQtMTY3IDE1NC0zOTFUOTk4IDMxM3ExMDEtNTcgMjE4LTU3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTE4IiB1bmljb2RlPSLviKkiIGQ9Ik0xNDcyIDE0MDhxMjYgMCA0NS0xOXQxOS00NVY5MjhxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjI2MmwtMjEzLTIxNCAxNDAtMTQwcTktMTAgOS0yM3QtOS0yMmwtNDYtNDZxLTktOS0yMi05dC0yMyA5bC0xNDAgMTQxLTc4LTc5cTEyNi0xNTYgMTI2LTM1OSAwLTExNy00NS41LTIyMy41dC0xMjMtMTg0LTE4NC0xMjNUNTc2LTEyOCAzNTIuNS04Mi41dC0xODQgMTIzLTEyMyAxODRUMCA0NDh0NDUuNSAyMjMuNSAxMjMgMTg0IDE4NCAxMjNUNTc2IDEwMjRxMjAzIDAgMzU5LTEyNmw3OCA3OC0xNzIgMTcycS05IDEwLTkgMjN0OSAyMmw0NiA0NnE5IDkgMjIgOXQyMy05bDE3Mi0xNzIgMjEzIDIxM2gtMjYxcS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNDE2ek01NzYgMHExODUgMCAzMTYuNSAxMzEuNVQxMDI0IDQ0OCA4OTIuNSA3NjQuNSA1NzYgODk2IDI1OS41IDc2NC41IDEyOCA0NDh0MTMxLjUtMzE2LjVUNTc2IDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MTkiIHVuaWNvZGU9Iu+IqiIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik02NDAgODkycTIxNy0yNCAzNjQuNS0xODcuNVQxMTUyIDMyMHEwLTE2Ny04Ny0zMDZUODI5LTE5OHQtMzE5LTU0cS0xMzMgMTUtMjQ1LjUgODhUODIuNSAyNCAyIDI3M3EtMTIgMTU1IDUyLjUgMjkydDE4NiAyMjRUNTEyIDg5MnYxMzJIMzUycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTYwdjE2NWwtOTItOTJxLTEwLTktMjMtOXQtMjIgOWwtNDYgNDZxLTkgOS05IDIydDkgMjNsMjAyIDIwMXExOSAxOSA0NSAxOXQ0NS0xOWwyMDItMjAxcTktMTAgOS0yM3QtOS0yMmwtNDYtNDZxLTktOS0yMi05dC0yMyA5bC05MiA5MnYtMTY1aDE2MHExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05SDY0MFY4OTJ6TTU3Ni0xMjhxMTg1IDAgMzE2LjUgMTMxLjVUMTAyNCAzMjAgODkyLjUgNjM2LjUgNTc2IDc2OCAyNTkuNSA2MzYuNSAxMjggMzIwIDI1OS41IDMuNSA1NzYtMTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTIwIiB1bmljb2RlPSLviKsiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMTkwMSA2MjFxMTktMTkgMTktNDV0LTE5LTQ1bC0yOTQtMjk0cS05LTEwLTIyLjUtMTB0LTIyLjUgMTBsLTQ1IDQ1cS0xMCA5LTEwIDIyLjV0MTAgMjIuNWwxODUgMTg1aC0yOTRWMjg4cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3YyMjRoLTEzMnEtMjQtMjE3LTE4Ny41LTM2NC41VDU3NiAwUTQwOSAwIDI3MCA4N1Q1OCAzMjMgNCA2NDJxMTUgMTMzIDg4IDI0NS41dDE4OCAxODIgMjQ5IDgwLjVxMTU1IDEyIDI5Mi01Mi41dDIyNC0xODZUMTE0OCA2NDBoMTMydjIyNHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzLTl0OS0yM1Y2NDBoMjk0bC0xODUgMTg1cS0xMCA5LTEwIDIyLjV0MTAgMjIuNWw0NSA0NXE5IDEwIDIyLjUgMTB0MjIuNS0xMHpNNTc2IDEyOHExODUgMCAzMTYuNSAxMzEuNVQxMDI0IDU3NiA4OTIuNSA4OTIuNSA1NzYgMTAyNCAyNTkuNSA4OTIuNSAxMjggNTc2dDEzMS41LTMxNi41VDU3NiAxMjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MjEiIHVuaWNvZGU9Iu+IrCIgaG9yaXotYWR2LXg9IjEyODAiIGQ9Ik0xMTUyIDk2MHEwLTIyMS0xNDcuNS0zODQuNVQ2NDAgMzg4di02MTJxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjYxMnEtMjE3IDI0LTM2NC41IDE4Ny41VDAgOTYwcTAgMTE3IDQ1LjUgMjIzLjV0MTIzIDE4NCAxODQgMTIzVDU3NiAxNTM2dDIyMy41LTQ1LjUgMTg0LTEyMyAxMjMtMTg0VDExNTIgOTYwek01NzYgNTEycTE4NSAwIDMxNi41IDEzMS41VDEwMjQgOTYwdC0xMzEuNSAzMTYuNVQ1NzYgMTQwOHQtMzE2LjUtMTMxLjVUMTI4IDk2MHQxMzEuNS0zMTYuNVQ1NzYgNTEyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTIyIiB1bmljb2RlPSLviK0iIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTAyNCA1NzZxMCAxODUtMTMxLjUgMzE2LjVUNTc2IDEwMjQgMjU5LjUgODkyLjUgMTI4IDU3NnQxMzEuNS0zMTYuNVQ1NzYgMTI4dDMxNi41IDEzMS41VDEwMjQgNTc2em0xMjggMHEwLTExNy00NS41LTIyMy41dC0xMjMtMTg0LTE4NC0xMjNUNTc2IDAgMzUyLjUgNDUuNXQtMTg0IDEyMy0xMjMgMTg0VDAgNTc2dDQ1LjUgMjIzLjUgMTIzIDE4NCAxODQgMTIzVDU3NiAxMTUydDIyMy41LTQ1LjUgMTg0LTEyMyAxMjMtMTg0VDExNTIgNTc2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTIzIiB1bmljb2RlPSLviK4iIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9Il81MjQiIHVuaWNvZGU9Iu+IryIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNSIgdW5pY29kZT0i74iwIiBkPSJNMTQ1MSAxNDA4cTM1IDAgNjAtMjV0MjUtNjBWLTQzcTAtMzUtMjUtNjB0LTYwLTI1aC0zOTF2NTk1aDE5OWwzMCAyMzJoLTIyOXYxNDhxMCA1NiAyMy41IDg0dDkxLjUgMjhsMTIyIDF2MjA3cS02MyA5LTE3OCA5LTEzNiAwLTIxNy41LTgwVDgyMCA4NzBWNjk5SDYyMFY0NjdoMjAwdi01OTVIODVxLTM1IDAtNjAgMjVUMC00M3YxMzY2cTAgMzUgMjUgNjB0NjAgMjVoMTM2NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNiIgdW5pY29kZT0i74ixIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTAgOTM5cTAgMTA4IDM3LjUgMjAzLjVUMTQxIDEzMDl0MTUyIDEyMyAxODUgNzggMjAyIDI2cTE1OCAwIDI5NC02Ni41dDIyMS0xOTMuNSA4NS0yODdxMC05Ni0xOS0xODh0LTYwLTE3Ny0xMDAtMTQ5LjUtMTQ1LTEwM1Q3NjcgMzMzcS02OCAwLTEzNSAzMnQtOTYgODhxLTEwLTM5LTI4LTExMi41dC0yMy41LTk1LTIwLjUtNzEtMjYtNzFUNDA2IDQxdC00Ni03Ny41LTYyLTg2LjVsLTE0LTUtOSAxMFEyNjAgMzkgMjYwIDcwcTAgOTIgMjEuNSAyMDYuNVQzNDggNTY0dDUyIDIwM3EtMzIgNjUtMzIgMTY5IDAgODMgNTIgMTU2dDEzMiA3M3E2MSAwIDk1LTQwLjV0MzQtMTAyLjVxMC02Ni00NC0xOTF0LTQ0LTE4N3EwLTYzIDQ1LTEwNC41VDc0NyA0OThxNTUgMCAxMDIgMjV0NzguNSA2OCA1NiA5NSAzOCAxMTAuNSAyMCAxMTEgNi41IDk5LjVxMCAxNzMtMTA5LjUgMjY5LjVUNjUzIDEzNzNxLTIwMCAwLTMzNC0xMjkuNVQxODUgOTE1cTAtNDQgMTIuNS04NXQyNy02NSAyNy00NS41VDI2NCA2ODlxMC0yOC0xNS03M3QtMzctNDVxLTIgMC0xNyAzLTUxIDE1LTkwLjUgNTZ0LTYxIDk0LjUtMzIuNSAxMDhUMCA5Mzl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MjciIHVuaWNvZGU9Iu+IsiIgZD0iTTk4NSA1NjJxMTMgMCA5Ny41LTQ0dDg5LjUtNTNxMi01IDItMTUgMC0zMy0xNy03Ni0xNi0zOS03MS02NS41VDk4NCAyODJxLTU3IDAtMTkwIDYyLTk4IDQ1LTE3MCAxMThUNDc2IDY0N3EtNzIgMTA3LTcxIDE5NHY4cTMgOTEgNzQgMTU4IDI0IDIyIDUyIDIyIDYgMCAxOC0xLjV0MTktMS41cTE5IDAgMjYuNS02LjVUNjEwIDk5MnE4LTIwIDMzLTg4dDI1LTc1cTAtMjEtMzQuNS01Ny41VDU5OSA3MjVxMC03IDUtMTUgMzQtNzMgMTAyLTEzNyA1Ni01MyAxNTEtMTAxIDEyLTcgMjItNyAxNSAwIDU0IDQ4LjV0NTIgNDguNXpNNzgyIDMycTEyNyAwIDI0My41IDUwVDEyMjYgMjE2dDEzNCAyMDAuNSA1MCAyNDMuNS01MCAyNDMuNS0xMzQgMjAwLjUtMjAwLjUgMTM0LTI0My41IDUwLTI0My41LTUwVDMzOCAxMTA0IDIwNCA5MDMuNSAxNTQgNjYwcTAtMjAzIDEyMC0zNjhMMTk1IDU5bDI0MiA3N1E1OTUgMzIgNzgyIDMyem0wIDEzODJxMTUzIDAgMjkyLjUtNjB0MjQwLjUtMTYxIDE2MS0yNDAuNSA2MC0yOTIuNS02MC0yOTIuNVQxMzE1IDEyNyAxMDc0LjUtMzQgNzgyLTk0UTU4Ny05NCA0MTcgMEwwLTEzNGwxMzYgNDA1UTI4IDQ0OSAyOCA2NjBxMCAxNTMgNjAgMjkyLjVUMjQ5IDExOTN0MjQwLjUgMTYxIDI5Mi41IDYweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTI4IiB1bmljb2RlPSLviLMiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4IDEyOGgxMDI0djEyOEgxMjhWMTI4em0wIDUxMmgxMDI0djEyOEgxMjhWNjQwem0xNTY4LTQ0OHEwIDQwLTI4IDY4dC02OCAyOC02OC0yOC0yOC02OCAyOC02OCA2OC0yOCA2OCAyOCAyOCA2OHpNMTI4IDExNTJoMTAyNHYxMjhIMTI4di0xMjh6bTE1NjgtNDQ4cTAgNDAtMjggNjh0LTY4IDI4LTY4LTI4LTI4LTY4IDI4LTY4IDY4LTI4IDY4IDI4IDI4IDY4em0wIDUxMnEwIDQwLTI4IDY4dC02OCAyOC02OC0yOC0yOC02OCAyOC02OCA2OC0yOCA2OCAyOCAyOCA2OHptOTYtODMyVjBIMHYzODRoMTc5MnptMCA1MTJWNTEySDB2Mzg0aDE3OTJ6bTAgNTEydi0zODRIMHYzODRoMTc5MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUyOSIgdW5pY29kZT0i74i0IiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTcwNCA2NDBxLTE1OSAwLTI3MS41IDExMi41VDMyMCAxMDI0dDExMi41IDI3MS41VDcwNCAxNDA4dDI3MS41LTExMi41VDEwODggMTAyNCA5NzUuNSA3NTIuNSA3MDQgNjQwem05NjAtMTI4aDM1MnExMyAwIDIyLjUtOS41dDkuNS0yMi41VjI4OHEwLTEzLTkuNS0yMi41VDIwMTYgMjU2aC0zNTJWLTk2cTAtMTMtOS41LTIyLjVUMTYzMi0xMjhoLTE5MnEtMTMgMC0yMi41IDkuNVQxNDA4LTk2djM1MmgtMzUycS0xMyAwLTIyLjUgOS41VDEwMjQgMjg4djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDM1MnYzNTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNVY1MTJ6TTkyOCAyODhxMC01MiAzOC05MHQ5MC0zOGgyNTZWLTc4cS02OC01MC0xNzEtNTBIMjY3cS0xMjEgMC0xOTQgNjlUMCAxMzFxMCA1MyAzLjUgMTAzLjV0MTQgMTA5VDQ0IDQ1MnQ0MyA5Ny41IDYyIDgxIDg1LjUgNTMuNVQzNDYgNzA0cTE5IDAgMzktMTcgNzktNjEgMTU0LjUtOTEuNVQ3MDQgNTY1dDE2NC41IDMwLjVUMTAyMyA2ODdxMjAgMTcgMzkgMTcgMTMyIDAgMjE3LTk2aC0yMjNxLTUyIDAtOTAtMzh0LTM4LTkwVjI4OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzMCIgdW5pY29kZT0i74i1IiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTcwNCA2NDBxLTE1OSAwLTI3MS41IDExMi41VDMyMCAxMDI0dDExMi41IDI3MS41VDcwNCAxNDA4dDI3MS41LTExMi41VDEwODggMTAyNCA5NzUuNSA3NTIuNSA3MDQgNjQwem0xMDc3LTMyMGwyNDktMjQ5cTktOSA5LTIzIDAtMTMtOS0yMmwtMTM2LTEzNnEtOS05LTIyLTktMTQgMC0yMyA5bC0yNDkgMjQ5LTI0OS0yNDlxLTktOS0yMy05LTEzIDAtMjIgOUwxMTcwIDI2cS05IDktOSAyMiAwIDE0IDkgMjNsMjQ5IDI0OS0yNDkgMjQ5cS05IDktOSAyMyAwIDEzIDkgMjJsMTM2IDEzNnE5IDkgMjIgOSAxNCAwIDIzLTlsMjQ5LTI0OSAyNDkgMjQ5cTkgOSAyMyA5IDEzIDAgMjItOWwxMzYtMTM2cTktOSA5LTIyIDAtMTQtOS0yM3ptLTQ5OCAwbC0xODEtMTgxcS0zNy0zNy0zNy05MSAwLTUzIDM3LTkwbDgzLTgzcS0yMS0zLTQ0LTNIMjY3cS0xMjEgMC0xOTQgNjlUMCAxMzFxMCA1MyAzLjUgMTAzLjV0MTQgMTA5VDQ0IDQ1MnQ0MyA5Ny41IDYyIDgxIDg1LjUgNTMuNVQzNDYgNzA0cTE5IDAgMzktMTcgMTU0LTEyMiAzMTktMTIydDMxOSAxMjJxMjAgMTcgMzkgMTcgMjggMCA1Ny02LTI4LTI3LTQxLTUwdC0xMy01NnEwLTU0IDM3LTkxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTMxIiB1bmljb2RlPSLviLYiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNMjU2IDUxMmgxNzI4cTI2IDAgNDUtMTl0MTktNDVWMGgtMjU2djI1NkgyNTZWMEgwdjEyMTZxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NS0xOXQxOS00NVY1MTJ6bTU3NiAzMjBxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MSA3NS0xODEgMTgxLTc1IDE4MSA3NSA3NSAxODF6bTEyMTYtMjU2djY0cTAgMTU5LTExMi41IDI3MS41VDE2NjQgMTAyNEg5NjBxLTI2IDAtNDUtMTl0LTE5LTQ1VjU3NmgxMTUyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTMyIiB1bmljb2RlPSLviLciIGQ9Ik0xNTM2IDE1MzZsLTE5Mi00NDhoMTkyVjg5NmgtMjc0bC01NS0xMjhoMzI5VjU3NmgtNDExTDc2OC0yNTYgNDExIDU3NkgwdjE5MmgzMjlsLTU1IDEyOEgwdjE5MmgxOTJMMCAxNTM2aDI1NmwzMjMtNzY4aDM3OGwzMjMgNzY4aDI1NnpNNzY4IDMyMGwxMDggMjU2SDY2MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzMyIgdW5pY29kZT0i74i4IiBkPSJNMTA4OCAxNTM2cTE4NSAwIDMxNi41LTkzLjVUMTUzNiAxMjE2VjMyMHEwLTEzMC0xMjUuNS0yMjJUMTEwNSAxbDIxMy0yMDJxMTYtMTUgOC0zNXQtMzAtMjBIMjQwcS0yMiAwLTMwIDIwdDggMzVMNDMxIDFRMjUxIDYgMTI1LjUgOThUMCAzMjB2ODk2cTAgMTMzIDEzMS41IDIyNi41VDQ0OCAxNTM2aDY0MHpNNzY4IDE5MnE4MCAwIDEzNiA1NnQ1NiAxMzYtNTYgMTM2LTEzNiA1Ni0xMzYtNTYtNTYtMTM2IDU2LTEzNiAxMzYtNTZ6bTU3NiA1NzZ2NTEySDE5MlY3NjhoMTE1MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzNCIgdW5pY29kZT0i74i5IiBkPSJNMTA4OCAxNTM2cTE4NSAwIDMxNi41LTkzLjVUMTUzNiAxMjE2VjMyMHEwLTEzMC0xMjUuNS0yMjJUMTEwNSAxbDIxMy0yMDJxMTYtMTUgOC0zNXQtMzAtMjBIMjQwcS0yMiAwLTMwIDIwdDggMzVMNDMxIDFRMjUxIDYgMTI1LjUgOThUMCAzMjB2ODk2cTAgMTMzIDEzMS41IDIyNi41VDQ0OCAxNTM2aDY0MHpNMjg4IDIyNHE2NiAwIDExMyA0N3Q0NyAxMTMtNDcgMTEzLTExMyA0Ny0xMTMtNDctNDctMTEzIDQ3LTExMyAxMTMtNDd6bTQxNiA1NDR2NTEySDE2MFY3NjhoNTQ0em01NDQtNTQ0cTY2IDAgMTEzIDQ3dDQ3IDExMy00NyAxMTMtMTEzIDQ3LTExMy00Ny00Ny0xMTMgNDctMTEzIDExMy00N3ptMTYwIDU0NHY1MTJIODMyVjc2OGg1NzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81MzUiIHVuaWNvZGU9Iu+IuiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik01OTcgMTExNVYtNThxMC0yNS0xMi41LTQyLjVUNTQ4LTExOHEtMTcgMC0zMyA4TDUwIDEyM3EtMjEgMTAtMzUuNSAzMy41VDAgMjAzdjExNDBxMCAyMCAxMCAzNHQyOSAxNHExNCAwIDQ0LTE1bDUxMS0yNTZxMy0zIDMtNXptNjQtMTAxbDUzNC04NjYtNTM0IDI2NnY2MDB6bTExMzEtMThWLTU4cTAtMjUtMTQtNDAuNXQtMzgtMTUuNS00NyAxM2wtNDQxIDIyMHptLTMgMTIwcTAtMy0yNTYuNS00MTkuNVQxMjMyIDIwOUw4NDIgODQzbDMyNCA1MjdxMTcgMjggNTIgMjggMTQgMCAyNi02bDU0MS0yNzBxNC0yIDQtNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzNiIgdW5pY29kZT0i74i7IiBkPSJNODA5IDUzMmwyNjYgNDk5SDk2M0w4MDYgNzE5cS0yNC00OC00NC05MmwtNDIgOTItMTU1IDMxMkg0NDVsMjYzLTQ5M1YyMTRoMTAxdjMxOHptNzI3IDg3NlYtMTI4SDB2MTUzNmgxNTM2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTM3IiB1bmljb2RlPSLviLwiIGhvcml6LWFkdi14PSIyMjk2IiBkPSJNNDc4LTEzOXEtOC0xNi0yNy0zNC41VDQxNC0xOTlxLTI1LTktNTEuNSAzLjVUMzM0LTE2NHEtMSAyMiA0MCA1NXQ2OCAzOHEyMyA0IDM0LTIxLjV0Mi00Ni41em0xMzQxIDBxNy0xNiAyNi0zNC41dDM4LTI1LjVxMjUtOSA1MS41IDMuNVQxOTYyLTE2NHEyIDIyLTM5LjUgNTVUMTg1NC03MXEtMjIgNC0zMy0yMS41dC0yLTQ2LjV6bTQ4IDEwOXExMy0yNyA1Ni41LTU5LjVUMjAwMS0xMzFxNDUtMTMgODIgNC41dDM3IDUwLjVxMCA0Ni02Ny41IDEwMC41VDE5MzcgODRxLTQwIDUtNjMuNS0zNy41VDE4NjctMzB6TTQyOC0zMHEtMTMtMjctNTYtNTkuNVQyOTUtMTMxcS00NS0xMy04MiA0LjVUMTc2LTc2cTAgNDYgNjcuNSAxMDAuNVQzNTkgODRxNDAgNSA2My0zNy41dDYtNzYuNXptNzMwIDExMjRoMXEtNDEgMC03Ni0xNSAyNy04IDQ0LTMwLjV0MTctNDkuNXEwLTM1LTI3LTYwdC02NS0yNXEtNTIgMC04MCA0My01LTIzLTUtNDIgMC03NCA1Ni0xMjYuNXQxMzUtNTIuNXE4MCAwIDEzNiA1Mi41dDU2IDEyNi41LTU2IDEyNi41LTEzNiA1Mi41em0zMDQgMjE4cS05OSAxMDktMjIwLjUgMTMxLjVUOTk2IDEzOTlxMjcgNjAgODIuNSA5Ni41dDExOCAzOS41IDEyMS41LTE3IDk5LjUtNzQuNVQxNDYyIDEzMTJ6TTIyMTIgNzNxOC0xMS0xMS00MiA3LTIzIDctNDAgMS01Ni00NC41LTExMi41VDIwNTQtMjEzdC0xMTgtMzdxLTQ4LTItOTIgMjEuNXQtNjYgNjUuNXEtNjg3LTI1LTEyNTkgMC0yMy00MS02Ni41LTY1VDM2MC0yNTBxLTg2IDMtMTc5LjUgODAuNVQ4OC05cTIgMjIgNyA0MC0xOSAzMS0xMSA0MiA2IDEwIDMxIDEgMTQgMjIgNDEgNTEtNyAyOSAyIDM4IDExIDEwIDM5LTQgMjkgMjAgNTkgMzQgMCAyOSAxMyAzNyAyMyAxMiA1MS0xNiAzNSA1IDYxLTIgMTgtNCAzOC0xOXY3M3EtMTEgMC0xOCAyLTUzIDEwLTk3IDQ0LjVUMjQ5IDQwMHEtOSAzOCAwIDgxIDE1IDYyIDkzIDk1IDIgMTcgMTkgMzUuNXQzNiAyMy41IDMzLTcuNSAxOS0zMC41aDEzcTQ2LTUgNjAtMjMgMy0zIDUtNyAxMCAxIDMwLjUgMy41VDU4OCA1NzRxLTE1IDExLTMwIDE3LTIzIDQwLTkxIDQzIDAgNiAxIDEwLTYyIDItMTE4LjUgMTguNVQyNjUgNzEwcS0zMiAzNi00Mi41IDkyVDIyMCA5MTRxMTYgMTI2IDkwIDE3OSAyMyAxNiA1MiA0LjV0MzItNDAuNXEwLTEgMS41LTE0dDIuNS0yMSAzLTIwIDUuNS0xOSA4LjUtMTBxMjctMTQgNzYtMTIgNDggNDYgOTggNzQtNDAgNC0xNjItMTRsNDcgNDZxNjEgNTggMTYzIDExMSAxNDUgNzMgMjgyIDg2LTIwIDgtNDEgMTUuNXQtNDcgMTQtNDIuNSAxMC41LTQ3LjUgMTEtNDMgMTBxNTk1IDEyNiA5MDQtMTM5IDk4LTg0IDE1OC0yMjIgODUtMTAgMTIxIDloMXE1IDMgOC41IDEwdDUuNSAxOSAzIDE5LjUgMyAyMS41bDEgMTRxMyAyOCAzMiA0MHQ1Mi01cTczLTUyIDkxLTE3OCA3LTU3LTMuNS0xMTN0LTQyLjUtOTFxLTI4LTMyLTgzLjUtNDguNVQxODMzIDY0M3YtMTBxLTcxLTItOTUtNDMtMTQtNS0zMS0xNyAxMS0xIDMyLTMuNXQzMC0zLjVxMSA1IDUgOCAxNiAxOCA2MCAyM2gxM3E1IDE4IDE5IDMwdDMzIDggMzYtMjMgMTktMzZxNzktMzIgOTMtOTUgOS00MCAxLTgxLTEyLTUzLTU2LTg4dC05Ny00NHEtMTAtMi0xNy0yIDAtNDktMS03MyAyMCAxNSAzOCAxOSAyNiA3IDYxIDIgMjggMjggNTEgMTYgMTQtOSAxNC0zNyAzMy0xNiA1OS0zNCAyNyAxMyAzOCA0IDEwLTEwIDItMzggMjgtMzAgNDEtNTEgMjMgOCAzMS0xem0tMjc1IDk1MnEwLTI5LTktNTQgODItMzIgMTEyLTEzMiA0IDM3LTkuNSA5OC41VDE5ODkgMTAyOHEtMjAgMTktMzYgMTd0LTE2LTIwem0tNzgtMTAwcTM1LTQyIDQ3LjUtMTA4LjVUMTkwNiA2OTJxNjcgMTMgOTcgNDUgMTMgMTQgMTggMjgtMyA2NC0zMSAxMTQuNXQtNzkgNjYuNXEtMTUtMTUtNTItMjF6bS0zNy00cS0zMCAwLTQ0IDEgNDItMTE1IDUzLTIzOSAyMSAwIDQzIDMgMTYgNjggMSAxMzV0LTUzIDEwMHpNMjU4IDgzOXEzMCAxMDAgMTEyIDEzMi05IDI1LTkgNTQgMCAxOC0xNi41IDIwdC0zNS41LTE3cS0yOC0yOS00MS41LTkwLjVUMjU4IDgzOXptMzYtMTAycTI5LTMxIDk3LTQ1LTEzIDU4LS41IDEyNC41VDQzOCA5MjVxLTM3IDYtNTIgMjEtNTEtMTYtNzguNS02NlQyNzYgNzY1cTktMTcgMTgtMjh6bTE3Ny01NHExNCAxMjQgNzMgMjM1LTE5LTQtNTUtMThsLTQ1LTE5djFxLTQ2LTg5LTIwLTE5NiAyNS0zIDQ3LTN6bTk2My0zOXE4LTM4IDE2LjUtMTA4LjVUMTQ2MiA0NDZxMy0xOCA5LjUtMjEuNXQyMy41IDQuNXE0MCAyMCA2MiA4NS41dDIzIDEyNS41cS0yNCAyLTE0NiA0em0tMjgyIDY0MXEtMTE2IDAtMTk5LTgyLjVUODcwIDEwMDRxMC0xMTcgODMtMTk5LjV0MTk5LTgyLjUgMTk5IDgyLjUgODMgMTk5LjVxMCAxMTYtODMgMTk4LjV0LTE5OSA4Mi41em0yMjgtNjM5cS0xMDUgMi0yMTEgMHYxcS0xLTI3IDIuNS04NnQxMy41LTY2cTI5LTE0IDkzLjUtMTQuNVQxMzc0IDQ5MXE5IDMgMTEgMzl0LS41IDY5LjUtNC41IDQ2LjV6bS0yNjgtMTk5cTggNCA5LjUgNDh0LS41IDg4LTQgNjN2MXEtMjEyLTMtMjE0LTMtNC0yMC03LTYydDAtODMgMTQtNDZxMzQtMTUgMTAxLTE2dDEwMSAxMHpNNzE4IDYzNnEtMTYtNTkgNC41LTExOC41VDgwMCA0MzNxMTUtOCAyNC01dDEyIDIxcTMgMTYgOCA5MHQxMCAxMDNxLTY5LTItMTM2LTZ6TTU5MSA1MTBxMy0yMy0zNC0zNiAxMzItMTQxIDI3MS41LTI0MFQxMTM0IDgwcTE3MiA0OSAzMTAuNSAxNDZUMTczOCA0NzZxLTMzIDEzLTMwIDM0IDAgMiAuNSAzLjV0MS41IDMgMSAyLjV2MS0xcS0xNyAyLTUwIDUuNXQtNDggNC41cS0yNi05MC04Mi0xMzItNTEtMzgtODIgMS01IDYtOSAxNC03IDEzLTE3IDYyLTItNS01LTl0LTcuNS03LTgtNS41LTkuNS00bC0xMC0yLjUtMTItMi0xMi0xLjUtMTMuNS0xLTEzLjUtLjVxLTEwNi05LTE2MyAxMS00LTE3LTEwLTI2LjV0LTIxLTE1LTIzLTctMzYtMy41cS02LTEtOS0xLTE3OS0xNy0yMDMgNDAtMi02My01Ni01NC00NyA4LTkxIDU0LTEyIDEzLTIwIDI2LTE3IDI5LTI2IDY1LTU4LTYtODctMTAgMS0yIDQtMTB6bS04NC02MjhxMyAxNCAzIDMwLTE3IDcxLTUxIDEzMHQtNzMgNzBxLTQxIDEyLTEwMS41LTE0LjVUMTgwIDE3LjUgMTQxLTkwcTM1LTUzIDEwMC05M3QxMTktNDJxNTEtMiA5NCAyOHQ1MyA3OXptMyAxNzFxMjMtNjMgMjctMTE5UTczMiA0NyA5MjkgMTA4cS05OCA1Mi0xODAuNSAxMjBUNTY5IDM5M3EtNi00LTI5LTEzIDAtMS0xLTR0LTEtNXEzMS0xOCAyMi0zNy0xMi0yMy01Ni0zNC0xMC0xMy0yOS0yNGgtMXEtMi04MyAxLTE1MCAxOS0zNCAzNS03M3ptNjktMTY2cTUzMi0yMSAxMTQ1IDAtMjU0IDE0Ny00MjggMTk2LTc2LTM1LTE1Ni01Ny04LTMtMTYgMC02NSAyMS0xMjkgNDktMjA4LTYwLTQxNi0xODhoLTF2LTFxMSAwIDEgMXptMTE4NCA0NnE0IDU0IDI4IDEyMCAxNCAzOCAzMyA3MWwtMS0xcTMgNzcgMyAxNTMtMTUgOC0zMCAyNS00MiA5LTU2IDMzLTkgMjAgMjIgMzgtMiA0LTIgOS0xNiA0LTI4IDEyLTIwNC0xOTAtMzgzLTI4NCAxOTgtNTkgNDE0LTE3NnptMzkyLTIzcTUgNTQtMzkgMTA3LjV0LTEwNCA4MC0xMDIgMTQuNXEtMzgtMTEtNzIuNS03MC41VDE3ODYtODhxMC0xNiAzLTMwIDEwLTQ5IDUzLTc5dDk0LTI4cTU0IDIgMTE5IDQydDEwMCA5M3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzOCIgdW5pY29kZT0i74i9IiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTE1MjQtMjVxMC02OC00OC0xMTZ0LTExNi00OC0xMTYuNSA0OFQxMTk1LTI1dDQ4LjUgMTE2LjVUMTM2MCAxNDB0MTE2LTQ4LjVUMTUyNC0yNXptLTc0OSAwcTAtNjgtNDguNS0xMTZUNjEwLTE4OXQtMTE2IDQ4LTQ4IDExNiA0OCAxMTYuNVQ2MTAgMTQwdDExNi41LTQ4LjVUNzc1LTI1ek0wIDE0NjlxNTctNjAgMTEwLjUtMTA0LjV0MTIxLTgyIDEzNi02MyAxNjYtNDUuNSAyMDAtMzEuNSAyNTAtMTguNSAzMDQtOS41IDM3Mi41LTIuNXExMzkgMCAyNDQuNS01dDE4MS0xNi41IDEyNC0yNy41IDcxLTM5LjUgMjQtNTEuNS0xOS41LTY0LTU2LjUtNzYuNS04OS41LTkxVDIwMjMgNjM2dC0xMzktMTE5cS0xODUtMTU3LTI4Ni0yNDcgMjkgNTEgNzYuNSAxMDl0OTQgMTA1LjVUMTg2MyA1ODN0ODMgOTEuNSA1NCA4MC41IDEzIDcwLTQ1LjUgNTUuNS0xMTYuNSA0MS0yMDQgMjMuNS0zMDQgNXEtMTY4LTItMzE0IDZ0LTI1NiAyMy0yMDQuNSA0MS0xNTkuNSA1MS41LTEyMi41IDYyLjUtOTEuNSA2Ni41LTY4IDcxLjUtNTAuNSA2OS41LTQwIDY4VDAgMTQ2OXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzUzOSIgdW5pY29kZT0i74i+IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg5NiAxNDcycS0xNjkgMC0zMjMtNjZ0LTI2NS41LTE3Ny41VDEzMCA5NjMgNjQgNjQwdDY2LTMyM1QzMDcuNSA1MS41IDU3My0xMjZ0MzIzLTY2IDMyMyA2NiAyNjUuNSAxNzcuNVQxNjYyIDMxN3Q2NiAzMjMtNjYgMzIzLTE3Ny41IDI2NS41VDEyMTkgMTQwNnQtMzIzIDY2em0wIDY0cTE4MiAwIDM0OC03MXQyODYtMTkxIDE5MS0yODYgNzEtMzQ4LTcxLTM0OFQxNTMwIDZ0LTI4Ni0xOTEtMzQ4LTcxLTM0OCA3MVQyNjIgNiA3MSAyOTIgMCA2NDB0NzEgMzQ4IDE5MSAyODYgMjg2IDE5MSAzNDggNzF6TTQ5NiA3MDRxMTYgMCAxNi0xNlYyMDhxMC0xNi0xNi0xNmgtMzJxLTE2IDAtMTYgMTZ2NDgwcTAgMTYgMTYgMTZoMzJ6bTQwMC02NHE1MyAwIDkwLjUtMzcuNVQxMDI0IDUxMnEwLTM1LTE3LjUtNjRUOTYwIDQwMlYyODhxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjExNHEtMjkgMTctNDYuNSA0NlQ3NjggNTEycTAgNTMgMzcuNSA5MC41VDg5NiA2NDB6bTAgNzY4cTIwOSAwIDM4NS41LTEwM3QyNzkuNS0yNzkuNVQxNjY0IDY0MHQtMTAzLTM4NS41VDEyODEuNS0yNSA4OTYtMTI4IDUxMC41LTI1IDIzMSAyNTQuNSAxMjggNjQwdDEwMyAzODUuNVQ1MTAuNSAxMzA1IDg5NiAxNDA4ek01NDQgOTI4di05NnEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3Y5NnEwIDkzIDY1LjUgMTU4LjVUODk2IDExNTJ0MTU4LjUtNjUuNVQxMTIwIDkyOHYtOTZxMC0xNCA5LTIzdDIzLTloNjRxMTQgMCAyMyA5dDkgMjN2OTZxMCAxNDYtMTAzIDI0OXQtMjQ5IDEwMy0yNDktMTAzLTEwMy0yNDl6bTg2NC03MzZ2NTEycTAgMjYtMTkgNDV0LTQ1IDE5SDQ0OHEtMjYgMC00NS0xOXQtMTktNDVWMTkycTAtMjYgMTktNDV0NDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NDAiIHVuaWNvZGU9Iu+JgCIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0xOTIwIDEwMjRWMjU2SDI1NnY3NjhoMTY2NHptMTI4LTU3NmgxMjh2Mzg0aC0xMjh2Mjg4cTAgMTQtOSAyM3QtMjMgOUgxNjBxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloMTg1NnExNCAwIDIzIDl0OSAyM3YyODh6bTI1NiAzODRWNDQ4cTAtNTMtMzcuNS05MC41VDIxNzYgMzIwVjE2MHEwLTY2LTQ3LTExM1QyMDE2IDBIMTYwUTk0IDAgNDcgNDdUMCAxNjB2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzLTQ3dDQ3LTExM1Y5NjBxNTMgMCA5MC41LTM3LjVUMjMwNCA4MzJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NDEiIHVuaWNvZGU9Iu+JgSIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0yNTYgMjU2djc2OGgxMjgwVjI1NkgyNTZ6bTE5MjAgNzA0cTUzIDAgOTAuNS0zNy41VDIzMDQgODMyVjQ0OHEwLTUzLTM3LjUtOTAuNVQyMTc2IDMyMFYxNjBxMC02Ni00Ny0xMTNUMjAxNiAwSDE2MFE5NCAwIDQ3IDQ3VDAgMTYwdjk2MHEwIDY2IDQ3IDExM3QxMTMgNDdoMTg1NnE2NiAwIDExMy00N3Q0Ny0xMTNWOTYwem0wLTUxMnYzODRoLTEyOHYyODhxMCAxNC05IDIzdC0yMyA5SDE2MHEtMTQgMC0yMy05dC05LTIzVjE2MHEwLTE0IDktMjN0MjMtOWgxODU2cTE0IDAgMjMgOXQ5IDIzdjI4OGgxMjh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NDIiIHVuaWNvZGU9Iu+JgiIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0yNTYgMjU2djc2OGg4OTZWMjU2SDI1NnptMTkyMCA3MDRxNTMgMCA5MC41LTM3LjVUMjMwNCA4MzJWNDQ4cTAtNTMtMzcuNS05MC41VDIxNzYgMzIwVjE2MHEwLTY2LTQ3LTExM1QyMDE2IDBIMTYwUTk0IDAgNDcgNDdUMCAxNjB2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzLTQ3dDQ3LTExM1Y5NjB6bTAtNTEydjM4NGgtMTI4djI4OHEwIDE0LTkgMjN0LTIzIDlIMTYwcS0xNCAwLTIzLTl0LTktMjNWMTYwcTAtMTQgOS0yM3QyMy05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4aDEyOHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU0MyIgdW5pY29kZT0i74mDIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTI1NiAyNTZ2NzY4aDUxMlYyNTZIMjU2em0xOTIwIDcwNHE1MyAwIDkwLjUtMzcuNVQyMzA0IDgzMlY0NDhxMC01My0zNy41LTkwLjVUMjE3NiAzMjBWMTYwcTAtNjYtNDctMTEzVDIwMTYgMEgxNjBROTQgMCA0NyA0N1QwIDE2MHY5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMtNDd0NDctMTEzVjk2MHptMC01MTJ2Mzg0aC0xMjh2Mjg4cTAgMTQtOSAyM3QtMjMgOUgxNjBxLTE0IDAtMjMtOXQtOS0yM1YxNjBxMC0xNCA5LTIzdDIzLTloMTg1NnExNCAwIDIzIDl0OSAyM3YyODhoMTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ0IiB1bmljb2RlPSLviYQiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMjE3NiA5NjBxNTMgMCA5MC41LTM3LjVUMjMwNCA4MzJWNDQ4cTAtNTMtMzcuNS05MC41VDIxNzYgMzIwVjE2MHEwLTY2LTQ3LTExM1QyMDE2IDBIMTYwUTk0IDAgNDcgNDdUMCAxNjB2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzLTQ3dDQ3LTExM1Y5NjB6bTAtNTEydjM4NGgtMTI4djI4OHEwIDE0LTkgMjN0LTIzIDlIMTYwcS0xNCAwLTIzLTl0LTktMjNWMTYwcTAtMTQgOS0yM3QyMy05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4aDEyOHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU0NSIgdW5pY29kZT0i74mFIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExMzMgNDkzcTMxLTMwIDE0LTY5LTE3LTQwLTU5LTQwSDcwNkw5MDctOTJxMTAtMjUgMC00OXQtMzQtMzVsLTE3Ny03NXEtMjUtMTAtNDkgMHQtMzUgMzRMNDIxIDIzNSAxMDktNzdROTAtOTYgNjQtOTZxLTEyIDAtMjQgNVEwLTc0IDAtMzJ2MTUwNHEwIDQyIDQwIDU5IDEyIDUgMjQgNSAyNyAwIDQ1LTE5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ2IiB1bmljb2RlPSLviYYiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNODMyIDE0MDhxLTMyMCAwLTMyMC0yMjRWNzY4aDEyOFY2NDBINTEyVjk2cTAtMjI0IDMyMC0yMjRoNjR2LTEyOGgtNjRxLTI3MiAwLTM4NCAxNDZRMzM2LTI1NiA2NC0yNTZIMHYxMjhoNjRxMzIwIDAgMzIwIDIyNHY1NDRIMjU2djEyOGgxMjh2NDE2cTAgMjI0LTMyMCAyMjRIMHYxMjhoNjRxMjcyIDAgMzg0LTE0NiAxMTIgMTQ2IDM4NCAxNDZoNjR2LTEyOGgtNjR6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NDciIHVuaWNvZGU9Iu+JhyIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0yMDQ4IDExNTJoLTEyOFYxMjhoMTI4di0zODRoLTM4NHYxMjhIMzg0di0xMjhIMHYzODRoMTI4djEwMjRIMHYzODRoMzg0di0xMjhoMTI4MHYxMjhoMzg0di0zODR6bS0yNTYgMjU2di0xMjhoMTI4djEyOGgtMTI4em0tMTY2NCAwdi0xMjhoMTI4djEyOEgxMjh6TTI1Ni0xMjhWMEgxMjh2LTEyOGgxMjh6TTE2NjQgMHYxMjhoMTI4djEwMjRoLTEyOHYxMjhIMzg0di0xMjhIMjU2VjEyOGgxMjhWMGgxMjgwem0yNTYtMTI4VjBoLTEyOHYtMTI4aDEyOHpNMTI4MCA4OTZoMzg0VjEyOEg3Njh2MjU2SDM4NHY3NjhoODk2Vjg5NnpNNTEyIDUxMmg2NDB2NTEySDUxMlY1MTJ6bTEwMjQtMjU2djUxMmgtMjU2VjM4NEg4OTZWMjU2aDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU0OCIgdW5pY29kZT0i74mIIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTIzMDQgNzY4aC0xMjhWMTI4aDEyOHYtMzg0aC0zODR2MTI4aC04OTZ2LTEyOEg2NDB2Mzg0aDEyOHYxMjhIMzg0VjEyOEgwdjM4NGgxMjh2NjQwSDB2Mzg0aDM4NHYtMTI4aDg5NnYxMjhoMzg0di0zODRoLTEyOHYtMTI4aDM4NHYxMjhoMzg0Vjc2OHptLTI1NiAyNTZWODk2aDEyOHYxMjhoLTEyOHptLTY0MCAzODR2LTEyOGgxMjh2MTI4aC0xMjh6bS0xMjgwIDB2LTEyOGgxMjh2MTI4SDEyOHpNMjU2IDI1NnYxMjhIMTI4VjI1NmgxMjh6bTEyODAgMTI4aC0xMjhWMjU2aDEyOHYxMjh6bS0xMTUyIDBoODk2djEyOGgxMjh2NjQwaC0xMjh2MTI4SDM4NHYtMTI4SDI1NlY1MTJoMTI4VjM4NHptNTEyLTUxMlYwSDc2OHYtMTI4aDEyOHptMTI4MCAwVjBoLTEyOHYtMTI4aDEyOHptLTEyOCAyNTZ2NjQwaC0xMjh2MTI4aC0zODRWNTEyaDEyOFYxMjhoLTM4NHYxMjhIODk2VjEyOGgxMjhWMGg4OTZ2MTI4aDEyOHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU0OSIgdW5pY29kZT0i74mJIiBkPSJNMTAyNCAyODh2LTQxNkg5NnEtNDAgMC02OCAyOFQwLTMydjEzNDRxMCA0MCAyOCA2OHQ2OCAyOGgxMzQ0cTQwIDAgNjgtMjh0MjgtNjhWMzg0aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4em0xMjgtMzJoMzgxcS0xNS04Mi02NS0xMzJMMTI4NC02MHEtNTAtNTAtMTMyLTY1djM4MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU1MCIgdW5pY29kZT0i74mKIiBkPSJNMTQwMCAyNTZoLTI0OFY4cTI5IDEwIDQxIDIybDE4NSAxODVxMTIgMTIgMjIgNDF6bS0yODAgMTI4aDI4OHY4OTZIMTI4VjBoODk2djI4OHEwIDQwIDI4IDY4dDY4IDI4em00MTYgOTI4VjI4OHEwLTQwLTIwLTg4dC00OC03NkwxMjg0LTYwcS0yOC0yOC03Ni00OHQtODgtMjBIOTZxLTQwIDAtNjggMjhUMC0zMnYxMzQ0cTAgNDAgMjggNjh0NjggMjhoMTM0NHE0MCAwIDY4LTI4dDI4LTY4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTUxIiB1bmljb2RlPSLviYsiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMTk1MSA1MzhxMC0yNi0xNS41LTQ0LjVUMTg5NyA0NzBxLTgtMi0xOC0yaC0xNTN2MTQwaDE1M3ExMCAwIDE4LTIgMjMtNSAzOC41LTIzLjVUMTk1MSA1Mzh6bS0xOCAyMTNxMC0yNS0xNS00MnQtMzgtMjFxLTMtMS0xNS0xaC0xMzl2MTI5aDEzOXEzIDAgOC41LS41dDYuNS0uNXEyMy00IDM4LTIxLjV0MTUtNDIuNXpNNzI4IDU4N3YzMDhINTAwVjU4N3EwLTU4LTM4LTk0LjVUMzU3IDQ1NnEtMTA4IDAtMjI5IDU5VjQwM3E1My0xNSAxMjEtMjN0MTA5LTlsNDItMXEzMjggMCAzMjggMjE3em03MTQtMTg0djExM3EtOTktNTItMjAwLTU5LTEwOC04LTE2OSA0MXQtNjEgMTQyIDYxIDE0MiAxNjkgNDFxMTAxLTcgMjAwLTU4djExMnEtNDggMTItMTAwIDE5LjV0LTgwIDkuNWwtMjggMnEtMTI3IDYtMjE4LjUtMTRUODc1IDgzNHQtNzEtODgtMjItMTA2IDIyLTEwNiA3MS04OCAxNDAuNS02MCAyMTguNS0xNHExMDEgNCAyMDggMzF6bTczNCAxMTVxMCA1NC00MyA4OC41VDIwMjQgNjQ2djNxNTcgOCA4OSA0MS41dDMyIDc5LjVxMCA1NS00MSA4OHQtMTA3IDM2cS0zIDAtMTIgLjV0LTE0IC41aC00NTVWMzg1aDQ5MXE3NCAwIDEyMS41IDM2LjVUMjE3NiA1MTh6bTEyOCA3NjJWMHEwLTUyLTM4LTkwdC05MC0zOEgxMjhxLTUyIDAtOTAgMzhUMCAwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAtMzh0MzgtOTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NTIiIHVuaWNvZGU9Iu+JjCIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik04NTggMjk1djY5M3EtMTA2LTQxLTE3Mi0xMzUuNVQ2MjAgNjQxdDY2LTIxMS41VDg1OCAyOTV6bTUwNCAzNDZxMCAxMTctNjYgMjExLjVUMTEyNCA5ODhWMjk0cTEwNiA0MSAxNzIgMTM1LjV0NjYgMjExLjV6bTIxNSAwcTAtMTU5LTc4LjUtMjk0VDEyODUgMTMzLjUgOTkxIDU1cS0xMTkgMC0yMjcuNSA0Ni41dC0xODcgMTI1LTEyNSAxODdUNDA1IDY0MXEwIDE1OSA3OC41IDI5NFQ2OTcgMTE0OC41dDI5NCA3OC41IDI5NC03OC41VDE0OTguNSA5MzV0NzguNS0yOTR6bTM4My03cTAgMTM5LTU1LjUgMjYxLjVUMTc1NyAxMTAxdC0yMTMuNSAxMzEtMjUyLjUgNDhIOTkwcS0xNzYgMC0zMjMuNS04MXQtMjM1LTIzMFQzNDQgNjM0cTAtMTcxIDg3LTMxNy41VDY2NyA4NSA5OTAgMGgzMDFxMTI5IDAgMjUxLjUgNTAuNXQyMTQuNSAxMzVUMTkwNC41IDM4OHQ1NS41IDI0NnptMzQ0IDY0NlYwcTAtNTItMzgtOTB0LTkwLTM4SDEyOHEtNTIgMC05MCAzOFQwIDB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MC0zOHQzOC05MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU1MyIgdW5pY29kZT0i74mNIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQtOTZWOTkycTAgMTMtOS41IDIyLjV0LTIyLjUgOS41SDU0NHEtMTMgMC0yMi41LTkuNVQ1MTIgOTkyVi05NnEwLTEzIDkuNS0yMi41VDU0NC0xMjhoMTA4OHExMyAwIDIyLjUgOS41VDE2NjQtOTZ6bTEyOCAxMDg4Vi05NnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDU0NHEtNjYgMC0xMTMgNDdUMzg0LTk2Vjk5MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTA4OHE2NiAwIDExMy00N3Q0Ny0xMTN6bS0zODQgMzg0di0xNjBoLTEyOHYxNjBxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMzc2VjI4OHEwLTEzIDkuNS0yMi41VDE2MCAyNTZoMTYwVjEyOEgxNjBxLTY2IDAtMTEzIDQ3VDAgMjg4djEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDEwODhxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTU0IiB1bmljb2RlPSLviY4iIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMTcyOCAxMDg4bC0zODQtNzA0aDc2OHptLTEyODAgMEw2NCAzODRoNzY4em04MjEgMTkycS0xNC00MC00NS41LTcxLjVUMTE1MiAxMTYzVi0xMjhoNjA4cTE0IDAgMjMtOXQ5LTIzdi02NHEwLTE0LTktMjN0LTIzLTlINDE2cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNjA4djEyOTFxLTQwIDE0LTcxLjUgNDUuNVQ5MDcgMTI4MEg0MTZxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg0OTFxMjEgNTcgNzAgOTIuNXQxMTEgMzUuNSAxMTEtMzUuNSA3MC05Mi41aDQ5MXExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05aC00OTF6bS0xODEtMTZxMzMgMCA1Ni41IDIzLjV0MjMuNSA1Ni41LTIzLjUgNTYuNS01Ni41IDIzLjUtNTYuNS0yMy41LTIzLjUtNTYuNSAyMy41LTU2LjUgNTYuNS0yMy41em0xMDg4LTg4MHEwLTczLTQ2LjUtMTMxVDIwMTIgMTYydC0xNDQuNS00OS41VDE3MjggOTZ0LTEzOS41IDE2LjVUMTQ0NCAxNjJ0LTExNy41IDkxLTQ2LjUgMTMxcTAgMTEgMzUgODF0OTIgMTc0LjVUMTUxNCA4MzV0MTAyIDE4NCA1NiAxMDBxMTggMzMgNTYgMzN0NTYtMzNxNC03IDU2LTEwMHQxMDItMTg0IDEwNy0xOTUuNSA5Mi0xNzQuNSAzNS04MXptLTEyODAgMHEwLTczLTQ2LjUtMTMxVDczMiAxNjJ0LTE0NC41LTQ5LjVUNDQ4IDk2dC0xMzkuNSAxNi41VDE2NCAxNjIgNDYuNSAyNTMgMCAzODRxMCAxMSAzNSA4MXQ5MiAxNzQuNVQyMzQgODM1dDEwMiAxODQgNTYgMTAwcTE4IDMzIDU2IDMzdDU2LTMzcTQtNyA1Ni0xMDB0MTAyLTE4NCAxMDctMTk1LjVUODYxIDQ2NXQzNS04MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU1NSIgdW5pY29kZT0i74mQIiBkPSJNMTQwOCAxNDA4cTAtMjYxLTEwNi41LTQ2MS41VDEwMzUgNjQwcTE2MC0xMDYgMjY2LjUtMzA2LjVUMTQwOC0xMjhoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2cTAgMjYxIDEwNi41IDQ2MS41VDUwMSA2NDBRMzQxIDc0NiAyMzQuNSA5NDYuNVQxMjggMTQwOEgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE0NzJxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ6TTg3NCA3MDBxNzcgMjkgMTQ5IDkyLjVUMTE1Mi41IDk0NXQ5Mi41IDIxMCAzNSAyNTNIMjU2cTAtMTMyIDM1LTI1M3Q5Mi41LTIxMFQ1MTMgNzkyLjUgNjYyIDcwMHExOS03IDMwLjUtMjMuNVQ3MDQgNjQwdC0xMS41LTM2LjVUNjYyIDU4MHEtNzctMjktMTQ5LTkyLjVUMzgzLjUgMzM1IDI5MSAxMjV0LTM1LTI1M2gxMDI0cTAgMTMyLTM1IDI1M3QtOTIuNSAyMTBUMTAyMyA0ODcuNSA4NzQgNTgwcS0xOSA3LTMwLjUgMjMuNVQ4MzIgNjQwdDExLjUgMzYuNVQ4NzQgNzAweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTU2IiB1bmljb2RlPSLviZEiIGQ9Ik0xNDA4IDE0MDhxMC0yNjEtMTA2LjUtNDYxLjVUMTAzNSA2NDBxMTYwLTEwNiAyNjYuNS0zMDYuNVQxNDA4LTEyOGg5NnExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05SDMycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZxMCAyNjEgMTA2LjUgNDYxLjVUNTAxIDY0MFEzNDEgNzQ2IDIzNC41IDk0Ni41VDEyOCAxNDA4SDMycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05aC05NnptLTEyOCAwSDI1NnEwLTY2IDktMTI4aDEwMDZxOSA2MSA5IDEyOHptMC0xNTM2cTAgMTMwLTM0IDI0OS41dC05MC41IDIwOC0xMjYuNSAxNTJUODgzIDU3Nkg2NTNxLTc2LTMxLTE0Ni05NC41dC0xMjYuNS0xNTItOTAuNS0yMDhUMjU2LTEyOGgxMDI0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTU3IiB1bmljb2RlPSLviZIiIGQ9Ik0xNDA4IDE0MDhxMC0yNjEtMTA2LjUtNDYxLjVUMTAzNSA2NDBxMTYwLTEwNiAyNjYuNS0zMDYuNVQxNDA4LTEyOGg5NnExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05SDMycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZxMCAyNjEgMTA2LjUgNDYxLjVUNTAxIDY0MFEzNDEgNzQ2IDIzNC41IDk0Ni41VDEyOCAxNDA4SDMycS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzLTl0OS0yM3YtNjRxMC0xNC05LTIzdC0yMy05aC05NnptLTEyOCAwSDI1NnEwLTIwNiA4NS0zODRoODU0cTg1IDE3OCA4NSAzODR6bS01Ny0xMjE2cS01NCAxNDEtMTQ1LjUgMjQxLjVUODgzIDU3Nkg2NTNxLTEwMy00Mi0xOTQuNS0xNDIuNVQzMTMgMTkyaDkxMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU1OCIgdW5pY29kZT0i74mTIiBkPSJNMTQwOCAxNDA4cTAtMjYxLTEwNi41LTQ2MS41VDEwMzUgNjQwcTE2MC0xMDYgMjY2LjUtMzA2LjVUMTQwOC0xMjhoOTZxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2cTAgMjYxIDEwNi41IDQ2MS41VDUwMSA2NDBRMzQxIDc0NiAyMzQuNSA5NDYuNVQxMjggMTQwOEgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE0NzJxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOWgtOTZ6TTg3NCA3MDBxNzcgMjkgMTQ5IDkyLjVUMTE1Mi41IDk0NXQ5Mi41IDIxMCAzNSAyNTNIMjU2cTAtMTMyIDM1LTI1M3Q5Mi41LTIxMFQ1MTMgNzkyLjUgNjYyIDcwMHExOS03IDMwLjUtMjMuNVQ3MDQgNjQwdC0xMS41LTM2LjVUNjYyIDU4MHEtMTM3LTUxLTI0NC0xOTZoNzAwcS0xMDcgMTQ1LTI0NCAxOTYtMTkgNy0zMC41IDIzLjVUODMyIDY0MHQxMS41IDM2LjVUODc0IDcwMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU1OSIgdW5pY29kZT0i74mUIiBkPSJNMTUwNC02NHExNCAwIDIzLTl0OS0yM3YtMTI4cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5dC05IDIzdjEyOHEwIDE0IDkgMjN0MjMgOWgxNDcyek0xMzAgMHEzIDU1IDE2IDEwN3QzMCA5NSA0NiA4NyA1My41IDc2IDY0LjUgNjkuNSA2NiA2MCA3MC41IDU1VDU0MyA1OTd0NjUgNDNxLTQzIDI4LTY1IDQzdC02Ni41IDQ3LjUtNzAuNSA1NS02NiA2MC02NC41IDY5LjUtNTMuNSA3Ni00NiA4Ny0zMCA5NS0xNiAxMDdoMTI3NnEtMy01NS0xNi0xMDd0LTMwLTk1LTQ2LTg3LTUzLjUtNzYtNjQuNS02OS41LTY2LTYwLTcwLjUtNTVUOTkzIDY4M3QtNjUtNDNxNDMtMjggNjUtNDN0NjYuNS00Ny41IDcwLjUtNTUgNjYtNjAgNjQuNS02OS41IDUzLjUtNzYgNDYtODcgMzAtOTUgMTYtMTA3SDEzMHptMTM3NCAxNTM2cTE0IDAgMjMtOXQ5LTIzdi0xMjhxMC0xNC05LTIzdC0yMy05SDMycS0xNCAwLTIzIDl0LTkgMjN2MTI4cTAgMTQgOSAyM3QyMyA5aDE0NzJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NjAiIHVuaWNvZGU9Iu+JlSIgZD0iTTc2OCAxMTUycS01MyAwLTkwLjUtMzcuNVQ2NDAgMTAyNFY4OTZoLTMydjkzcTAgNDgtMzIgODEuNXQtODAgMzMuNXEtNDYgMC03OS0zM3QtMzMtNzlWNTYzbC0zMiAzMHYxNzJxMCA0OC0zMiA4MS41VDI0MCA4ODBxLTQ2IDAtNzktMzN0LTMzLTc5VjU0NHEwLTQ3IDM1LTgybDMxMC0yOTZxMzktMzkgMzktMTAyIDAtMjYgMTktNDV0NDUtMTloNjQwcTI2IDAgNDUgMTl0MTkgNDV2MjVxMCA0MSAxMCA3N2wxMDggNDM2cTEwIDM2IDEwIDc3djI0NnEwIDQ4LTMyIDgxLjV0LTgwIDMzLjVxLTQ2IDAtNzktMzN0LTMzLTc5di0zMmgtMzJ2MTI1cTAgNDAtMjUgNzIuNXQtNjQgNDAuNXEtMTQgMi0yMyAyLTQ2IDAtNzktMzN0LTMzLTc5Vjg5NmgtMzJ2MTIycTAgNTEtMzIuNSA4OS41VDc4MSAxMTUxcS01IDEtMTMgMXptMCAxMjhxODQgMCAxNDktNTAgNTcgMzQgMTIzIDM0IDU5IDAgMTExLTI3dDg2LTc2cTI3IDcgNTkgNyAxMDAgMCAxNzAtNzEuNXQ3MC0xNzEuNVY2NzlxMC01MS0xMy0xMDhsLTEwOS00MzZxLTYtMjQtNi03MSAwLTgwLTU2LTEzNnQtMTM2LTU2SDU3NnEtODQgMC0xMzggNTguNVQzODQgNzNMNzYgMzY5UTAgNDQyIDAgNTQ0djIyNHEwIDk5IDcwLjUgMTY5LjVUMjQwIDEwMDhxMTEgMCAxNi0xIDYgOTUgNzUuNSAxNjB0MTY0LjUgNjVxNTIgMCA5OC0yMSA3MiA2OSAxNzQgNjl6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NjEiIHVuaWNvZGU9Iu+JliIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04ODAgMTQwOHEtNDYgMC03OS0zM3QtMzMtNzlWNjQwaC0zMnY1MjhxMCA0Ni0zMyA3OXQtNzkgMzMtNzktMzMtMzMtNzlWMzg0TDM1OCA1ODlxLTM4IDUxLTEwMiA1MS01MyAwLTkwLjUtMzcuNVQxMjggNTEycTAtNDMgMjYtNzdMNTM4LTc3cTM4LTUxIDEwMi01MWg2ODhxMzQgMCA2MSAyMnQzNCA1Nmw3NiA0MDVxNSAzMiA1IDU5djQ5OHEwIDQ2LTMzIDc5dC03OSAzMy03OS0zMy0zMy03OVY2NDBoLTMydjUyOHEwIDQ2LTMzIDc5dC03OSAzMy03OS0zMy0zMy03OVY2NDBoLTMydjY1NnEwIDQ2LTMzIDc5dC03OSAzM3ptMCAxMjhxNjggMCAxMjUuNS0zNS41dDg4LjUtOTYuNXExOSA0IDQyIDQgOTkgMCAxNjkuNS03MC41VDEzNzYgMTE2OHYtMTdxMTA1IDYgMTgwLjUtNjR0NzUuNS0xNzVWNDE0cTAtNDAtOC04M2wtNzYtNDA0cS0xNC03OS03Ni41LTEzMVQxMzI4LTI1Nkg2NDBxLTYwIDAtMTE0LjUgMjcuNVQ0MzUtMTU0TDUxIDM1OFEwIDQyNiAwIDUxMnEwIDEwNiA3NSAxODF0MTgxIDc1cTc4IDAgMTI4LTM0djQzNHEwIDk5IDcwLjUgMTY5LjVUNjI0IDE0MDhxMjMgMCA0Mi00IDMxIDYxIDg4LjUgOTYuNVQ4ODAgMTUzNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU2MiIgdW5pY29kZT0i74mXIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwNzMtMTI4SDg5NnEtMTYzIDAtMjI2IDE0MS0yMyA0OS0yMyAxMDJ2NXEtNjIgMzAtOTguNSA4OC41VDUxMiAzMzZxMCAzOCA1IDQ4SDI1NnEtMTA2IDAtMTgxIDc1VDAgNjQwdDc1IDE4MSAxODEgNzVoMTEzbC00NCAxN3EtNzQgMjgtMTE5LjUgOTMuNVQxNjAgMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1cTQ2IDAgOTEtMTdsNjI4LTIzOWg0MDFxMTA2IDAgMTgxLTc1dDc1LTE4MVYyMjhxMC04OC01NC0xNTcuNVQxNTk4LTIwbC0zMzktODVxLTkyLTIzLTE4Ni0yM3ptLTQ5IDcxMWwtMTU1LTcxLTE2My03NHEtMzAtMTQtNDgtNDEuNVQ2NDAgMzM2cTAtNDYgMzMtNzl0NzktMzNxMjYgMCA0NiAxMGwzMzggMTU0cS00OSAxMC04MC41IDUwdC0zMS41IDkwdjU1em0zMjAtMzExcTAgNDYtMzMgNzl0LTc5IDMzcS0yNiAwLTQ2LTEwTDg5NiAyNDJxLTI4LTEzLTM3LTE3dC0zMC41LTE3LTI5LjUtMjMuNS0xNi0yOS04LTQwLjVxMC01MCAzMS41LTgyVDg4OCAxcTIwIDAgMzggOWwzNTIgMTYwcTMwIDE0IDQ4IDQxLjV0MTggNjAuNXptLTIzMiA3NTJsLTY1MCAyNDhxLTI0IDgtNDYgOC01MyAwLTkwLjUtMzcuNVQyODggMTE1MnEwLTQwIDIyLjUtNzN0NTkuNS00N2w1MjYtMjAwdi02NEgyNTZxLTUzIDAtOTAuNS0zNy41VDEyOCA2NDB0MzcuNS05MC41VDI1NiA1MTJoNTM1bDIzMyAxMDZ2MTk4cTAgNjMgNDYgMTA2bDExMSAxMDJoLTY5ek0xMDczIDBxODIgMCAxNTUgMTlsMzM5IDg1cTQzIDExIDcwIDQ1LjV0MjcgNzguNXY2NjhxMCA1My0zNy41IDkwLjVUMTUzNiAxMDI0aC0zMDhsLTEzNi0xMjZxLTM2LTMzLTM2LTgyVjUyMHEwLTQ2IDMzLTc3dDc5LTMxIDc5IDM1IDMzIDgxdjIwOGgzMlY1MjhxMC03MC01Ny0xMTQgNTItOCA4Ni41LTQ4LjVUMTM3NiAyNzJxMC00Mi0yMy03OHQtNjEtNTNMOTgyIDBoOTF6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NjMiIHVuaWNvZGU9Iu+JmCIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xMTUxIDE1MzZxNjEgMCAxMTYtMjh0OTEtNzdsNTcyLTc4MXExMTgtMTU5IDExOC0zNTlWLTY0cTAtODAtNTYtMTM2dC0xMzYtNTZoLTM4NHEtODAgMC0xMzYgNTZ0LTU2IDEzNnYxNzdMOTk0IDI1Nkg0NDhxLTgwIDAtMTM2IDU2dC01NiAxMzZ2MzJxMCAxMTkgODQuNSAyMDMuNVQ1NDQgNzY4aDQyMGw0MiAxMjhIMzIwcS0xMDAgMC0xNzMuNSA2Ny41VDY1IDExMzBxLTY1IDc5LTY1IDE4MnYzMnEwIDgwIDU2IDEzNnQxMzYgNTZoOTU5ek0xOTIwLTY0djM1NXEwIDE1Ny05MyAyODRsLTU3MyA3ODFxLTM5IDUyLTEwMyA1MkgxOTJxLTI2IDAtNDUtMTl0LTE5LTQ1cTAtMzIgMS41LTQ5LjV0OS41LTQwLjUgMjUtNDNxMTAgMzEgMzUuNSA1MHQ1Ni41IDE5aDgzMnYtMzJIMjU2cS0yNiAwLTQ1LTE5dC0xOS00NXEwLTQ0IDMtNTggOC00NCA0NC03M3Q4MS0yOWg3MzFxNDAgMCA2OC0yOHQyOC02OHEwLTE1LTUtMzBsLTY0LTE5MnEtMTAtMjktMzUtNDcuNVQ5ODcgNjQwSDU0NHEtNjYgMC0xMTMtNDd0LTQ3LTExM3YtMzJxMC0yNiAxOS00NXQ0NS0xOWg1NjFxMTYgMCAyOS03bDMxNy0xNThxMjQtMTMgMzguNS0zNnQxNC41LTUwVi02NHEwLTI2IDE5LTQ1dDQ1LTE5aDM4NHEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTY0IiB1bmljb2RlPSLviZkiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNNDU5LTI1NnEtNzcgMC0xMzcuNSA0Ny41VDI0Mi04NkwxNDEgMzE1cS0xMyA1Ny0xMyAxMDggMCA0NS01IDY3TDcgOTY3cS03IDI3LTcgNTcgMCA5MyA2MiAxNjF0MTU1IDc4cTE3IDg1IDgyLjUgMTM5dDE1Mi41IDU0cTgzIDAgMTQ4LTUxLjV0ODUtMTMyLjVsODMtMzQ4IDEwMyA0MjhxMjAgODEgODUgMTMyLjV0MTQ4IDUxLjVxODkgMCAxNTUuNS01Ny41VDEzNDAgMTMzNHE5Mi0xMCAxNTItNzl0NjAtMTYycTAtMjQtNy01OWwtMTIzLTUxMnExMCA3IDM3LjUgMjguNVQxNDk4IDU4MHQzNSAyMyA0MSAyMC41IDQxLjUgMTEgNDkuNSA1LjVxMTA1IDAgMTgwLTc0dDc1LTE3OXEwLTYyLTI4LjUtMTE4dC03OC41LTk0bC01MDctMzgwcS02OC01MS0xNTMtNTFINDU5em02NDUgMTY2NHEtMzggMC02OC41LTI0dC0zOS41LTYyTDgzMiA2NDBINzA1bC0xNDUgNjAycS05IDM4LTM5LjUgNjJ0LTY4LjUgMjRxLTQ4IDAtODAtMzN0LTMyLTgwcTAtMTUgMy0yOGwxMzItNTQ3aC0yNmwtOTkgNDA4cS05IDM3LTQwIDYyLjV0LTY5IDI1LjVxLTQ3IDAtODAtMzN0LTMzLTc5cTAtMTQgMy0yNmwxMTYtNDc4cTctMjggOS04NnQxMC04OEwzNjYtNTVxOC0zMiAzNC01Mi41dDU5LTIwLjVoNjk0cTQyIDAgNzYgMjZsNTA3IDM3OXE1NiA0MyA1NiAxMTAgMCA1Mi0zNy41IDg4LjVUMTY2NSA1MTJxLTQzIDAtNzctMjZsLTMwNy0yMzB2MjI3cTAgNCAzMiAxMzh0NjggMjgyIDM5IDE2MXE0IDE4IDQgMjkgMCA0Ny0zMiA4MXQtNzkgMzRxLTM5IDAtNjkuNS0yNHQtMzkuNS02MmwtMTE2LTQ4MmgtMjZsMTUwIDYyNHEzIDE0IDMgMjggMCA0OC0zMS41IDgydC03OS41IDM0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTY1IiB1bmljb2RlPSLviZoiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDE0MDhxLTUzIDAtOTAuNS0zNy41VDUxMiAxMjgwVjM4NEwzNjEgNTg2cS00MSA1NC0xMDcgNTQtNTIgMC04OS0zOHQtMzctOTBxMC00MyAyNi03N0w1MzgtNzdxMzgtNTEgMTAyLTUxaDcxOHEyMiAwIDM5LjUgMTMuNVQxNDIwLTgwbDkyIDM2OHEyNCA5NiAyNCAxOTR2MjE3cTAgNDEtMjggNzF0LTY4IDMwLTY4LTI4LTI4LTY4aC0zMnY2MXEwIDQ4LTMyIDgxLjV0LTgwIDMzLjVxLTQ2IDAtNzktMzN0LTMzLTc5di02NGgtMzJ2OTBxMCA1NS0zNyA5NC41VDkyOCA5MjhxLTUzIDAtOTAuNS0zNy41VDgwMCA4MDB2LTk2aC0zMnY1NzBxMCA1NS0zNyA5NC41dC05MSAzOS41em0wIDEyOHExMDcgMCAxODEuNS03Ny41VDg5NiAxMjc0di0yMjBxMjIgMiAzMiAyIDk5IDAgMTczLTY5IDQ3IDIxIDk5IDIxIDExMyAwIDE4NC04NyAyNyA3IDU2IDcgOTQgMCAxNTktNjcuNXQ2NS0xNjEuNVY0ODJxMC0xMTYtMjgtMjI1bC05Mi0zNjhxLTE2LTY0LTY4LTEwNC41VDEzNTgtMjU2SDY0MHEtNjAgMC0xMTQuNSAyNy41VDQzNS0xNTRMNTEgMzU4UTAgNDI2IDAgNTEycTAgMTA1IDc0LjUgMTgwLjVUMjU0IDc2OHE3MSAwIDEzMC0zNXY1NDdxMCAxMDYgNzUgMTgxdDE4MSA3NXpNNzY4IDEyOHYzODRoLTMyVjEyOGgzMnptMjU2IDB2Mzg0aC0zMlYxMjhoMzJ6bTI1NiAwdjM4NGgtMzJWMTI4aDMyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTY2IiB1bmljb2RlPSLviZsiIGQ9Ik0xMjg4IDg4OXE2MCAwIDEwNy0yMyAxNDEtNjMgMTQxLTIyNlY0NjNxMC05NC0yMy0xODZsLTg1LTMzOXEtMjEtODYtOTAuNS0xNDBUMTE4MC0yNTZINTEycS0xMDYgMC0xODEgNzVUMjU2IDB2NDAxTDE3IDEwMjlxLTE3IDQ1LTE3IDkxIDAgMTA2IDc1IDE4MXQxODEgNzVxODAgMCAxNDUuNS00NS41VDQ5NSAxMjExbDE3LTQ0djExM3EwIDEwNiA3NSAxODF0MTgxIDc1IDE4MS03NSA3NS0xODF2LTI2MXEyNyA1IDQ4IDUgNjkgMCAxMjcuNS0zNi41VDEyODggODg5em0tMjE2IDdxLTMzIDAtNjAuNS0xOFQ5NzAgODMwbC03NC0xNjMtNzEtMTU1aDU1cTUwIDAgOTAtMzEuNXQ1MC04MC41bDE1NCAzMzhxMTAgMjAgMTAgNDYgMCA0Ni0zMyA3OXQtNzkgMzN6bTIyMS0xMzVxLTIyIDAtNDAuNS04dC0yOS0xNi0yMy41LTI5LjUtMTctMzAuNS0xNy0zN2wtMTMyLTI5MHEtMTAtMjAtMTAtNDYgMC00NiAzMy03OXQ3OS0zM3EzMyAwIDYwLjUgMTh0NDEuNSA0OGwxNjAgMzUycTkgMTggOSAzOCAwIDUwLTMyIDgxLjV0LTgyIDMxLjV6TTEyOCAxMTIwcTAtMjIgOC00NmwyNDgtNjUwdi02OWwxMDIgMTExcTQzIDQ2IDEwNiA0NmgxOThsMTA2IDIzM3Y1MzVxMCA1My0zNy41IDkwLjVUNzY4IDE0MDh0LTkwLjUtMzcuNVQ2NDAgMTI4MFY2NDBoLTY0bC0yMDAgNTI2cS0xNCAzNy00NyA1OS41dC03MyAyMi41cS01MyAwLTkwLjUtMzcuNVQxMjggMTEyMHpNMTE4MC0xMjhxNDQgMCA3OC41IDI3dDQ1LjUgNzBsODUgMzM5cTE5IDczIDE5IDE1NXY5MWwtMTQxLTMxMHEtMTctMzgtNTMtNjF0LTc4LTIzcS01MyAwLTkzLjUgMzQuNVQ5OTQgMjgxcS00NC01Ny0xMTQtNTdINjcydjMyaDIwOHE0NiAwIDgxIDMzdDM1IDc5LTMxIDc5LTc3IDMzSDU5MnEtNDkgMC04Mi0zNkwzODQgMzA4VjBxMC01MyAzNy41LTkwLjVUNTEyLTEyOGg2Njh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NjciIHVuaWNvZGU9Iu+JnCIgaG9yaXotYWR2LXg9IjE5NzMiIGQ9Ik04NTcgOTkyVjg3NXEwLTEzLTkuNS0yMnQtMjIuNS05SDUyN1YzMnEwLTEzLTktMjIuNVQ0OTYgMEgzNjFxLTEzIDAtMjIuNSA5VDMyOSAzMnY4MTJIMzJxLTEzIDAtMjIuNSA5VDAgODc1djExN3EwIDE0IDkgMjN0MjMgOWg3OTNxMTMgMCAyMi41LTkuNVQ4NTcgOTkyem0xMDM4IDNsNzctOTYxcTEtMTMtOC0yNC0xMC0xMC0yMy0xMGgtMTM0cS0xMiAwLTIxIDguNVQxNzc2IDI5bC00NiA1ODgtMTg5LTQyNXEtOC0xOS0yOS0xOWgtMTIwcS0yMCAwLTI5IDE5bC0xODggNDI3LTQ1LTU5MHEtMS0xMi0xMC0yMC41VDEwOTkgMEg5NjRxLTEzIDAtMjMgMTAtOSAxMC05IDI0bDc4IDk2MXExIDEyIDEwIDIwLjV0MjEgOC41aDE0MnEyMCAwIDI5LTE5bDIyMC01MjBxMTAtMjQgMjAtNTEgMyA3IDkuNSAyNC41VDE0NzIgNDg1bDIyMSA1MjBxOSAxOSAyOSAxOWgxNDFxMTMgMCAyMi04LjV0MTAtMjAuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU2OCIgdW5pY29kZT0i74mdIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwNDIgODMzcTAgODgtNjAgMTIxLTMzIDE4LTExNyAxOEg3NDJWNjkxaDE2MnE2NiAwIDEwMiAzN3QzNiAxMDV6bTUyLTI4NWwyMDUtMzczcTgtMTctMS0zMS04LTE2LTI3LTE2aC0xNTJxLTIwIDAtMjggMTdMODk3IDUxMEg3NDJWMTYwcTAtMTQtOS0yM3QtMjMtOUg1NzZxLTE0IDAtMjMgOXQtOSAyM3Y5NjBxMCAxNCA5IDIzdDIzIDloMjk0cTEyOCAwIDE5MC0yNCA4NS0zMSAxMzQtMTA5dDQ5LTE4MHEwLTkyLTQyLjUtMTY1LjVUMTA4NSA1NjRxNi0xMCA5LTE2em0tMTk4IDgyOHEtMTUwIDAtMjg2LTU4LjV0LTIzNC41LTE1Ny0xNTctMjM0LjVUMTYwIDY0MHQ1OC41LTI4NiAxNTctMjM0LjVUNjEwLTM3LjUgODk2LTk2dDI4NiA1OC41IDIzNC41IDE1NyAxNTcgMjM0LjUgNTguNSAyODYtNTguNSAyODYtMTU3IDIzNC41LTIzNC41IDE1Ny0yODYgNTguNXptODk2LTczNnEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTY5IiB1bmljb2RlPSLviZ4iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjA1IDMwM3ExNTMgMCAyNTcgMTA0IDE0IDE4IDMgMzZsLTQ1IDgycS02IDEzLTI0IDE3LTE2IDItMjctMTFsLTQtM3EtNC00LTExLjUtMTBUNzM2IDUwNC41IDcxMi41IDQ5MCA2ODQgNDc3dC0zMy41LTkuNVQ2MTMgNDY0cS03NiAwLTEyNSA1MHQtNDkgMTI3cTAgNzYgNDggMTI1LjVUNjA5IDgxNnEzNyAwIDcxLjUtMTR0NTAuNS0yOGwxNi0xNHExMS0xMSAyNi0xMCAxNiAyIDI0IDE0bDUzIDc4cTEzIDIwLTIgMzktMyA0LTExIDEydC0zMCAyMy41LTQ4LjUgMjhUNjkxIDk2N3QtODYgMTBxLTE0OCAwLTI0Ni05Ni41VDI2MSA2NDBxMC0xNDYgOTctMjQxLjVUNjA1IDMwM3ptNjMwIDBxMTUzIDAgMjU3IDEwNCAxNCAxOCA0IDM2bC00NSA4MnEtOCAxNC0yNSAxNy0xNiAyLTI3LTExbC00LTNxLTQtNC0xMS41LTEwdC0xNy41LTEzLjUtMjMuNS0xNC41LTI4LjUtMTMtMzMuNS05LjUtMzcuNS0zLjVxLTc2IDAtMTI1IDUwdC00OSAxMjdxMCA3NiA0OCAxMjUuNXQxMjIgNDkuNXEzNyAwIDcxLjUtMTR0NTAuNS0yOGwxNi0xNHExMS0xMSAyNi0xMCAxNiAyIDI0IDE0bDUzIDc4cTEzIDIwLTIgMzktMyA0LTExIDEydC0zMCAyMy41LTQ4LjUgMjhUMTMyMSA5Njd0LTg2IDEwcS0xNDcgMC0yNDUuNS05Ni41VDg5MSA2NDBxMC0xNDYgOTctMjQxLjV0MjQ3LTk1LjV6TTg5NiAxMzc2cS0xNTAgMC0yODYtNTguNXQtMjM0LjUtMTU3LTE1Ny0yMzQuNVQxNjAgNjQwdDU4LjUtMjg2IDE1Ny0yMzQuNVQ2MTAtMzcuNSA4OTYtOTZ0Mjg2IDU4LjUgMjM0LjUgMTU3IDE1NyAyMzQuNSA1OC41IDI4Ni01OC41IDI4Ni0xNTcgMjM0LjUtMjM0LjUgMTU3LTI4NiA1OC41em0wIDE2MHExODIgMCAzNDgtNzF0Mjg2LTE5MSAxOTEtMjg2IDcxLTM0OC03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmMjYwIiB1bmljb2RlPSLviaAiIGhvcml6LWFkdi14PSIyMDQ4IiBkPSJNNzM2IDczNmwzODQtMzg0TDczNi0zMiA2NCA2NDBsNjcyIDY3MiAxNjgtMTY4LTk2LTk2LTcyIDcyLTQ4MC00ODAgNDgwLTQ4MCAxOTMgMTkzLTI4OSAyODd6bTU3NiA1NzZsNjcyLTY3Mi02NzItNjcyLTE2OCAxNjggOTYgOTYgNzItNzIgNDgwIDQ4MC00ODAgNDgwLTE5My0xOTMgMjg5LTI4Ny05Ni05Ni0zODQgMzg0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmMjYxIiB1bmljb2RlPSLviaEiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNzE3IDE4MmwyNzEgMjcxLTI3OSAyNzktODgtODggMTkyLTE5MS05Ni05Ni0yNzkgMjc5IDI3OSAyNzkgNDAtNDAgODcgODctMTI3IDEyOC00NTQtNDU0em0zNTggOGw0NTQgNDU0LTQ1NCA0NTQtMjcxLTI3MSAyNzktMjc5IDg4IDg4LTE5MiAxOTEgOTYgOTYgMjc5LTI3OS0yNzktMjc5LTQwIDQwLTg3LTg4em03MTcgNDUwcTAtMTgyLTcxLTM0OFQxNTMwIDZ0LTI4Ni0xOTEtMzQ4LTcxLTM0OCA3MVQyNjIgNiA3MSAyOTIgMCA2NDB0NzEgMzQ4IDE5MSAyODYgMjg2IDE5MSAzNDggNzEgMzQ4LTcxIDI4Ni0xOTEgMTkxLTI4NiA3MS0zNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NzIiIHVuaWNvZGU9Iu+JoiIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik02NTEgNTM5cTAtMzktMjcuNS02Ni41VDU1OCA0NDVxLTM5IDAtNjYuNSAyNy41VDQ2NCA1MzlxMCAzOCAyNy41IDY1LjVUNTU4IDYzMnEzOCAwIDY1LjUtMjcuNVQ2NTEgNTM5em0xMTU0IDFxMC0zOS0yNy41LTY2LjVUMTcxMSA0NDZ0LTY2LjUgMjcuNVQxNjE3IDU0MHQyNy41IDY2IDY2LjUgMjcgNjYuNS0yNyAyNy41LTY2em0tMTA0MC0xcTAgNzktNTYuNSAxMzZUNTcyIDczMnQtMTM2LjUtNTYuNVQzNzkgNTM5dDU2LjUtMTM2LjVUNTcyIDM0NnQxMzYuNSA1Ni41VDc2NSA1Mzl6bTExNTMgMXEwIDgwLTU2LjUgMTM2LjVUMTcyNSA3MzNxLTc5IDAtMTM2LTU2LjVUMTUzMiA1NDB0NTYuNS0xMzYuNVQxNzI1IDM0N3QxMzYuNSA1Ni41VDE5MTggNTQwem0tMTA2OC0xcTAtMTE2LTgxLjUtMTk3LjVUNTcyIDI2MHEtMTE2IDAtMTk3LjUgODJUMjkzIDUzOXQ4MiAxOTYuNVQ1NzIgODE3dDE5Ni41LTgxLjVUODUwIDUzOXptMTE1NCAxcTAtMTE1LTgxLjUtMTk2LjVUMTcyNSAyNjJxLTExNSAwLTE5Ni41IDgxLjVUMTQ0NyA1NDB0ODEuNSAxOTYuNVQxNzI1IDgxOHExMTYgMCAxOTcuNS04MS41VDIwMDQgNTQwem0tOTY0LTNxMCAxOTEtMTM1LjUgMzI2LjVUNTc4IDk5OXEtMTI1IDAtMjMxLTYyVDE3OSA3NjguNSAxMTcgNTM3dDYyLTIzMS41VDM0NyAxMzd0MjMxLTYycTE5MSAwIDMyNi41IDEzNS41VDEwNDAgNTM3em02NjggNTczcS0yNTQgMTExLTU1NiAxMTEtMzE5IDAtNTczLTExMCAxMTcgMCAyMjMtNDUuNVQ5ODQuNSA5NDN0MTIyLTE4MyA0NS41LTIyM3EwIDExNSA0My41IDIxOS41dDExOCAxODAuNSAxNzcuNSAxMjMgMjE3IDUwem00NzktNTczcTAgMTkxLTEzNSAzMjYuNVQxNzI2IDk5OXQtMzI2LjUtMTM1LjVUMTI2NCA1Mzd0MTM1LjUtMzI2LjVUMTcyNiA3NXQzMjYgMTM1LjVUMjE4NyA1Mzd6bS0yNjYgNTY2aDM4M3EtNDQtNTEtNzUtMTE0LjVUMjE4OSA4NzRxMTEwLTE1MSAxMTAtMzM3IDAtMTU2LTc3LTI4OFQyMDEzIDQwLjUgMTcyNi0zNnEtMTMzIDAtMjQ5IDU2dC0xOTYgMTU1cS00Ny01Ni0xMjktMTc5LTExIDIyLTUzLjUgODIuNVQxMDI0IDE3NlE5NDQgNzcgODI3LjUgMjAuNVQ1NzgtMzZxLTE1NSAwLTI4NyA3Ni41VDgyIDI0OSA1IDUzN3EwIDE4NiAxMTAgMzM3LTkgNTEtNDAgMTE0LjVUMCAxMTAzaDM2NXExNDkgMTAwIDM1NSAxNTYuNXQ0MzIgNTYuNXEyMjQgMCA0MjEtNTZ0MzQ4LTE1N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iZjI2MyIgdW5pY29kZT0i74mjIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTY0MCA2MjlxLTE4OCAwLTMyMSAxMzN0LTEzMyAzMjBxMCAxODggMTMzIDMyMXQzMjEgMTMzIDMyMS0xMzMgMTMzLTMyMXEwLTE4Ny0xMzMtMzIwVDY0MCA2Mjl6bTAgNjc3cS05MiAwLTE1Ny41LTY1LjVUNDE3IDEwODJxMC05MiA2NS41LTE1Ny41VDY0MCA4NTl0MTU3LjUgNjUuNVQ4NjMgMTA4MnEwIDkzLTY1LjUgMTU4LjVUNjQwIDEzMDZ6bTUyMy03MzJxMTMtMjcgMTUtNDkuNXQtNC41LTQwLjUtMjYuNS0zOC41LTQyLjUtMzdUMTA0MyAzNjdxLTExNS03My0zMTUtOTRsNzMtNzIgMjY3LTI2N3EzMC0zMSAzMC03NHQtMzAtNzNsLTEyLTEzcS0zMS0zMC03NC0zMHQtNzQgMzBxLTY3IDY4LTI2NyAyNjhMMzc0LTIyNnEtMzEtMzAtNzQtMzB0LTczIDMwbC0xMiAxM3EtMzEgMzAtMzEgNzN0MzEgNzRsMjY3IDI2NyA3MiA3MnEtMjAzIDIxLTMxNyA5NC0zOSAyNS02MS41IDQxLjV0LTQyLjUgMzctMjYuNSAzOC41LTQuNSA0MC41IDE1IDQ5LjVxMTAgMjAgMjggMzV0NDIgMjIgNTYtMiA2NS0zNXE1LTQgMTUtMTF0NDMtMjQuNSA2OS0zMC41IDkyLTI0IDExMy0xMXE5MSAwIDE3NCAyNS41VDkzNCA1NjlsMzggMjVxMzMgMjYgNjUgMzV0NTYgMiA0Mi0yMiAyOC0zNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU3NCIgdW5pY29kZT0i74mkIiBkPSJNOTI3IDk1NnEwLTY2LTQ2LjUtMTEyLjVUNzY4IDc5N3QtMTEyLjUgNDYuNVQ2MDkgOTU2dDQ2LjUgMTEyLjVUNzY4IDExMTV0MTEyLjUtNDYuNVQ5MjcgOTU2em0yMTQtMzYzcS0xMCAyMC0yOCAzMnQtNDcuNSA5LjVUMTAwNSA2MDdxLTEwLTgtMjktMjB0LTgxLTMyLTEyNy0yMC0xMjQgMTgtODYgMzZsLTI3IDE4cS0zMSAyNS02MC41IDI3LjVUNDIzIDYyNXQtMjgtMzJxLTIyLTQ1LTItNzQuNXQ4Ny03My41cTgzLTUzIDIyNi02N2wtNTEtNTJRNTEzIDE4NCA0NjQgMTM2cS0yMi0yMi0yMi01Mi41VDQ2NCAzMWw5LTlxMjItMjIgNTIuNS0yMlQ1NzggMjJsMTkxIDE5MVE4ODMgOTggOTYwIDIycTIyLTIyIDUyLjUtMjJ0NTIuNSAyMmw5IDlxMjIgMjIgMjIgNTIuNXQtMjIgNTIuNUw4ODMgMzI2bC01MiA1MnExNDEgMTQgMjI1IDY3IDY3IDQ0IDg3IDczLjV0LTIgNzQuNXptLTQ5IDM2M3EwIDEzNC05NSAyMjl0LTIyOSA5NS0yMjktOTUtOTUtMjI5IDk1LTIyOSAyMjktOTUgMjI5IDk1IDk1IDIyOXptNDQ0IDE2NFYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTc1IiB1bmljb2RlPSLviaUiIGhvcml6LWFkdi14PSIxNzIwIiBkPSJNMTU2NSAxNDA4cTY1IDAgMTEwLTQ1LjV0NDUtMTEwLjVWNzMzcTAtMTc2LTY4LTMzNnQtMTgyLjUtMjc1LTI3NC0xODIuNVQ4NjEtMTI4cS0xNzYgMC0zMzUuNSA2Ny41VDI1MSAxMjIgNjggMzk3IDAgNzMzdjUxOXEwIDY0IDQ2IDExMHQxMTAgNDZoMTQwOXpNODYxIDM0NHE0NyAwIDgyIDMzbDQwNCAzODhxMzcgMzUgMzcgODUgMCA0OS0zNC41IDgzLjVUMTI2NiA5NjhxLTQ3IDAtODItMzNMODYxIDYyNSA1MzggOTM1cS0zNSAzMy04MSAzMy00OSAwLTgzLjUtMzQuNVQzMzkgODUwcTAtNTEgMzYtODVsNDA1LTM4OHEzMy0zMyA4MS0zM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU3NiIgdW5pY29kZT0i74mmIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTE0OTQtMTAzbC0yOTUgNjk1cS0yNS00OS0xNTguNS0zMDUuNVQ4NDItMTAzcS0xLTEtMjcuNS0uNVQ3ODgtMTAyUTcwNiA5MSA1MzIuNSA0ODVUMjczIDEwODFxLTIxIDUwLTY2LjUgMTA3LjVUMTAzIDEyODkgMSAxMzMycTAgNS0uNSAyNHQtLjUgMjdoNTgzdi01MHEtMzktMi03OS41LTE2dC02Ni41LTQzLTEwLTY0cTI2LTU5IDIxNi41LTQ5OVQ4NzkgMTcxcTMxIDYxIDE0MCAyNjYuNVQxMTUwIDY4NXEtMTkgMzktMTI2IDI4MXQtMTM2IDI5NXEtMzggNjktMjAxIDcxdjUwbDUxMy0xdi00N3EtNjAtMi05My41LTI1dC0xMi41LTY5cTMzLTcwIDg3LTE4OS41dDg2LTE4Ny41cTExMCAyMTQgMTczIDM2MyAyNCA1NS0xMCA3OS41dC0xMjkgMjYuNXExIDcgMSAyNXYyNHE2NCAwIDE3MC41LjV0MTgwIDEgOTIuNS41di00OXEtNjItMi0xMTktMzN0LTkwLTgxbC0yMTMtNDQycTEzLTMzIDEyNy41LTI5MFQxNTcyIDIxNGw0NDEgMTAxN3EtMTQgMzgtNDkuNSA2Mi41dC02NSAzMS41LTU1LjUgOHY1MGw0NjAtNCAxLTItMS00NHEtMTM5LTQtMjAxLTE0NVExNTc2LTI4IDE1NDMtMTAzaC00OXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU3NyIgdW5pY29kZT0i74mnIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTk0OSA2NDNxMC0yNi0xNi41LTQ1VDg5MSA1NzlxLTI2IDAtNDUgMTYuNVQ4MjcgNjM3cTAgMjYgMTcgNDV0NDIgMTkgNDQtMTYuNSAxOS00MS41em0xNS01OGwzNTAgNTgxcS05LTgtNjcuNS02Mi41VDExMjEgOTg3IDk4NC41IDg2MHQtMTE3LTExMC41VDgxNyA2OThMNDY4IDExOHE3IDcgNjcgNjJ0MTI2IDExNi41IDEzNiAxMjcgMTE3IDExMSA1MCA1MC41em02NDcgNTVxMC0yMDEtMTA0LTM3MS0zIDItMTcgMTF0LTI2LjUgMTYuNS0xNi41IDcuNXEtMTMgMC0xMy0xMyAwLTEwIDU5LTQ0LTc0LTExMi0xODQuNS0xOTAuNVQxMDY3LTU0bC0xNiA2N3EtMSAxMC0xNSAxMC01IDAtOC01LjV0LTItOS41bDE2LTY4cS03Mi0xNS0xNDYtMTUtMTk5IDAtMzcyIDEwNSAxIDIgMTMgMjAuNVQ1NTguNSA4NHQ5LjUgMTlxMCAxMy0xMyAxMy02IDAtMTctMTQuNVQ1MTUuNSA2NyA1MDIgNDRxLTExMyA3NS0xOTIgMTg3LjVUMjAwIDQ3Nmw2OSAxNXExMCAzIDEwIDE1IDAgNS01LjUgOHQtMTAuNSAybC02OC0xNXEtMTQgNzItMTQgMTM5IDAgMjA2IDEwOSAzNzkgMi0xIDE4LjUtMTJ0MzAtMTkgMTcuNS04cTEzIDAgMTMgMTIgMCA2LTEyLjUgMTUuNVQzMjQgMTAyOWwtMjAgMTJxNzcgMTEyIDE4OSAxODl0MjQ0IDEwN2wxNS02N3EyLTEwIDE1LTEwIDUgMCA4IDUuNXQyIDEwLjVsLTE1IDY2cTcxIDEzIDEzNCAxMyAyMDQgMCAzNzktMTA5LTM5LTU2LTM5LTY1IDAtMTMgMTItMTMgMTEgMCA0OCA2NCAxMTEtNzUgMTg3LjUtMTg2VDE1OTEgODA1bC01Ni0xMnEtMTAtMi0xMC0xNiAwLTUgNS41LTh0OS41LTJsNTcgMTNxMTQtNzIgMTQtMTQwem04NSAwcTAgMTYzLTYzLjUgMzExVDE0NjIgMTIwNnQtMjU1IDE3MC41LTMxMSA2My41LTMxMS02My41VDMzMCAxMjA2IDE1OS41IDk1MSA5NiA2NDB0NjMuNS0zMTFUMzMwIDc0IDU4NS05Ni41IDg5Ni0xNjB0MzExIDYzLjVUMTQ2MiA3NHQxNzAuNSAyNTUgNjMuNSAzMTF6bTk2IDBxMC0xODItNzEtMzQ4VDE1MzAgNnQtMjg2LTE5MS0zNDgtNzEtMzQ4IDcxVDI2MiA2IDcxIDI5MiAwIDY0MHQ3MSAzNDggMTkxIDI4NiAyODYgMTkxIDM0OCA3MSAzNDgtNzEgMjg2LTE5MSAxOTEtMjg2IDcxLTM0OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU3OCIgdW5pY29kZT0i74moIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg5MyAxNTM2cTI0MCAyIDQ1MS0xMjAgMjMyLTEzNCAzNTItMzcybC03NDIgMzlxLTE2MCA5LTI5NC03NC41VDQ3NSA3NzlsLTI3NiA0MjRxMTI4IDE1OSAzMTEgMjQ1LjV0MzgzIDg3LjV6bS03NDctNDA1bDMzNy02NjNxNzItMTQzIDIxMS0yMTd0MjkzLTQ1TDc1Ny0yNDVRNTQ1LTIxMiAzNzItODcuNXQtMjcyLjUgMzE2VDAgNjQwcTAgMjY3IDE0NiA0OTF6bTE1ODYtMTY5cTU4LTE1MCA1OS41LTMxMC41dC00OC41LTMwNi0xNTMtMjcyVDEzNDQtMTM2cS0yMzAtMTMzLTQ5OC0xMTlsNDA1IDYyM3E4OCAxMzEgODIuNSAyOTAuNVQxMjI3IDkzNnptLTgzNi0yMHExMjUgMCAyMTMuNS04OC41VDExOTggNjQwdC04OC41LTIxMy41VDg5NiAzMzh0LTIxMy41IDg4LjVUNTk0IDY0MHQ4OC41IDIxMy41VDg5NiA5NDJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81NzkiIHVuaWNvZGU9Iu+JqSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05MDMtMjU2cS0yODMgMC01MDQuNSAxNTAuNVQ2OSAyOTNRMTEgNDI0IDIgNTk0dDI2IDMzMi41IDExMSAzMTJUMzE4IDE0ODFsLTExLTI4MXExMSAxNCA2OCAxNS41dDcwLTE1LjVxNDIgODEgMTYwLjUgMTM4dDIzNC41IDU5cS01NC00NS0xMTkuNS0xNDguNVQ2NjIgMTA4NXEyNS04IDYyLjUtMTMuNXQ2My03LjUgNjgtNCA1MC41LTNxMTUtNSA5LjUtNDUuNVQ4ODUgOTM2cS01LTctMTYuNS0xOC41VDgxMiA4ODJ0LTEwMS0zNGwxNS0xODktMTM5IDY3cS0xOC00My03LjUtODEuNXQzNi02Ni41IDY1LjUtNDEuNSA4MS02LjVxNTEgOSA5OCAzNC41dDgzLjUgNDVUMTAxNyA2MjdxNjEtNCA4OS41LTMzdDE5LjUtNjVxLTEtMi0yLjUtNS41VDExMTUgNTExdC0xOC0xNS41LTMxLjUtMTAuNS00Ni41LTFxLTYwLTk1LTE0NC41LTEzNS41VDY2NSAzMTlxNzQtNjEgMTYyLjUtODIuNXQxNjguNS02IDE1NC41IDUyIDEyOCA4Ny41IDgwLjUgMTA0cTQzIDkxIDM5IDE5Mi41VDEzNjAuNSA4NTUgMTI4MiA5ODBxODctMzggMTM3LTc5LjV0NzctMTEyLjVxMTUgMTcwLTU3LjUgMzQzVDEyMjkgMTQxNXEyNjUtNzcgNDEyLTI3OS41VDE3OTIgNjE4cTItMTI3LTQwLjUtMjU1VDE2MjggMTI1IDE0MzktNzF0LTI0Ny41LTEzNS41VDkwMy0yNTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81ODAiIHVuaWNvZGU9Iu+JqiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNDkzIDEzMDhxLTE2NSAxMTAtMzU5IDExMC0xNTUgMC0yOTMtNzN0LTI0MC0yMDBxLTc1LTkzLTExOS41LTIxOFQ0MzMgNjYxdi00MnE0LTE0MSA0OC41LTI2NlQ2MDEgMTM1UTcwMyA4IDg0MS02NXQyOTMtNzNxMTk0IDAgMzU5IDExMC0xMjEtMTA4LTI3NC41LTE2OFQ4OTYtMjU2cS0yOSAwLTQzIDEtMTc1IDgtMzMzIDgyVDI0OCAyMCA2NyAzMDEgMCA2NDBxMCAxODIgNzEgMzQ4dDE5MSAyODYgMjg2IDE5MSAzNDggNzFoM3ExNjgtMSAzMjAuNS02MC41VDE0OTMgMTMwOHptMjk5LTY2OHEwLTE5Mi03Ny0zNjIuNVQxNTAyLTE5cS0xMDQtNjMtMjIyLTYzLTEzNyAwLTI1NSA4NCAxNTQgNTYgMjUzLjUgMjMzdDk5LjUgNDA1cTAgMjI3LTk5IDQwNHQtMjUzIDIzNHExMTkgODMgMjU0IDgzIDExOSAwIDIyNi02NSAxMzUtMTI1IDIxMC41LTI5NXQ3NS41LTM2MXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU4MSIgdW5pY29kZT0i74mrIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNTk5cTAtNTYtNy0xMDRINjM0cTAtMTQ2IDEwOS41LTI0NC41VDEwMDEgMTUycTk5IDAgMTg1LjUgNDYuNVQxMzIzIDMyOWg0MjNxLTU2LTE1OS0xNzAuNS0yODFUMTMwOC0xNDAuNSA5ODctMjA3cS0xODcgMC0zNTYgODMtMjI4LTExNi0zOTQtMTE2UTAtMjQwIDAgMjNxMCAxMTUgNDUgMjc1IDE3IDYwIDEwOSAyMjkgMTk5IDM2MCA0NzUgNjA2LTE4NC03OS00MjctMzU0IDYzIDI3NCAyODMuNSA0NDkuNVQ5ODcgMTQwNHEzMCAwIDQ1LTEgMjU1IDExNyA0MzMgMTE3IDY0IDAgMTE2LTEzdDk0LjUtNDAuNSA2Ni41LTc2LjUgMjQtMTE1cTAtMTE2LTc1LTI4NiAxMDEtMTgyIDEwMS0zOTB6bS03MCA2NDBxMCA4My01MyAxMzJ0LTEzNyA0OXEtMTA4IDAtMjU0LTcwIDEyMS00NyAyMjIuNS0xMzEuNVQxNjcxIDEwMjNxNTEgMTM1IDUxIDIxNnpNMTI4IDJxMC04NiA0OC41LTEzMi41VDMxMS0xNzdxMTE1IDAgMjY2IDgzUTQ1NS0yMiAzNjMuNSA4OVQyMjYgMzM0UTEyOCAxMjkgMTI4IDJ6bTUwNCA3MTNoNzI4cS01IDE0Mi0xMTMgMjM3dC0yNTEgOTVxLTE0NCAwLTI1MS41LTk1VDYzMiA3MTV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81ODIiIHVuaWNvZGU9Iu+JrCIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xNzkyIDI4OHY5NjBxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMjQ4VjI4OHEwLTEzIDkuNS0yMi41VDE2MCAyNTZoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggOTYwVjI4OHEwLTY2LTQ3LTExM3QtMTEzLTQ3aC03MzZWMGgzNTJxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOUg1NDRxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgzNTJ2MTI4SDE2MHEtNjYgMC0xMTMgNDdUMCAyODh2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU4MyIgdW5pY29kZT0i74mtIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEzOCAxNDA4aDE5N3EtNzAtNjQtMTI2LTE0OS0zNi01Ni01OS0xMTV0LTMwLTEyNS41LTguNS0xMjAgMTAuNS0xMzIgMjEtMTI2VDE3MSA1MDRxNC0xOSA2LTI4IDUxLTIzOCA4MS0zMjkgNTctMTcxIDE1Mi0yNzVIMTM4cS00OCAwLTgyIDM0VDIyLTEydjEzMDRxMCA0OCAzNCA4MnQ4MiAzNHptMTIwOCAwaDMwOHE0OCAwIDgyLTM0dDM0LTgyVi0xMnEwLTQ4LTM0LTgydC04Mi0zNGgtMTc4cTIxMiAyMTAgMTk2IDU2NWwtNDY5LTEwMXEtMi00NS0xMi04MnQtMzEtNzItNTkuNS01OS41VDEwMDcgODZxLTEyMy0yNi0xOTkgNDAtMzIgMjctNTMgNjF0LTUxLjUgMTI5VDYzOSA1NzRxLTM1IDE2My00NS41IDI2M1Q1ODggOTc2dDIzIDc3cTIwIDQxIDYyLjUgNzN0MTAyLjUgNDVxNDUgMTIgODMuNSA2LjV0NjctMTcgNTQtMzUgNDMtNDggMzQuNS01Ni41bDQ2OCAxMDBxLTY4IDE3NS0xODAgMjg3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTg0IiB1bmljb2RlPSLvia4iIGQ9Ik0xNDAxLTExbC02LTZxLTExMy0xMTMtMjU5LTE3NS0xNTQtNjQtMzE3LTY0LTE2NSAwLTMxNyA2NC0xNDggNjMtMjU5IDE3NVExMzAgOTUgNjggMjQxIDI2IDM0NCAxNCA0MzBxLTQgMjggNDggMzYgNTEgOCA1Ni0yMCAxLTEgMS00IDE4LTkwIDQ2LTE1OSA1MC0xMjQgMTUyLTIyNiA5OC05OCAyMjYtMTUyIDEzMi01NiAyNzYtNTYgMTQzIDAgMjc2IDU2IDEyOCA1NSAyMjUgMTUybDYgNnExMCAxMCAyNSA2IDEyLTMgMzMtMjIgMzYtMzcgMTctNTh6TTkyOSA2MDRsLTY2LTY2IDYzLTYzcTIxLTIxLTctNDktMTctMTctMzItMTctMTAgMC0xOSAxMGwtNjIgNjEtNjYtNjZxLTUtNS0xNS01LTE1IDAtMzEgMTZsLTIgMnEtMTggMTUtMTggMjkgMCA3IDggMTdsNjYgNjUtNjYgNjZxLTE2IDE2IDE0IDQ1IDE4IDE4IDMxIDE4IDYgMCAxMy01bDY1LTY2IDY1IDY1cTE4IDE3IDQ4LTEzIDI3LTI3IDExLTQ0em00NzEtNTdxMC0xMTgtNDYtMjI4LTQ1LTEwNS0xMjYtMTg2LTgwLTgwLTE4Ny0xMjZUODEzLTM5IDU4NSA3IDM5OCAxMzNxLTgyIDgyLTEyNSAxODYtMTUgMzMtMTUgNDBoLTFxLTkgMjcgNDMgNDQgNTAgMTYgNjAtMTIgMzctOTkgOTctMTY3aDF2MzQxcTMgMTM2IDEwMiAyMzIgMTA1IDEwMyAyNTMgMTAzIDE0NyAwIDI1MS0xMDN0MTA0LTI0OXEwLTE0Ny0xMDQuNS0yNTFUODEzIDE5M3EtNTggMC0xMTIgMTYtMjggMTEtMTMgNjEgMTYgNTEgNDQgNDNsMTQtM3ExNC0zIDMzLTZ0MzAtM3ExMDQgMCAxNzYgNzEuNXQ3MiAxNzQuNXEwIDEwMS03MiAxNzEtNzEgNzEtMTc1IDcxLTEwNyAwLTE3OC04MC02NC03Mi02NC0xNjBWMTM2cTExMC02NyAyNDItNjcgOTYgMCAxODUgMzYuNVQxMTUxIDIwOXQxMDMuNSAxNTUgMzYuNSAxODNxMCAxOTgtMTQxIDMzOS0xNDAgMTQwLTMzOSAxNDAtMjAwIDAtMzQwLTE0MC01My01My03Ny04N2wtMi0ycS04LTExLTEzLTE1LjV0LTIxLjUtOS41LTM4LjUgM3EtMjEgNS0zNi41IDE2LjVUMjY3IDgxOHY2ODBxMCAxNSAxMC41IDI2LjVUMzA1IDE1MzZoODc3cTMwIDAgMzAtNTV0LTMwLTU1SDM3MVY5NDNoMXE0MCA0MiAxMDIgODR0MTA4IDYxcTEwOSA0NiAyMzEgNDYgMTIxIDAgMjI4LTQ2dDE4Ny0xMjZxODEtODEgMTI2LTE4NiA0Ni0xMTIgNDYtMjI5em0tMzEgNTgxcTktOCA5LTE4dC01LjUtMTgtMTYuNS0yMXEtMjYtMjYtMzktMjYtOSAwLTE2IDctMTA2IDkxLTIwNyAxMzMtMTI4IDU2LTI3NiA1Ni0xMzMgMC0yNjItNDktMjctMTAtNDUgMzctOSAyNS04IDM4IDMgMTYgMTYgMjAgMTMwIDU3IDI5OSA1NyAxNjQgMCAzMTYtNjQgMTM3LTU4IDIzNS0xNTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81ODUiIHVuaWNvZGU9Iu+JsCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNTUxIDYwcTE1IDYgMjYgM3QxMS0xNy41LTE1LTMzLjVxLTEzLTE2LTQ0LTQzLjV0LTk1LjUtNjgtMTQxLTc0LTE4OC01OFQ4NzUtMjU2cS0xMTkgMC0yMzggMzF0LTIwOSA3Ni41LTE3Mi41IDEwNFQxMjMgNjAuNSAzOSAxNDhxLTggOS0xMCAxNi41dDEgMTIgOCA3IDExLjUgMlQ2MSAxODFRMjUzIDY0IDM2MSAxNXEzODktMTc2IDc5OS05MCAxOTAgNDAgMzkxIDEzNXptMjA3IDExNXExMS0xNiAyLjUtNjkuNVQxNzMyIDNxLTM0LTgzLTg1LTEyNC0xNy0xNC0yNi05dDAgMjRxMjEgNDUgNDQuNSAxMjEuNXQ2LjUgOTguNXEtNSA3LTE1LjUgMTEuNXQtMjcgNi0yOS41IDIuNS0zNSAwLTMxLjUtMi0zMS0zLTIyLjUtMnEtNi0xLTEzLTEuNXQtMTEtMS04LjUtMS03LS41aC0xMGwtMyAuNS0yIDEuNS0xLjUgM3EtNiAxNiA0NyA0MHQxMDMgMzBxNDYgNyAxMDggMXQ3Ni0yNHptLTM5NCA0NDNxMC0zMSAxMy41LTY0dDMyLTU4IDM3LjUtNDYgMzMtMzJsMTMtMTEtMjI3LTIyNHEtNDAgMzctNzkgNzUuNXQtNTggNTguNWwtMTkgMjBxLTExIDExLTI1IDMzLTM4LTU5LTk3LjUtMTAyLjVUODYwIDIwNHQtMTQwLTIzLTEzNy41IDIxVDQ2NSAyNjcuNXQtODMgMTEzVDM1MSA1NDNxMCA4NCAyOCAxNTR0NzIgMTE2LjUgMTA2LjUgODMgMTIyLjUgNTdUODEwIDk4OHQxMTkuNSAxOC41IDk5LjUgNi41djEyN3EwIDY1LTIxIDk3LTM0IDUzLTEyMSA1My02IDAtMTYuNS0xdC00MC41LTEyLTU2LTI5LjUtNTYtNTkuNS00OC05NmwtMjk0IDI3cTAgNjAgMjIgMTE5dDY3IDExMyAxMDggOTUgMTUxLjUgNjUuNVQ5MTUgMTUzNnExMDAgMCAxODEtMjV0MTI5LjUtNjEuNSA4MS04MyA0NS04NiAxMi41LTczLjVWNjE4em0tNjcyLTIxcTAtODYgNzAtMTMzIDY2LTQ0IDEzOS0yMiA4NCAyNSAxMTQgMTIzIDE0IDQ1IDE0IDEwMXYxNjJxLTU5LTItMTExLTEydC0xMDYuNS0zMy41LTg3LTcxVDY5MiA1OTd6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81ODYiIHVuaWNvZGU9Iu+JsSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNTM2IDEyODBxNTIgMCA5MC0zOHQzOC05MFYtMTI4cTAtNTItMzgtOTB0LTkwLTM4SDEyOHEtNTIgMC05MCAzOFQwLTEyOHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMy00N3Q0Ny0xMTN2LTk2aDM4NHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMtNDd0NDctMTEzdi05NmgxMjh6bS0zODQgOTZ2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3YyODhxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzem0tNzY4IDB2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3YyODhxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzek0xNTM2LTEyOFY4OTZIMTI4Vi0xMjhoMTQwOHpNODk2IDQ0OGgyMjRxMTQgMCAyMy05dDktMjN2LTY0cTAtMTQtOS0yM3QtMjMtOUg4OTZWOTZxMC0xNC05LTIzdC0yMy05aC02NHEtMTQgMC0yMyA5dC05IDIzdjIyNEg1NDRxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyMjR2MjI0cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMtOXQ5LTIzVjQ0OHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU4NyIgdW5pY29kZT0i74myIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTExNTIgNDE2di02NHEwLTE0LTktMjN0LTIzLTlINTQ0cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMtOXQ5LTIzek0xMjgtMTI4aDE0MDhWODk2SDEyOFYtMTI4em0zODQgMTIxNnYyODhxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi0yODhxMC0xNCA5LTIzdDIzLTloNjRxMTQgMCAyMyA5dDkgMjN6bTc2OCAwdjI4OHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMzg0IDY0Vi0xMjhxMC01Mi0zOC05MHQtOTAtMzhIMTI4cS01MiAwLTkwIDM4VDAtMTI4djEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMy00N3Q0Ny0xMTN2LTk2aDEyOHE1MiAwIDkwLTM4dDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTg4IiB1bmljb2RlPSLvibMiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTExMSAxNTFsLTQ2LTQ2cS05LTktMjItOXQtMjMgOUw4MzIgMjk0IDY0NCAxMDVxLTEwLTktMjMtOXQtMjIgOWwtNDYgNDZxLTkgOS05IDIydDkgMjNsMTg5IDE4OC0xODkgMTg4cS05IDEwLTkgMjN0OSAyMmw0NiA0NnE5IDkgMjIgOXQyMy05bDE4OC0xODggMTg4IDE4OHExMCA5IDIzIDl0MjItOWw0Ni00NnE5LTkgOS0yMnQtOS0yM0w5MjMgMzg0bDE4OC0xODhxOS0xMCA5LTIzdC05LTIyek0xMjgtMTI4aDE0MDhWODk2SDEyOFYtMTI4em0zODQgMTIxNnYyODhxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi0yODhxMC0xNCA5LTIzdDIzLTloNjRxMTQgMCAyMyA5dDkgMjN6bTc2OCAwdjI4OHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptMzg0IDY0Vi0xMjhxMC01Mi0zOC05MHQtOTAtMzhIMTI4cS01MiAwLTkwIDM4VDAtMTI4djEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMy00N3Q0Ny0xMTN2LTk2aDEyOHE1MiAwIDkwLTM4dDM4LTkweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTg5IiB1bmljb2RlPSLvibQiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTMwMyA1NzJMNzkxIDYwcS0xMC05LTIzLTl0LTIzIDlMNDU3IDM0OHEtOSAxMC05IDIzdDkgMjJsNDYgNDZxOSA5IDIyIDl0MjMtOWwyMjAtMjIwIDQ0NCA0NDRxMTAgOSAyMyA5dDIyLTlsNDYtNDZxOS05IDktMjJ0LTktMjN6TTEyOC0xMjhoMTQwOFY4OTZIMTI4Vi0xMjh6bTM4NCAxMjE2djI4OHEwIDE0LTkgMjN0LTIzIDloLTY0cS0xNCAwLTIzLTl0LTktMjN2LTI4OHEwLTE0IDktMjN0MjMtOWg2NHExNCAwIDIzIDl0OSAyM3ptNzY4IDB2Mjg4cTAgMTQtOSAyM3QtMjMgOWgtNjRxLTE0IDAtMjMtOXQtOS0yM3YtMjg4cTAtMTQgOS0yM3QyMy05aDY0cTE0IDAgMjMgOXQ5IDIzem0zODQgNjRWLTEyOHEwLTUyLTM4LTkwdC05MC0zOEgxMjhxLTUyIDAtOTAgMzhUMC0xMjh2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDEyOHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMtNDd0NDctMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzLTQ3dDQ3LTExM3YtOTZoMTI4cTUyIDAgOTAtMzh0MzgtOTB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81OTAiIHVuaWNvZGU9Iu+JtSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00NDggMTUzNnEyNiAwIDQ1LTE5dDE5LTQ1VjU4MWw1MzYgNDI5cTE3IDE0IDQwIDE0IDI2IDAgNDUtMTl0MTktNDVWNTgxbDUzNiA0MjlxMTcgMTQgNDAgMTQgMjYgMCA0NS0xOXQxOS00NVYtMTkycTAtMjYtMTktNDV0LTQ1LTE5SDY0cS0yNiAwLTQ1IDE5VDAtMTkydjE2NjRxMCAyNiAxOSA0NXQ0NSAxOWgzODR6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81OTEiIHVuaWNvZGU9Iu+JtiIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01MTIgNDQ4cTY2IDAgMTI4IDE1di02NTVxMC0yNi0xOS00NXQtNDUtMTlINDQ4cS0yNiAwLTQ1IDE5dC0xOSA0NXY2NTVxNjItMTUgMTI4LTE1em0wIDEwODhxMjEyIDAgMzYyLTE1MHQxNTAtMzYyLTE1MC0zNjItMzYyLTE1MC0zNjIgMTUwVDAgMTAyNHQxNTAgMzYyIDM2MiAxNTB6bTAtMjI0cTE0IDAgMjMgOXQ5IDIzLTkgMjMtMjMgOXEtMTQ2IDAtMjQ5LTEwM3QtMTAzLTI0OXEwLTE0IDktMjN0MjMtOSAyMyA5IDkgMjNxMCAxMTkgODQuNSAyMDMuNVQ1MTIgMTMxMnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU5MiIgdW5pY29kZT0i74m3IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3NDUgMTIzOXExMC0xMCAxMC0yM3QtMTAtMjNsLTE0MS0xNDFxLTI4LTI4LTY4LTI4SDE5MnEtMjYgMC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloNTc2djY0cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUtMTl0MTktNDV2LTY0aDUxMnE0MCAwIDY4LTI4ek03NjggMzIwaDI1NnYtNTEycTAtMjYtMTktNDV0LTQ1LTE5SDgzMnEtMjYgMC00NSAxOXQtMTkgNDV2NTEyem04MzIgNDQ4cTI2IDAgNDUtMTl0MTktNDVWNDQ4cTAtMjYtMTktNDV0LTQ1LTE5SDI1NnEtNDAgMC02OCAyOEw0NyA1NTNxLTEwIDEwLTEwIDIzdDEwIDIzbDE0MSAxNDFxMjggMjggNjggMjhoNTEydjE5MmgyNTZWNzY4aDU3NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU5MyIgdW5pY29kZT0i74m4IiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTIwMjAgMTUyNXEyOC0yMCAyOC01M1Y2NHEwLTIwLTExLTM2dC0yOS0yM2wtNjQwLTI1NnEtMjQtMTEtNDggMEw3MDQtNSA4OC0yNTFxLTEwLTUtMjQtNS0xOSAwLTM2IDExLTI4IDIwLTI4IDUzdjE0MDhxMCAyMCAxMSAzNnQyOSAyM2w2NDAgMjU2cTI0IDExIDQ4IDBsNjE2LTI0NiA2MTYgMjQ2cTMyIDEzIDYwLTZ6TTczNiAxMzkwVjEyMGw1NzYtMjMwdjEyNzB6bS02MDgtMjE3Vi05N2w1NDQgMjE3djEyNzB6TTE5MjAgMTA3djEyNzBsLTU0NC0yMTdWLTExMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU5NCIgdW5pY29kZT0i74m5IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAxNTM2cTEzIDAgMjIuNS05LjV0OS41LTIyLjVWMzJxMC0yMC0xNy0yOEw0Ny0yNTJxLTctNC0xNS00LTEzIDAtMjIuNSA5LjVUMC0yMjR2MTQ3MnEwIDIwIDE3IDI4bDQ4MCAyNTZxNyA0IDE1IDR6bTEyNDggMHExMyAwIDIyLjUtOS41dDkuNS0yMi41VjMycTAtMjAtMTctMjhsLTQ4MC0yNTZxLTctNC0xNS00LTEzIDAtMjIuNSA5LjVUMTI0OC0yMjR2MTQ3MnEwIDIwIDE3IDI4bDQ4MCAyNTZxNyA0IDE1IDR6bS0xMTIwIDBxOCAwIDE0LTNsNTEyLTI1NnExOC0xMCAxOC0yOVYtMjI0cTAtMTMtOS41LTIyLjVUMTE1Mi0yNTZxLTggMC0xNCAzTDYyNiAzcS0xOCAxMC0xOCAyOXYxNDcycTAgMTMgOS41IDIyLjV0MjIuNSA5LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il81OTUiIHVuaWNvZGU9Iu+JuiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NDAgNjQwcTAgNTMtMzcuNSA5MC41VDUxMiA3Njh0LTkwLjUtMzcuNVQzODQgNjQwdDM3LjUtOTAuNVQ1MTIgNTEydDkwLjUgMzcuNVQ2NDAgNjQwem0zODQgMHEwIDUzLTM3LjUgOTAuNVQ4OTYgNzY4dC05MC41LTM3LjVUNzY4IDY0MHQzNy41LTkwLjVUODk2IDUxMnQ5MC41IDM3LjVUMTAyNCA2NDB6bTM4NCAwcTAgNTMtMzcuNSA5MC41VDEyODAgNzY4dC05MC41LTM3LjVUMTE1MiA2NDB0MzcuNS05MC41VDEyODAgNTEydDkwLjUgMzcuNVQxNDA4IDY0MHptMzg0IDBxMC0xNzQtMTIwLTMyMS41dC0zMjYtMjMzVDg5NiAwUTc4NiAwIDY4NSAxOCA1MTItMTU1IDI1MC0yMTFxLTUyLTEwLTg2LTEzLTEyLTEtMjIgNnQtMTMgMThxLTQgMTUgMjAgMzcgNSA1IDIzLjUgMjEuNVQxOTgtMTE4dDIzLjUgMjUuNSAyNCAzMS41VDI2Ni0yNHQyMCA0OCAxNC41IDU3LjVUMzEzIDE1NFExNjcgMjQ0IDgzLjUgMzcwLjVUMCA2NDBxMCAxNzQgMTIwIDMyMS41dDMyNiAyMzMgNDUwIDg1LjUgNDUwLTg1LjUgMzI2LTIzM1QxNzkyIDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzU5NiIgdW5pY29kZT0i74m7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCA2NDBxMC01My0zNy41LTkwLjVUNTEyIDUxMnQtOTAuNSAzNy41VDM4NCA2NDB0MzcuNSA5MC41VDUxMiA3Njh0OTAuNS0zNy41VDY0MCA2NDB6bTM4NCAwcTAtNTMtMzcuNS05MC41VDg5NiA1MTJ0LTkwLjUgMzcuNVQ3NjggNjQwdDM3LjUgOTAuNVQ4OTYgNzY4dDkwLjUtMzcuNVQxMDI0IDY0MHptMzg0IDBxMC01My0zNy41LTkwLjVUMTI4MCA1MTJ0LTkwLjUgMzcuNVQxMTUyIDY0MHQzNy41IDkwLjVUMTI4MCA3Njh0OTAuNS0zNy41VDE0MDggNjQwem0tNTEyIDUxMnEtMjA0IDAtMzgxLjUtNjkuNVQyMzIuNSA4OTUgMTI4IDY0MHEwLTExMiA3MS41LTIxMy41VDQwMSAyNTFsODctNTAtMjctOTZxLTI0LTkxLTcwLTE3MlE1NDMtNCA2NjYgMTA0bDQzIDM4IDU3LTZxNjktOCAxMzAtOCAyMDQgMCAzODEuNSA2OS41dDI4MiAxODcuNVQxNjY0IDY0MHQtMTA0LjUgMjU1LTI4MiAxODcuNVQ4OTYgMTE1MnptODk2LTUxMnEwLTE3NC0xMjAtMzIxLjV0LTMyNi0yMzNUODk2IDBxLTcwIDAtMTQ1IDgtMTk4LTE3NS00NjAtMjQyLTQ5LTE0LTExNC0yMmgtNXEtMTUgMC0yNyAxMC41VDEyOS0yMTh2MXEtMyA0LS41IDEydDIgMTAgNC41IDkuNWw2IDkgNyA4LjUgOCA5cTcgOCAzMSAzNC41dDM0LjUgMzggMzEgMzkuNVQyODUgNHQyNyA1OSAyNiA3NlExODEgMjI4IDkwLjUgMzU5VDAgNjQwcTAgMTMwIDcxIDI0OC41VDI2MiAxMDkzdDI4NiAxMzYuNSAzNDggNTAuNSAzNDgtNTAuNSAyODYtMTM2LjUgMTkxLTIwNC41IDcxLTI0OC41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTk3IiB1bmljb2RlPSLvibwiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNTEyIDM0NWw1MTIgMjk1VjQ5TDUxMi0yNDd2NTkyek0wIDY0MFY0OWw1MTIgMjk2em01MTIgODg3VjkzNkwwIDY0MHY1OTF6bTAtNTkxbDUxMiAyOTVWNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNTk4IiB1bmljb2RlPSLvib0iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTcwOSAxMDE4cS0xMC0yMzYtMzMyLTY1MVExMDQ0LTY0IDgxNS02NHEtMTQyIDAtMjQwIDI2My00NCAxNjAtMTMyIDQ4Mi03MiAyNjItMTU3IDI2Mi0xOCAwLTEyNy03NmwtNzcgOThxMjQgMjEgMTA4IDk2LjVUMzIwIDExNzdxMTU2IDEzOCAyNDEgMTQ2IDk1IDkgMTUzLTU1LjV0ODEtMjAzLjVxNDQtMjg3IDY2LTM3MyA1NS0yNDkgMTIwLTI0OSA1MSAwIDE1NCAxNjEgMTAxIDE2MSAxMDkgMjQ2IDEzIDEzOS0xMDkgMTM5LTU3IDAtMTIxLTI2IDEyMCAzOTMgNDU5IDM4MiAyNTEtOCAyMzYtMzI2eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJmMjdlIiB1bmljb2RlPSLvib4iIGQ9Ik0wIDE0MDhoMTUzNlYtMTI4SDB2MTUzNnpNMTA4NSAyOTNMODY0IDkyNGwyMjEgMjk3SDQ1MWwyMjEtMjk3LTIyMS02MzFMNzY4LTExeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMjgwIiB1bmljb2RlPSLvioAiIGQ9Ik0wIDE0MDhoMTUzNlYtMTI4SDB2MTUzNnptOTA4LTMyMGwtMTItMzMgNzUtODMtMzEtMTE0IDI1LTI1IDEwNyA1NyAxMDctNTcgMjUgMjUtMzEgMTE0IDc1IDgzLTEyIDMzaC05NWwtNTMgOTZoLTMybC01My05NmgtOTV6TTY0MSA5MjVxMzIgMCA0NC41LTE2dDExLjUtNjNsMTc0IDIxcTAgNTUtMTcuNSA5Mi41dC01MC41IDU2LTY5IDI1LjUtODUgN3EtMTMzIDAtMTk5LTU3LjVUMzg0IDgwOHYtNzJoLTk2VjYwOGg3NnEyMCAwIDIwLThWMjE4cTAtMTQtNS0yMHQtMTgtN2wtNzMtN1Y5Nmg0NDh2ODZsLTE0OSAxNHEtNiAxLTguNSAxLjVUNTc1IDIwMHQtLjUgNCAxIDcgLjUgMTB2Mzg3aDE5MWwzOCAxMjhINTc0cS02IDAtMiA2dDQgOXY4MHEwIDI3IDEuNSA0MC41dDcuNSAyOCAxOS41IDIwVDY0MSA5MjV6bTYwNy04Mjl2ODZsLTU0IDlxLTcgMS05LjUgMi41dC0yLjUgMyAxIDcuNSAxIDEydjUyMEg5MDlsLTIzLTEwMSA4My0yMnEyMy03IDIzLTI3VjIxNnEwLTE0LTYtMTguNXQtMjAtNi41bC03MC05Vjk2aDM1MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjI4MSIgdW5pY29kZT0i74qBIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjkwcTAtNTgtMjkuNS0xMDUuNVQxNjgzIDUxMnExMi00NiAxMi05NiAwLTE1NS0xMDYuNS0yODdUMTI5OC03OS41IDg5OC0xNTYgNDk4LjUtNzkuNSAyMDguNSAxMjkgMTAyIDQxNnEwIDQ3IDExIDk0LTUxIDI1LTgyIDczLjVUMCA2OTBxMCA4MiA1OCAxNDAuNVQxOTkgODg5cTg1IDAgMTQ1LTYzIDIxOCAxNTIgNTE1IDE2MmwxMTYgNTIxcTMgMTMgMTUgMjF0MjYgNWwzNjktODFxMTggMzcgNTQgNTkuNXQ3OSAyMi41cTYyIDAgMTA2LTQzLjV0NDQtMTA1LjUtNDQtMTA2LTEwNi00NC0xMDUuNSA0My41VDEzNjkgMTM4NmwtMzM0IDc0LTEwNC00NzJxMzAwLTkgNTE5LTE2MCA1OCA2MSAxNDMgNjEgODMgMCAxNDEtNTguNXQ1OC0xNDAuNXpNNDE4IDQ5MXEwLTYyIDQzLjUtMTA2VDU2NyAzNDF0MTA2IDQ0IDQ0IDEwNi00NCAxMDUuNVQ1NjcgNjQwcS02MSAwLTEwNS00NHQtNDQtMTA1em04MTAtMzU1cTExIDExIDExIDI2dC0xMSAyNnEtMTAgMTAtMjUgMTB0LTI2LTEwcS00MS00Mi0xMjEtNjJ0LTE2MC0yMC0xNjAgMjAtMTIxIDYycS0xMSAxMC0yNiAxMHQtMjUtMTBxLTExLTEwLTExLTI1LjV0MTEtMjYuNXE0My00MyAxMTguNS02OFQ4MDUgMzguNXQ5MS00LjUgOTEgNC41VDExMDkuNSA2OHQxMTguNSA2OHptLTMgMjA1cTYyIDAgMTA1LjUgNDR0NDMuNSAxMDZxMCA2MS00NCAxMDV0LTEwNSA0NHEtNjIgMC0xMDYtNDMuNVQxMDc1IDQ5MXQ0NC0xMDYgMTA2LTQ0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjAyIiB1bmljb2RlPSLvioIiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjkgNzQxaDFxMTYgMTI2IDU4LjUgMjQxLjV0MTE1IDIxNyAxNjcuNSAxNzZUNjM0LjUgMTQ5M3QyNzYuNSA0M3EyMzEgMCA0MTQtMTA1LjV0Mjk0LTMwMy41cTEwNC0xODcgMTA0LTQ0MlY0OTdINTk4cTEtMTExIDUzLjUtMTkyLjVUNzg4IDE4MnQxODkuNS01NyAyMTMtMyAyMDggNDYuNVQxNTcyIDI1M3YtMzc3cS05Mi01NS0yMjkuNS05MlQxMDMwLTI1NHQtMzE2IDUzUTUyNS0xMjggNDAyLjUgNDhUMjc4IDQyMHEtMyAyNDIgMTExIDQxMnQzMjUgMjY4cS00OC02MC03OC0xMjUuNVQ1OTAgODE1aDYzNXE4IDc3LTggMTQwdC00NyAxMDEuNS03MC41IDY2LjUtODAuNSA0MS03NSAyMC41LTU2IDguNWwtMjIgMXEtMTM1LTUtMjU5LjUtNDQuNVQzODMgMTA0NSAyMDcgOTA0LjUgNjkgNzQxeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjAzIiB1bmljb2RlPSLvioMiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMCAzMnY2MDhoMjMwNFYzMnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDE2MHEtNjYgMC0xMTMgNDdUMCAzMnptNjQwIDIyNFYxMjhoMzg0djEyOEg2NDB6bS0zODQgMFYxMjhoMjU2djEyOEgyNTZ6bTE4ODggMTE1MnE2NiAwIDExMy00N3Q0Ny0xMTN2LTIyNEgwdjIyNHEwIDY2IDQ3IDExM3QxMTMgNDdoMTk4NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYwNCIgdW5pY29kZT0i74qEIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE1ODQgMjQ2bC0yMTggMTExcS03NC0xMjAtMTk2LjUtMTg5VDkwNiA5OXEtMTQ3IDAtMjcxIDcyVDQzOSAzNjd0LTcyIDI3MHEwIDExMCA0Mi41IDIwOS41dDExNSAxNzIgMTcyIDExNVQ5MDYgMTE3NnExMzEgMCAyNDcuNS02MC41VDEzNDYgOTQ3bDIxNSAxMjVxLTExMCAxNjktMjg2LjUgMjY1VDg5NiAxNDMzcS0xNjEgMC0zMDgtNjN0LTI1My0xNjktMTY5LTI1My02My0zMDggNjMtMzA4VDMzNSA3OSA1ODgtOTB0MzA4LTYzcTIxMyAwIDM5Ny41IDEwN1QxNTg0IDI0NnptLTU1NCAzOTdsNjkzLTM1MnEtMTE2LTI1My0zMzQuNS00MDBUODk2LTI1NnEtMTgyIDAtMzQ4IDcxVDI2MiA2IDcxIDI5MiAwIDY0MHQ3MSAzNDggMTkxIDI4NiAyODYgMTkxIDM0OCA3MXEyNjAgMCA0NzAuNS0xMzMuNVQxNzAyIDEwMzZ6bTUxMy0zaC0zOVY0ODBoLTk2djM1MmgxMzZxMzIgMCA1NC41LTIwdDI4LjUtNDggMS01Ni0yNy41LTQ4LTU3LjUtMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyODUiIHVuaWNvZGU9Iu+KhSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNDI3IDgyN2wtNjE0IDM4NiA5MiAxNTFoODU1ek00MDUgNTYyTDIyMSA2Nzh2ODU4bDExODMtNzQzem0xMDE5IDEzNWwxNDctOTV2LTg1OEwxMDM5IDc5em0tMzcgMjFMODg3LTg0SDMybDM1NiA1NzF6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyODYiIHVuaWNvZGU9Iu+KhiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik02NDAgNTI4djIyNHEwIDE2LTE2IDE2aC05NnEtMTYgMC0xNi0xNlY1MjhxMC0xNiAxNi0xNmg5NnExNiAwIDE2IDE2em01MTIgMHYyMjRxMCAxNi0xNiAxNmgtOTZxLTE2IDAtMTYtMTZWNTI4cTAtMTYgMTYtMTZoOTZxMTYgMCAxNiAxNnptNTEyLTMydi03NTJoLTY0MFY2NHEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZ2LTMyMEgwdjc1MnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZWMzg0aDEyOHY2MjRxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2Vjg5NmgxMjh2MTEycTAgMTYgMTYgMTZoOTZxMTYgMCAxNi0xNlY4OTZoMTI4djExMnEwIDYgMi41IDkuNXQ4LjUgNSA5LjUgMiAxMS41IDAgOS0uNXYzOTFxLTMyIDE1LTMyIDUwIDAgMjMgMTYuNSAzOXQzOC41IDE2IDM4LjUtMTYgMTYuNS0zOXEwLTM1LTMyLTUwdi0xN3E0NSAxMCA4MyAxMCAyMSAwIDU5LjUtNy41dDU0LjUtNy41cTE3IDAgNDcgNy41dDM3IDcuNXExNiAwIDE2LTE2di0yMTBxMC0xNS0zNS0yMS41dC02Mi02LjVxLTE4IDAtNTQuNSA3LjVUOTQ1IDExNjlxLTQwIDAtOTAtMTJ2LTEzM3ExIDAgOSAuNXQxMS41IDAgOS41LTIgOC41LTUgMi41LTkuNVY4OTZoMTI4djExMnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYtMTZWODk2aDEyOHYxMTJxMCAxNiAxNiAxNmg5NnExNiAwIDE2LTE2VjM4NGgxMjh2MTEycTAgMTYgMTYgMTZoOTZxMTYgMCAxNi0xNnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYwNyIgdW5pY29kZT0i74qHIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTIyODggNzMxcTE2LTggMTYtMjd0LTE2LTI3bC0zMjAtMTkycS04LTUtMTYtNS05IDAtMTYgNC0xNiAxMC0xNiAyOHYxMjhoLTg1OHEzNy01OCA4My0xNjUgMTYtMzcgMjQuNS01NXQyNC00OSAyNy00NyAyNy0zNCAzMS41LTI2IDMzLThoOTZ2OTZxMCAxNCA5IDIzdDIzIDloMzIwcTE0IDAgMjMtOXQ5LTIzVjMycTAtMTQtOS0yM3QtMjMtOWgtMzIwcS0xNCAwLTIzIDl0LTkgMjN2OTZoLTk2cS0zMiAwLTYxIDEwdC01MSAyMy41LTQ1IDQwLjUtMzcgNDYtMzMuNSA1Ny0yOC41IDU3LjUtMjggNjAuNXEtMjMgNTMtMzcgODEuNXQtMzYgNjUtNDQuNSA1My41LTQ2LjUgMTdINTA0cS0yMi04NC05MS0xMzh0LTE1Ny01NHEtMTA2IDAtMTgxIDc1VDAgNzA0dDc1IDE4MSAxODEgNzVxODggMCAxNTctNTR0OTEtMTM4aDEwNHEyNCAwIDQ2LjUgMTd0NDQuNSA1My41IDM2IDY1IDM3IDgxLjVxMTkgNDEgMjggNjAuNXQyOC41IDU3LjUgMzMuNSA1NyAzNyA0NiA0NSA0MC41IDUxIDIzLjUgNjEgMTBoMTA3cTIxIDU3IDcwIDkyLjV0MTExIDM1LjVxODAgMCAxMzYtNTZ0NTYtMTM2LTU2LTEzNi0xMzYtNTZxLTYyIDAtMTExIDM1LjV0LTcwIDkyLjVoLTEwN3EtMTcgMC0zMy04dC0zMS41LTI2LTI3LTM0LTI3LTQ3LTI0LTQ5LTI0LjUtNTVxLTQ2LTEwNy04My0xNjVoMTExNHYxMjhxMCAxOCAxNiAyOHQzMi0xeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjA4IiB1bmljb2RlPSLviogiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTE1MCA3NzRxMC01Ni0zOS41LTk1dC05NS41LTM5SDc2MnYyNjloMjUzcTU2IDAgOTUuNS0zOS41VDExNTAgNzc0em0xNzkgMHEwIDEzMC05MS41IDIyMnQtMjIyLjUgOTJINTgyVjE5MmgxODB2MjY5aDI1M3ExMzAgMCAyMjIgOTEuNXQ5MiAyMjEuNXptNDYzLTEzNHEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjA5IiB1bmljb2RlPSLviokiIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMTY0NSA0MzhxMCA1OS0zNCAxMDYuNXQtODcgNjguNXEtNy00NS0yMy05Mi03LTI0LTI3LjUtMzh0LTQ0LjUtMTRxLTEyIDAtMjQgMy0zMSAxMC00NSAzOC41dC00IDU4LjVxMjMgNzEgMjMgMTQzIDAgMTIzLTYxIDIyNy41VDExNTIgMTEwNXQtMjI4IDYxcS0xMzQgMC0yNDctNzNUNTEwIDg5OXExMDgtMjggMTg4LTEwNiAyMi0yMyAyMi01NXQtMjItNTQtNTQtMjItNTUgMjJxLTc1IDc1LTE4MCA3NS0xMDYgMC0xODEtNzQuNVQxNTMgNTA0dDc1LTE4MC41VDQwOSAyNDloMTA0NnE3OSAwIDEzNC41IDU1LjVUMTY0NSA0Mzh6bTE1MyAwcTAtMTQyLTEwMC41LTI0MlQxNDU1IDk2SDQwOXEtMTY5IDAtMjg5IDExOS41VDAgNTA0cTAgMTUzIDEwMCAyNjd0MjQ5IDEzNnE2MiAxODQgMjIxIDI5OHQzNTQgMTE0cTIzNSAwIDQwOC41LTE1OC41VDE1MjkgNzcxcTExNi0yNSAxOTIuNS0xMTguNVQxNzk4IDQzOHptMjUwIDBxMC0xNzUtOTctMzE5LTIzLTMzLTY0LTMzLTI0IDAtNDMgMTMtMjYgMTctMzIgNDguNXQxMiA1Ny41cTcxIDEwNCA3MSAyMzN0LTcxIDIzM3EtMTggMjYtMTIgNTd0MzIgNDkgNTcuNSAxMS41VDE5NTEgNzU2cTk3LTE0MiA5Ny0zMTh6bTI1NiAwcTAtMjQ0LTEzNC00NDMtMjMtMzQtNjQtMzQtMjMgMC00MiAxMy0yNiAxOC0zMi41IDQ5dDExLjUgNTdxMTA4IDE2NCAxMDggMzU4IDAgMTk1LTEwOCAzNTctMTggMjYtMTEuNSA1Ny41VDIwNjQgOTAxcTI2IDE4IDU3IDEydDQ5LTMzcTEzNC0xOTggMTM0LTQ0MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYxMCIgdW5pY29kZT0i74qKIiBkPSJNMTUwMC0xM3EwLTg5LTYzLTE1Mi41VDEyODQtMjI5dC0xNTMuNSA2My41VDEwNjctMTNxMCA5MCA2My41IDE1My41VDEyODQgMjA0dDE1My02My41VDE1MDAtMTN6bS0yMzMgMjgxcS0xMTUtMTUtMTkyLjUtMTAyLjVUOTk3LTQwcTAtNzQgMzMtMTM4LTE0Ni03OC0zNzktNzgtMTA5IDAtMjAxIDIxdC0xNTMuNSA1NC41VDE4Ni0xMDR0LTc2IDg1LTQ0LjUgODNUNDIgMTMwLjUgMzYgMTcwcTAgMTkgNC41IDQyLjV0MTguNSA1NiAzNi41IDU4IDY0IDQzLjUgOTQuNSAxOCA5NC0xNy41IDYzLTQxIDM1LjUtNTMgMTcuNS00OSA0LTMzLjVxMC0zNC0yMy04MSAyOC0yNyA4Mi00MnQ5My0xN2w0MC0xcTExNSAwIDE5MCA1MXQ3NSAxMzNxMCAyNi05IDQ4LjVUODg0LjUgMzMwIDgzNSAzNzF0LTc0IDQ0LTkzLjUgNDcuNVQ1NDggNTE5cS0yOCAxMy00MyAyMC0xMTYgNTUtMTg3IDEwMFQxOTUuNSA3NDF0LTcyIDEyNS41VDEwMyAxMDI5cTAgNzggMjAuNSAxNTB0NjYgMTM3LjUgMTEyLjUgMTE0IDE2Ni41IDc3VDY5MCAxNTM2cTEyMCAwIDIyMC0yNnQxNjQuNS02NyAxMDkuNS05NCA2NC0xMDUuNSAxOS0xMDMuNXEwLTQ2LTE1LTgyLjV0LTM2LjUtNTgtNDguNS0zNi00OS0xOS41LTM5LTVoLTQwbC0zOSA1LTQ0IDE0LTQxIDI4LTM3IDQ2LTI0IDcwLjUtMTAgOTcuNXEtMTUgMTYtNTkgMjUuNXQtODEgMTAuNWwtMzcgMXEtNjggMC0xMTcuNS0zMXQtNzAuNS03MC0yMS03NnEwLTI0IDUtNDN0MjQtNDYgNTMtNTEgOTctNTMuNVQ3ODcgODA4cTc2LTI1IDEzOC41LTUzLjV0MTA5LTU1LjUgODMtNTkgNjAuNS01OS41IDQxLTYyLjUgMjYuNS02MiAxNC41LTYzLjUgNi02MiAxLTYyLjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MTEiIHVuaWNvZGU9Iu+KiyIgZD0iTTcwNCAzNTJ2NTc2cTAgMTQtOSAyM3QtMjMgOUg0MTZxLTE0IDAtMjMtOXQtOS0yM1YzNTJxMC0xNCA5LTIzdDIzLTloMjU2cTE0IDAgMjMgOXQ5IDIzem00NDggMHY1NzZxMCAxNC05IDIzdC0yMyA5SDg2NHEtMTQgMC0yMy05dC05LTIzVjM1MnEwLTE0IDktMjN0MjMtOWgyNTZxMTQgMCAyMyA5dDkgMjN6bTM4NCAyODhxMC0yMDktMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHQzODUuNS0xMDMgMjc5LjUtMjc5LjVUMTUzNiA2NDB6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MTIiIHVuaWNvZGU9Iu+KjCIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41LTEwM3QyNzkuNS0yNzkuNVQxNTM2IDY0MHQtMTAzLTM4NS41VDExNTMuNS0yNSA3NjgtMTI4IDM4Mi41LTI1IDEwMyAyNTQuNSAwIDY0MHQxMDMgMzg1LjVUMzgyLjUgMTMwNSA3NjggMTQwOHptMC0xMzEycTE0OCAwIDI3MyA3M3QxOTggMTk4IDczIDI3My03MyAyNzMtMTk4IDE5OC0yNzMgNzMtMjczLTczLTE5OC0xOTgtNzMtMjczIDczLTI3MyAxOTgtMTk4IDI3My03M3ptOTYgMjI0cS0xNCAwLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM1YzNTJxMC0xNC05LTIzdC0yMy05SDg2NHptLTM4NCAwcS0xNCAwLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM1YzNTJxMC0xNC05LTIzdC0yMy05SDQ4MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYxMyIgdW5pY29kZT0i74qNIiBkPSJNMTA4OCAzNTJ2NTc2cTAgMTQtOSAyM3QtMjMgOUg0ODBxLTE0IDAtMjMtOXQtOS0yM1YzNTJxMC0xNCA5LTIzdDIzLTloNTc2cTE0IDAgMjMgOXQ5IDIzem00NDggMjg4cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjE0IiB1bmljb2RlPSLvio4iIGQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNS0xMDN0Mjc5LjUtMjc5LjVUMTUzNiA2NDB0LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh6bTAtMTMxMnExNDggMCAyNzMgNzN0MTk4IDE5OCA3MyAyNzMtNzMgMjczLTE5OCAxOTgtMjczIDczLTI3My03My0xOTgtMTk4LTczLTI3MyA3My0yNzMgMTk4LTE5OCAyNzMtNzN6TTQ4MCAzMjBxLTE0IDAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMtOXQ5LTIzVjM1MnEwLTE0LTktMjN0LTIzLTlINDgweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjE1IiB1bmljb2RlPSLvipAiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc1NyAxMjhsMzUtMzEzcTMtMjgtMTYtNTAtMTktMjEtNDgtMjFINjRxLTI5IDAtNDggMjEtMTkgMjItMTYgNTBsMzUgMzEzaDE3MjJ6bS05MyA4MzlsODYtNzc1SDQybDg2IDc3NXEzIDI0IDIxIDQwLjV0NDMgMTYuNWgyNTZWODk2cTAtNTMgMzcuNS05MC41VDU3NiA3Njh0OTAuNSAzNy41VDcwNCA4OTZ2MTI4aDM4NFY4OTZxMC01MyAzNy41LTkwLjVUMTIxNiA3Njh0OTAuNSAzNy41VDEzNDQgODk2djEyOGgyNTZxMjUgMCA0My0xNi41dDIxLTQwLjV6bS0zODQgMTg1Vjg5NnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NXYyNTZxMCAxMDYtNzUgMTgxdC0xODEgNzUtMTgxLTc1LTc1LTE4MVY4OTZxMC0yNi0xOS00NXQtNDUtMTktNDUgMTktMTkgNDV2MjU2cTAgMTU5IDExMi41IDI3MS41VDg5NiAxNTM2dDI3MS41LTExMi41VDEyODAgMTE1MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYxNiIgdW5pY29kZT0i74qRIiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTE5MjAgNzY4cTUzIDAgOTAuNS0zNy41VDIwNDggNjQwdC0zNy41LTkwLjVUMTkyMCA1MTJoLTE1bC0xMTUtNjYycS04LTQ2LTQ0LTc2dC04Mi0zMEgzODRxLTQ2IDAtODIgMzB0LTQ0IDc2TDE0MyA1MTJoLTE1cS01MyAwLTkwLjUgMzcuNVQwIDY0MHQzNy41IDkwLjVUMTI4IDc2OGgxNzkyek00ODUtMzJxMjYgMiA0My41IDIyLjVUNTQ0IDM3bC0zMiA0MTZxLTIgMjYtMjIuNSA0My41VDQ0MyA1MTJ0LTQzLjUtMjIuNVQzODQgNDQzbDMyLTQxNnEyLTI1IDIwLjUtNDJUNDgwLTMyaDV6bTQxMSA2NHY0MTZxMCAyNi0xOSA0NXQtNDUgMTktNDUtMTktMTktNDVWMzJxMC0yNiAxOS00NXQ0NS0xOSA0NSAxOSAxOSA0NXptMzg0IDB2NDE2cTAgMjYtMTkgNDV0LTQ1IDE5LTQ1LTE5LTE5LTQ1VjMycTAtMjYgMTktNDV0NDUtMTkgNDUgMTkgMTkgNDV6bTM1Mi01bDMyIDQxNnEyIDI2LTE1LjUgNDYuNVQxNjA1IDUxMnQtNDYuNS0xNS41VDE1MzYgNDUzbC0zMi00MTZxLTItMjYgMTUuNS00Ni41VDE1NjMtMzJoNXEyNSAwIDQzLjUgMTd0MjAuNSA0MnpNNDc2IDEyNDRsLTkzLTQxMkgyNTFsMTAxIDQ0MXExOSA4OCA4OSAxNDMuNXQxNjAgNTUuNWgxNjdxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NS0xOXQxOS00NWgxNjdxOTAgMCAxNjAtNTUuNXQ4OS0xNDMuNWwxMDEtNDQxaC0xMzJsLTkzIDQxMnEtMTEgNDQtNDUuNSA3MnQtNzkuNSAyOGgtMTY3cTAtMjYtMTktNDV0LTQ1LTE5SDgzMnEtMjYgMC00NSAxOXQtMTkgNDVINjAxcS00NSAwLTc5LjUtMjh0LTQ1LjUtNzJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MTciIHVuaWNvZGU9Iu+KkiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05OTEgNTEybDY0IDI1Nkg4MDFsLTY0LTI1NmgyNTR6bTc2OCA1MDRsLTU2LTIyNHEtNy0yNC0zMS0yNGgtMzI3bC02NC0yNTZoMzExcTE1IDAgMjUtMTIgMTAtMTQgNi0yOGwtNTYtMjI0cS01LTI0LTMxLTI0aC0zMjdsLTgxLTMyOHEtNy0yNC0zMS0yNEg4NzNxLTE2IDAtMjYgMTItOSAxMi02IDI4bDc4IDMxMkg2NjVsLTgxLTMyOHEtNy0yNC0zMS0yNEgzMjhxLTE1IDAtMjUgMTItOSAxMi02IDI4bDc4IDMxMkg2NHEtMTUgMC0yNSAxMi05IDEyLTYgMjhsNTYgMjI0cTcgMjQgMzEgMjRoMzI3bDY0IDI1NkgyMDBxLTE1IDAtMjUgMTItMTAgMTQtNiAyOGw1NiAyMjRxNSAyNCAzMSAyNGgzMjdsODEgMzI4cTcgMjQgMzIgMjRoMjI0cTE1IDAgMjUtMTIgOS0xMiA2LTI4bC03OC0zMTJoMjU0bDgxIDMyOHE3IDI0IDMyIDI0aDIyNHExNSAwIDI1LTEyIDktMTIgNi0yOGwtNzgtMzEyaDMxMXExNSAwIDI1LTEyIDktMTIgNi0yOHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYxOCIgdW5pY29kZT0i74qTIiBkPSJNODQxIDQ4M2wxNDgtMTQ4LTE0OS0xNDl6bS0xIDYxMWwxNDktMTQ5LTE0OC0xNDh6TTcxMC0xMzBsNDY0IDQ2NC0zMDYgMzA2IDMwNiAzMDYtNDY0IDQ2NFY3OTlsLTI1NSAyNTUtOTMtOTMgMzIwLTMyMS0zMjAtMzIxIDkzLTkzIDI1NSAyNTV2LTYxMXptNzE5IDc3MHEwLTIwOS0zMi0zNjUuNXQtODcuNS0yNTdUMTE2OS0xNDV0LTE4MS41LTg2LjVUNzY4LTI1NnQtMjE5LjUgMjQuNVQzNjctMTQ1IDIyNi41IDE3LjV0LTg3LjUgMjU3VDEwNyA2NDB0MzIgMzY1LjUgODcuNSAyNTdUMzY3IDE0MjV0MTgxLjUgODYuNVQ3NjggMTUzNnQyMTkuNS0yNC41VDExNjkgMTQyNXQxNDAuNS0xNjIuNSA4Ny41LTI1NyAzMi0zNjUuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYxOSIgdW5pY29kZT0i74qUIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTU5NiAxMTNsMTczIDE3Mi0xNzMgMTcyVjExM3ptMCA3MTBsMTczIDE3Mi0xNzMgMTcyVjgyM3ptMzItMTgzbDM1Ni0zNTYtNTM5LTU0MHY3MTFMMTQ4IDE1OSA0MCAyNjdsMzcyIDM3My0zNzIgMzczIDEwOCAxMDggMjk3LTI5NnY3MTFsNTM5LTU0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYyMCIgdW5pY29kZT0i74qVIiBkPSJNMTI4MCAyNTZxMCA1Mi0zOCA5MHQtOTAgMzgtOTAtMzgtMzgtOTAgMzgtOTAgOTAtMzggOTAgMzggMzggOTB6bS03NjggNzY4cTAgNTItMzggOTB0LTkwIDM4LTkwLTM4LTM4LTkwIDM4LTkwIDkwLTM4IDkwIDM4IDM4IDkwem0xMDI0LTc2OHEwLTE1OS0xMTIuNS0yNzEuNVQxMTUyLTEyOCA4ODAuNS0xNS41IDc2OCAyNTZ0MTEyLjUgMjcxLjVUMTE1MiA2NDB0MjcxLjUtMTEyLjVUMTUzNiAyNTZ6bS05NiAxMDg4cTAtMjAtMTMtMzhMMzcxLTEwMnEtMTktMjYtNTEtMjZIMTYwcS0yNiAwLTQ1IDE5VDk2LTY0cTAgMjAgMTMgMzhsMTA1NiAxNDA4cTE5IDI2IDUxIDI2aDE2MHEyNiAwIDQ1LTE5dDE5LTQ1em0tNjcyLTMyMHEwLTE1OS0xMTIuNS0yNzEuNVQzODQgNjQwIDExMi41IDc1Mi41IDAgMTAyNHQxMTIuNSAyNzEuNVQzODQgMTQwOHQyNzEuNS0xMTIuNVQ3NjggMTAyNHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYyMSIgdW5pY29kZT0i74qWIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEwNCA4MzBMODk2LTE4NSAyOCA0NDVxLTE4IDEzLTI1IDM0LjVUMyA1MjJsMTAxIDMwOHptNDYyIDBoNjYwTDg5Ni0xODV6bS0xOTggNjEybDE5OC02MTJIMTA0bDE5OCA2MTJxOCAyMyAzMyAyM3QzMy0yM3ptMTMyMC02MTJsMTAxLTMwOHE3LTIxIDAtNDIuNXQtMjUtMzQuNUw4OTYtMTg1bDc5MiAxMDE1em0wIDBoLTQ2MmwxOTggNjEycTggMjMgMzMgMjN0MzMtMjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MjIiIHVuaWNvZGU9Iu+KlyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgNzA0aDE2MHYyMjRIMzg0VjcwNHptODM3LTMzMnY5MnEtMTA0LTM2LTI0My0zOC0xMzUtMS0yNTkuNSA0Ni41VDQ5OCA1OTVsMS05NnE4OC04MCAyMTItMTI4LjVUOTgzIDMyM3ExMjkgMCAyMzggNDl6TTY0MCA3MDRoNjQwdjIyNEg2NDBWNzA0em0xMTUyIDMycTAtMTg3LTk5LTM1MiA4OS0xMDIgODktMjI5IDAtMTU3LTEyOS41LTI2OFQxMzM5LTIyNHEtMTIyIDAtMjI1IDUyLjVUOTUzLTMxcS0xOS0xLTU3LTF0LTU3IDFxLTU4LTg4LTE2MS0xNDAuNVQ0NTMtMjI0cS0xODQgMC0zMTMuNSAxMTFUMTAgMTU1cTAgMTI3IDg5IDIyOVEwIDU0OSAwIDczNnEwIDIwOSAxMjAgMzg1LjVUNDQ2LjUgMTQwMSA4OTYgMTUwNHQ0NDkuNS0xMDMgMzI2LjUtMjc5LjVUMTc5MiA3MzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MjMiIHVuaWNvZGU9Iu+KmCIgZD0iTTUxNSA2MjVWNDk3SDI2M3YxMjhoMjUyem0wIDI1NVY3NTNIMjYzdjEyN2gyNTJ6bTc1OC01MTFWMjQxSDkzMnYxMjhoMzQxem0wIDI1NlY0OTdINjAxdjEyOGg2NzJ6bTAgMjU1Vjc1M0g2MDF2MTI3aDY3MnptMTM1LTg2MHYxMjQwcTAgOC02IDE0dC0xNCA2aC0zMmwtMzc4LTI1Ni0yMTAgMTcxLTIxMC0xNzEtMzc4IDI1NmgtMzJxLTggMC0xNC02dC02LTE0VjIwcTAtOCA2LTE0dDE0LTZoMTI0MHE4IDAgMTQgNnQ2IDE0ek01NTMgMTEzMGwxODUgMTUwSDMzMnptNDMwIDBsMjIxIDE1MEg3OTh6bTU1MyAxMzBWMjBxMC02Mi00My0xMDV0LTEwNS00M0gxNDhxLTYyIDAtMTA1IDQzVDAgMjB2MTI0MHEwIDYyIDQzIDEwNXQxMDUgNDNoMTI0MHE2MiAwIDEwNS00M3Q0My0xMDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9Il82MjQiIHVuaWNvZGU9Iu+KmSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik04OTYgNzIwUTc5MiA5MTYgNzM2IDk5OHEtMTM5IDIwMi0zNDcgMzE4LTM0IDE5LTcwIDM2LTg5IDQwLTk0IDMydDM0LTM4bDM5LTMxcTYyLTQzIDExMi41LTkzLjVUNTA1IDExMDV0NzAuNS0xMTNUNjQ2IDg2MXE5LTE3IDEzLTI1IDQ0LTg0IDg0LTE1M3Q5OC0xNTQgMTE1LjUtMTUwIDEzMS0xMjMuNVQxMjM2IDE2NXExNTMtNjYgMTU0LTYwIDEgMy00OSAzNy01MyAzNi04MSA1Ny03NyA1OC0xNzkgMjExVDg5NiA3MjB6TTU0OSAxNzdxLTc2IDYwLTEzMi41IDEyNXQtOTggMTQzLjUtNzEgMTU0LjVUMTg5IDc4NnQtNTIgMjA5LTYwLjUgMjUyVDAgMTUzNnEyNzMgMCA0OTcuNS0zNnQzNzktOTIgMjcxLTE0NC41VDEzMzMgMTA5MXQxMTAtMTk4LjUgNTYtMTk5LjUgMTIuNS0xOTguNS05LjUtMTczLTIwLTE0My41LTEzLTEwN2wzMjMtMzI3aC0xMDRMMTQwNyAyOXEtMjItMi05MS41LTE0VDExOTQtNHQtMTM4LTZUODk1LjUgNyA3MjggNjYgNTQ5IDE3N3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYyNSIgdW5pY29kZT0i74qaIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEzNzQgODc5cS02IDI2LTI4LjUgMzkuNVQxMjk3IDkyNnEtMjYxLTYyLTQwMS02MnQtNDAxIDYycS0yNiA2LTQ4LjUtNy41VDQxOCA4Nzl0Ny41LTQ4LjVUNDY1IDgwMnExOTQtNDYgMzAzLTU4LTItMTU4LTE1LjUtMjY5VDcyNiAzMTkuNSA2ODUgMjA0bC05LTIxcS0xMC0yNSAxLTQ5dDM2LTM0cTktNCAyMy00IDQ0IDAgNjAgNDFsOCAyMHE1NCAxMzkgNzEgMjU5aDQycTE3LTEyMCA3MS0yNTlsOC0yMHExNi00MSA2MC00MSAxNCAwIDIzIDQgMjUgMTAgMzYgMzR0MSA0OWwtOSAyMXEtMjggNzEtNDEgMTE1LjVUMTAzOS41IDQ3NSAxMDI0IDc0NHExMDkgMTIgMzAzIDU4IDI2IDYgMzkuNSAyOC41dDcuNSA0OC41em0tMzUwIDE0NXEwIDUzLTM3LjUgOTAuNVQ4OTYgMTE1MnQtOTAuNS0zNy41VDc2OCAxMDI0dDM3LjUtOTAuNVQ4OTYgODk2dDkwLjUgMzcuNSAzNy41IDkwLjV6bTU3Ni0zODRxMC0xNDMtNTUuNS0yNzMuNXQtMTUwLTIyNS0yMjUtMTUwVDg5Ni02NCA2MjIuNS04LjV0LTIyNSAxNTAtMTUwIDIyNVQxOTIgNjQwdDU1LjUgMjczLjUgMTUwIDIyNSAyMjUgMTUwVDg5NiAxMzQ0dDI3My41LTU1LjUgMjI1LTE1MCAxNTAtMjI1VDE2MDAgNjQwem0tNzA0IDc2OHEtMTU2IDAtMjk4LTYxdC0yNDUtMTY0LTE2NC0yNDUtNjEtMjk4IDYxLTI5OFQzNTMgOTcgNTk4LTY3dDI5OC02MSAyOTggNjEgMjQ1IDE2NCAxNjQgMjQ1IDYxIDI5OC02MSAyOTgtMTY0IDI0NS0yNDUgMTY0LTI5OCA2MXptODk2LTc2OHEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjI2IiB1bmljb2RlPSLvipsiIGQ9Ik0xNDM4IDcyM3EzNC0zNSAyOS04MmwtNDQtNTUxcS00LTQyLTM0LjUtNzBUMTMxNy04cS02IDAtOSAxLTQ0IDMtNzIuNSAzNi41VDEyMTAgMTA3bDM1IDQyOS0xNDMtOHE1NS0xMTMgNTUtMjQwIDAtMjE2LTE0OC0zNzJMODcyIDUzcTkxIDEwMSA5MSAyMzUgMCAxNDUtMTAyLjUgMjQ4VDYxMyA2MzlxLTEzNCAwLTIzNi05MkwyNDAgNjg1cTEyMCAxMTQgMjg0IDE0MWwyNjQgMzAwLTE0OSA4Ny0xODEtMTYxcS0zMy0zMC03Ny0yNy41dC03MyAzNS41LTI2LjUgNzcgMzQuNSA3M2wyMzkgMjEzcTI2IDIzIDYwIDI2LjV0NjQtMTQuNWw0ODgtMjgzcTM2LTIxIDQ4LTY4IDE3LTY3LTI2LTExN0w5ODQgNzM1bDM3MSAyMHE0OSAzIDgzLTMyem0tMTk4IDQ1N3EtNzQgMC0xMjYgNTJ0LTUyIDEyNiA1MiAxMjYgMTI2IDUyIDEyNi41LTUyIDUyLjUtMTI2LTUyLjUtMTI2LTEyNi41LTUyek02MTMtNjJxMTA2IDAgMTk2IDYxbDEzOS0xMzlRODAyLTI1NiA2MTMtMjU2cS0xNDggMC0yNzMuNSA3M1QxNDEgMTUgNjggMjg4cTAgMTg4IDExNiAzMzZsMTM5LTEzOXEtNjAtODgtNjAtMTk3IDAtMTQ1IDEwMi41LTI0Ny41VDYxMy02MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYyNyIgdW5pY29kZT0i74qcIiBkPSJNODgwIDMzNlYxNzZxMC0xNC05LTIzdC0yMy05SDY4OHEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWgxNjBxMTQgMCAyMy05dDktMjN6bTI1NiA0OTZxMC01MC0xNS05MHQtNDUuNS02OS01Mi00NC01OS41LTM2cS0zMi0xOC00Ni41LTI4dC0yNi0yNC0xMS41LTI5di0zMnEwLTE0LTktMjN0LTIzLTlINjg4cS0xNCAwLTIzIDl0LTkgMjN2NjhxMCAzNSAxMC41IDY0LjV0MjQgNDcuNSAzOSAzNS41IDQxIDI1LjUgNDQuNSAyMXE1MyAyNSA3NSA0M3QyMiA0OXEwIDQyLTQzLjUgNzEuNVQ3NzMgOTM1cS01NiAwLTk1LTI3LTI5LTIwLTgwLTgzLTktMTItMjUtMTItMTEgMC0xOSA2bC0xMDggODJxLTEwIDctMTIgMjB0NSAyM3ExMjIgMTkyIDM0OSAxOTIgMTI5IDAgMjM4LjUtODkuNVQxMTM2IDgzMnptLTM2OCA0NDhxLTEzMCAwLTI0OC41LTUxdC0yMDQtMTM2LjUtMTM2LjUtMjA0VDEyOCA2NDB0NTEtMjQ4LjUgMTM2LjUtMjA0VDUxOS41IDUxIDc2OCAwdDI0OC41IDUxIDIwNCAxMzYuNSAxMzYuNSAyMDQgNTEgMjQ4LjUtNTEgMjQ4LjUtMTM2LjUgMjA0LTIwNCAxMzYuNS0yNDguNSA1MXptNzY4LTY0MHEwLTIwOS0xMDMtMzg1LjVUMTE1My41LTI1IDc2OC0xMjggMzgyLjUtMjUgMTAzIDI1NC41IDAgNjQwdDEwMyAzODUuNVQzODIuNSAxMzA1IDc2OCAxNDA4dDM4NS41LTEwMyAyNzkuNS0yNzkuNVQxNTM2IDY0MHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0iXzYyOCIgdW5pY29kZT0i74qdIiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM2NiAxMjI1cS02NCAwLTExMCA0NS41VDIxMCAxMzgxcTAgNjQgNDYgMTA5LjV0MTEwIDQ1LjUgMTA5LjUtNDUuNVQ1MjEgMTM4MXEwLTY1LTQ1LjUtMTEwLjVUMzY2IDEyMjV6bTU1MS02NDJxMC01MC0zMC02Ny41dC02My41LTYuNS00Ny41IDM0TDQwOSA5ODFxLTcgMTItMTQgMTUuNXQtMTEgMS41bC0zLTNxLTctOCA0LTIxbDEyMi0xMzkgMS0zNTRMMzQ3IDI0cS02Ny0xOTItOTItMjM0LTE1LTI2LTI4LTMyLTUwLTI2LTEwMy0xLTI5IDEzLTQxLjUgNDNUNzMtMTQzcTIgMTcgMTk3IDYxOGw1IDQxNi04NS0xNjQgMzUtMjIycTQtMjQtMS00MnQtMTQtMjcuNS0xOS0xNi0xNy03LjVsLTctMnEtMTktMy0zNC41IDN0LTI0IDE2LTE0IDIyLTcuNSAxOS41LTIgOS41TDM5IDc3OWwyMTEgMzgxcTIzIDM0IDExMyAzNCA3NSAwIDEwNy00MGw0MjQtNTIxcTctNSAxNC0xN2wzLTMtMS0xcTctMTMgNy0yOXpNNTE0IDQzM3E0My0xMTMgODguNS0yMjVUNjcyIDQwbDI0LTU1cTM2LTkzIDQyLTEyNSAxMS03MC0zNi05Ny0zNS0yMi02Ni0xNnQtNTEgMjItMjkgMzVoLTFxLTYgMTYtOCAyNUw0MjMgMTgwem04MjQtNTkycTMxLTQ5IDMxLTU3IDAtNS0zLTctOS01LTE0LjUuNXQtMTUuNSAyNi0xNiAzMC41UTEyMDYgNiA4OTcgNDk1cTMtMSA3IDF0NyA0bDMgMnExMSA5IDExIDE3eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJfNjI5IiB1bmljb2RlPSLvip4iIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNNTA0IDU0MmgxNzFsLTEgMjY1em0xMDI2IDk5cTAgODctNTAuNSAxNDBUMTMzMyA4MzRoLTU0VjQ0Nmg1MnE5MSAwIDE0NSA1N3Q1NCAxMzh6bS01NzQgMzc3bDEtNzU2cTAtMTQtOS41LTI0VDkyNCAyMjhINzA4cS0xNCAwLTIzLjUgMTB0LTkuNSAyNHY2MkgzODRsLTU1LTgxcS0xMC0xNS0yOC0xNUgzNHEtMjEgMC0zMC41IDE4VDcgMjgxbDU1NiA3NTdxOSAxNCAyNyAxNGgzMzJxMTQgMCAyNC0xMHQxMC0yNHptODI3LTM3N3EwLTE5My0xMjUuNS0zMDNUMTMzMyAyMjhoLTI3MHEtMTQgMC0yNCAxMHQtMTAgMjR2NzU2cTAgMTQgMTAgMjR0MjQgMTBoMjY4cTIwMCAwIDMyNi0xMDl0MTI2LTMwMnptMTU2LTFxMC0xMS0uNS0yOXQtOC03MS41LTIxLjUtMTAyLTQ0LjUtMTA4VDE3OTEgMjI3aC01MXEzOCA0NSA2Ni41IDEwNC41dDQxLjUgMTEyIDIxIDk4IDkgNzIuNWwxIDI3cTAgOC0uNSAyMi41dC03LjUgNjAtMjAgOTEuNS00MSAxMTEuNS02NiAxMjQuNWg0M3E0MS00NyA3Mi0xMDd0NDUuNS0xMTEuNSAyMy05NlQxOTM4IDY2NnptMTg0IDBxMC0xMS0uNS0yOXQtOC03MS41LTIxLjUtMTAyLTQ1LTEwOC03NC0xMDIuNWgtNTFxMzggNDUgNjYuNSAxMDQuNXQ0MS41IDExMiAyMSA5OCA5IDcyLjVsMSAyN3EwIDgtLjUgMjIuNXQtNy41IDYwLTE5LjUgOTEuNS00MC41IDExMS41LTY2IDEyNC41aDQzcTQxLTQ3IDcyLTEwN3Q0NS41LTExMS41IDIzLTk2VDIxMjIgNjY2em0xODEgMHEwLTExLS41LTI5dC04LTcxLjUtMjEuNS0xMDItNDQuNS0xMDhUMjE1NiAyMjdoLTUxcTM4IDQ1IDY2IDEwNC41dDQxIDExMiAyMSA5OCA5IDcyLjVsMSAyN3EwIDgtLjUgMjIuNXQtNy41IDYwLTE5LjUgOTEuNS00MC41IDExMS41LTY2IDEyNC41aDQzcTQxLTQ3IDcyLTEwN3Q0NS41LTExMS41IDIzLTk2IDkuNS03MC41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkEwIiB1bmljb2RlPSLviqAiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNjE3LTE1M3EwIDExLTEzIDU4VDU3MyAxMnQtMjAgNjlxLTEgNC01IDI2LjV0LTguNSAzNlQ1MjYgMTY1cS0xNSAxNC01MSAxNC0yMyAwLTcwLTUuNXQtNzEtNS41cS0zNCAwLTQ3IDExLTYgNS0xMSAxNS41dC03LjUgMjAtNi41IDI0LTUgMTguNXEtMzcgMTI4LTM3IDI1NXQzNyAyNTVxMSA0IDUgMTguNXQ2LjUgMjQgNy41IDIwIDExIDE1LjVxMTMgMTEgNDcgMTEgMjQgMCA3MS01LjV0NzAtNS41cTM2IDAgNTEgMTQgOSA4IDEzLjUgMjEuNXQ4LjUgMzYgNSAyNi41cTIgOSAyMCA2OXQzMSAxMDcgMTMgNThxMCAyMi00My41IDUyLjVUNDk4IDEyNzJxLTIwIDgtNDUgOC0zNCAwLTk4LTE4LTU3LTE3LTk2LjUtNDAuNXQtNzEtNjYtNDYtNzBUOTYgOTkxcS02LTEyLTktMTktNDktMTA3LTY4LTIxNlQwIDUxMnQxOS0yNDRUODcgNTJxNTYtMTIyIDgzLTE2MSA2My05MSAxNzktMTI3bDYtMnE2NC0xOCA5OC0xOCAyNSAwIDQ1IDggMzIgMTIgNzUuNSA0Mi41VDYxNy0xNTN6bTE1OSA5MTNxLTI2IDAtNDUgMTl0LTE5IDQ1LjUgMTkgNDUuNXEzNyAzNyAzNyA5MCAwIDUyLTM3IDkxLTE5IDE5LTE5IDQ1dDE5IDQ1IDQ1IDE5IDQ1LTE5cTc1LTc1IDc1LTE4MXQtNzUtMTgxcS0yMS0xOS00NS0xOXptMTgxLTE4MXEtMjcgMC00NSAxOS0xOSAxOS0xOSA0NXQxOSA0NXExMTIgMTE0IDExMiAyNzJ0LTExMiAyNzJxLTE5IDE5LTE5IDQ1dDE5IDQ1IDQ1IDE5IDQ1LTE5cTE1MC0xNTAgMTUwLTM2MnQtMTUwLTM2MnEtMTgtMTktNDUtMTl6bTE4MS0xODFxLTI3IDAtNDUgMTktMTkgMTktMTkgNDV0MTkgNDVxOTAgOTEgMTM4LjUgMjA4dDQ4LjUgMjQ1LTQ4LjUgMjQ1LTEzOC41IDIwOHEtMTkgMTktMTkgNDV0MTkgNDUgNDUgMTkgNDUtMTlxMTA5LTEwOSAxNjctMjQ5dDU4LTI5NC01OC0yOTQtMTY3LTI0OXEtMTgtMTktNDUtMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTEiIHVuaWNvZGU9Iu+KoSIgaG9yaXotYWR2LXg9IjIxNzYiIGQ9Ik0xOTIgMzUycS02NiAwLTExMy00N1QzMiAxOTIgNzkgNzl0MTEzLTQ3IDExMyA0NyA0NyAxMTMtNDcgMTEzLTExMyA0N3ptNTEyIDBxLTY2IDAtMTEzLTQ3dC00Ny0xMTMgNDctMTEzIDExMy00NyAxMTMgNDcgNDcgMTEzLTQ3IDExMy0xMTMgNDd6bTAgNTEycS02NiAwLTExMy00N3QtNDctMTEzIDQ3LTExMyAxMTMtNDcgMTEzIDQ3IDQ3IDExMy00NyAxMTMtMTEzIDQ3em03NjgtNTEycS02NiAwLTExMy00N3QtNDctMTEzIDQ3LTExMyAxMTMtNDcgMTEzIDQ3IDQ3IDExMy00NyAxMTMtMTEzIDQ3em01MTIgMHEtNjYgMC0xMTMtNDd0LTQ3LTExMyA0Ny0xMTMgMTEzLTQ3IDExMyA0NyA0NyAxMTMtNDcgMTEzLTExMyA0N3ptLTUxMiA1MTJxLTY2IDAtMTEzLTQ3dC00Ny0xMTMgNDctMTEzIDExMy00NyAxMTMgNDcgNDcgMTEzLTQ3IDExMy0xMTMgNDd6bTUxMiAwcS02NiAwLTExMy00N3QtNDctMTEzIDQ3LTExMyAxMTMtNDcgMTEzIDQ3IDQ3IDExMy00NyAxMTMtMTEzIDQ3em0wIDUxMnEtNjYgMC0xMTMtNDd0LTQ3LTExMyA0Ny0xMTMgMTEzLTQ3IDExMyA0NyA0NyAxMTMtNDcgMTEzLTExMyA0N3pNMzg0IDE5MnEwLTgwLTU2LTEzNlQxOTIgMCA1NiA1NiAwIDE5MnQ1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bTUxMiAwcTAtODAtNTYtMTM2VDcwNCAwIDU2OCA1NnQtNTYgMTM2IDU2IDEzNiAxMzYgNTYgMTM2LTU2IDU2LTEzNnpNMzg0IDcwNHEwLTgwLTU2LTEzNnQtMTM2LTU2LTEzNiA1NlQwIDcwNHQ1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bTUxMiAwcTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bS01MTIgNTEycTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6TTE2NjQgMTkycTAtODAtNTYtMTM2VDE0NzIgMHQtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6TTg5NiAxMjE2cTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6TTIxNzYgMTkycTAtODAtNTYtMTM2VDE5ODQgMHQtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bS01MTIgNTEycTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bTUxMiAwcTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bS01MTIgNTEycTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6bTUxMiAwcTAtODAtNTYtMTM2dC0xMzYtNTYtMTM2IDU2LTU2IDEzNiA1NiAxMzYgMTM2IDU2IDEzNi01NiA1Ni0xMzZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTIiIHVuaWNvZGU9Iu+KoiIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMjgtMTkycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1ek0zMjAgMHEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNDUgMzY1bDI1Ni0yNTYtOTAtOTAtMjU2IDI1NnptMzM5IDE5cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em03MDcgMzIwcTAtNTktMTEuNS0xMDguNVQxMzYyIDUwMnQtNDQtNjcuNS01My02NC41cS0zMS0zNS00NS41LTU0dC0zMy41LTUwLTI2LjUtNjQtNy41LTc0cTAtMTU5LTExMi41LTI3MS41VDc2OC0yNTZxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5cTEwNiAwIDE4MSA3NXQ3NSAxODFxMCA1NyAxMS41IDEwNS41dDM3IDkxVDExMTYgMzkxdDUyIDYzcTQwIDQ2IDU5LjUgNzJ0MzcuNSA3NC41IDE4IDEwMy41cTAgMTg1LTEzMS41IDMxNi41VDgzNSAxMTUydC0zMTYuNS0xMzEuNVQzODcgNzA0cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1cTAgMTE3IDQ1LjUgMjIzLjV0MTIzIDE4NCAxODQgMTIzVDgzNSAxMjgwdDIyMy41LTQ1LjUgMTg0LTEyMyAxMjMtMTg0VDE0MTEgNzA0ek04OTYgNTc2cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em0yODggMTI4cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1cTAgOTMtNjUuNSAxNTguNVQ4MzIgOTI4cS05MiAwLTE1OC02NS41VDYwOCA3MDRxMC0yNi0xOS00NXQtNDUtMTktNDUgMTktMTkgNDVxMCAxNDYgMTAzIDI0OXQyNDkgMTAzIDI0OS0xMDMgMTAzLTI0OXptMzk0IDI4OXExMC0yNS0xLTQ5dC0zNi0zNHEtOS00LTIzLTQtMTkgMC0zNS41IDExdC0yMy41IDMwcS02OCAxNzgtMjI0IDI5NS0yMSAxNi0yNSA0MnQxMiA0N3ExNyAyMSA0MyAyNXQ0Ny0xMnExODMtMTM3IDI2Ni0zNTF6bTIxMCA4MXE5LTI1LTEuNS00OXQtMzUuNS0zNHEtMTEtNC0yMy00LTQ0IDAtNjAgNDEtOTIgMjM4LTI5NyAzOTMtMjIgMTYtMjUuNSA0MnQxMi41IDQ3cTE2IDIyIDQyIDI1LjV0NDctMTIuNXEyMzUtMTc1IDM0MS00NDl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTMiIHVuaWNvZGU9Iu+KoyIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0xMDMyIDU3NnEtNTkgMi04NCA1NS0xNyAzNC00OCA1My41VDgzMiA3MDRxLTUzIDAtOTAuNS0zNy41VDcwNCA1NzZxMC01NiAzNi04OWwxMC04cTM0LTMxIDgyLTMxIDM3IDAgNjggMTkuNXQ0OCA1My41cTI1IDUzIDg0IDU1em01NjggMTI4cTAgNTYtMzYgODlsLTEwIDhxLTM0IDMxLTgyIDMxLTM3IDAtNjgtMTkuNXQtNDgtNTMuNXEtMjUtNTMtODQtNTUgNTktMiA4NC01NSAxNy0zNCA0OC01My41dDY4LTE5LjVxNTMgMCA5MC41IDM3LjVUMTYwMCA3MDR6bS00MjYgMjIxcS0xNy0zNS01NS00OHQtNzMgNHEtNjIgMzEtMTM0IDMxLTUxIDAtOTktMTcgMyAwIDkuNS41dDkuNS41cTkyIDAgMTcwLjUtNTBUMTEyMSA3MTNxMTctMzYgMy41LTczLjVUMTA3NSA1ODVxLTE4LTktMzktOSAyMSAwIDM5LTkgMzYtMTcgNDkuNS01NC41VDExMjEgNDM5cS00MC04My0xMTguNS0xMzNUODMyIDI1NmgtNnEtMTYgMi00NCA0bC0yOTAgMjctMjM5LTEyMHEtMTQtNy0yOS03LTQwIDAtNTcgMzVMNyA1MTVxLTExIDIzLTQgNDcuNVQzMiA2MDBsMjA5IDExOSAxNDggMjY3cTE3IDE1NSA5MS41IDI5MS41VDY3NiAxNTE0cTMxIDI1IDcwLjUgMjEuNVQ4MTEgMTUwMXQyMS41LTcwLTM0LjUtNjVxLTcwLTU5LTExNy0xMjggMTIzIDg0IDI2NyAxMDEgNDAgNSA3MS41LTE5dDM1LjUtNjRxNS00MC0xOS03MS41dC02NC0zNS41cS04NC0xMC0xNTktNTUgNDYgMTAgOTkgMTAgMTE1IDAgMjE4LTUwIDM2LTE4IDQ5LTU1LjV0LTUtNzMuNXptOTYzIDE2MGwxNjAtMzIwcTExLTIzIDQtNDcuNXQtMjktMzcuNWwtMjA5LTExOS0xNDgtMjY3cS0xNy0xNTUtOTEuNS0yOTEuNVQxNjI4LTIzNHEtMjYtMjItNjEtMjItNDUgMC03NCAzNS0yNSAzMS0yMS41IDcwdDM0LjUgNjVxNzAgNTkgMTE3IDEyOC0xMjMtODQtMjY3LTEwMS00LTEtMTItMS0zNiAwLTYzLjUgMjRUMTI0OSAyNHEtNSA0MCAxOSA3MS41dDY0IDM1LjVxODQgMTAgMTU5IDU1LTQ2LTEwLTk5LTEwLTExNSAwLTIxOCA1MC0zNiAxOC00OSA1NS41dDUgNzMuNXExNyAzNSA1NSA0OHQ3My00cTYyLTMxIDEzNC0zMSA1MSAwIDk5IDE3LTMgMC05LjUtLjV0LTkuNS0uNXEtOTIgMC0xNzAuNSA1MFQxMTgzIDU2N3EtMTcgMzYtMy41IDczLjVUMTIyOSA2OTVxMTggOSAzOSA5LTIxIDAtMzkgOS0zNiAxNy00OS41IDU0LjV0My41IDczLjVxNDAgODMgMTE4LjUgMTMzdDE3MC41IDUwaDdxMTQtMiA0Mi00bDI5MS0yNyAyMzkgMTIwcTE0IDcgMjkgNyA0MCAwIDU3LTM1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE0IiB1bmljb2RlPSLviqQiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTA1NiA3MDRxMC0yNiAxOS00NXQ0NS0xOSA0NSAxOSAxOSA0NXEwIDE0Ni0xMDMgMjQ5dC0yNDkgMTAzLTI0OS0xMDMtMTAzLTI0OXEwLTI2IDE5LTQ1dDQ1LTE5IDQ1IDE5IDE5IDQ1cTAgOTMgNjYgMTU4LjVUODMyIDkyOHQxNTgtNjUuNSA2Ni0xNTguNXptLTIyMSA1NzZxLTExNyAwLTIyMy41LTQ1LjV0LTE4NC0xMjMtMTIzLTE4NFQyNTkgNzA0cTAtMjYgMTktNDV0NDUtMTkgNDUgMTkgMTkgNDVxMCAxODUgMTMxLjUgMzE2LjVUODM1IDExNTJ0MzE2LjUtMTMxLjVUMTI4MyA3MDRxMC01NS0xOC0xMDMuNXQtMzcuNS03NC41LTU5LjUtNzJxLTM0LTM5LTUyLTYzdC00My41LTY2LjUtMzctOTFUMTAyNCAxMjhxMC0xMDYtNzUtMTgxdC0xODEtNzVxLTI2IDAtNDUtMTl0LTE5LTQ1IDE5LTQ1IDQ1LTE5cTE1OSAwIDI3MS41IDExMi41VDExNTIgMTI4cTAgNDEgNy41IDc0dDI2LjUgNjQgMzMuNSA1MCA0NS41IDU0cTM1IDQxIDUzIDY0LjV0NDQgNjcuNSAzNy41IDkzLjVUMTQxMSA3MDRxMCAxMTctNDUuNSAyMjMuNXQtMTIzIDE4NC0xODQgMTIzVDgzNSAxMjgwek01OTEgNTYxbDIyNi0yMjYtNTc5LTU3OXEtMTItMTItMjktMTJ0LTI5IDEyTDEyLTc2UTAtNjQgMC00N3QxMiAyOXptMTAyMSA5NjNsMTY4LTE2OHExMi0xMiAxMi0yOXQtMTItMzBsLTIzMy0yMzMtMjYtMjUtNzEtNzFxLTY2IDE1My0xOTUgMjU4bDkxIDkxIDIwNyAyMDdxMTMgMTIgMzAgMTJ0MjktMTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTUiIHVuaWNvZGU9Iu+KpSIgZD0iTTg2NiAxMDIxcTAtMjctMTMtOTQtMTEtNTAtMzEuNS0xNTBUNzkxIDYyN3EtMi0xMS00LjUtMTIuNVQ3NzMgNjEycS0yMC0yLTMxLTItNTggMC04NCA0OS41VDYzMiA3NzNxMCA4OCAzNSAxNzR0MTAzIDEyNHEyOCAxNCA1MSAxNCAyOCAwIDM2LjUtMTYuNXQ4LjUtNDcuNXptNDg2LTQyNHEwIDE0LTM5IDc1LjV0LTUyIDY2LjVxLTIxIDgtMzQgOC05MSAwLTIyNi03N2wtMiAycTMgMjIgMjcuNSAxMzV0MjQuNSAxNzhxMCAyMzMtMjQyIDIzMy0yNCAwLTY4LTYtOTQtMTctMTY4LjUtODkuNVQ0NjEgOTU2dC0zNy0xODlxMC0xNDYgODAuNS0yMjVUNzMyIDQ2M3EyNSAwIDI1LTN0LTEtNXEtNC0zNC0yNi0xMTctMTQtNTItNTEuNS0xMDFUNTk2IDE4OHEtNDIgMC00MiA0NyAwIDI0IDEwLjUgNDcuNXQyNSAzOS41IDI5LjUgMjguNSAyNiAyMCAxMSA4LjVxMCAzLTcgMTAtMjQgMjItNTguNSAzNi41VDUyNSA0NDBxLTM1IDAtNjMuNS0zNHQtNDEtNzUtMTIuNS03NXEwLTg4IDUxLjUtMTQyVDU5OCA2MHE4MiAwIDE1NSA1M3QxMTcuNSAxMjZUOTM2IDM5MnE2IDIyIDE1LjUgNjYuNVQ5NjYgNTI1cTMgMTIgMTQgMTggMTE4IDYwIDIyNyA2MCA0OCAwIDEyNy0xOCAxLTEgNC0xIDUgMCA5LjUgNC41dDQuNSA4LjV6bTE4NCA1MjNWMTYwcTAtMTE5LTg0LjUtMjAzLjVUMTI0OC0xMjhIMjg4cS0xMTkgMC0yMDMuNSA4NC41VDAgMTYwdjk2MHEwIDExOSA4NC41IDIwMy41VDI4OCAxNDA4aDk2MHExMTkgMCAyMDMuNS04NC41VDE1MzYgMTEyMHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBNiIgdW5pY29kZT0i74qmIiBob3Jpei1hZHYteD0iMTUzNSIgZD0iTTc0NCAxMjMxcTAgMjQtMiAzOC41dC04LjUgMzAtMjEgMjMtMzcuNSA3LjVxLTM5IDAtNzgtMjMtMTA1LTU4LTE1OS0xOTAuNVQzODQgODQ3cTAtNDQgOC41LTg1LjVUNDE5IDY4MXQ1Mi41LTYyLjVUNTUzIDU5NXE0IDAgMTgtLjV0MjAgMCAxNiAzIDE1IDguNSA3IDE2cTE2IDc3IDQ4IDIzMS41dDQ4IDIzMS41cTE5IDkxIDE5IDE0NnptNzU0LTY1NnEwLTctNy41LTEzLjVUMTQ3NSA1NTVsLTYgMXEtMjIgMy02MiAxMXQtNzIgMTIuNS02MyA0LjVxLTE2NyAwLTM1MS05My0xNS04LTIxLTI3LTEwLTM2LTI0LjUtMTA1LjVUODUzIDI1OHEtMjMtOTEtNzAtMTc5LjVUNjcwLjUtODYgNTE2LTIwOXQtMTg1LTQ3cS0xMzUgMC0yMTQuNSA4My41VDM3IDQ3cTAgNTMgMTkuNSAxMTd0NjMgMTE2LjVUMjE3IDMzM3EzOCAwIDEyMC0zMy41dDgzLTYxLjVxMC0xLTE2LjUtMTIuNXQtMzkuNS0zMS00Ni00NC41LTM5LTYxLTE2LTc0cTAtMzMgMTYuNS01M1QzMjgtNThxNDUgMCA4NSAzMS41dDY2LjUgNzggNDggMTA1LjVUNTYwIDI2NHQxNiA5MHY5cTAgMi0zLjUgMy41VDU2NCAzNjhoLTEwbC0xMC0uNS02LS41cS0yMjcgMC0zNTIgMTIyLjVUNjEgODM4cTAgMTA4IDM0LjUgMjIxdDk2IDIxMCAxNTYgMTY3LjVUNTUyIDE1MjZxNTIgOSAxMDYgOSAzNzQgMCAzNzQtMzYwIDAtOTgtMzgtMjczdC00My0yMTFsMy0zcTEwMSA1NyAxODIuNSA4OHQxNjcuNSAzMXEyMiAwIDUzLTEzIDE5LTcgODAtMTAyLjV0NjEtMTE2LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTciIHVuaWNvZGU9Iu+KpyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik04MzEgODYzcTMyIDAgNTktMThsMjIyLTE0OHE2MS00MCAxMTAtOTdsMTQ2LTE3MHE0MC00NiAyOS0xMDZsLTcyLTQxM3EtNi0zMi0yOS41LTUzLjVUMTI0MC0xNjhsLTUyNy01Ni0zNTItMzJoLTlxLTM5IDAtNjcuNSAyOFQyNTYtMTYwcTAgMzcgMjcgNjR0NjUgMzJsMjYwIDMySDE2MHEtNDEgMC02OS41IDMwVDY0IDY5cTIgMzkgMzIgNjV0NjkgMjZsNDQyIDEtNTIxIDY0cS00MSA1LTY2IDM3VDEgMzM1cTYgMzUgMzQuNSA1Ny41VDEwMSA0MTVoMTBsNDgxLTYwLTM1MSA5NHEtMzggMTAtNjIgNDEuNVQxNjEgNTU5cTYgMzYgMzMgNTguNXQ2MiAyMi41cTYgMCAyMC0ybDQ0OC05NiAyMTctMzdxMSAwIDMtLjV0My0uNXEyMyAwIDMwLjUgMjNUOTY1IDU2M0w3NzkgNjg4cS0zNSAyMy00MiA2My41dDE4IDczLjVxMjcgMzggNzYgMzh6bS03MC0yMDJsMTg2LTEyNS0yMTggMzctNSAyLTM2IDM4LTIzOCAyNjJxLTEgMS0yLjUgMy41VDQ0NSA4ODJxLTI0IDMxLTE4LjUgNzB0MzcuNSA2NHEzMSAyMyA2OCAxNy41dDY0LTMzLjVsMTQyLTE0N3EtMi0xLTUtMy41dC00LTQuNXEtMzItNDUtMjMtOTl0NTUtODV6bTg4NyA0NTRsMTUtMjY2cTQtNzMtMTEtMTQ3bC00OC0yMTlxLTEyLTU5LTY3LTg3bC0xMDYtNTRxMiA2Mi0zOSAxMDlsLTE0NiAxNzBxLTUzIDYxLTExNyAxMDNMOTA3IDg3MnEtMzQgMjMtNzYgMjMtNTEgMC04OC0zN2wtMjM1IDMxMnEtMjUgMzMtMTggNzMuNXQ0MSA2My41cTMzIDIyIDcxLjUgMTR0NjIuNS00MGwyNjYtMzUyLTI2MiA0NTVxLTIxIDM1LTEwLjUgNzV0NDcuNSA1OXEzNSAxOCA3Mi41IDZ0NTcuNS00NmwyNDEtNDIwLTEzNiAzMzdxLTE1IDM1LTQuNSA3NHQ0NC41IDU2cTM3IDE5IDc2IDZ0NTYtNTFsMTkzLTQxNSAxMDEtMTk2cTgtMTUgMjMtMTcuNXQyNyA3LjUgMTEgMjZsLTEyIDIyNHEtMiA0MSAyNiA3MXQ2OSAzMXEzOSAwIDY3LTI4LjV0MzAtNjcuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBOCIgdW5pY29kZT0i74qoIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTMzNSAxODBxLTIgMC02IDItODYgNTctMTY4LjUgMTQ1VDIxIDUwN1EwIDUzNyAwIDU3NnEwIDkgMiAxOXQ0IDE4IDcgMTggOC41IDE2VDMyIDY2NHQxMCAxNSAxMiAxNS41VDY1IDcwOXExODQgMjUxIDQ1MiAzNjUtMTEwIDE5OC0xMTAgMjExIDAgMTkgMTcgMjkgMTE2IDY0IDEyOCA2NCAxOCAwIDI4LTE2bDEyNC0yMjlxOTIgMTkgMTkyIDE5IDI2NiAwIDQ5Ny41LTEzNy41VDE3NzIgNjQ1cTIwLTMxIDIwLTY5dC0yMC02OXEtOTEtMTQyLTIxOC41LTI1My41VDEyNzUgNzhxMTEwLTE5OCAxMTAtMjExIDAtMjAtMTctMjktMTE2LTY0LTEyNy02NC0xOSAwLTI5IDE2TDEwODggMTlsLTY0IDExOS00NDQgODIwIDcgN3EtNTgtMjQtOTktNDcgMy01IDEyNy0yMzR0MjQzLTQ0OVQ5NzcgMTJxMC03LTktOS0xMy0zLTcyLTMtNTcgMC02MCA3TDM4MCA4NDhxLTM5LTI4LTgyLTY4IDI0LTQzIDIxNC0zOTMuNVQ3MDIgMzJxMC0xMC0xMS0xMC0xNCAwLTgyLjUgMjJUNTM2IDcyTDQzMCAyNjkgMjA2IDY4MnEtNDQtNTMtNzgtMTA2IDItMyAxOC0yNXQyMy0zNGwxNzYtMzI3cTAtMTAtMTAtMTB6bTgzMCAxMDJsNDktOTFxMjczIDExMSA0NTAgMzg1LTE4MCAyNzctNDU5IDM4OSA2Ny02NCAxMDMtMTQ4LjV0MzYtMTc2LjVxMC0xMDYtNDctMjAwLjVUMTE2NSAyODJ6TTg0OCA4OTZxMC0yMCAxNC0zNHQzNC0xNHE4NiAwIDE0Ny02MXQ2MS0xNDdxMC0yMCAxNC0zNHQzNC0xNCAzNCAxNCAxNCAzNHEwIDEyNi04OSAyMTV0LTIxNSA4OXEtMjAgMC0zNC0xNHQtMTQtMzR6bTM2NiA2NWwtOSA0IDctN3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBOSIgdW5pY29kZT0i74qpIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwNTAgNDMwcTAtMjE1LTE0Ny0zNzQtMTQ4LTE2MS0zNzgtMTYxLTIzMiAwLTM3OCAxNjFRMCAyMTUgMCA0MzBxMCAxNDcgNjggMjcwLjVUMjU3IDg5N3QyNjggNzNxOTYgMCAxODItMzEtMzItNjItMzktMTI2LTY2IDI4LTE0MyAyOC0xNjcgMC0yODAuNS0xMjNUMTMxIDQyN3EwLTE3MCAxMTIuNS0yODguNVQ1MjUgMjB0MjgxIDExOC41VDkxOCA0MjdxMCA4OS0zMiAxNjYgNjYgMTMgMTIzIDQ5IDQxLTk4IDQxLTIxMnpNODQ2IDYxOXEwLTE5Mi03OS41LTM0NVQ1MjggMjFsLTE0LTFxLTI5IDAtNjIgNSA4MyAzMiAxNDYuNSAxMDIuNVQ2OTggMjgydDU4LjUgMTg5IDMwIDE5Mi41VDc5NCA4NDJxMCA2OS0zIDEwMyA1NS0xNjAgNTUtMzI2em0tNTUgMzI4di0ycS03MyAyMTQtMjA2IDQ0MCA4OC01OSAxNDIuNS0xODYuNVQ3OTEgOTQ3em0yNDQtMjAzcS04MyAwLTE2MCA3NSAyMTggMTIwIDI5MCAyNDcgMTkgMzcgMjEgNTYtNDItOTQtMTM5LjUtMTY2LjVUODQyIDg1OHEtMzUgNTQtMzUgMTEzIDAgMzcgMTcgNzl0NDMgNjhxNDYgNDQgMTU3IDc0IDU5IDE2IDEwNiA1OC41dDc0IDEwMC41cTc0LTEwNSA3NC0yNTMgMC0xMDktMjQtMTcwLTMyLTc3LTg4LjUtMTMwLjVUMTAzNSA3NDR6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUEiIHVuaWNvZGU9Iu+KqiIgZD0iTTEwNTAgNDk1cTAgNzgtMjggMTQ3LTQxLTI1LTg1LTM0IDIyLTUwIDIyLTExNCAwLTExNy03Ny0xOTguNVQ2ODkgMjE0dC0xOTMuNSA4MS41VDQxOCA0OTRxMCAxMTUgNzggMTk5LjVUNjg5IDc3OHE1MyAwIDk4LTE5IDQgNDMgMjcgODctNjAgMjEtMTI1IDIxLTE1NCAwLTI1Ny41LTEwOC41VDMyOCA0OTV0MTAzLjUtMjYxVDY4OSAxMjh0MjU3LjUgMTA2LjVUMTA1MCA0OTV6TTg3MiA4NTBxMi0yNCAyLTcxIDAtNjMtNS0xMjN0LTIwLjUtMTMyLjUtNDAuNS0xMzAtNjguNS0xMDZUNjM5IDIxN3EyMS0zIDQyLTNoMTBxMjE5IDEzOSAyMTkgNDExIDAgMTE2LTM4IDIyNXptMCAwcS00IDgwLTQ0IDE3MS41VDczMCAxMTUycTkyLTE1NiAxNDItMzAyem0zMzUgMTA1cTAgMTAyLTUxIDE3NC00MS04Ni0xMjQtMTA5LTY5LTE5LTEwOS01My41VDg4MyA4NjdxMC00MCAyNC03NyA3NCAxNyAxNDAuNSA2N3Q5NS41IDExNXEtNC01Mi03NC41LTExMS41VDkzMCA3NjNxNTItNTIgMTEwLTUyIDUxIDAgOTAgMzd0NjAgOTBxMTcgNDIgMTcgMTE3em0zMjkgMTY1VjE2MHEwLTExOS04NC41LTIwMy41VDEyNDgtMTI4SDI4OHEtMTE5IDAtMjAzLjUgODQuNVQwIDE2MHY5NjBxMCAxMTkgODQuNSAyMDMuNVQyODggMTQwOGg5NjBxMTE5IDAgMjAzLjUtODQuNVQxNTM2IDExMjB6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUIiIHVuaWNvZGU9Iu+KqyIgZD0iTTEyNzkgMzg4cTAgMjItMjIgMjctNjcgMTUtMTE4IDU5dC04MCAxMDhxLTcgMTktNyAyNSAwIDE1IDE5LjUgMjZ0NDMgMTcgNDMgMjAuNVQxMTc3IDcwN3EwIDE5LTE4LjUgMzEuNVQxMTIwIDc1MXEtMTIgMC0zMi04dC0zMS04cS00IDAtMTIgMiA1IDk1IDUgMTE0IDAgNzktMTcgMTE0LTM2IDc4LTEwMyAxMjEuNVQ3NzggMTEzMHEtMTk5IDAtMjc1LTE2NS0xNy0zNS0xNy0xMTQgMC0xOSA1LTExNC00LTItMTQtMi0xMiAwLTMyIDcuNXQtMzAgNy41cS0yMSAwLTM4LjUtMTJUMzU5IDcwNnEwLTIxIDE5LjUtMzUuNXQ0My0yMC41IDQzLTE3IDE5LjUtMjZxMC02LTctMjUtNjQtMTM4LTE5OC0xNjctMjItNS0yMi0yNyAwLTQ2IDEzNy02OCAyLTUgNi0yNnQxMS41LTMwLjVUNDM1IDI1NHExMiAwIDM3LjUgNC41VDUxMiAyNjNxMzUgMCA2Ny0xNXQ1NC0zMi41IDU3LjUtMzIuNSA3Ni41LTE1cTQzIDAgNzkgMTV0NTcuNSAzMi41VDk1NyAyNDh0NjcgMTVxMTQgMCAzOS41LTR0MzguNS00cTE2IDAgMjMgMTB0MTEgMzAgNiAyNXExMzcgMjIgMTM3IDY4em0yNTcgMjUycTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkFDIiB1bmljb2RlPSLviqwiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODQ4IDE0MDhxMTM0IDEgMjQwLjUtNjguNVQxMjUyIDExNDdxMjctNTggMjctMTc5IDAtNDctOS0xOTEgMTQtNyAyOC03IDE4IDAgNTEgMTMuNXQ1MSAxMy41cTI5IDAgNTYtMTh0MjctNDZxMC0zMi0zMS41LTU0dC02OS0zMS41LTY5LTI5VDEyODIgNTcxcTAtMTUgMTItNDMgMzctODIgMTAyLjUtMTUwVDE1NDEgMjc3cTI4LTEyIDgwLTIzIDI4LTYgMjgtMzUgMC03MC0yMTktMTAzLTctMTEtMTEtMzl0LTE0LTQ2LjUtMzMtMTguNXEtMjAgMC02MiA2LjV0LTY0IDYuNXEtMzcgMC02Mi01LTMyLTUtNjMtMjIuNXQtNTgtMzgtNTgtNDAuNS03Ni0zMy41LTk5LTEzLjVxLTUyIDAtOTYuNSAxMy41dC03NSAzMy41VDYwMS00MC41dC01OCAzOFQ0ODEgMjBxLTI2IDUtNjMgNS0yNCAwLTY1LjUtNy41VDI5NCAxMHEtMjUgMC0zNSAxOC41VDI0NSA3NnQtMTEgNDBRMTUgMTQ5IDE1IDIxOXEwIDI5IDI4IDM1IDUyIDExIDgwIDIzIDc4IDMyIDE0NC41IDEwMVQzNzAgNTI4cTEyIDI4IDEyIDQzIDAgMjgtMzEuNSA0Ny41VDI4MSA2NDh0LTY5LjUgMzEuNVQxODAgNzMycTAgMjcgMjYgNDUuNXQ1NSAxOC41cTE1IDAgNDgtMTN0NTMtMTNxMTggMCAzMiA3LTkgMTQyLTkgMTkwIDAgMTIyIDI3IDE4MCA2NCAxMzcgMTcyIDE5OHQyNjQgNjN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUQiIHVuaWNvZGU9Iu+KrSIgZD0iTTEyODAgMzg4cTAgMjItMjIgMjctNjcgMTQtMTE4IDU4dC04MCAxMDlxLTcgMTQtNyAyNSAwIDE1IDE5LjUgMjZ0NDIuNSAxNyA0Mi41IDIwLjVUMTE3NyA3MDdxMCAxOS0xOC41IDMxLjVUMTEyMCA3NTFxLTExIDAtMzEtOHQtMzItOHEtNCAwLTEyIDIgNSA2MyA1IDExNSAwIDc4LTE3IDExNC0zNiA3OC0xMDIuNSAxMjEuNVQ3NzggMTEzMXEtMTk4IDAtMjc1LTE2NS0xOC0zOC0xOC0xMTUgMC0zOCA2LTExNC0xMC0yLTE1LTItMTEgMC0zMS41IDh0LTMwLjUgOHEtMjAgMC0zNy41LTEyLjVUMzU5IDcwNnEwLTIxIDE5LjUtMzUuNVQ0MjEgNjUwdDQyLjUtMTcgMTkuNS0yNnEwLTExLTctMjUtNjQtMTM4LTE5OC0xNjctMjItNS0yMi0yNyAwLTQ3IDEzOC02OSAyLTUgNi0yNnQxMS0zMC41IDIzLTkuNXExMyAwIDM4LjUgNXQzOC41IDVxMzUgMCA2Ny41LTE1dDU0LjUtMzIuNSA1Ny41LTMyLjUgNzYuNS0xNXE0MyAwIDc5IDE1dDU3LjUgMzIuNSA1NCAzMi41IDY3LjUgMTVxMTMgMCAzOS00LjV0MzktNC41cTE1IDAgMjIuNSA5LjV0MTEuNSAzMSA1IDI0LjVxMTM4IDIyIDEzOCA2OXptMjU2IDczMlYxNjBxMC0xMTktODQuNS0yMDMuNVQxMjQ4LTEyOEgyODhxLTExOSAwLTIwMy41IDg0LjVUMCAxNjB2OTYwcTAgMTE5IDg0LjUgMjAzLjVUMjg4IDE0MDhoOTYwcTExOSAwIDIwMy41LTg0LjVUMTUzNiAxMTIweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkFFIiB1bmljb2RlPSLviq4iIGhvcml6LWFkdi14PSIyMzA0IiBkPSJNMjMwNCAxNTM2cS02OS00Ni0xMjUtOTJ0LTg5LTgxLTU5LjUtNzEuNS0zNy41LTU3LjUtMjItNDQuNS0xNC0yOS41cS0xMC0xOC0zNS41LTEzNi41VDE4NzMgODU5cS0xNS0yOS01MC02MC41dC02Ny41LTUwLjUtNzIuNS00MS00OC0yOHEtNDctMzEtMTUxLTIzMS0zNDEgMTQtNjMwLTE1OC05Mi01My0zMDMtMTc5IDQ3IDE2IDg2IDMxdDU1IDIybDE1IDdxNzEgMjcgMTYzIDY0LjV0MTMzLjUgNTMuNSAxMDggMzQuNVQxMjU0IDM1NXExODYgMzEgNDY1LTcgMSAwIDEwLTMgMTEtNiAxNC0xN3QtMy0yMkwxNTQ2LTM5cS0xNS0yOS00Ny0yMi0xMjggMjQtMzU0IDI0LTE0NiAwLTQwMi00NC41VDM1MS0xMjhxLTgyLTEtMTQ5IDEzVDk1LTc4IDM0LTM4IDEtNEwwLTN2MnEwIDYgNiA2IDEzOCAwIDM3MSA1NSAxOTIgMzY2IDM3NC41IDUyNFQxMTM1IDc0MnE1IDAgMTQuNS0uNXQzOC01IDU1LTEyVDEzMDQgNzAwdDYzLTM5LjUgNTQtNTkgNDAtODIuNWwxMDIgMTc3cTIgNCAyMSA0Mi41dDQ0LjUgODYuNSA2MSAxMDkuNSA4NCAxMzMuNSAxMDAuNSAxMzdxNjYgODIgMTI4IDE0MS41dDEyMS41IDk2LjUgOTIuNSA1My41IDg4IDM5LjV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjAiIHVuaWNvZGU9Iu+KsCIgZD0iTTEzMjIgNjQwcTAtNDUtNS03NmwtMjM2IDE0IDIyNC03OHEtMTktNzMtNTgtMTQxbC0yMTQgMTAzIDE3Ny0xNThxLTQ0LTYxLTEwNy0xMDhMOTQ2IDM3NGwxMDMtMjE1cS02MS0zNy0xNDAtNTlsLTc5IDIyOCAxNC0yNDBxLTM4LTYtNzYtNnQtNzYgNmwxNCAyMzgtNzgtMjI2cS03NCAxOS0xNDAgNTlsMTAzIDIxNS0xNTctMTc4cS01OSA0My0xMDggMTA4bDE3OCAxNTgtMjE0LTEwNHEtMzkgNjktNTggMTQxbDIyNCA3OS0yMzctMTRxLTUgNDItNSA3NiAwIDM1IDUgNzdsMjM4LTE0LTIyNSA3OXExOSA3MyA1OCAxNDBsMjE0LTEwNC0xNzcgMTU5cTQ2IDYxIDEwNyAxMDhsMTU4LTE3OC0xMDMgMjE1cTY3IDM5IDE0MCA1OGw3Ny0yMjQtMTMgMjM2cTM2IDYgNzUgNiAzOCAwIDc2LTZsLTE0LTIzNyA3OCAyMjVxNzQtMTkgMTQwLTU5TDk0NSA5MDdsMTU4IDE3OHE2MS00NyAxMDctMTA4bC0xNzctMTU5IDIxMyAxMDRxMzctNjIgNTgtMTQxbC0yMjQtNzggMjM3IDE0cTUtMzEgNS03N3ptMzAgMHEwIDE2MC03OC41IDI5NS41dC0yMTMgMjE0VDc2OCAxMjI4cS0xMTkgMC0yMjctNDYuNXQtMTg2LjUtMTI1VDIzMCA4Njl0LTQ2LTIyOXEwLTExOSA0Ni0yMjh0MTI0LjUtMTg3LjVUNTQxIDk5LjUgNzY4IDUzcTE1OCAwIDI5Mi41IDc4LjV0MjEzIDIxNFQxMzUyIDY0MHptNzMgMzgzVjI1N0w3NjgtMTI2IDExMSAyNTd2NzY2bDY1NyAzODN6TTc2OC0xODNsNzA4IDQxMnY4MjNsLTcwOCA0MTEtNzA4LTQxMVYyMjl6bTc2OCAxMjcxVjE5Mkw3NjgtMjU2IDAgMTkydjg5Nmw3NjggNDQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIxIiB1bmljb2RlPSLvirEiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMzM5IDEzMThoNjkxbC0yNi03MkgzMzlxLTExMCAwLTE4OC41LTc5VDcyIDk3OFYyMDdxMC05NSA2MC41LTE2OS41VDI4Ni01NnEyMy01IDk4LTV2LTcyaC00NVExOTktMTMzIDk5LjUtMzNUMCAyMDd2NzcxcTAgMTQwIDk5LjUgMjQwVDMzOSAxMzE4em04NTEgMjE4aDI0N0w5NTUgMjQycS0yMy02MS00MC41LTEwMy41dC00NS05OC01NC05My41LTY0LjUtNzguNS03OS41LTY1LTk1LjUtNDFUNDYwLTI1NnYxOTVxMTYzIDI2IDIyMCAxODIgMjAgNTIgMjAgMTA1IDAgNTQtMjAgMTA2bC0yODUgNzMzaDIyOGwxODctNTg1em00NzQtNTU4Vi0xMzNIODY5cTM3IDU1IDQ1IDczaDY3OFY5NzhxMCA4NS00OS41IDE1NXQtMTI5LjUgOTlsMjUgNjdxMTAxLTM0IDE2My41LTEyMy41VDE2NjQgOTc4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIyIiB1bmljb2RlPSLvirIiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODUyIDEyMjdxMC0yOS0xNy01Mi41dC00NS0yMy41LTQ1IDIzLjUtMTcgNTIuNSAxNyA1Mi41IDQ1IDIzLjUgNDUtMjMuNSAxNy01Mi41ek02ODgtMTQ5djExNHEwIDMwLTIwLjUgNTEuNVQ2MTcgMzh0LTUwLTIxLjVUNTQ3LTM1di0xMTRxMC0zMCAyMC41LTUydDQ5LjUtMjJxMzAgMCA1MC41IDIydDIwLjUgNTJ6bTE3MiAwdjExNHEwIDMwLTIwIDUxLjVUNzkwIDM4dC01MC41LTIxLjVUNzE5LTM1di0xMTRxMC0zMCAyMC41LTUydDUwLjUtMjJxMjkgMCA0OS41IDIydDIwLjUgNTJ6bTE3NCAwdjExNHEwIDMwLTIwLjUgNTEuNVQ5NjMgMzh0LTUwLjUtMjEuNVQ4OTItMzV2LTExNHEwLTMwIDIwLjUtNTJ0NTAuNS0yMiA1MC41IDIyIDIwLjUgNTJ6bTE3NCAwdjExNHEwIDMwLTIwLjUgNTEuNVQxMTM3IDM4dC01MC41LTIxLjVUMTA2Ni0zNXYtMTE0cTAtMzAgMjAuNS01MnQ1MC41LTIyIDUwLjUgMjIgMjAuNSA1MnptMjY4IDY4NHEtODQtMTYwLTIzMi0yNTkuNVQ5MjEgMTc2cS0xMjMgMC0yMjkuNSA1MS41VDUxMyAzNjQuNSA0MDAgNTYydC00MSAyMzJxMCA4OCAyMSAxNzQtMTA0LTE3NS0xMDQtMzkwIDAtMTYyIDY1LTMxMlQ1MjYgMTVxMzAgNTcgOTEgNTcgNTYgMCA4Ni01MCAzMiA1MCA4NyA1MCA1NiAwIDg2LTUwIDMyIDUwIDg3IDUwdDg3LTUwcTMwIDUwIDg2IDUwIDI4IDAgNTIuNS0xNS41VDEyMjYgMTZxMTEyIDk0IDE3NyAyMzEuNXQ3MyAyODcuNXptLTE1MCAyOXEwIDc1LTcyIDc1LTE3IDAtNDctNi05NS0xOS0xNDktMTktMjI2IDAtMjI2IDI0MyAwIDg2IDMwIDIwNC04My0xMjctODMtMjc1IDAtMTUwIDg5LTI2MC41VDExMDMgNDE1cTExMSAwIDIxMCA3MCAxMyA0OCAxMyA3OXptLTQ0MiA2NTlxMCA1MC0zMiA4OS41dC04MSAzOS41LTgxLTM5LjUtMzItODkuNXEwLTUxIDMxLjUtOTAuNVQ3NzEgMTA5M3Q4MS41IDM5LjVUODg0IDEyMjN6bTYyOS0zMzlxMCA5Ni0zNy41IDE3OXQtMTEzIDEzNy0xNzMuNSA1NHEtNzcgMC0xNDktMzV0LTEyNy05NHEtNDgtMTU5LTQ4LTI2OCAwLTEwNCA0NS41LTE1N3QxNDcuNS01M3E1MyAwIDE0MiAxOSAzNiA2IDUzIDYgNTEgMCA3Ny41LTI4dDI2LjUtODBxMC0yNi00LTQ2IDc1IDY4IDExNy41IDE2NS41VDE1MTMgODg0em0yNzktMjE3cTAtMTExLTMzLjUtMjQ5LjVUMTY2NSAyMTNxLTU4LTY0LTE5NS0xNDIuNVQxMjQyLTM0bC00LTF2LTExNHEwLTQzLTI5LjUtNzV0LTcyLjUtMzJxLTU2IDAtODYgNTAtMzItNTAtODctNTB0LTg3IDUwcS0zMC01MC04Ni01MC01NSAwLTg3IDUwLTMwLTUwLTg2LTUwLTQ3IDAtNzUgMzMuNVQ1MTQtMTQxcS05MC02OC0xOTgtNjgtMTE4IDAtMjExIDgwIDU0IDEgMTA2IDIwUTk4LTc4IDI5IDE4cTMyLTcgNzEtNyA4OSAwIDE2NCA0NlE3MiAyNDkgMjQgMzYzIDAgNDE5IDAgNTIzcTAgNTcgOSAxMjUuNVQ0MC41IDc5NXQ1NSAxNDEgODYuNSAxMDUgMTIwIDQycTU5IDAgODEtNTIgMTkgMjkgNDIgNTQgMiAzIDEyIDEzdDEzIDE2cTEwIDE1IDIzIDM4dDI1IDQyIDI4IDM5cTg3IDExMSAyMTEuNSAxNzd0MjYwLjUgNjZxMzUgMCA2Mi00IDU5IDY0IDE0NiA2NCA4MyAwIDE0MC01NyA1LTUgNS0xMiAwLTUtNi0xMy41dC0xMi41LTE2LTE2LTE3TDEzMDYgMTQxMHExNy02IDM2LTE4dDE5LTI0cTAtNi0xNi0yNSAxNTctMTM4IDE5Ny0zNzggMjUgMzAgNjAgMzAgNDUgMCAxMDAtNDkgOTAtODAgOTAtMjc5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIzIiB1bmljb2RlPSLvirMiIGQ9Ik05MTcgNjMxcTAgMzMtNiA2NEg1NDlWNTYzaDIxN3EtMTItNzYtNzQuNS0xMjAuNVQ1NDkgMzk4cS05OSAwLTE2OSA3MS41VDMxMCA2NDB0NzAgMTcwLjVUNTQ5IDg4MnE5MyAwIDE1My01OWwxMDQgMTAxcS0xMDggMTAwLTI1NyAxMDAtMTYwIDAtMjcyLTExMi41VDE2NSA2NDB0MTEyLTI3MS41VDU0OSAyNTZxMTY1IDAgMjY2LjUgMTA1VDkxNyA2MzF6bTM0NS00NmgxMDl2MTEwaC0xMDl2MTEwaC0xMTBWNjk1aC0xMTBWNTg1aDExMFY0NzVoMTEwdjExMHptMjc0IDU1cTAtMjA5LTEwMy0zODUuNVQxMTUzLjUtMjUgNzY4LTEyOCAzODIuNS0yNSAxMDMgMjU0LjUgMCA2NDB0MTAzIDM4NS41VDM4Mi41IDEzMDUgNzY4IDE0MDh0Mzg1LjUtMTAzIDI3OS41LTI3OS41VDE1MzYgNjQweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI0IiB1bmljb2RlPSLvirQiIGQ9Ik0xNTM2IDEwMjRWMTg1cTAtNDgtNDktNjItMTc0LTUyLTMzOC01Mi03MyAwLTIxNS41IDI5LjVUNzA2IDEzMHEtMTY0IDAtMzcwLTQ4di0zMzhIMTc2djEzNjhxLTYzIDI1LTEwMSA4MXQtMzggMTI0cTAgOTEgNjQgMTU1dDE1NSA2NCAxNTUtNjQgNjQtMTU1cTAtNjgtMzgtMTI0dC0xMDEtODF2LTY4cTE5MCA0NCAzNDMgNDQgOTkgMCAxOTgtMTUgMTQtMiAxMTEuNS0yMi41VDExMzggMTAzMHE3NyAwIDE2NSAxOCAxMSAyIDgwIDIxdDg5IDE5cTI2IDAgNDUtMTl0MTktNDV6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjUiIHVuaWNvZGU9Iu+KtSIgaG9yaXotYWR2LXg9IjIzMDQiIGQ9Ik0xOTIgMzg0cTQwIDAgNTYgMzJ0MCA2NC01NiAzMi01Ni0zMiAwLTY0IDU2LTMyem0xNDczIDU4cS0xMCAxMy0zOC41IDUwdC00MS41IDU0LTM4IDQ5LTQyLjUgNTMtNDAuNSA0Ny00NSA0OWwtMTI1LTE0MHEtODMtOTQtMjA4LjUtOTJUODgwIDYxMHEtNTcgNjktNTYuNSAxNThUODgyIDkyNWwxNzcgMjA2cS0yMiAxMS01MSAxNi41dC00Ny41IDYtNTYuNS0uNS00OS0xcS05MiAwLTE1OC02Nkw1MzkgOTI4SDM4NFYzODRxNSAwIDIxIC41dDIyIDAgMTkuNS0yVDQ2NyAzNzh0MTcuNS04LjVUNTAzIDM1Nkw4MDAgNjRROTE1LTQ3IDEwMjctNDdxNzggMCAxMjUgNDcgNTctMjAgMTEyLjUgOHQ3Mi41IDg1cTc0LTYgMTI3IDQ0IDIwIDE4IDM2IDQ1LjV0MTQgNTAuNXExMC0xMCA0My0xMCA0MyAwIDc3IDIxdDQ5LjUgNTMgMTIgNzEuNVQxNjY1IDQ0MnptMTU5LTU4aDk2djUxMmgtOTNsLTE1NyAxODBxLTY2IDc2LTE2OSA3NmgtMTY3cS04OSAwLTE0Ni02N0w5NzkgODQycS0yOC0zMy0yOC03NXQyNy03NXE0My01MSAxMTAtNTJ0MTExIDQ5bDE5MyAyMThxMjUgMjMgNTMuNSAyMS41dDQ3LTI3IDguNS01Ni41cTE2LTE5IDU2LTYzdDYwLTY4cTI5LTM2IDgyLjUtMTA1LjVUMTc2NCA1MjRxNTItNjYgNjAtMTQwem0yODggMHE0MCAwIDU2IDMydDAgNjQtNTYgMzItNTYtMzIgMC02NCA1Ni0zMnptMTkyIDU3NlYzMjBxMC0yNi0xOS00NXQtNDUtMTloLTQzNHEtMjctNjUtODItMTA2LjVUMTU5OSA5OHEtMzMtNDgtODAuNS04MS41VDE0MTYtMjlxLTQyLTUzLTEwNC41LTgxLjVUMTE4My0xMzVxLTYwLTM0LTEyNi0zOS41dC0xMjcuNSAxNC0xMTcgNTMuNVQ3MDktMjZMNDIyIDI1Nkg2NHEtMjYgMC00NSAxOVQwIDMyMHY2NzJxMCAyNiAxOSA0NXQ0NSAxOWg0MjFxMTQgMTQgNDcgNDh0NDcuNSA0OCA0NCA0MCA1MC41IDM3LjUgNTEgMjUuNSA2MiAxOS41IDY4IDUuNWgxMTdxOTkgMCAxODEtNTYgODIgNTYgMTgxIDU2aDE2N3EzNSAwIDY3LTZ0NTYuNS0xNC41IDUxLjUtMjYuNSA0NC41LTMxIDQzLTM5LjUgMzktNDIgNDEtNDggNDEuNS00OC41aDM1NXEyNiAwIDQ1LTE5dDE5LTQ1eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI2IiB1bmljb2RlPSLvirYiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA4ODJWLTk2cTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwLTk2djk3OHEwIDE1IDExIDI0IDggNyAzOSAzNC41dDQxLjUgMzZUMTM3IDEwMTR0NzAgNTUuNSA5NiA3MyAxNDMuNSAxMDdUNjM5IDEzOTBxNSA0IDUyLjUgNDB0NzEuNSA1Mi41IDY0IDM1IDY5IDE4LjUgNjktMTguNSA2NS0zNS41IDcxLTUyIDUyLTQwcTExMC04MCAxOTIuNS0xNDAuNXQxNDMuNS0xMDcgOTYtNzMgNzAtNTUuNSA0NS41LTM3LjUgNDEuNS0zNiAzOS0zNC41cTExLTkgMTEtMjR6bS01NjQtNTg1cTI2MyAxOTEgMzQ1IDI1MiAxMSA4IDEyLjUgMjAuNVQxNTc5IDU5M2wtMzggNTJxLTggMTEtMjEgMTIuNXQtMjQtNi41cS0yMzEtMTY5LTM0My0yNTAtNS0zLTUyLTM5dC03MS41LTUyLjUtNjQuNS0zNS02OS0xOC41LTY5IDE4LjUtNjQuNSAzNVQ2OTEgMzYydC01MiAzOVE0NTMgNTM1IDI5NiA2NTFxLTExIDgtMjQgNi41VDI1MSA2NDVsLTM4LTUycS04LTExLTYuNS0yMy41VDIxOSA1NDlxODItNjEgMzQ1LTI1MiAxMC04IDUwLTM4dDY1LTQ3IDY0LTM5LjUgNzcuNS0zMy41IDc1LjUtMTEgNzUuNSAxMSA3OSAzNC41VDExMTUgMjEzdDY1IDQ3LjUgNDggMzYuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCNyIgdW5pY29kZT0i74q3IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE0NzQgNjIzbDM5LTUxcTgtMTEgNi41LTIzLjVUMTUwOCA1MjhxLTQzLTM0LTEyNi41LTk4LjV0LTE0Ni41LTExMy02Ny01MS41cS0zOS0zMi02MC00OHQtNjAuNS00MS03Ni41LTM2LjUtNzQtMTEuNWgtMnEtMzcgMC03NCAxMS41VDc0NSAxNzZ0LTYxIDQxLjUtNjAgNDcuNXEtNSA0LTY1IDUwLjV0LTE0My41IDExMVQyOTMgNTIxcS0xMSA4LTEyLjUgMjAuNVQyODcgNTY1bDM3IDUycTggMTEgMjEuNSAxM3QyNC41LTdxOTQtNzMgMzA2LTIzNiA1LTQgNDMuNS0zNXQ2MC41LTQ2LjUgNTYuNS0zMi41IDU4LjUtMTdoMnEyNCAwIDU4LjUgMTd0NTYuNSAzMi41IDYwLjUgNDYuNSA0My41IDM1cTI1OCAxOTggMzEzIDI0MiAxMSA4IDI0IDYuNXQyMS0xMi41em0xOTAtNzE5djkyOHEtOTAgODMtMTU5IDEzOS05MSA3NC0zODkgMzA0LTMgMi00MyAzNXQtNjEgNDgtNTYgMzIuNS01OSAxNy41aC0ycS0yNCAwLTU5LTE3LjV0LTU2LTMyLjUtNjEtNDgtNDMtMzVxLTIxNS0xNjYtMzE1LjUtMjQ1LjVUMjMxIDkyNS41IDE0OSA4NTFxLTE0LTEyLTIxLTE5Vi05NnEwLTEzIDkuNS0yMi41VDE2MC0xMjhoMTQ3MnExMyAwIDIyLjUgOS41VDE2NjQtOTZ6bTEyOCA5MjhWLTk2cTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwLTk2djkyOHEwIDU2IDQxIDk0IDEyMyAxMTQgMzUwIDI5MC41VDYyNCAxMzk4cTM2IDMwIDU5IDQ3LjV0NjEuNSA0MiA3NiAzNi41IDc0LjUgMTJoMnEzNyAwIDc0LjUtMTJ0NzYtMzYuNSA2MS41LTQyIDU5LTQ3LjVxNDMtMzYgMTU2LTEyMnQyMjYtMTc3IDIwMS0xNzNxNDEtMzggNDEtOTR6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjgiIHVuaWNvZGU9Iu+KuCIgZD0iTTMzMCAxbDIwMi0yMTQtMzQgMjM2LTIxNiAyMTN6bTIyNi0yMjZMODMwLTdsLTExIDI0NUw1MTkgMjN6TTI0NSA0MTNsMjI3LTIxMy00OCAzMjctMjQ1IDIwNHptMjUwLTIyNGwzMTcgMjE0LTE0IDMyNC0zNTItMjAwem0zNDgtMTFsOTUtODAtMiAyMzktMTAzIDc5cTAtMSAxLTguNXQwLTEyLTUtNy41bC03OC01MiA4NS03MHE3LTYgNy04OHpNMTM4IDkzMGwyNTYtMjAwLTY4IDQ2NS0yNzkgMTczem0xMDM1LTY2M2wxNSAyMzQtMjMwLTE2NCAyLTI0MHpNNDE3IDcyMmwzNzMgMTk0LTE5IDQ0MS00MjMtMTYzem04NTMtMzY1bDIwIDIzMy0yMjYgMTQyLTItMTA1IDE0NC05NXE2LTQgNC05bC03LTExOXptMTkxIDEzOWwzMCAyMjItMTc5LTEyOC0yMC0yMjh6bS0xODgtMTY3bC03MSA0OS04LTExN3EwLTUtNC04TDk1NiA2NnEtNy01LTE0IDBsLTk4IDgzIDctMTYxcTAtNS00LThMNTU0LTI1NHEtNC0yLTYtMi04IDItOCAzTDMxMi0xMXEtNCA0LTU5IDI3Ny0yIDcgNSAxMWw2MSAzN3EtOTQgODYtOTUgOTJsLTcyIDM1MXEtMiA3IDYgMTJsOTQgNDVRMTE5IDkxNCAxMTcgOTIybC05NiA0NjZxLTIgMTAgNyAxM2w0MzMgMTM1cTUgMCA4LTFsMzE3LTE1M3E2LTQgNi05bDIwLTQ2M3EwLTctNi0xMGwtMTE4LTYxIDEyNi04NXE1LTIgNS04bDUtMTIzIDEyMSA3NHE1IDQgMTEgMGw4NC01NiAzIDExMHEwIDYgNSA5bDIwNiAxMjZxNiAzIDExIDBsMjQ1LTEzNXE0LTQgNS03dC02LjUtNjAtMTcuNS0xMjQuNS0xMC03MC41cTAtNS00LTdsLTE5MS0xNTNxLTYtNS0xMyAweiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI5IiB1bmljb2RlPSLvirkiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTIwMSAyOThxMCA1Ny01LjUgMTA3dC0yMSAxMDAuNS0zOS41IDg2LTY0IDU4LTkxIDIyLjVxLTYtNC0zMy41LTIwLjVUOTA0IDYyN3QtNDAuNS0yMC00OS0xNy00Ni41LTUtNDYuNSA1LTQ5IDE3LTQwLjUgMjAtNDIuNSAyNC41VDU1NiA2NzJxLTUxIDAtOTEtMjIuNXQtNjQtNTgtMzkuNS04Ni0yMS0xMDAuNS01LjUtMTA3cTAtNzMgNDItMTIxLjVUNDgwIDEyOGg1NzZxNjEgMCAxMDMgNDguNXQ0MiAxMjEuNXptLTE3MyA1OTRxMCAxMDgtNzYuNSAxODRUNzY4IDExNTJ0LTE4My41LTc2VDUwOCA4OTJxMC0xMDcgNzYuNS0xODNUNzY4IDYzM3QxODMuNSA3NiA3Ni41IDE4M3ptNjM2LTU0MFYxNjBxMC0xNC05LTIzdC0yMy05aC05NlYtOTZxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAtOTZ2MTQ3MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTIxNnE2NiAwIDExMy00N3Q0Ny0xMTN2LTIyNGg5NnExNCAwIDIzLTl0OS0yM1Y5MjhxMC0xNC05LTIzdC0yMy05aC05NlY3NjhoOTZxMTQgMCAyMy05dDktMjNWNTQ0cTAtMTQtOS0yM3QtMjMtOWgtOTZWMzg0aDk2cTE0IDAgMjMtOXQ5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkJBIiB1bmljb2RlPSLviroiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyOCA4OTJxMC0xMDctNzYuNS0xODNUNzY4IDYzM3QtMTgzLjUgNzZUNTA4IDg5MnEwIDEwOCA3Ni41IDE4NHQxODMuNSA3NiAxODMuNS03NiA3Ni41LTE4NHptLTQ4LTIyMHE0NiAwIDgyLjUtMTd0NjAtNDcuNSAzOS41LTY3IDI0LTgxIDExLjUtODIuNSAzLjUtNzlxMC02Ny0zOS41LTExOC41VDEwNTYgMTI4SDQ4MHEtNjYgMC0xMDUuNSA1MS41VDMzNSAyOThxMCA0OCA0LjUgOTMuNVQzNTggNDkwdDM2LjUgOTEuNSA2MyA2NC41IDkzLjUgMjZoNXE3LTQgMzItMTkuNXQzNS41LTIxIDMzLTE3IDM3LTE2IDM1LTlUNzY4IDU4NXQzOS41IDQuNSAzNSA5IDM3IDE2IDMzIDE3IDM1LjUgMjEgMzIgMTkuNXptNjg0IDI1NnEwLTEzLTkuNS0yMi41VDE2MzIgODk2aC05NlY3NjhoOTZxMTMgMCAyMi41LTkuNXQ5LjUtMjIuNVY1NDRxMC0xMy05LjUtMjIuNVQxNjMyIDUxMmgtOTZWMzg0aDk2cTEzIDAgMjIuNS05LjV0OS41LTIyLjVWMTYwcTAtMTMtOS41LTIyLjVUMTYzMiAxMjhoLTk2Vi05NnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDE2MHEtNjYgMC0xMTMgNDdUMC05NnYxNDcycTAgNjYgNDcgMTEzdDExMyA0N2gxMjE2cTY2IDAgMTEzLTQ3dDQ3LTExM3YtMjI0aDk2cTEzIDAgMjIuNS05LjV0OS41LTIyLjVWOTI4ek0xNDA4LTk2djE0NzJxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMzc2Vi05NnEwLTEzIDkuNS0yMi41VDE2MC0xMjhoMTIxNnExMyAwIDIyLjUgOS41VDE0MDgtOTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkIiIHVuaWNvZGU9Iu+KuyIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xMDI0IDQwNXEwIDY0LTkgMTE3LjV0LTI5LjUgMTAzLTYwLjUgNzgtOTcgMjguNXEtNi00LTMwLTE4dC0zNy41LTIxLjVUNzI1IDY3NXQtNDMtMTQuNS00Mi00LjUtNDIgNC41LTQzIDE0LjUtMzUuNSAxNy41VDQ4MiA3MTR0LTMwIDE4cS01NyAwLTk3LTI4LjV0LTYwLjUtNzgtMjkuNS0xMDMtOS0xMTcuNSAzNy0xMDYuNSA5MS00Mi41aDUxMnE1NCAwIDkxIDQyLjV0MzcgMTA2LjV6TTg2NyA5MjVxMCA5NC02Ni41IDE2MC41VDY0MCAxMTUydC0xNjAuNS02Ni41VDQxMyA5MjV0NjYuNS0xNjAuNVQ2NDAgNjk4dDE2MC41IDY2LjVUODY3IDkyNXptOTI1LTUwOXY2NHEwIDE0LTkgMjN0LTIzIDloLTU3NnEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWg1NzZxMTQgMCAyMyA5dDkgMjN6bTAgMjYwdjU2cTAgMTUtMTAuNSAyNS41VDE3NTYgNzY4aC01NjhxLTE1IDAtMjUuNS0xMC41VDExNTIgNzMydi01NnEwLTE1IDEwLjUtMjUuNVQxMTg4IDY0MGg1NjhxMTUgMCAyNS41IDEwLjVUMTc5MiA2NzZ6bTAgMjUydjY0cTAgMTQtOSAyM3QtMjMgOWgtNTc2cS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDU3NnExNCAwIDIzIDl0OSAyM3ptMjU2IDMyMFYzMnEwLTY2LTQ3LTExM3QtMTEzLTQ3aC0zNTJ2OTZxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi05Nkg2NDB2OTZxMCAxNC05IDIzdC0yMyA5aC02NHEtMTQgMC0yMy05dC05LTIzdi05NkgxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkMiIHVuaWNvZGU9Iu+KvCIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0xMDI0IDQwNXEwLTY0LTM3LTEwNi41VDg5NiAyNTZIMzg0cS01NCAwLTkxIDQyLjVUMjU2IDQwNXQ5IDExNy41IDI5LjUgMTAzIDYwLjUgNzggOTcgMjguNXE2LTQgMzAtMTh0MzcuNS0yMS41VDU1NSA2NzV0NDMtMTQuNSA0Mi00LjUgNDIgNC41IDQzIDE0LjUgMzUuNSAxNy41VDc5OCA3MTR0MzAgMThxNTcgMCA5Ny0yOC41dDYwLjUtNzggMjkuNS0xMDMgOS0xMTcuNXpNODY3IDkyNXEwLTk0LTY2LjUtMTYwLjVUNjQwIDY5OHQtMTYwLjUgNjYuNVQ0MTMgOTI1dDY2LjUgMTYwLjVUNjQwIDExNTJ0MTYwLjUtNjYuNVQ4NjcgOTI1em05MjUtNDQ1di02NHEwLTE0LTktMjN0LTIzLTloLTU3NnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDU3NnExNCAwIDIzLTl0OS0yM3ptMCAyNTJ2LTU2cTAtMTUtMTAuNS0yNS41VDE3NTYgNjQwaC01NjhxLTE1IDAtMjUuNSAxMC41VDExNTIgNjc2djU2cTAgMTUgMTAuNSAyNS41VDExODggNzY4aDU2OHExNSAwIDI1LjUtMTAuNVQxNzkyIDczMnptMCAyNjB2LTY0cTAtMTQtOS0yM3QtMjMtOWgtNTc2cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMtOXQ5LTIzem0xMjgtOTYwdjEyMTZxMCAxMy05LjUgMjIuNXQtMjIuNSA5LjVIMTYwcS0xMyAwLTIyLjUtOS41VDEyOCAxMjQ4VjMycTAtMTMgOS41LTIyLjVUMTYwIDBoMzUydjk2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMtOXQ5LTIzVjBoNzY4djk2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMtOXQ5LTIzVjBoMzUycTEzIDAgMjIuNSA5LjVUMTkyMCAzMnptMTI4IDEyMTZWMzJxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkQiIHVuaWNvZGU9Iu+KvSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNTIzIDE5N3EtMjIgMTU1LTg3LjUgMjU3LjVUMTI1MSA1NzNxLTY3LTc0LTE1OS41LTExNS41VDg5NiA0MTZ0LTE5NS41IDQxLjVUNTQxIDU3M3EtMTE5LTE2LTE4NC41LTExOC41VDI2OSAxOTdRMzc1IDQ3IDU0MC00MC41VDg5Ni0xMjh0MzU2IDg3LjVUMTUyMyAxOTd6bS0yNDMgNjk5cTAgMTU5LTExMi41IDI3MS41VDg5NiAxMjgwdC0yNzEuNS0xMTIuNVQ1MTIgODk2dDExMi41LTI3MS41VDg5NiA1MTJ0MjcxLjUgMTEyLjVUMTI4MCA4OTZ6bTUxMi0yNTZxMC0xODItNzEtMzQ3LjV0LTE5MC41LTI4NlQxMjQ1LTE4NXQtMzQ5LTcxcS0xODIgMC0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkJFIiB1bmljb2RlPSLvir4iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDE1MzZxMTgyIDAgMzQ4LTcxdDI4Ni0xOTEgMTkxLTI4NiA3MS0zNDhxMC0xODEtNzAuNS0zNDdUMTUzMSA3dC0yODYtMTkxLjVUODk2LTI1NnQtMzQ5IDcxVDI2MS41IDYuNSA3MSAyOTIuNSAwIDY0MHQ3MSAzNDggMTkxIDI4NiAyODYgMTkxIDM0OCA3MXptNjE5LTEzNTFxMTQ5IDIwNSAxNDkgNDU1IDAgMTU2LTYxIDI5OHQtMTY0IDI0NS0yNDUgMTY0LTI5OCA2MS0yOTgtNjEtMjQ1LTE2NC0xNjQtMjQ1LTYxLTI5OHEwLTI1MCAxNDktNDU1IDY2IDMyNyAzMDYgMzI3IDEzMS0xMjggMzEzLTEyOHQzMTMgMTI4cTI0MCAwIDMwNi0zMjd6bS0yMzUgNjQ3cTAgMTU5LTExMi41IDI3MS41VDg5NiAxMjE2dC0yNzEuNS0xMTIuNVQ1MTIgODMydDExMi41LTI3MS41VDg5NiA0NDh0MjcxLjUgMTEyLjVUMTI4MCA4MzJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzAiIHVuaWNvZGU9Iu+LgCIgZD0iTTEyMDEgNzUycTQ3LTE0IDg5LjUtMzh0ODktNzMgNzkuNS0xMTUuNSA1NS0xNzIgMjItMjM2LjVxMC0xNTQtMTAwLTI2My41VDExOTUtMjU2SDM0MXEtMTQxIDAtMjQxIDEwOS41VDAgMTE3cTAgMTMxIDIyIDIzNi41dDU1IDE3MlQxNTYuNSA2NDF0ODkgNzMgODkuNSAzOHEtNzkgMTI1LTc5IDI3MiAwIDEwNCA0MC41IDE5OC41VDQwNiAxMzg2dDE2My41IDEwOS41VDc2OCAxNTM2dDE5OC41LTQwLjVUMTEzMCAxMzg2dDEwOS41LTE2My41VDEyODAgMTAyNHEwLTE0Ny03OS0yNzJ6bS00MzMgNjU2cS0xNTkgMC0yNzEuNS0xMTIuNVQzODQgMTAyNHQxMTIuNS0yNzEuNVQ3NjggNjQwdDI3MS41IDExMi41VDExNTIgMTAyNHQtMTEyLjUgMjcxLjVUNzY4IDE0MDh6bTQyNy0xNTM2cTg4IDAgMTUwLjUgNzEuNVQxNDA4IDExN3EwIDIzOS03OC41IDM3N1QxMTA0IDYzOVE5NTkgNTEyIDc2OCA1MTJUNDMyIDYzOXEtMTQ3LTctMjI1LjUtMTQ1VDEyOCAxMTdxMC0xMDIgNjIuNS0xNzMuNVQzNDEtMTI4aDg1NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMSIgdW5pY29kZT0i74uBIiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwMjQgMjc4cTAtNjQtMzctMTA3dC05MS00M0gzODRxLTU0IDAtOTEgNDN0LTM3IDEwNyA5IDExOCAyOS41IDEwNCA2MSA3OC41VDQ1MiA2MDdxODAtNzUgMTg4LTc1dDE4OCA3NXE1NiAwIDk2LjUtMjguNXQ2MS03OC41IDI5LjUtMTA0IDktMTE4ek04NzAgNzk3cTAtOTQtNjcuNS0xNjAuNVQ2NDAgNTcwdC0xNjIuNSA2Ni41VDQxMCA3OTd0NjcuNSAxNjAuNVQ2NDAgMTAyNHQxNjIuNS02Ni41VDg3MCA3OTd6bTI4Mi04OTN2MTM3NkgxMjhWLTk2cTAtMTMgOS41LTIyLjVUMTYwLTEyOGg5NjBxMTMgMCAyMi41IDkuNVQxMTUyLTk2em0xMjggMTQ3MlYtOTZxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAtOTZ2MTQ3MnEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydi05NnEwLTE0IDktMjN0MjMtOWgxOTJxMTQgMCAyMyA5dDkgMjN2OTZoMzUycTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMiIgdW5pY29kZT0i74uCIiBob3Jpei1hZHYteD0iMjA0OCIgZD0iTTg5NiAzMjRxMCA1NC03LjUgMTAwLjV0LTI0LjUgOTAtNTEgNjguNS04MSAyNXEtNjQtNjQtMTU2LTY0dC0xNTYgNjRxLTQ3IDAtODEtMjV0LTUxLTY4LjUtMjQuNS05MFQyNTYgMzI0cTAtNTUgMzEuNS05My41VDM2MyAxOTJoNDI2cTQ0IDAgNzUuNSAzOC41VDg5NiAzMjR6TTc2OCA3NjhxMCA4MC01NiAxMzZ0LTEzNiA1Ni0xMzYtNTYtNTYtMTM2IDU2LTEzNiAxMzYtNTYgMTM2IDU2IDU2IDEzNnptMTAyNC00ODB2NjRxMCAxNC05IDIzdC0yMyA5aC03MDRxLTE0IDAtMjMtOXQtOS0yM3YtNjRxMC0xNCA5LTIzdDIzLTloNzA0cTE0IDAgMjMgOXQ5IDIzem0tMzg0IDI1NnY2NHEwIDE0LTkgMjN0LTIzIDloLTMyMHEtMTQgMC0yMy05dC05LTIzdi02NHEwLTE0IDktMjN0MjMtOWgzMjBxMTQgMCAyMyA5dDkgMjN6bTM4NCAwdjY0cTAgMTQtOSAyM3QtMjMgOWgtMTkycS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDE5MnExNCAwIDIzIDl0OSAyM3ptMCAyNTZ2NjRxMCAxNC05IDIzdC0yMyA5aC03MDRxLTE0IDAtMjMtOXQtOS0yM3YtNjRxMC0xNCA5LTIzdDIzLTloNzA0cTE0IDAgMjMgOXQ5IDIzek0xMjggMTE1MmgxNzkydjk2cTAgMTQtOSAyM3QtMjMgOUgxNjBxLTE0IDAtMjMtOXQtOS0yM3YtOTZ6bTE5MjAgOTZWMzJxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzMiIHVuaWNvZGU9Iu+LgyIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik04OTYgMzI0cTAtNTUtMzEuNS05My41VDc4OSAxOTJIMzYzcS00NCAwLTc1LjUgMzguNVQyNTYgMzI0cTAgNTQgNy41IDEwMC41dDI0LjUgOTAgNTEgNjguNSA4MSAyNXE2NC02NCAxNTYtNjR0MTU2IDY0cTQ3IDAgODEtMjV0NTEtNjguNSAyNC41LTkwVDg5NiAzMjR6TTc2OCA3NjhxMC04MC01Ni0xMzZ0LTEzNi01Ni0xMzYgNTYtNTYgMTM2IDU2IDEzNiAxMzYgNTYgMTM2LTU2IDU2LTEzNnptMTAyNC00MTZ2LTY0cTAtMTQtOS0yM3QtMjMtOWgtNzA0cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMtOXQ5LTIzem0tMzg0IDI1NnYtNjRxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgzMjBxMTQgMCAyMy05dDktMjN6bTM4NCAwdi02NHEwLTE0LTktMjN0LTIzLTloLTE5MnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzLTl0OS0yM3ptMCAyNTZ2LTY0cTAtMTQtOS0yM3QtMjMtOWgtNzA0cS0xNCAwLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMtOXQ5LTIzem0xMjgtODMydjExMjBIMTI4VjMycTAtMTMgOS41LTIyLjVUMTYwIDBoMTcyOHExMyAwIDIyLjUgOS41VDE5MjAgMzJ6bTEyOCAxMjE2VjMycTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwIDMydjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE3MjhxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkM0IiB1bmljb2RlPSLvi4QiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI1NSA3NDlxMCAzMTgtMTA1IDQ3NC41VDgyMCAxMzgwcS0yMjIgMC0zMjYtMTU3VDM5MCA3NDlxMC0zMTYgMTA0LTQ3MS41VDgyMCAxMjJxNzQgMCAxMzEgMTctMjIgNDMtMzkgNzN0LTQ0IDY1LTUzLjUgNTYuNS02MyAzNlQ2NzQgMzg0cS00NiAwLTc5LTE2bC00OSA5N3ExMDUgOTEgMjc2IDkxIDEzMiAwIDIxNS41LTU0VDExODggMzQ3cTY3IDE0OSA2NyA0MDJ6bTM5MC02MzJoMTE3cTMtMjctMi02N3QtMjYuNS05NS01OC0xMDAuNS0xMDctNzhUMTQwNi0yNTZxLTcxIDAtMTMwLjUgMTlUMTE3MC0xODF0LTc5IDc4LTY2IDk2cS05Ny0yNy0yMDUtMjctMTUwIDAtMjkyLjUgNTh0LTI1MyAxNTguNS0xNzggMjQ5VDI5IDc0OXEwIDE3MCA2Ny41IDMxOS41VDI3NSAxMzE5dDI1My41IDE1OSAyOTEuNSA1OHExMjEgMCAyMzguNS0zNnQyMTctMTA2IDE3Ni0xNjQuNSAxMTkuNS0yMTkgNDMtMjYxLjVxMC0xOTAtODAuNS0zNDcuNVQxMzE1IDEzN3E0Ny03MCA5My41LTEwNi41VDE1MTMtNnE2MSAwIDk0IDM3LjV0MzggODUuNXoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDNSIgdW5pY29kZT0i74uFIiBob3Jpei1hZHYteD0iMjMwNCIgZD0iTTQ1My0xMDFxMC0yMS0xNi0zNy41VDQwMC0xNTVxLTEgMC0xMyAzLTYzIDE1LTE2MiAxNDBRMCAyNzIgMCA2NjRxMCAzNDEgMjEzIDYxNCAzOSA1MSA5NSAxMDMuNXQ5NCA1Mi41cTE5IDAgMzUtMTMuNXQxNi0zMi41cTAtMjctNjMtOTAtOTgtMTAyLTE0Ny0xODQtMTE5LTE5OS0xMTktNDQ5IDAtMjgxIDEyMy00OTFRMjk3IDg5IDM4MyAxcTItMyAxNC41LTE2VDQxNy0zNnQxNy0yMC41VDQ0OC41LTgwdDQuNS0yMXpNMTc5NiAzM3EwLTI5LTE3LjUtNDguNVQxNzMyLTM1SDY1MXEtMjYgMC00NSAxOXQtMTkgNDVxMCAyOSAxNy41IDQ4LjVUNjUxIDk3aDEwODFxMjYgMCA0NS0xOXQxOS00NXptLTIxNSA2MTFxMC0xMzQtNjctMjMzLTI1LTM4LTY5LjUtNzguNVQxMzYxIDI3MnEtMTYtMTAtMjctMTAtNyAwLTE1IDZ0LTggMTJxMCA5IDE5IDMwdDQyIDQ2IDQyIDY3LjUgMTkgODguNXEwIDc2LTM1IDEzMC0yOSA0Mi00NiA0Mi0zIDAtMy01IDAtMTIgNy41LTM1LjV0Ny41LTM2LjVxMC0yMi0yMS41LTM1dC00NC41LTEzcS02NiAwLTY2IDc2IDAgMTUgMS41IDQ0dDEuNSA0NHEwIDI1LTEwIDQ2LTEzIDI1LTQyIDUzLjV0LTUxIDI4LjVxLTUgMC03LS41dC0zLjUtMi41LTEuNS02cTAtMiAxNi0yNnQxNi01NHEwLTM3LTE5LTY4dC00Ni01NC01My41LTQ2LTQ1LjUtNTQtMTktNjhxMC05OCA0Mi0xNjAgMjktNDMgNzktNjMgMTYtNSAxNy0xMCAxLTIgMS01IDAtMTYtMTgtMTYtNiAwLTMzIDExLTExOSA0My0xOTUgMTM5LjVUNzg2IDU4N3EwIDU1IDI0LjUgMTE1LjV0NjAgMTE1VDk0MSA5MjZ0NTkuNSAxMTMuNVQxMDI1IDExNTFxMCA1My0yNSA5NC0yOSA0OC01NiA2NC0xOSA5LTE5IDIxIDAgMjAgNDEgMjAgNTAgMCAxMTAtMjkgNDEtMTkgNzEtNDQuNXQ0OS41LTUxIDMzLjUtNjIuNSAyMi02OSAxNi04MHEwLTEgMy0xNy41dDQuNS0yNSA1LjUtMjUgOS0yNyAxMS0yMS41IDE0LjUtMTYuNSAxOC41LTUuNXEyMyAwIDM3IDE0dDE0IDM3cTAgMjUtMjAgNjd0LTIwIDUyIDEwIDEwcTI3IDAgOTMtNzAgNzItNzYgMTAyLjUtMTU2dDMwLjUtMTg2em03MjMtMjlxMC0yNzQtMTM4LTUwMy0xOS0zMi00OC03MnQtNjgtODYuNS04MS03Ny03NC0zMC41cS0xNiAwLTMxIDE1LjV0LTE1IDMxLjVxMCAxNSAyOSA1MC41dDY4LjUgNzdUMTk5NSA3M3ExODMgMjMwIDE4MyA1MzEgMCAxMzEtMjAuNSAyMzV0LTcyLjUgMjExcS01OCAxMTktMTYzIDIyOC0yIDMtMTMgMTMuNXQtMTYuNSAxNi41LTE1IDE3LjUtMTUgMjAtOS41IDE4LjUtNCAxOXEwIDE5IDE2IDM1LjV0MzUgMTYuNXE3MCAwIDE5Ni0xNjkgOTgtMTMxIDE0Ni0yNzN0NjAtMzE0cTItNDIgMi02NHoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDNiIgdW5pY29kZT0i74uGIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTExODkgMjI5bDE0NyA2OTNxOSA0NC0xMC41IDYzdC01MS41IDdMNDEwIDY1OXEtMjktMTEtMzkuNS0yNXQtMi41LTI2LjUgMzItMTkuNWwyMjEtNjkgNTEzIDMyM3EyMSAxNCAzMiA2IDctNS00LTE1TDc0NyA0NThsLTE2LTIyOHEyMyAwIDQ1IDIybDEwOCAxMDQgMjI0LTE2NXE2NC0zNiA4MSAzOHptNjAzIDQxMXEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkM3IiB1bmljb2RlPSLvi4ciIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNjQwIDE5MnEwLTgwLTU2LTEzNlQ0NDggMCAzMTIgNTZ0LTU2IDEzNnEwIDYwIDM1IDExMHQ5MyA3MXY5MDdoMTI4VjM3M3E1OC0yMSA5My03MXQzNS0xMTB6bTEyOCAwcTAgNzctMzQgMTQ0dC05NCAxMTJ2NzY4cTAgODAtNTYgMTM2dC0xMzYgNTYtMTM2LTU2LTU2LTEzNlY0NDhxLTYwLTQ1LTk0LTExMnQtMzQtMTQ0cTAtMTMzIDkzLjUtMjI2LjVUNDQ4LTEyOHQyMjYuNSA5My41VDc2OCAxOTJ6bTEyOCAwcTAtMTg1LTEzMS41LTMxNi41VDQ0OC0yNTYgMTMxLjUtMTI0LjUgMCAxOTJxMCAxODIgMTI4IDMxM3Y3MTFxMCAxMzMgOTMuNSAyMjYuNVQ0NDggMTUzNnQyMjYuNS05My41VDc2OCAxMjE2VjUwNXExMjgtMTMxIDEyOC0zMTN6bTEyOCA1NzZWNjQwSDgzMnYxMjhoMTkyem0wIDI1NlY4OTZIODMydjEyOGgxOTJ6bTAgMjU2di0xMjhIODMydjEyOGgxOTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzgiIHVuaWNvZGU9Iu+LiCIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik02NDAgMTkycTAtODAtNTYtMTM2VDQ0OCAwIDMxMiA1NnQtNTYgMTM2cTAgNjAgMzUgMTEwdDkzIDcxdjY1MWgxMjhWMzczcTU4LTIxIDkzLTcxdDM1LTExMHptMTI4IDBxMCA3Ny0zNCAxNDR0LTk0IDExMnY3NjhxMCA4MC01NiAxMzZ0LTEzNiA1Ni0xMzYtNTYtNTYtMTM2VjQ0OHEtNjAtNDUtOTQtMTEydC0zNC0xNDRxMC0xMzMgOTMuNS0yMjYuNVQ0NDgtMTI4dDIyNi41IDkzLjVUNzY4IDE5MnptMTI4IDBxMC0xODUtMTMxLjUtMzE2LjVUNDQ4LTI1NiAxMzEuNS0xMjQuNSAwIDE5MnEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41VDQ0OCAxNTM2dDIyNi41LTkzLjVUNzY4IDEyMTZWNTA1cTEyOC0xMzEgMTI4LTMxM3ptMTI4IDU3NlY2NDBIODMydjEyOGgxOTJ6bTAgMjU2Vjg5Nkg4MzJ2MTI4aDE5MnptMCAyNTZ2LTEyOEg4MzJ2MTI4aDE5MnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDOSIgdW5pY29kZT0i74uJIiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTY0MCAxOTJxMC04MC01Ni0xMzZUNDQ4IDAgMzEyIDU2dC01NiAxMzZxMCA2MCAzNSAxMTB0OTMgNzF2Mzk1aDEyOFYzNzNxNTgtMjEgOTMtNzF0MzUtMTEwem0xMjggMHEwIDc3LTM0IDE0NHQtOTQgMTEydjc2OHEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZWNDQ4cS02MC00NS05NC0xMTJ0LTM0LTE0NHEwLTEzMyA5My41LTIyNi41VDQ0OC0xMjh0MjI2LjUgOTMuNVQ3NjggMTkyem0xMjggMHEwLTE4NS0xMzEuNS0zMTYuNVQ0NDgtMjU2IDEzMS41LTEyNC41IDAgMTkycTAgMTgyIDEyOCAzMTN2NzExcTAgMTMzIDkzLjUgMjI2LjVUNDQ4IDE1MzZ0MjI2LjUtOTMuNVQ3NjggMTIxNlY1MDVxMTI4LTEzMSAxMjgtMzEzem0xMjggNTc2VjY0MEg4MzJ2MTI4aDE5MnptMCAyNTZWODk2SDgzMnYxMjhoMTkyem0wIDI1NnYtMTI4SDgzMnYxMjhoMTkyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNBIiB1bmljb2RlPSLvi4oiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNNjQwIDE5MnEwLTgwLTU2LTEzNlQ0NDggMCAzMTIgNTZ0LTU2IDEzNnEwIDYwIDM1IDExMHQ5MyA3MXYxMzloMTI4VjM3M3E1OC0yMSA5My03MXQzNS0xMTB6bTEyOCAwcTAgNzctMzQgMTQ0dC05NCAxMTJ2NzY4cTAgODAtNTYgMTM2dC0xMzYgNTYtMTM2LTU2LTU2LTEzNlY0NDhxLTYwLTQ1LTk0LTExMnQtMzQtMTQ0cTAtMTMzIDkzLjUtMjI2LjVUNDQ4LTEyOHQyMjYuNSA5My41VDc2OCAxOTJ6bTEyOCAwcTAtMTg1LTEzMS41LTMxNi41VDQ0OC0yNTYgMTMxLjUtMTI0LjUgMCAxOTJxMCAxODIgMTI4IDMxM3Y3MTFxMCAxMzMgOTMuNSAyMjYuNVQ0NDggMTUzNnQyMjYuNS05My41VDc2OCAxMjE2VjUwNXExMjgtMTMxIDEyOC0zMTN6bTEyOCA1NzZWNjQwSDgzMnYxMjhoMTkyem0wIDI1NlY4OTZIODMydjEyOGgxOTJ6bTAgMjU2di0xMjhIODMydjEyOGgxOTJ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQ0IiIHVuaWNvZGU9Iu+LiyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik02NDAgMTkycTAtODAtNTYtMTM2VDQ0OCAwIDMxMiA1NnQtNTYgMTM2cTAgNzkgNTYgMTM1LjVUNDQ4IDM4NHQxMzYtNTYuNVQ2NDAgMTkyem0xMjggMHEwIDc3LTM0IDE0NHQtOTQgMTEydjc2OHEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZWNDQ4cS02MC00NS05NC0xMTJ0LTM0LTE0NHEwLTEzMyA5My41LTIyNi41VDQ0OC0xMjh0MjI2LjUgOTMuNVQ3NjggMTkyem0xMjggMHEwLTE4NS0xMzEuNS0zMTYuNVQ0NDgtMjU2IDEzMS41LTEyNC41IDAgMTkycTAgMTgyIDEyOCAzMTN2NzExcTAgMTMzIDkzLjUgMjI2LjVUNDQ4IDE1MzZ0MjI2LjUtOTMuNVQ3NjggMTIxNlY1MDVxMTI4LTEzMSAxMjgtMzEzem0xMjggNTc2VjY0MEg4MzJ2MTI4aDE5MnptMCAyNTZWODk2SDgzMnYxMjhoMTkyem0wIDI1NnYtMTI4SDgzMnYxMjhoMTkyeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNDIiB1bmljb2RlPSLvi4wiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTQzMyAxMjg3cTEwLTEwIDEwLTIzdC0xMC0yM0w4MDcgNjE1cS0xMC0xMC0yMy0xMHQtMjMgMTBsLTgyIDgycS0xMCAxMC0xMCAyM3QxMCAyM2w0NCA0NHEtNzIgOTEtODEuNSAyMDd0NDYuNSAyMTVxLTc0IDcxLTE3NiA3MS0xMDYgMC0xODEtNzV0LTc1LTE4MVYtMjU2SDB2MTI4MHEwIDEwNCA0MC41IDE5OC41VDE1MCAxMzg2dDE2My41IDEwOS41VDUxMiAxNTM2cTEwNiAwIDIwMS00MXQxNjYtMTE1cTk0IDM5IDE5NyAyNC41dDE4NS03OS41bDQ0IDQ0cTEwIDEwIDIzIDEwdDIzLTEwem0tODktMjYzcTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bTI1Ni0xMjhxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1LTE5LTQ1LTQ1LTE5em0yNTYgMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bS02NDAtMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bTE5Mi02NHEwIDI2IDE5IDQ1dDQ1IDE5IDQ1LTE5IDE5LTQ1LTE5LTQ1LTQ1LTE5LTQ1IDE5LTE5IDQ1em0zMjAgNjRxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOXptLTY0MC0xMjhxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOXptMjU2LTEyOHEtMjYgMC00NSAxOXQtMTkgNDUgMTkgNDUgNDUgMTkgNDUtMTkgMTktNDUtMTktNDUtNDUtMTl6bTI1NiAxMjhxMjYgMCA0NS0xOXQxOS00NS0xOS00NS00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOXptLTM4NC0yNTZxLTI2IDAtNDUgMTl0LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1LTE5LTQ1LTQ1LTE5em0yNTYgMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bS0zODQtMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bTI1NiAwcTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bS0xMjgtMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6bS0xMjgtMTI4cTI2IDAgNDUtMTl0MTktNDUtMTktNDUtNDUtMTktNDUgMTktMTkgNDUgMTkgNDUgNDUgMTl6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyQ0QiIHVuaWNvZGU9Iu+LjSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjY0IDQ0OFYyNTZxMC0xNjktMTI4LTI4NnYtMTk0cTAtMTQtOS0yM3QtMjMtOWgtNjRxLTE0IDAtMjMgOXQtOSAyM3YxMThxLTYzLTIyLTEyOC0yMkg1MTJxLTY1IDAtMTI4IDIydi0xMTBxMC0xNy05LjUtMjguNVQzNTItMjU2aC02NHEtMTMgMC0yMi41IDExLjVUMjU2LTIxNnYxODZRMTI4IDg3IDEyOCAyNTZ2MTkyaDE1MzZ6TTcwNCA4NjRxMC0xNC05LTIzdC0yMy05LTIzIDktOSAyMyA5IDIzIDIzIDkgMjMtOSA5LTIzem02NCA2NHEwLTE0LTktMjN0LTIzLTktMjMgOS05IDIzIDkgMjMgMjMgOSAyMy05IDktMjN6bS02NCA2NHEwLTE0LTktMjN0LTIzLTktMjMgOS05IDIzIDkgMjMgMjMgOSAyMy05IDktMjN6bTEyOCAwcTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptMTA4OC01MTJ2LTY0cTAtMTQtOS0yM3QtMjMtOUgzMnEtMTQgMC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2djY0MHEwIDEwNiA3NSAxODF0MTgxIDc1cTEwOCAwIDE4NC03OCA0NiAxOSA5OCAxMnQ5My0zOWwyMiAyMnExMSAxMSAyMiAwbDQyLTQycTExLTExIDAtMjJsLTMxNC0zMTRxLTExLTExLTIyIDBsLTQyIDQycS0xMSAxMSAwIDIybDIyIDIycS0zNiA0Ni00MC41IDEwNHQyMy41IDEwOHEtMzcgMzUtODggMzUtNTMgMC05MC41LTM3LjVUMjU2IDEyODBWNjQwaDE1MDRxMTQgMCAyMy05dDktMjN6bS04OTYgNDQ4cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptMTkyLTY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptMTkyLTY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptLTY0IDY0cTAtMTQtOS0yM3QtMjMtOS0yMyA5LTkgMjMgOSAyMyAyMyA5IDIzLTkgOS0yM3ptMTI4IDBxMC0xNC05LTIzdC0yMy05LTIzIDktOSAyMyA5IDIzIDIzIDkgMjMtOSA5LTIzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNFIiB1bmljb2RlPSLvi44iIGQ9Ik05OTQgMzQ0cTAtODYtMTctMTk3LTMxLTIxNS01NS0zMTMtMjItOTAtMTUyLTkwdC0xNTIgOTBxLTI0IDk4LTU1IDMxMy0xNyAxMTAtMTcgMTk3IDAgMTY4IDIyNCAxNjh0MjI0LTE2OHptNTQyIDQyNHEwLTI0MC0xMzQtNDM0VDEwNTIgNTRxLTgtMy0xNSAzdC02IDE1cTcgNDggMTAgNjYgNCAzMiA2IDQ3IDEgOSA5IDEyIDE1OSA4MSAyNTUuNSAyMzR0OTYuNSAzMzdxMCAxODAtOTEgMzMwLjVUMTA3MCAxMzMzdC0zMzcgNzRxLTEyNC03LTIzNy02MXQtMTkzLjUtMTQwLjUtMTI4LTIwMlQxMjggNzYzcTEtMTg0IDk5LTMzNi41VDQ4NCAxOTVxNy0zIDktMTIgMy0yMSA2LTQ1IDEtOSA1LTMyLjV0Ni0zNS41cTEtOS02LjUtMTVUNDg4IDUzcS0xNDggNTgtMjYxIDE2OS41dC0xNzMuNSAyNjRUMSA4MDZxNyAxNDMgNjYgMjczLjV0MTU0LjUgMjI3IDIyNSAxNTcuNSAyNzIuNSA3MHExNjQgMTAgMzE1LjUtNDYuNXQyNjEtMTYwLjUgMTc1LTI1MC41VDE1MzYgNzY4em0tNTQyIDMycTAtOTMtNjUuNS0xNTguNVQ3NzAgNTc2dC0xNTguNSA2NS41VDU0NiA4MDB0NjUuNSAxNTguNVQ3NzAgMTAyNHQxNTguNS02NS41VDk5NCA4MDB6bTI4OC0zMnEwLTEyMi01My41LTIyOC41VDEwODIgMzYycS04LTYtMTYtMnQtMTAgMTRxLTYgNTItMjkgOTItNyAxMCAzIDIwIDU4IDU0IDkxIDEyN3QzMyAxNTVxMCAxMTEtNTguNSAyMDRUOTM4IDExMTMuNSA3MjYgMTE1MHEtMTMzLTE1LTIyOS0xMTNUMzg4IDgwNnEtMTAtOTIgMjMuNS0xNzZUNTEwIDQ4NnExMC0xMCAzLTIwLTI0LTQxLTI5LTkzLTItOS0xMC0xM3QtMTYgMnEtOTUgNzQtMTQ4LjUgMTgzVDI1OCA3NzlxMyAxMzEgNjkgMjQ0dDE3NyAxODEuNSAyNDEgNzQuNXExNDQgNyAyNjgtNjB0MTk2LjUtMTg3LjVUMTI4MiA3Njh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDAiIHVuaWNvZGU9Iu+LkCIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMTI4aDEyODB2NzY4SDI1NlYxMjh6bTE1MzYgMTEyMFYzMnEwLTY2LTQ3LTExM3QtMTEzLTQ3SDE2MHEtNjYgMC0xMTMgNDdUMCAzMnYxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEMSIgdW5pY29kZT0i74uRIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMjI0VjMycTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwIDMydjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDIiIHVuaWNvZGU9Iu+LkiIgaG9yaXotYWR2LXg9IjIwNDgiIGQ9Ik0yNTYgMGg3Njh2NTEySDI1NlYwem0xMDI0IDUxMmg1MTJ2NzY4aC03Njh2LTI1Nmg5NnE2NiAwIDExMy00N3Q0Ny0xMTNWNTEyem03NjggODY0VjQxNnEwLTY2LTQ3LTExM3QtMTEzLTQ3aC02MDhWLTk2cTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwLTk2djk2MHEwIDY2IDQ3IDExM3QxMTMgNDdoNjA4djM1MnEwIDY2IDQ3IDExM3QxMTMgNDdoOTYwcTY2IDAgMTEzLTQ3dDQ3LTExM3oiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEMyIgdW5pY29kZT0i74uTIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTExNzUgMjE1bDE0NiAxNDZxMTAgMTAgMTAgMjN0LTEwIDIzbC0yMzMgMjMzIDIzMyAyMzNxMTAgMTAgMTAgMjN0LTEwIDIzbC0xNDYgMTQ2cS0xMCAxMC0yMyAxMHQtMjMtMTBMODk2IDgzMmwtMjMzIDIzM3EtMTAgMTAtMjMgMTB0LTIzLTEwTDQ3MSA5MTlxLTEwLTEwLTEwLTIzdDEwLTIzbDIzMy0yMzMtMjMzLTIzM3EtMTAtMTAtMTAtMjN0MTAtMjNsMTQ2LTE0NnExMC0xMCAyMy0xMHQyMyAxMGwyMzMgMjMzIDIzMy0yMzNxMTAtMTAgMjMtMTB0MjMgMTB6bTYxNyAxMDMzVjMycTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwIDMydjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ0IiB1bmljb2RlPSLvi5QiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI1NyA0MjVsLTE0Ni0xNDZxLTEwLTEwLTIzLTEwdC0yMyAxMEw4OTYgNDQ4IDcyNyAyNzlxLTEwLTEwLTIzLTEwdC0yMyAxMEw1MzUgNDI1cS0xMCAxMC0xMCAyM3QxMCAyM2wxNjkgMTY5LTE2OSAxNjlxLTEwIDEwLTEwIDIzdDEwIDIzbDE0NiAxNDZxMTAgMTAgMjMgMTB0MjMtMTBsMTY5LTE2OSAxNjkgMTY5cTEwIDEwIDIzIDEwdDIzLTEwbDE0Ni0xNDZxMTAtMTAgMTAtMjN0LTEwLTIzbC0xNjktMTY5IDE2OS0xNjlxMTAtMTAgMTAtMjN0LTEwLTIzek0yNTYgMTI4aDEyODB2MTAyNEgyNTZWMTI4em0xNTM2IDExMjBWMzJxMC02Ni00Ny0xMTN0LTExMy00N0gxNjBxLTY2IDAtMTEzIDQ3VDAgMzJ2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMy00N3Q0Ny0xMTN6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDUiIHVuaWNvZGU9Iu+LlSIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMDcwIDM1OGwzMDYgNTY0SDcyMkw0MTYgMzU4aDY1NHptNzIyIDI4MnEwLTE4Mi03MS0zNDhUMTUzMCA2dC0yODYtMTkxLTM0OC03MS0zNDggNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4NiAxOTEgMzQ4IDcxIDM0OC03MSAyODYtMTkxIDE5MS0yODYgNzEtMzQ4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ2IiB1bmljb2RlPSLvi5YiIGhvcml6LWFkdi14PSIxNzk0IiBkPSJNMTI5MSAxMDYwcS0xNSAxNy0zNSA4LjV0LTI2LTI4LjUgNS0zOHExNC0xNyA0MC0xNC41dDM0IDIwLjUtMTggNTJ6TTg5NSA4MTRxLTgtOC0xOS41LTh0LTE4LjUgOHEtOCA4LTggMTl0OCAxOHE3IDggMTguNSA4dDE5LjUtOHE3LTcgNy0xOHQtNy0xOXptMTY1LTc0bC0zNS0zNXEtMTItMTMtMjkuNS0xM1Q5NjUgNzA1bC0zOCAzOHEtMTIgMTMtMTIgMzB0MTIgMzBsMzUgMzVxMTIgMTIgMjkuNSAxMnQzMC41LTEybDM4LTM5cTEyLTEyIDEyLTI5LjV0LTEyLTI5LjV6TTk1MSA4NzBxLTctOC0xOC41LTh0LTE5LjUgOHEtNyA4LTcgMTl0NyAxOXE4IDggMTkgOHQxOS04IDgtMTktOC0xOXptNDAzIDk4cS0zNC02NC0xMDcuNS04NS41VDExMTkgODk5cS0zOCAyOC02MSA2Ni41dC0yMSA4Ny41IDM5IDkyIDc1LjUgNTMgNzAuNS01IDcwLTUxcTItMiAxMy0xMi41dDE0LjUtMTMuNSAxMy0xMy41IDEyLjUtMTUuNSAxMC0xNS41IDguNS0xOCA0LTE4LjUgMS0yMS01LTIyLTkuNS0yNHptMjAxLTQ4MnEzIDIwLTguNSAzNC41VDE1MTkgNTQydC0zMyAxNy0yMyAyMHEtNDAgNzEtODQgOTguNVQxMjY2IDY4OXExOSAxMyA0MCAxOC41dDMzIDQuNWwxMi0xcTIgNDUtMzQgOTAgNiAyMCA2LjUgNDAuNVQxMzIxIDg3MmwtMyAxMHE0MyAyNCA3MSA2NXQzNCA5MXExMCA4NC00MyAxNTAuNXQtMTM3IDc2LjVxLTYwIDctMTE0LTE4LjV0LTgyLTc0LjVxLTMwLTUxLTMzLjUtMTAxdDE0LjUtODcgNDMuNS02NCA1Ni41LTQycS00NSA0LTg4IDM2dC01NyA4OHEtMjggMTA4IDMyIDIyMi0xNiAyMS0yOSAzMi01MCAwLTg5LTE5IDE5IDI0IDQyIDM3dDM2IDE0bDEzIDFxMCA1MC0xMyA3OC0xMCAyMS0zMi41IDI4LjV0LTQ3LTMuNS0zNy41LTQwcTIgNCA0IDctNy0yOC02LjUtNzUuNXQxOS0xMTdUOTIzIDEwNDRxLTI1LTE0LTQ3LTM2LTM1LTE2LTg1LjUtNzAuNVQ3MDYgODM2bC0zMy00NnEtOTAtMzQtMTgxLTEyNS41VDQxNyA1MDJxMS0xNiAxMS0yNy0xNS0xMi0zMC0zMC0yMS0yNS0yMS01NHQyMS41LTQwIDYzLjUgNnE0MSAxOSA3NyA0OS41dDU1IDYwLjVxLTIgMi02LjUgNXQtMjAuNSA3LjUtMzMgMy41cTIzIDUgNTEgMTIuNXQ0MCAxMCAyNy41IDYgMjYgNCAyMy41LjVxMTQtNyAyMiAzNCA3IDM3IDcgOTAgMCAxMDItNDAgMTUwIDEwNi0xMDMgMTAxLTIxOS0xLTI5LTE1LTUwdC0yNy0yN2wtMTMtNnEtNC03LTE5LTMydC0yNi00NS41LTI2LjUtNTItMjUtNjEtMTctNjNUNjE3IDE2OHQxMC02M3EtMzUgNTQtMzcgODAtMjItMjQtMzQuNS0zOVQ1MjIgMTA0dC0zMC41LTQ2VDQ3NSAxN3QtLjUtMzhUNTAwLTQ4cTQ1LTI1IDE0NCA2NHQxOTAuNSAyMjEuNVQ5NTcgNDY2cTg2IDUyIDE0NSAxMTUuNXQ4NiAxMTkuNXE0Ny05MyAxNTQtMTc4IDEwNC04MyAxNjctODAgMzkgMiA0NiA0M3ptMjM5IDE1NHEwLTE4Mi03MS0zNDhUMTUzMiA2dC0yODYuNS0xOTFUODk3LTI1NnQtMzQ4LjUgNzFUMjYyIDYgNzEgMjkyIDAgNjQwdDcxIDM0OCAxOTEgMjg2IDI4Ni41IDE5MSAzNDguNSA3MSAzNDguNS03MSAyODYuNS0xOTEgMTkxLTI4NiA3MS0zNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDciIHVuaWNvZGU9Iu+LlyIgZD0iTTUxOCAxMzUzVjY5OHExMDMtMSAxOTEuNSAxLjVUODM1IDcwNWwzNyAzcTY4IDIgOTAuNSAyNC41VDEwMDIgODI3bDMzIDE0MmgxMDNsLTE0LTMyMiA3LTMxOWgtMTAzbC0yOSAxMjdxLTE1IDY4LTQ1IDkzdC04NCAyNnEtODcgOC0zNTIgOFYyNnEwLTc4IDQzLjUtMTE1LjVUNjk1LTEyN2gzNTdxMzUgMCA1OS41IDJ0NTUgNy41IDU0IDE4IDQ4LjUgMzIgNDYgNTAuNSAzOSA3M2w5MyAyMTZoODlxLTYtMzctMzEuNS0yNTJUMTQ3NC0yNTZxLTE0NiA1LTI2My41IDh0LTE2Mi41IDRIMzc2TDAtMjU2djEwMmwxMjcgMjVxNjcgMTMgOTEuNSAzN1QyNDQtMTNsOCA2NDNxMyA0MDItOCA2NDUtMiA2MS0yNS41IDg0dC05MS41IDM2TDAgMTQxOXYxMDJsMzc2LTEyaDcwMnExMzkgMCAzNzQgMjctNi02OC0xNC0xOTQuNXQtMTItMjE5LjVsLTUtOTJoLTkzbC0zMiAxMjRxLTMxIDEyMS03NCAxNzkuNXQtMTEzIDU4LjVINTYxcS0yOCAwLTM1LjUtOC41VDUxOCAxMzUzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ4IiB1bmljb2RlPSLvi5giIGQ9Ik05MjIgNzM5VjU1N3EwLTQgLjUtMTV0MC0xNWwtMS41LTEyLTMuNS0xMS41LTYuNS03LjUtMTEtNS41LTE2LTEuNXYzMDlxOSAwIDE2LTF0MTEtNSA2LjUtNS41IDMuNS05LjUgMS0xMC41VjczOXptMzE2LTk2VjUyMnEwLTEgLjUtMTIuNXQwLTE1LjUtMi41LTExLjUtNy41LTEwLjUtMTMuNS0zcS05IDAtMTQgOS00IDEwLTQgMTY1djI0LjVsMS41IDguNSAzLjUgNyA1IDUuNSA4IDEuNXE2IDAgMTAtMS41dDYuNS00LjUgNC02IDItOC41LjUtOFY2NDN6TTE4MCA0MDdoMTIydjQ3MkgxODBWNDA3em00MzQgMGgxMDZ2NDcySDU2MWwtMjgtMjIxcS0yMCAxNDgtMzIgMjIxSDM0M1Y0MDdoMTA3djMxMmw0NS0zMTJoNzZsNDMgMzE5VjQwN3ptNDI1IDMwNXEwIDY3LTUgOTAtMyAxNi0xMSAyOC41dC0xNyAyMC41LTI1IDE0LTI2LjUgOC41LTMxIDQtMjkgMS41SDc2MlY0MDdoNTZxMTY5LTEgMTk3IDI0LjV0MjUgMTgwLjVxLTEgNjItMSAxMDB6bTMxNy0xOTd2MTMzcTAgMjktMiA0NXQtOS41IDMzLjUtMjQuNSAyNS00NiA3LjVxLTQ2IDAtNzctMzR2MTU0aC0xMTdWNDA3aDExMGw3IDMwcTMwLTM2IDc3LTM2IDUwIDAgNjYgMzAuNXQxNiA4My41em0xODAgNzMzVjMycTAtNjYtNDctMTEzdC0xMTMtNDdIMTYwcS02NiAwLTExMyA0N1QwIDMydjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDEyMTZxNjYgMCAxMTMtNDd0NDctMTEzeiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQ5IiB1bmljb2RlPSLvi5kiIGhvcml6LWFkdi14PSIyMTc2IiBkPSJNMTE0My0xOTdxLTYgMS0xMSA0LTEzIDgtMzYgMjN0LTg2IDY1VDg5My41LS41dC0xMTIgMTQwVDY5MiAzMTJxLTE3IDMtMTc1IDM3IDY2LTIxMyAyMzUtMzYydDM5MS0xODR6TTUwMiA0MDlsMTY4LTI4cS0yNSA3Ni00MSAxNjcuNVQ2MTAgNjk0bC00IDUzcS04NC04Mi0xMjEtMjI0IDUtNjUgMTctMTE0em0xMTAgNjA5cS00My02NC03Ny0xNDggNDQgNDYgNzQgNjh6bTE0MzctNDM0cTAgMTYxLTYyIDMwN3QtMTY3LjUgMjUyLTI1MC41IDE2OC41LTMwNCA2Mi41cS0xNDcgMC0yODEtNTIuNVQ3NDQgMTE3M3EtMzAtNTgtNDUtMTYwIDYwIDUxIDE0MyA4My41dDE1OC41IDQzIDE0MyAxMy41IDEwOC41LTFsNDAtM3EzMy0xIDUzLTE1LjV0MjQuNS0zMyA2LjUtMzctMS0yOC41cS0xMjYgMTEtMjI3LjUuNXQtMTgzLTQzLjVUODIyIDkyMC41IDY5MSA4MjJxNC0zNiAxMS41LTkyLjV0MzUuNS0xNzhUODAwIDM3MnExMjMtNiAyNDcuNSAxNC41VDEyNjIgNDQwdDE2Mi41IDY3IDEwOS41IDU5bDM3IDI0cTIyIDE2IDM5LjUgMjAuNXQzMC41LTUgMTctMzQuNXExNC05Ny0zOS0xMjEtMjA4LTk3LTQ2Ny0xMzQtMTM1LTIwLTMxNy0xNiA0MS05NiAxMTAtMTc2LjV0MTM3LTEyNyAxMzAuNS03OVQxMzE0LTEyNmwzOS0xMnExNDMtMjMgMjYzIDE1IDE5NSA5OSAzMTQgMjg5dDExOSA0MTh6bTc0IDM3cS0xNC0xMzUtNDAtMjEyLTcwLTIwOC0xODEuNS0zNDYuNVQxNTgzLTE5MXEtNDgtMzMtODItNDQtNzItMjYtMTYzLTE2LTM2LTMtNzMtMy0yODMgMC01MDQuNSAxNzNUNDY1IDM2MXEtMSAwLTQgLjV0LTUgLjVxLTYtNTAgMi41LTExMi41dDI2LTExNSAzNi05OFQ1NTItMzVsMTQtMjZxOC0xMiA1NC04Mi03MSAzOC0xMjQuNSAxMDYuNXQtNzguNSAxNDAtMzkuNSAxMzdUMzYwIDM0OGwtMiA0MnEtNSAyLTMzLjUgMTIuNXQtNDguNSAxOC01MyAyMC41LTU3LjUgMjUtNTAgMjUuNS00Mi41IDI3VDQ4IDU0NHExOS0xMCA1MC41LTI1LjV0MTEzLTQ1LjVUMzU3IDQzNWwyIDMycTExIDE0OSA5NCAyOTAgNDEgMjAyIDE3NiAzNjUgMjggMTE1IDgxIDIxNCAxNSAyOCAzMiA0NXQ0OSAzMnExNTggNzQgMzAzLjUgMTA0dDMwMiAxMSAzMDYuNS05N3EyMjAtMTE1IDMzMy0zMzZ0ODctNDc0eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRBIiB1bmljb2RlPSLvi5oiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTM0MSA3NTJxMjkgNDQtNi41IDEyOS41VDEyMTMgMTAyNHEtNTggMzktMTI1LjUgNTMuNXQtMTE4IDQuNS02OC41LTM3cS0xMi0yMy00LjUtMjh0NDIuNS0xMHEyMy0zIDM4LjUtNXQ0NC41LTkuNSA1Ni0xNy41cTM2LTEzIDY3LjUtMzEuNXQ1My0zNyA0MC0zOC41IDMwLjUtMzggMjItMzQuNSAxNi41LTI4LjUgMTItMTguNSAxMC41LTYgMTEgOS41em0zNjMtNTc0cS01Mi0xMjctMTQ4LjUtMjIwVDEzNDEtMTgzLjUgMTA4OC0yNDR0LTI2NiAxMy41LTI1MSA5MVQzNjEgMjIgMjE5LjUgMjU3LjUgMTczIDU2MXExIDQxIDguNSA4NC41dDEyLjUgNjQgMjQgODAuNSAyMyA3M3EtNTEtMjA4IDEtMzk3dDE3My0zMThUNzA2LTU4dDM0Ni04MyAzNDkgNzQuNVQxNjkwIDE3OHEyMCAyNyAxOCAxNCAwLTQtNC0xNHptLTIzOSA0NDlxMC0xMDQtNDAuNS0xOTlUMTMxNiAyNjR0LTE2Mi0xMDkuNVQ5NTYgMTE0dC0xOTggNDAuNVQ1OTYgMjY0IDQ4Ny41IDQyOCA0NDcgNjI3dDQwLjUgMTk5VDU5NiA5OTB0MTYyIDEwOS41IDE5OCA0MC41IDE5OC00MC41VDEzMTYgOTkwdDEwOC41LTE2NCA0MC41LTE5OXptMjg3IDI4OHEtNjUgMTQ3LTE4MC41IDI1MXQtMjUzIDE1My41LTI5MiA1My41LTMwMS0zNi41LTI3NS41LTEyOVQyMzAgOTk2IDk5IDY5OSA4OSAzMjZRNDAgNDg3IDM3LjUgNjM3LjVUNzMgOTEwdDEwOSAyMjcgMTY1LjUgMTgwLjUgMjA3IDEyNiAyMzIgNzEgMjQyLjUgOSAyMzYtNTQgMjE2LTEyNC41IDE3OC0xOTdxMzMtNTAgNjItMTIxdDMxLTExMnptLTYyLTM0MnExMiAyNDQtMTM2LjUgNDE2VDExNTcgMTIyOXEtOCAwLTEwIDV0MjQgOHExMjUtNCAyMzAtNTB0MTczLTEyMCAxMTYtMTY4LjUgNTguNS0xOTktMS0yMDhUMTY4NiAyOTl0LTEyMi41LTE2Ny0xODUtMTE3LjVUMTEzMC0zMnExMDggMzAgMjAxLjUgODB0MTc0IDEyM1QxNjM1IDM0Ny41dDU1IDIyNS41eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRCIiB1bmljb2RlPSLvi5siIGQ9Ik0xOTIgMjU2VjEyOEg4MHEtMTYgMC0xNiAxNnYxNkgxNnEtMTYgMC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2cTAgMTYgMTYgMTZoMTEyem0wIDI1NlYzODRIODBxLTE2IDAtMTYgMTZ2MTZIMTZxLTE2IDAtMTYgMTZ2MzJxMCAxNiAxNiAxNmg0OHYxNnEwIDE2IDE2IDE2aDExMnptMCAyNTZWNjQwSDgwcS0xNiAwLTE2IDE2djE2SDE2cS0xNiAwLTE2IDE2djMycTAgMTYgMTYgMTZoNDh2MTZxMCAxNiAxNiAxNmgxMTJ6bTAgMjU2Vjg5Nkg4MHEtMTYgMC0xNiAxNnYxNkgxNnEtMTYgMC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2cTAgMTYgMTYgMTZoMTEyem0wIDI1NnYtMTI4SDgwcS0xNiAwLTE2IDE2djE2SDE2cS0xNiAwLTE2IDE2djMycTAgMTYgMTYgMTZoNDh2MTZxMCAxNiAxNiAxNmgxMTJ6bTEwODggMTYwVi0zMnEwLTQwLTI4LTY4dC02OC0yOEgzNTJxLTQwIDAtNjggMjh0LTI4IDY4djE0NzJxMCA0MCAyOCA2OHQ2OCAyOGg4MzJxNDAgMCA2OC0yOHQyOC02OHptMjU2LTEyMzJ2LTMycTAtMTYtMTYtMTZoLTQ4di0xNnEwLTE2LTE2LTE2aC0xMTJ2MTI4aDExMnExNiAwIDE2LTE2di0xNmg0OHExNiAwIDE2LTE2em0wIDI1NnYtMzJxMC0xNi0xNi0xNmgtNDh2LTE2cTAtMTYtMTYtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYtMTZ2LTE2aDQ4cTE2IDAgMTYtMTZ6bTAgMjU2di0zMnEwLTE2LTE2LTE2aC00OHYtMTZxMC0xNi0xNi0xNmgtMTEydjEyOGgxMTJxMTYgMCAxNi0xNnYtMTZoNDhxMTYgMCAxNi0xNnptMCAyNTZ2LTMycTAtMTYtMTYtMTZoLTQ4di0xNnEwLTE2LTE2LTE2aC0xMTJ2MTI4aDExMnExNiAwIDE2LTE2di0xNmg0OHExNiAwIDE2LTE2em0wIDI1NnYtMzJxMC0xNi0xNi0xNmgtNDh2LTE2cTAtMTYtMTYtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYtMTZ2LTE2aDQ4cTE2IDAgMTYtMTZ6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyREMiIHVuaWNvZGU9Iu+LnCIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNTY2IDQxOWwtMTY3LTMzIDE4Ni0xMDdxMjMtMTMgMjkuNS0zOC41VDE2MDggMTkycS0xNC0yMy0zOS0yOS41dC00OCA2LjVsLTE4NiAxMDYgNTUtMTYwcTEzLTM4LTEyLTYzLjVUMTMxNy41IDMxIDEyNjkgNzNsLTEwMiAzMDAtMjcxIDE1NlYyMTZsMjA4LTIzOHExNi0xOCAxNy0zOXQtMTEtMzYuNS0yOC41LTI1LTM3LTUuNS0zNi41IDIyTDg5NiAyMnYtMjE0cTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1VjIyTDY1Ni0xMDZxLTE2LTE4LTM2LjUtMjJ0LTM3IDUuNS0yOC41IDI1VDU0My02MXQxNyAzOWwyMDggMjM4djMxM0w0OTcgMzczIDM5NSA3M3EtMTMtMzctNDguNS00MlQyODYgNTEuNSAyNzQgMTE1bDU1IDE2MC0xODYtMTA2cS0yMy0xMy00OC02LjVUNTYgMTkycS0xMyAyMy02LjUgNDguNVQ3OSAyNzlsMTg2IDEwNy0xNjcgMzNxLTI5IDYtNDIgMjl0LTguNSA0Ni41IDI1LjUgNDAgNTAgMTAuNWwzMTAtNjIgMjcxIDE1Ny0yNzEgMTU3LTMxMC02MnEtNC0xLTEzLTEtMjcgMC00NCAxOHQtMTkgNDAgMTEgNDMgNDAgMjZsMTY3IDMzLTE4NiAxMDdxLTIzIDEzLTI5LjUgMzguNVQ1NiAxMDg4dDM5IDMwIDQ4LTdsMTg2LTEwNi01NSAxNjBxLTEzIDM4IDEyIDYzLjV0NjAuNSAyMC41IDQ4LjUtNDJsMTAyLTMwMCAyNzEtMTU2djMxM2wtMjA4IDIzOHEtMTYgMTgtMTcgMzl0MTEgMzYuNSAyOC41IDI1IDM3IDUuNSAzNi41LTIybDExMi0xMjh2MjE0cTAgMjYgMTkgNDV0NDUgMTkgNDUtMTkgMTktNDV2LTIxNGwxMTIgMTI4cTE2IDE4IDM2LjUgMjJ0MzctNS41IDI4LjUtMjUgMTEtMzYuNS0xNy0zOWwtMjA4LTIzOFY3NTFsMjcxIDE1NiAxMDIgMzAwcTEzIDM3IDQ4LjUgNDJ0NjAuNS0yMC41IDEyLTYzLjVsLTU1LTE2MCAxODYgMTA2cTIzIDEzIDQ4IDYuNXQzOS0yOS41cTEzLTIzIDYuNS00OC41VDE1ODUgMTAwMWwtMTg2LTEwNyAxNjctMzNxMjctNSA0MC0yNnQxMS00My0xOS00MC00NC0xOHEtOSAwLTEzIDFsLTMxMCA2Mi0yNzEtMTU3IDI3MS0xNTcgMzEwIDYycTI5IDYgNTAtMTAuNXQyNS41LTQwLTguNS00Ni41LTQyLTI5eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkREIiB1bmljb2RlPSLvi50iIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQ3MyA2MDdxNyAxMTgtMzMgMjI2LjV0LTExMyAxODktMTc3IDEzMS0yMjEgNTcuNXEtMTE2IDctMjI1LjUtMzJ0LTE5Mi0xMTAuNS0xMzUtMTc1VDMxNyA2NzNxLTctMTE4IDMzLTIyNi41dDExMy0xODkgMTc3LjUtMTMxVDg2MiA2OXExNTUtOSAyOTMgNTl0MjI0IDE5NS41IDk0IDI4My41em0zMTkgOTI5bC0zNDktMzQ4cTEyMC0xMTcgMTgwLjUtMjcydDUwLjUtMzIxcS0xMS0xODMtMTAyLTMzOVQxMzMxIC41IDk5OS0xMjRMMC0yNTYgMzQ3IDkxUTIyNyAyMDcgMTY2LjUgMzYyLjVUMTE2IDY4NHExMSAxODQgMTAyIDM0MHQyNDEuNSAyNTUuNVQ3OTIgMTQwNHExNjcgMjIgNTAwIDY2dDUwMCA2NnoiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJERSIgdW5pY29kZT0i74ueIiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTk0OCA1MDhsMTYzLTMyOWgtNTFMODg1IDUyOSA3MTQgMTc5aC00OWwxNzkgMzc0LTc4IDMzIDIxIDQ5IDI0MC0xMDItMjEtNTB6bS0zODUgNTkybDMwNC0xMzAtMTMwLTMwNC0zMDQgMTMwem0zNDQtMTg1bDI0MC0xMDMtMTAzLTIzOS0yMzkgMTAyem0yODEtMTUwbDE5MS04MS04Mi0xOTAtMTkwIDgxem00OTItMTI1cTAgMTU5LTYyIDMwNHQtMTY3LjUgMjUwLjVUMTIwMCAxMzYydC0zMDQgNjItMzA0LTYyLTI1MC41LTE2Ny41VDE3NCA5NDR0LTYyLTMwNCA2Mi0zMDRUMzQxLjUgODUuNSA1OTItODJ0MzA0LTYyIDMwNCA2MiAyNTAuNSAxNjcuNVQxNjE4IDMzNnQ2MiAzMDR6bTExMiAwcTAtMTgyLTcxLTM0OFQxNTMwIDZ0LTI4Ni0xOTEtMzQ4LTcxLTM0OCA3MVQyNjIgNiA3MSAyOTIgMCA2NDB0NzEgMzQ4IDE5MSAyODYgMjg2IDE5MSAzNDggNzEgMzQ4LTcxIDI4Ni0xOTEgMTkxLTI4NiA3MS0zNDh6Ii8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTAiIHVuaWNvZGU9Iu+LoCIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMzM0IDMwMnEtNCAyNC0yNy41IDM0dC00OS41IDEwLjUtNDguNSAxMi41LTI1LjUgMzhxLTUgNDcgMzMgMTM5LjV0NzUgMTgxIDMyIDEyNy41cS0xNCAxMDEtMTE3IDEwMy00NSAxLTc1LTE2bC0zLTItNS0yLjUtNC41LTItNS0yLTUtLjUtNiAxLjUtNiAzLjUtNi41IDVxLTMgMi05IDguNXQtOSA5LTguNSA3LjUtOS41IDcuNS05LjUgNS41LTExIDQuNS0xMS41IDIuNXEtMzAgNS00OC0zdC00NS0zMXEtMS0xLTktOC41dC0xMi41LTExLTE1LTEwVDg3NiA5MDl0LTE3IDNxLTU0IDI3LTg0IDQwLTQxIDE4LTk0LTV0LTc2LTY1cS0xNi0yOC00MS05OC41VDUyMC41IDY1MXQtNDAtMTM0LTIxLjUtNzNxLTIyLTY5IDE4LjUtMTE5VDU4OCAyNzlxMzAgMiA1MC41IDE1dDM4LjUgNDZxNyAxMyA3OSAxOTkuNVQ4MzMgNzM0cTYgMTEgMjEuNSAxOHQyOS41IDBxMjctMTUgMjEtNTMtMi0xOC01MS0xMzkuNVQ4MDQgNDI3cS02LTM4IDE5LjUtNTYuNXQ2MC41LTcgNTUgNDkuNXE0IDggNDUuNSA5MnQ4MS41IDE2My41IDQ2IDg4LjVxMjAgMjkgNDEgMjggMjkgMCAyNS0zOC0yLTE2LTY1LjUtMTQ3LjVUMTA0MiA0NDBxLTEyLTUzIDEzLTEwM3Q3NC03NHExNy05IDUxLTE1LjV0NzEuNS04IDYyLjUgMTQgMjAgNDguNXpNMzgzIDg2cTMtMTUtNS0yNy41VDM1NSA0M3EtMTQtMy0yNi41IDVUMzEzIDcxcS0zIDE0IDUgMjd0MjIgMTYgMjctNSAxNi0yM3ptNTcwLTI2M3ExMi0xNyA4LjUtMzcuNVQ5NDEtMjQ3dC0zNy41LTgtMzIuNSAyMXEtMTEgMTctNy41IDM3LjVUODg0LTE2NHQzNy41IDggMzEuNS0yMXpNMTc3IDYzNXEtMTgtMjctNDkuNS0zM1Q3MCA2MTVxLTI2IDE4LTMyIDUwdDEyIDU4cTE4IDI3IDQ5LjUgMzN0NTcuNS0xMnEyNi0xOSAzMi01MC41VDE3NyA2MzV6TTE0NjctNDJxMTktMjggMTMtNjEuNXQtMzQtNTIuNS02MC41LTEzLTUxLjUgMzQtMTMgNjEgMzMgNTNxMjggMTkgNjAuNSAxM3Q1Mi41LTM0em0xMTIgNjA0cTY5LTExMyA0Mi41LTI0NC41VDE0ODcgMTEwcS05MC02My0xOTktNjAtMjAtODAtODQuNS0xMjdUMTA2MC0xMjEuNSA5MjAtNjRxLTEyLTktMTMtMTAtMTAzLTcxLTIyNS00OC41VDQ4OSA0cS01MCA3My01MyAxNjQtODMgMTQtMTQyLjUgNzAuNXQtODAuNSAxMjgtMiAxNTJUMjkyIDY1N3EtMzYgNjAtMzggMTI4dDI0LjUgMTI1IDc5LjUgOTguNSAxMjEgNTAuNXEzMiA4NSA5OSAxNDh0MTQ2LjUgOTEuNSAxNjggMTdUMTA1MiAxMjQ5cTcyIDIxIDE0MCAxNy41dDEyOC41LTM2IDEwNC41LTgwIDY3LjUtMTE1VDE1MTAgODk1cTUyLTE2IDg3LTU3dDQ1LjUtODktNS41LTk5LjUtNTgtODcuNXpNNDU1IDEyMjJxMTQtMjAgOS41LTQ0LjVUNDQwIDExMzlxLTE5LTE0LTQzLjUtOS41VDM1OSAxMTU0cS0xNCAyMC05LjUgNDQuNVQzNzQgMTIzN3ExOSAxNCA0My41IDkuNVQ0NTUgMTIyMnptMTU5IDI4MXE0LTE2LTUtMzAuNXQtMjYtMTguNS0zMSA1LjUtMTggMjYuNXEtMyAxNyA2LjUgMzF0MjUuNSAxOHExNyA0IDMxLTUuNXQxNy0yNi41em0xMTg2LTk0OHE0LTIwLTYuNS0zN3QtMzAuNS0yMXEtMTktNC0zNiA2LjV0LTIxIDMwLjUgNi41IDM3IDMwLjUgMjJxMjAgNCAzNi41LTcuNVQxODAwIDU1NXptLTY2NCA4OTNxMTYtMjcgOC41LTU4LjVUMTEwOSAxMzQycS0yNy0xNi01Ny41LTguNVQxMDA1IDEzNjhxLTE2IDI4LTguNSA1OXQzNC41IDQ4IDU4IDkgNDctMzZ6bTc0Ni02NTZxNC0xNS00LTI3LjV0LTIzLTE2LjVxLTE1LTMtMjcuNSA1LjVUMTgxMiA3NzZxLTMgMTUgNSAyOHQyMyAxNnExNCAzIDI2LjUtNXQxNS41LTIzem0tMTkxIDI0MXExNS0yMiAxMC41LTQ5dC0yNi41LTQzcS0yMi0xNS00OS0xMHQtNDIgMjctMTAgNDkgMjcgNDMgNDguNSAxMSA0MS41LTI4eiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkUxIiB1bmljb2RlPSLvi6EiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTIiIHVuaWNvZGU9Iu+LoiIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFMyIgdW5pY29kZT0i74ujIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkU0IiB1bmljb2RlPSLvi6QiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTUiIHVuaWNvZGU9Iu+LpSIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFNiIgdW5pY29kZT0i74umIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkU3IiB1bmljb2RlPSLvi6ciIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9Il82OTgiIHVuaWNvZGU9Iu+LqCIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFOSIgdW5pY29kZT0i74upIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkVBIiB1bmljb2RlPSLvi6oiIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUIiIHVuaWNvZGU9Iu+LqyIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJFQyIgdW5pY29kZT0i74usIiBob3Jpei1hZHYteD0iMTc5MiIvPjxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkVEIiB1bmljb2RlPSLvi60iIGhvcml6LWFkdi14PSIxNzkyIi8+PGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUUiIHVuaWNvZGU9Iu+LriIgaG9yaXotYWR2LXg9IjE3OTIiLz48Z2x5cGggZ2x5cGgtbmFtZT0ibGVzc2VxdWFsIiB1bmljb2RlPSLvlIAiIGhvcml6LWFkdi14PSIxNzkyIi8+PC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.hljs{display:block;background:#fff;padding:.5em;color:#333;overflow-x:auto}.hljs-comment,.hljs-meta{color:#969896}.hljs-emphasis,.hljs-quote,.hljs-string,.hljs-strong,.hljs-template-variable,.hljs-variable{color:#df5000}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#a71d5d}.hljs-attribute,.hljs-bullet,.hljs-literal,.hljs-symbol{color:#0086b3}.hljs-name,.hljs-section{color:#63a35c}.hljs-tag{color:#333}.hljs-attr,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-title{color:#795da3}.hljs-addition{color:#55a532;background-color:#eaffea}.hljs-deletion{color:#bd2c00;background-color:#ffecec}.hljs-link{text-decoration:underline}[dir=rtl] .chart__axis_y g text{text-anchor:start}[dir=rtl] .timeline__group text{text-anchor:end}[dir=rtl] .chart__legend{right:10%}[dir=rtl] .fa-angle-left:before{content:""}[dir=rtl] .tooltip_position_bottom{width:100px}.alert__code{white-space:pre}.alert_status_failed{background:#ffaca6}.alert_status_broken{background:#ffeca0}.alert_status_passed{background:#a6e19d}.alert_status_skipped{background:#ccc}.alert_status_unknown{background:#ecb7e2}.attachment-row{padding:5px 15px 5px 25px;cursor:pointer;font-size:smaller;display:flex;position:relative;position:-webkit-sticky;position:sticky;top:0}.attachment-row:hover{background:#e4edfe}.attachment-row_selected,.attachment-row_selected:hover{background:#fff}.attachment-row_selected:hover{background:#e4edfe}.attachment-row_selected>.attachment-row__arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.attachment-row__arrow{left:7px;position:absolute}.attachment-row__name{flex:1}.attachment-row__control{padding-left:15px;display:inline-block}.attachment-row__icon{margin-right:5px}.attachment-row__preview{margin-bottom:7px}.attachment-row__content{background-color:#f8f8f9}.attachment-row__content>div{padding:5px}.hljs{background:inherit}.bar{border-radius:3px;background:#eee;display:inline-flex;width:100%}.bar,.bar__fill{height:18px;overflow:hidden}.bar__fill{display:inline-block;background:#04b;text-align:center;color:#fff;font-size:12px;line-height:18px}.bar__fill_status_failed{background:#fd5a3e}.bar__fill_status_broken{background:#ffd050}.bar__fill_status_passed{background:#97cc64}.bar__fill_status_skipped{background:#aaa}.bar__fill_status_unknown{background:#d35ebe}.button{padding:0 13px;font-size:13px;line-height:26px;overflow:hidden;background:transparent;border:1px solid rgba(0,0,0,.2);border-radius:3px;outline:none}.button:hover{border-color:rgba(0,0,0,.3)}.button:active{background:rgba(0,0,0,.05)}.button_active{background:#e8e8e8}.button_inverse{color:#737373;border-color:#666}.button_inverse:hover{border-color:#737373}.button-group{display:flex}.button-group .button{border-radius:0;border-right-width:0}.button-group .button:last-child{border-right-width:1px;border-radius:0 3px 3px 0}.button-group .button:first-child{border-radius:3px 0 0 3px}.button-group .button:hover+.button{border-left-color:rgba(0,0,0,.3)}.island{background:#fff;border:1px solid #e5e5e5;padding:15px 15px 0}.label{vertical-align:baseline;letter-spacing:1px;color:#fff;padding:2px 4px 2px 5px;font-size:80%;border-radius:3px}.label_status_failed{background:#fd5a3e}.label_status_broken{background:#ffd050}.label_status_passed{background:#97cc64}.label_status_skipped{background:#aaa}.label_status_unknown{background:#d35ebe}.label__info{background:#3c58e4}.link{color:#000;transition:color .15s ease-out;text-decoration:none}.link:hover{color:red}.spinner{position:relative;-webkit-animation:spinner 1s linear infinite;animation:spinner 1s linear infinite;width:32px;height:32px}.spinner:before{content:" ";position:absolute;top:0;left:0;right:0;bottom:0;border-radius:100%;border-color:transparent transparent #fc0 #fc0;border-style:solid;border-width:2px}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.splash{margin:auto;text-align:center}.splash__title{font-size:3.5em;line-height:1}.splash__subtitle{color:#999}.step-stats__info{color:#999;font-size:small;vertical-align:bottom}.step-stats__info_time{float:right}.step-stats__info_separator:last-child{display:none}.step-stats__info>span{white-space:nowrap}.text_status_failed{color:#fd5a3e}.text_status_broken{color:#ffd050}.text_status_passed{color:#97cc64}.text_status_skipped{color:#aaa}.text_status_unknown{color:#d35ebe}.widget{margin-bottom:15px;position:relative}.widget_ghost{border:1px dashed #e5e5e5;box-shadow:none;min-height:50px}.widget_ghost>*{display:none}.widget__title{margin-top:0;margin-bottom:15px;font-weight:lighter;text-transform:uppercase}.widget__subtitle{color:#999;font-size:16px;text-transform:none}.widget__noitems{font-size:16px;text-align:center;padding:10px 15px;line-height:1.5em}.widget__flex-line{display:flex}.widget__column{width:50%}.widget__handle{display:none;position:absolute;right:15px;top:15px;color:#999;cursor:move;cursor:-webkit-grab;cursor:grab}.widget__handle:active{cursor:-webkit-grabbing;cursor:grabbing}.widget:hover .widget__handle{display:block}.widget__table{border-top:1px solid #eceff1;margin:0 -15px;word-break:break-all}.widget__table .table__row:last-child{border-bottom:0}.draggable-icon{position:absolute;width:10px;height:15px;right:0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPjxwYXRoIGZpbGw9IiNjY2MiIGQ9Ik0wIDBoM3YzSDB6Ii8+PC9zdmc+);z-index:1}.parameters-table{display:table;font-size:12px;width:100%;padding-right:10px;table-layout:fixed}.parameters-table__row{display:table-row}.parameters-table__cell{display:table-cell;padding:5px;cursor:pointer;word-wrap:break-word}.parameters-table__cell_name{width:25%}.parameters-table__cell_value{width:75%}body{color:#000;font-family:Helvetica,Arial,sans-serif}*{box-sizing:border-box}body,html{height:100%;font-size:14px}#content{height:100%;min-height:100%;overflow:hidden;display:flex;flex-direction:column}#content .app{flex:1}#content>.spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.view{padding:0 15px;margin:0 auto}.view_narrow{max-width:1100px}.view-small{max-width:300px}.view-medium{max-width:600px}.view-large{max-width:1200px}.clickable{cursor:pointer}.long-line{word-break:break-word}.line-nobreak{white-space:nowrap}.preformated-text{white-space:pre-wrap;word-wrap:break-word}.line-ellipsis{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tooltip{position:absolute;background:rgba(50,50,50,.8);color:#fff;text-align:center;padding:0 8px;line-height:24px;font-size:12px;pointer-events:none;z-index:5}.tooltip:before{content:"";position:absolute;border:8px solid transparent}.tooltip_position_top:before{border-top-color:rgba(50,50,50,.8);top:100%;left:50%;margin-left:-8px}.tooltip_position_right:before{border-right-color:rgba(50,50,50,.8);top:4px;left:-16px}.tooltip_position_left:before{border-left-color:rgba(50,50,50,.8);top:4px;left:100%}.tooltip_position_bottom:before{border-bottom-color:rgba(50,50,50,.8);top:-16px;left:50%;margin-left:-8px}.tooltip_position_center{pointer-events:none}.app{background:#fff;display:flex}.app__nav{padding:0}.app__content{position:relative;flex:1;overflow:auto}.app__header{background:#fff}.side-nav{background:#343434;width:180px;display:flex;flex-direction:column;height:100vh;overflow:hidden}.side-nav__head{margin:15px 0;padding-bottom:5px;border-bottom:1px solid #4d4d4d}.side-nav__brand{color:#fff;text-decoration:none;display:block;font-size:26px;line-height:40px;font-weight:700;padding-left:40px;margin-bottom:10px;margin-left:10px;transition:all .3s;background-size:auto auto}.side-nav__brand-text{padding-left:15px}.side-nav__menu{margin:0;left:0;padding:0;list-style-type:none;transition:width .3s}.side-nav__footer{margin-top:auto;margin-bottom:30px;padding-left:0;padding-right:0}.side-nav__item{display:block;font-size:14px}.side-nav__collapse,.side-nav__link{display:block;line-height:24px;color:#999;text-decoration:none;padding:.8em 0}.side-nav__collapse_active,.side-nav__link_active{color:#fff;border-right:4px solid #64b5f6}.side-nav__collapse:hover,.side-nav__link:hover{color:#fff}.side-nav__icon{position:absolute;left:15px;font-size:22px;vertical-align:middle;margin:0 3px}.side-nav__text{padding-left:55px;padding-right:7px}.side-nav__language-small{display:block;text-transform:capitalize;padding:0 5px;text-overflow:".";max-width:30px;margin:0 auto}.side-nav__collapse{cursor:pointer}.side-nav__collapse .side-nav__icon{left:20px;transition:-webkit-transform .1s;transition:transform .1s;transition:transform .1s,-webkit-transform .1s}.side-nav_collapsed{width:60px}.side-nav_collapsed .side-nav__collapse .side-nav__icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.side-nav_collapsed .side-nav__brand-text,.side-nav_collapsed .side-nav__text{visibility:hidden;opacity:0}.side-nav_collapsed .side-nav__collapse,.side-nav_collapsed .side-nav__link{white-space:nowrap}[dir=rtl] .side-nav__brand{background:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTAwIDUwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpieD0iaHR0cHM6Ly9ib3h5LXN2Zy5jb20iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNYXhZTWluIj48cGF0aCBkPSJNMTQyLjE0MyAxNjcuMjE2Yy0xOC45NzEgMjQuNzEzLTI4LjEzOSA1My44NjUtMjguMTE4IDgyLjc4NEgzOC4xOTdjLS4wMzItNDUuMDQ3IDE0LjI0OC05MC40NTcgNDMuNzk4LTEyOC45NTNhMjEzLjg3IDIxMy44NyAwIDAgMSAxOC4yMzEtMjAuODIxbDUzLjYyMiA1My42MjJhMTM3LjM0IDEzNy4zNCAwIDAgMC0xMS43MDUgMTMuMzY4em0zMDUuOTAyIDI4Ni41OTZjLTE2LjE0MiAxMi43NzktNDAuMDU3IDkuNDYtNTMuNDE2LTcuNDE0LTQuODU1LTYuMTMzLTcuNjQ3LTEzLjIxNS04LjQ1OS0yMC4zNThoLS4yNjh2LTEzLjU2NmMtMzguNjk4IDMyLjQzNS04Ny4wODYgNDkuMjc5LTEzNS45MDIgNDkuMzE3di03NS44MjZjMzUuMjA0LS4wMjggNzAuMDYxLTEzLjY3MiA5Ni4xNDMtMzkuODIyTDQ1MS4xIDQ1MS4xYTM1Ljk2OCAzNS45NjggMCAwIDEtMy4wNTUgMi43MTJ6bS0yODAuODQtOTUuOTY0YzI0LjcxNiAxOC45NzIgNTMuODcyIDI4LjE0IDgyLjc5NSAyOC4xMTd2NzUuODI2Yy00NS4wNTEuMDM1LTkwLjQ2Ny0xNC4yNDUtMTI4Ljk2Ni00My43OTdhMjEzLjcyNCAyMTMuNzI0IDAgMCAxLTIwLjgwOC0xOC4yMmw1My42MjEtNTMuNjIxYTEzNy4zNzUgMTM3LjM3NSAwIDAgMCAxMy4zNTggMTEuNjk1em0yMTguNjk3LTEwOC41MDVoLjA1Yy0uMTkzLTM0Ljk3OS0xMy44MjUtNjkuNTY0LTM5LjgxLTk1LjQ4NWw1My42MjEtNTMuNjIxYzQwLjU2NyA0MC40NjggNjEuODA4IDk0LjQ5NCA2Mi4wMTggMTQ5LjEwNmguMDIyVjI1MGgtNzUuOTAxem0tNTMuMTI3LTEwNy4xODljLTI0LjcxMS0xOC45NjgtNTMuODU5LTI4LjEzNS04Mi43NzUtMjguMTE3VjM4LjIwOGM0NS4wNDQtLjAzIDkwLjQ1IDE0LjI1IDEyOC45NDIgNDMuNzk3YTIxMy42MjYgMjEzLjYyNiAwIDAgMSAyMC44MjEgMTguMjMybC01My42MjEgNTMuNjIxYTEzNy4yIDEzNy4yIDAgMCAwLTEzLjM2Ny0xMS43MDR6bS0xNzguOTI3IDExLjY5NGwtNTMuNjIyLTUzLjYyMkMxNDAuODU5IDU5LjQ5MyAxOTUuMTYxIDM4LjI0NSAyNTAgMzguMjA4djc1LjgyOWMtMzUuMjA2LjAyMy03MC4wNjYgMTMuNjYzLTk2LjE1MiAzOS44MTF6bTIwMy45ODkgMTc4LjkzOGMxOC4xMjQtMjMuNjEyIDI3LjMwMS01MS4yNzUgMjguMDY1LTc4LjkxNlYyNTBoNzUuOTAxdjE3Ni4wNGgtLjAyMmMtLjI3NiA5LjMtMy44OTkgMTguMzExLTEwLjY4MSAyNS4wNkwzNDYuMTQzIDM0Ni4xNDNhMTM3LjM1NCAxMzcuMzU0IDAgMCAwIDExLjY5NC0xMy4zNTd6TTM4LjE5NyAyNTBoNzUuODI4Yy4wMjUgMzUuMjA3IDEzLjY2OCA3MC4wNjggMzkuODIyIDk2LjE1M2wtNTMuNjIxIDUzLjYyMUM1OS40ODggMzU5LjE0MiAzOC4yMzcgMzA0Ljg0IDM4LjE5NyAyNTB6IiBmaWxsPSIjYWFhIi8+PHBhdGggZD0iTTk1OS43MTktMzQ4LjEwMmguMDVjLS4yMjQtNDAuNTU2LTE4LjUxNC04MC41ODMtNTMuMTc3LTEwNy4xODktNTkuNTY0LTQ1LjcyMS0xNDQuOTEzLTM0LjUtMTkwLjYzMiAyNS4wNjItNDUuNzIzIDU5LjU2Mi0zNC41MDIgMTQ0LjkxMSAyNS4wNjIgMTkwLjYzMiA1OS41NjIgNDUuNzIxIDE0NC45MTMgMzQuNSAxOTAuNjMyLTI1LjA2MiAxOC4xMjQtMjMuNjEyIDI3LjMwMS01MS4yNzUgMjguMDY1LTc4LjkxNnptNzUuOTAxIDB2MTc2LjY5N2gtLjAyMmMtLjMxNSAxMC42MS00Ljk4NiAyMC44NDUtMTMuNzM2IDI3Ljc3Mi0xNi4xNDIgMTIuNzc5LTQwLjA1NyA5LjQ2LTUzLjQxNi03LjQxNC00Ljg1NS02LjEzMy03LjY0Ny0xMy4yMTUtOC40NTktMjAuMzU4aC0uMjY4di0xMy41NjZjLTc0LjQxMiA2Mi4zNjgtMTg0LjY1MiA2Ny4wOTMtMjY0Ljg2OCA1LjUyLTkyLjc4LTcxLjIyLTExMC4yNTgtMjA0LjE2Ny0zOS4wMzktMjk2Ljk0NyA3MS4yMTgtOTIuNzgyIDIwNC4xNjktMTEwLjI2IDI5Ni45NDctMzkuMDQyIDU0LjA5OCA0MS41MjYgODIuNTk2IDEwNC4wMzggODIuODM5IDE2Ny4zMzh6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNMzU3LjcwMiAzNTYuMjMzaDBNMzAxLjcxIDM0OC4wNmgwIi8+PHBhdGggZD0iTS03NzEuODY1IDEyODMuOTA4aC4wMjljLS4xMjgtMjMuMDY5LTEwLjUzMi00NS44MzctMzAuMjQ4LTYwLjk3MWE3Ny41MiA3Ny41MiAwIDAgMC0xNi4xNzYtOS41NjJsMTcuNDY5LTM5LjQ0NmExMjAuNzYyIDEyMC43NjIgMCAwIDEgMjQuOTY4IDE0Ljc5NGMzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NWguMDEzdjg1LjI3OGwtNTguMzg3LTM4LjgwOWM5LjgxMy0xMy4yMSAxNC43ODktMjguNTU4IDE1LjIxMy00My44OTR6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS05MjguNTcgMTI0NC41MDNjLTI2LjAwOCAzMy44OC0xOS42MjUgODIuNDI4IDE0LjI1NiAxMDguNDM1IDMzLjg4IDI2LjAwNyA4Mi40MjkgMTkuNjI0IDEwOC40MzQtMTQuMjU2LjI1NC0uMzMuNTA0LS42NjIuNzUyLS45OTZsNTguMzg2IDM4LjgwOXYxNS4yMzJoLS4wMTNjLS4xNzggNi4wMzUtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OS0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy00Mi4zMjYgMzUuNDc2LTEwNS4wMzQgMzguMTY0LTE1MC42NjEgMy4xNC01Mi43NzUtNDAuNTExLTYyLjcxNy0xMTYuMTM0LTIyLjIwNi0xNjguOTA5IDM0LjQ2My00NC44OTggOTQuMzQtNTguNzk1IDE0My45NDEtMzcuMDAybC0xNy40NjkgMzkuNDQ2Yy0zMS44MTQtMTMuODk5LTcwLjE2OS00Ljk2LTkyLjI1OSAyMy44MTh6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS00MzIuNzUzIDEwMjkuMDIzYTE3MS4zNzIgMTcxLjM3MiAwIDEgMS03My4zMjctMjUxLjU1OWwtNjkuMzkzIDE1Ni42OTR6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMCAyMDQuMTMgMTIzLjYxMiAyMy44ODYgMUA3ZGIzMjNjYiIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tNDk2LjEzOCA5MzAuMzExaC4wMjljLS4xMjgtMjMuMDY5LTEwLjUzMi00NS44MzctMzAuMjQ4LTYwLjk3MS0zMy44ODEtMjYuMDA3LTgyLjQyOS0xOS42MjQtMTA4LjQzNSAxNC4yNTYtMjYuMDA4IDMzLjg4LTE5LjYyNSA4Mi40MjggMTQuMjU2IDEwOC40MzUgMzMuODggMjYuMDA3IDgyLjQyOSAxOS42MjQgMTA4LjQzNC0xNC4yNTYgMTAuMzEtMTMuNDMxIDE1LjUyOS0yOS4xNjYgMTUuOTY0LTQ0Ljg4OXptNDMuMTc0IDB2MTAwLjUwOWgtLjAxM2MtLjE3OCA2LjAzNS0yLjgzNSAxMS44NTctNy44MTIgMTUuNzk3LTkuMTgyIDcuMjY5LTIyLjc4NSA1LjM4MS0zMC4zODQtNC4yMTctMi43NjItMy40ODktNC4zNS03LjUxNy00LjgxMi0xMS41OGgtLjE1M3YtNy43MTdjLTQyLjMyNiAzNS40NzYtMTA1LjAzNCAzOC4xNjQtMTUwLjY2MSAzLjE0LTUyLjc3NS00MC41MTEtNjIuNzE3LTExNi4xMzQtMjIuMjA2LTE2OC45MDkgNDAuNTEtNTIuNzc2IDExNi4xMzUtNjIuNzE4IDE2OC45MDktMjIuMjA4IDMwLjc3MiAyMy42MjEgNDYuOTgxIDU5LjE3OSA0Ny4xMTkgOTUuMTg1eiIgZmlsbD0iIzk3Y2M2NCIvPjxwYXRoIGQ9Ik0tNTA1LjU2NCAxNDk5LjA1MmExNzEuMzcyIDE3MS4zNzIgMCAxIDEgMTE4LjY4NCA3OS42N2wyMi41MzUtMTM4Ljc2N2EzMC43ODYgMzAuNzg2IDAgMSAwLTIxLjMyMS0xNC4zMTN6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMzYuNjcxIDIwNC4xMyAyMzguNTIyIDE4OS4yMjQgMUBiOTc0NDkwYSIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tMjgyLjEyOSAxNDA5LjA0OGguMDI5Yy0uMTI4LTIzLjA2OS0xMC41MzItNDUuODM3LTMwLjI0OC02MC45NzEtMzMuODgxLTI2LjAwNy04Mi40MjktMTkuNjI0LTEwOC40MzUgMTQuMjU2LTI2LjAwOCAzMy44OC0xOS42MjUgODIuNDI4IDE0LjI1NiAxMDguNDM1IDMzLjg4IDI2LjAwNyA4Mi40MjkgMTkuNjI0IDEwOC40MzQtMTQuMjU2IDEwLjMxLTEzLjQzMSAxNS41MjktMjkuMTY2IDE1Ljk2NC00NC44ODl6bTQzLjE3NCAwdjEwMC41MDloLS4wMTNjLS4xNzggNi4wMzUtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OS0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy00Mi4zMjYgMzUuNDc2LTEwNS4wMzQgMzguMTY0LTE1MC42NjEgMy4xNC01Mi43NzUtNDAuNTExLTYyLjcxNy0xMTYuMTM0LTIyLjIwNi0xNjguOTA5IDQwLjUxLTUyLjc3NiAxMTYuMTM1LTYyLjcxOCAxNjguOTA5LTIyLjIwOCAzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NXpNLTg4MC4yMDggMTcwNi4zNjh2MTAwLjUwOWgtLjAxM2MtLjE3OCA2LjAzNS0yLjgzNSAxMS44NTctNy44MTIgMTUuNzk3LTkuMTgyIDcuMjY5LTIyLjc4NSA1LjM4MS0zMC4zODQtNC4yMTctMi43NjItMy40ODktNC4zNS03LjUxNy00LjgxMi0xMS41OGgtLjE1M3YtNy43MTdjLTQyLjMyNiAzNS40NzYtMTA1LjAzNCAzOC4xNjQtMTUwLjY2MSAzLjE0LTE1Ljk2My0xMi4yNTMtMjguMDA3LTI3LjcxOS0zNS45MjEtNDQuNzkzbDM4LjM3OC0xNy43NzNjMjUuMjg1IDU0LjU5NiAxMDAuMTkxIDYxLjM0NyAxMzQuODMxIDEyLjE1MSAzNC42MzktNDkuMTk1IDMuMDMzLTExNy40NDEtNTYuODkyLTEyMi44NDItMzAuMDM0LTIuNzA3LTU4Ljk0NiAxMi4xMDYtNzQuMjk0IDM4LjA2M2wtMzYuNTExLTIxLjU4OGExMjEuNzkgMTIxLjc5IDAgMCAxIDguMjAzLTEyLjEyN2M0MC41MS01Mi43NzYgMTE2LjEzNS02Mi43MTggMTY4LjkwOS0yMi4yMDggMzAuNzcyIDIzLjYyMSA0Ni45ODEgNTkuMTc5IDQ3LjExOSA5NS4xODV6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS05MzMuNjA5IDkzMC4zMTFoLjAyOWMtLjEyOC0yMy4wNjktMTAuNTMyLTQ1LjgzNy0zMC4yNDgtNjAuOTcxLTE0Ljg4NC0xMS40MjUtMzIuNTk5LTE2LjU5OS00OS45OS0xNS45MzdsLTEuNjMtNDMuMTAxYzI3LjA5NC0xLjAzNSA1NC42OTMgNy4wMjUgNzcuODgxIDI0LjgyNCAzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NWguMDEzdjgwLjA1OGwtNTYuMDA0LTM2Ljk4MWE3Ni45MTYgNzYuOTE2IDAgMCAwIDEyLjgzLTQwLjUwMnoiIGZpbGw9IiNmZDVhM2UiLz48cGF0aCBkPSJNLTk0OS41NzkgOTc3Ljc5OWE3OS4yMzEgNzkuMjMxIDAgMCAwIDMuMTM0LTQuMzg2bDU2LjAwNCAzNi45OHYyMC40NTFoLS4wMTNjLS4xNzggNi4wMzQtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OC0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy0yNy4xMSAyMi43MjMtNjIuNTgyIDMxLjk5NC05Ni41NzIgMjYuNTJsNi45MTUtNDIuNTgxYzI3LjE1MiA0LjM2OCA1NS43NzQtNS45MjMgNzMuNjkzLTI5LjI2N3oiIGZpbGw9IiNmZmQwNTAiLz48cGF0aCBkPSJNLTEwNTguMDggOTkxLjk1YzEwLjUzNSA4LjA4NyAyMi40ODggMTMuMDQyIDM0Ljc0MSAxNS4wMTJsLTYuOTE1IDQyLjU4Yy0xOS4wNzctMy4wNzItMzcuNjg3LTEwLjc4OS01NC4wODktMjMuMzgtMTIuMDQtOS4yNDItMjEuODUtMjAuMzExLTI5LjM0MS0zMi41MmwzNi43OTMtMjIuNTI4YzQuODA1IDcuODIyIDExLjA5NSAxNC45MTMgMTguODExIDIwLjgzNnoiIGZpbGw9IiNhYWEiLz48cGF0aCBkPSJNLTI3Mi40ODggMTExOC43OTdhMTUuNzc1IDE1LjIyNCA3MS4wMjggMSAwIDguNDM2LTguMTU3bDIuMDEgNS4zMjVhMTAuMDgzIDkuNzMxIDcxLjAyOCAxIDEtNS4zOTIgNS4yMTR6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMTMwLjQ3OSAyMDQuMTMgMzE2LjgxMSAyNzEuNzcyIDFAZGM1N2JmYTUiLz48cGF0aCBkPSJNLTEwNzIuMjE0IDg4My42NjFjLTIwLjA1OSAyNi4xMy0yMC44NSA2MC45ODUtNC42MTkgODcuNDk1bC0uMDE3LjAxMS0zNi43NzYgMjIuNTE3Yy0yNS4yNzgtNDEuMjkzLTI0LjA0NC05NS41ODQgNy4xOTktMTM2LjI4NSAyMi43MDktMjkuNTg1IDU2LjQ1My00NS43MSA5MS4wMi00Ny4wMzJsMS42MyA0My4wODkuMDAyLjAxMmMtMjIuMTk0Ljg0Ny00My44NTkgMTEuMTk5LTU4LjQzOSAzMC4xOTN6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS0zMDguMjYyIDExMzUuNzUzaC4wMDZhMTYuODc0IDE2Ljg3NCAwIDAgMC02LjYxLTEzLjMyNiAxNi44NCAxNi44NCAwIDAgMC0xMC45MjYtMy40ODJsLS4zNTctOS40MmEyNi4yMjYgMjYuMjI2IDAgMCAxIDE3LjAyMyA1LjQyNWM2LjcyNCA1LjE2MyAxMC4yNjYgMTIuOTM0IDEwLjI5NyAyMC44MDNoLjAwMnYxNy40OTdsLTEyLjIzOS04LjA4MmExNi44MTUgMTYuODE1IDAgMCAwIDIuODA0LTguODUyeiIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tMzExLjc1MyAxMTQ2LjEzMmMuMjQxLS4zMTQuNDctLjYzNC42ODUtLjk1OWwxMi4yNCA4LjA4MnY0LjQ3aC0uMDAyYy0uMDQgMS4zMTktLjYxOSAyLjU5MS0xLjcwOCAzLjQ1Mi0yLjAwNyAxLjU4OS00Ljk3OSAxLjE3Ny02LjY0MS0uOTIxYTQuOTg4IDQuOTg4IDAgMCAxLTEuMDUxLTIuNTMxaC0uMDM0di0xLjY4N2MtNS45MjUgNC45NjYtMTMuNjc3IDYuOTkzLTIxLjEwNiA1Ljc5N2wxLjUxMi05LjMwN2M1LjkzNS45NTUgMTIuMTktMS4yOTQgMTYuMTA1LTYuMzk2eiIgZmlsbD0iI2ZmZDA1MCIvPjxwYXRoIGQ9Ik0tMzM1LjQ2NSAxMTQ5LjIyNWExNi44MyAxNi44MyAwIDAgMCA3LjU5MiAzLjI4MWwtMS41MTIgOS4zMDZhMjYuMjE2IDI2LjIxNiAwIDAgMS0xMS44MjEtNS4xMSAyNi4yNiAyNi4yNiAwIDAgMS02LjQxMi03LjEwOGw4LjA0MS00LjkyM2ExNi44NjQgMTYuODY0IDAgMCAwIDQuMTEyIDQuNTU0eiIgZmlsbD0iI2FhYSIvPjxwYXRoIGQ9Ik0tMzM4LjU1NCAxMTI1LjU1OGMtNC4zODUgNS43MTEtNC41NTggMTMuMzI3LTEuMDEgMTkuMTIybC0uMDA0LjAwMi04LjAzOCA0LjkyMmMtNS41MjQtOS4wMjUtNS4yNTUtMjAuODkxIDEuNTc0LTI5Ljc4NiA0Ljk2My02LjQ2NiAxMi4zMzgtOS45OSAxOS44OTMtMTAuMjc5bC4zNTYgOS40MTd2LjAwMmMtNC44NTEuMTg2LTkuNTg2IDIuNDQ4LTEyLjc3MSA2LjZ6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTTE2Ny4yMDUgMzU3Ljg0OGMyNC43MTYgMTguOTcyIDUzLjg3MiAyOC4xNCA4Mi43OTUgMjguMTE3djc1LjgyNmMtNDUuMDUxLjAzNS05MC40NjctMTQuMjQ1LTEyOC45NjYtNDMuNzk3YTIxMy43MjQgMjEzLjcyNCAwIDAgMS0yMC44MDgtMTguMjJsNTMuNjIxLTUzLjYyMWExMzcuMzc1IDEzNy4zNzUgMCAwIDAgMTMuMzU4IDExLjY5NXoiIGZpbGw9IiNhYWEiLz48cGF0aCBkPSJNMzg1LjkwMiAyNDkuMzQzaC4wNWMtLjE5My0zNC45NzktMTMuODI1LTY5LjU2NC0zOS44MS05NS40ODVsNTMuNjIxLTUzLjYyMWM0MC41NjcgNDAuNDY4IDYxLjgwOCA5NC40OTQgNjIuMDE4IDE0OS4xMDZoLjAyMlYyNTBoLTc1LjkwMXoiIGZpbGw9IiNkMzVlYmUiLz48cGF0aCBkPSJNMzguMTk3LTUxOC44MjdsLTI1MCAyNTBoMjUwdi0yNTB6IiBmaWxsPSIjNTY1MmE3Ii8+PHBhdGggZD0iTTMzMi43NzUgMTQyLjE1NGMtMjQuNzExLTE4Ljk2OC01My44NTktMjguMTM1LTgyLjc3NS0yOC4xMTdWMzguMjA4YzQ1LjA0NC0uMDMgOTAuNDUgMTQuMjUgMTI4Ljk0MiA0My43OTdhMjEzLjYyNiAyMTMuNjI2IDAgMCAxIDIwLjgyMSAxOC4yMzJsLTUzLjYyMSA1My42MjFhMTM3LjIgMTM3LjIgMCAwIDAtMTMuMzY3LTExLjcwNHoiIGZpbGw9IiNmZDVhM2UiLz48cGF0aCBkPSJNMzU3LjgzNyAzMzIuNzg2YzE4LjEyNC0yMy42MTIgMjcuMzAxLTUxLjI3NSAyOC4wNjUtNzguOTE2VjI1MGg3NS45MDF2MTc2LjA0aC0uMDIyYy0uMjc2IDkuMy0zLjg5OSAxOC4zMTEtMTAuNjgxIDI1LjA2YTM1Ljk2OCAzNS45NjggMCAwIDEtMy4wNTUgMi43MTJjLTE2LjE0MiAxMi43NzktNDAuMDU3IDkuNDYtNTMuNDE2LTcuNDE0LTQuODU1LTYuMTMzLTcuNjQ3LTEzLjIxNS04LjQ1OS0yMC4zNThoLS4yNjh2LTEzLjU2NmMtMzguNjk4IDMyLjQzNS04Ny4wODYgNDkuMjc5LTEzNS45MDIgNDkuMzE3di03NS44MjZjMzUuMjA0LS4wMjggNzAuMDYxLTEzLjY3MiA5Ni4xNDMtMzkuODIyYTEzNy4zNTQgMTM3LjM1NCAwIDAgMCAxMS42OTQtMTMuMzU3eiIgZmlsbD0iI2ZmZDA1MCIvPjxwYXRoIGQ9Ik0xNTMuODQ3IDM0Ni4xNTNsLTUzLjYyMSA1My42MjFDNTkuNDg4IDM1OS4xNDIgMzguMjM3IDMwNC44NCAzOC4xOTcgMjUwYy0uMDMyLTQ1LjA0NyAxNC4yNDgtOTAuNDU3IDQzLjc5OC0xMjguOTUzYTIxMy44NyAyMTMuODcgMCAwIDEgMTguMjMxLTIwLjgyMUMxNDAuODU5IDU5LjQ5MyAxOTUuMTYxIDM4LjI0NSAyNTAgMzguMjA4djc1LjgyOWMtMzUuMjA2LjAyMy03MC4wNjYgMTMuNjYzLTk2LjE1MiAzOS44MTFhMTM3LjM0IDEzNy4zNCAwIDAgMC0xMS43MDUgMTMuMzY4Yy0xOC45NzEgMjQuNzEzLTI4LjEzOSA1My44NjUtMjguMTE4IDgyLjc4NC4wMjUgMzUuMjA3IDEzLjY2OCA3MC4wNjggMzkuODIyIDk2LjE1M3oiIGZpbGw9IiM5N2NjNjQiLz48L3N2Zz4=) no-repeat 100%}[dir=ltr] .side-nav__brand{background:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNTAwIDUwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpieD0iaHR0cHM6Ly9ib3h5LXN2Zy5jb20iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWluIj48cGF0aCBkPSJNMTQyLjE0MyAxNjcuMjE2Yy0xOC45NzEgMjQuNzEzLTI4LjEzOSA1My44NjUtMjguMTE4IDgyLjc4NEgzOC4xOTdjLS4wMzItNDUuMDQ3IDE0LjI0OC05MC40NTcgNDMuNzk4LTEyOC45NTNhMjEzLjg3IDIxMy44NyAwIDAgMSAxOC4yMzEtMjAuODIxbDUzLjYyMiA1My42MjJhMTM3LjM0IDEzNy4zNCAwIDAgMC0xMS43MDUgMTMuMzY4em0zMDUuOTAyIDI4Ni41OTZjLTE2LjE0MiAxMi43NzktNDAuMDU3IDkuNDYtNTMuNDE2LTcuNDE0LTQuODU1LTYuMTMzLTcuNjQ3LTEzLjIxNS04LjQ1OS0yMC4zNThoLS4yNjh2LTEzLjU2NmMtMzguNjk4IDMyLjQzNS04Ny4wODYgNDkuMjc5LTEzNS45MDIgNDkuMzE3di03NS44MjZjMzUuMjA0LS4wMjggNzAuMDYxLTEzLjY3MiA5Ni4xNDMtMzkuODIyTDQ1MS4xIDQ1MS4xYTM1Ljk2OCAzNS45NjggMCAwIDEtMy4wNTUgMi43MTJ6bS0yODAuODQtOTUuOTY0YzI0LjcxNiAxOC45NzIgNTMuODcyIDI4LjE0IDgyLjc5NSAyOC4xMTd2NzUuODI2Yy00NS4wNTEuMDM1LTkwLjQ2Ny0xNC4yNDUtMTI4Ljk2Ni00My43OTdhMjEzLjcyNCAyMTMuNzI0IDAgMCAxLTIwLjgwOC0xOC4yMmw1My42MjEtNTMuNjIxYTEzNy4zNzUgMTM3LjM3NSAwIDAgMCAxMy4zNTggMTEuNjk1em0yMTguNjk3LTEwOC41MDVoLjA1Yy0uMTkzLTM0Ljk3OS0xMy44MjUtNjkuNTY0LTM5LjgxLTk1LjQ4NWw1My42MjEtNTMuNjIxYzQwLjU2NyA0MC40NjggNjEuODA4IDk0LjQ5NCA2Mi4wMTggMTQ5LjEwNmguMDIyVjI1MGgtNzUuOTAxem0tNTMuMTI3LTEwNy4xODljLTI0LjcxMS0xOC45NjgtNTMuODU5LTI4LjEzNS04Mi43NzUtMjguMTE3VjM4LjIwOGM0NS4wNDQtLjAzIDkwLjQ1IDE0LjI1IDEyOC45NDIgNDMuNzk3YTIxMy42MjYgMjEzLjYyNiAwIDAgMSAyMC44MjEgMTguMjMybC01My42MjEgNTMuNjIxYTEzNy4yIDEzNy4yIDAgMCAwLTEzLjM2Ny0xMS43MDR6bS0xNzguOTI3IDExLjY5NGwtNTMuNjIyLTUzLjYyMkMxNDAuODU5IDU5LjQ5MyAxOTUuMTYxIDM4LjI0NSAyNTAgMzguMjA4djc1LjgyOWMtMzUuMjA2LjAyMy03MC4wNjYgMTMuNjYzLTk2LjE1MiAzOS44MTF6bTIwMy45ODkgMTc4LjkzOGMxOC4xMjQtMjMuNjEyIDI3LjMwMS01MS4yNzUgMjguMDY1LTc4LjkxNlYyNTBoNzUuOTAxdjE3Ni4wNGgtLjAyMmMtLjI3NiA5LjMtMy44OTkgMTguMzExLTEwLjY4MSAyNS4wNkwzNDYuMTQzIDM0Ni4xNDNhMTM3LjM1NCAxMzcuMzU0IDAgMCAwIDExLjY5NC0xMy4zNTd6TTM4LjE5NyAyNTBoNzUuODI4Yy4wMjUgMzUuMjA3IDEzLjY2OCA3MC4wNjggMzkuODIyIDk2LjE1M2wtNTMuNjIxIDUzLjYyMUM1OS40ODggMzU5LjE0MiAzOC4yMzcgMzA0Ljg0IDM4LjE5NyAyNTB6IiBmaWxsPSIjYWFhIi8+PHBhdGggZD0iTTk1OS43MTktMzQ4LjEwMmguMDVjLS4yMjQtNDAuNTU2LTE4LjUxNC04MC41ODMtNTMuMTc3LTEwNy4xODktNTkuNTY0LTQ1LjcyMS0xNDQuOTEzLTM0LjUtMTkwLjYzMiAyNS4wNjItNDUuNzIzIDU5LjU2Mi0zNC41MDIgMTQ0LjkxMSAyNS4wNjIgMTkwLjYzMiA1OS41NjIgNDUuNzIxIDE0NC45MTMgMzQuNSAxOTAuNjMyLTI1LjA2MiAxOC4xMjQtMjMuNjEyIDI3LjMwMS01MS4yNzUgMjguMDY1LTc4LjkxNnptNzUuOTAxIDB2MTc2LjY5N2gtLjAyMmMtLjMxNSAxMC42MS00Ljk4NiAyMC44NDUtMTMuNzM2IDI3Ljc3Mi0xNi4xNDIgMTIuNzc5LTQwLjA1NyA5LjQ2LTUzLjQxNi03LjQxNC00Ljg1NS02LjEzMy03LjY0Ny0xMy4yMTUtOC40NTktMjAuMzU4aC0uMjY4di0xMy41NjZjLTc0LjQxMiA2Mi4zNjgtMTg0LjY1MiA2Ny4wOTMtMjY0Ljg2OCA1LjUyLTkyLjc4LTcxLjIyLTExMC4yNTgtMjA0LjE2Ny0zOS4wMzktMjk2Ljk0NyA3MS4yMTgtOTIuNzgyIDIwNC4xNjktMTEwLjI2IDI5Ni45NDctMzkuMDQyIDU0LjA5OCA0MS41MjYgODIuNTk2IDEwNC4wMzggODIuODM5IDE2Ny4zMzh6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNMzU3LjcwMiAzNTYuMjMzaDBNMzAxLjcxIDM0OC4wNmgwIi8+PHBhdGggZD0iTS03NzEuODY1IDEyODMuOTA4aC4wMjljLS4xMjgtMjMuMDY5LTEwLjUzMi00NS44MzctMzAuMjQ4LTYwLjk3MWE3Ny41MiA3Ny41MiAwIDAgMC0xNi4xNzYtOS41NjJsMTcuNDY5LTM5LjQ0NmExMjAuNzYyIDEyMC43NjIgMCAwIDEgMjQuOTY4IDE0Ljc5NGMzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NWguMDEzdjg1LjI3OGwtNTguMzg3LTM4LjgwOWM5LjgxMy0xMy4yMSAxNC43ODktMjguNTU4IDE1LjIxMy00My44OTR6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS05MjguNTcgMTI0NC41MDNjLTI2LjAwOCAzMy44OC0xOS42MjUgODIuNDI4IDE0LjI1NiAxMDguNDM1IDMzLjg4IDI2LjAwNyA4Mi40MjkgMTkuNjI0IDEwOC40MzQtMTQuMjU2LjI1NC0uMzMuNTA0LS42NjIuNzUyLS45OTZsNTguMzg2IDM4LjgwOXYxNS4yMzJoLS4wMTNjLS4xNzggNi4wMzUtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OS0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy00Mi4zMjYgMzUuNDc2LTEwNS4wMzQgMzguMTY0LTE1MC42NjEgMy4xNC01Mi43NzUtNDAuNTExLTYyLjcxNy0xMTYuMTM0LTIyLjIwNi0xNjguOTA5IDM0LjQ2My00NC44OTggOTQuMzQtNTguNzk1IDE0My45NDEtMzcuMDAybC0xNy40NjkgMzkuNDQ2Yy0zMS44MTQtMTMuODk5LTcwLjE2OS00Ljk2LTkyLjI1OSAyMy44MTh6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS00MzIuNzUzIDEwMjkuMDIzYTE3MS4zNzIgMTcxLjM3MiAwIDEgMS03My4zMjctMjUxLjU1OWwtNjkuMzkzIDE1Ni42OTR6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMCAyMDQuMTMgMTIzLjYxMiAyMy44ODYgMUA3ZGIzMjNjYiIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tNDk2LjEzOCA5MzAuMzExaC4wMjljLS4xMjgtMjMuMDY5LTEwLjUzMi00NS44MzctMzAuMjQ4LTYwLjk3MS0zMy44ODEtMjYuMDA3LTgyLjQyOS0xOS42MjQtMTA4LjQzNSAxNC4yNTYtMjYuMDA4IDMzLjg4LTE5LjYyNSA4Mi40MjggMTQuMjU2IDEwOC40MzUgMzMuODggMjYuMDA3IDgyLjQyOSAxOS42MjQgMTA4LjQzNC0xNC4yNTYgMTAuMzEtMTMuNDMxIDE1LjUyOS0yOS4xNjYgMTUuOTY0LTQ0Ljg4OXptNDMuMTc0IDB2MTAwLjUwOWgtLjAxM2MtLjE3OCA2LjAzNS0yLjgzNSAxMS44NTctNy44MTIgMTUuNzk3LTkuMTgyIDcuMjY5LTIyLjc4NSA1LjM4MS0zMC4zODQtNC4yMTctMi43NjItMy40ODktNC4zNS03LjUxNy00LjgxMi0xMS41OGgtLjE1M3YtNy43MTdjLTQyLjMyNiAzNS40NzYtMTA1LjAzNCAzOC4xNjQtMTUwLjY2MSAzLjE0LTUyLjc3NS00MC41MTEtNjIuNzE3LTExNi4xMzQtMjIuMjA2LTE2OC45MDkgNDAuNTEtNTIuNzc2IDExNi4xMzUtNjIuNzE4IDE2OC45MDktMjIuMjA4IDMwLjc3MiAyMy42MjEgNDYuOTgxIDU5LjE3OSA0Ny4xMTkgOTUuMTg1eiIgZmlsbD0iIzk3Y2M2NCIvPjxwYXRoIGQ9Ik0tNTA1LjU2NCAxNDk5LjA1MmExNzEuMzcyIDE3MS4zNzIgMCAxIDEgMTE4LjY4NCA3OS42N2wyMi41MzUtMTM4Ljc2N2EzMC43ODYgMzAuNzg2IDAgMSAwLTIxLjMyMS0xNC4zMTN6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMzYuNjcxIDIwNC4xMyAyMzguNTIyIDE4OS4yMjQgMUBiOTc0NDkwYSIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tMjgyLjEyOSAxNDA5LjA0OGguMDI5Yy0uMTI4LTIzLjA2OS0xMC41MzItNDUuODM3LTMwLjI0OC02MC45NzEtMzMuODgxLTI2LjAwNy04Mi40MjktMTkuNjI0LTEwOC40MzUgMTQuMjU2LTI2LjAwOCAzMy44OC0xOS42MjUgODIuNDI4IDE0LjI1NiAxMDguNDM1IDMzLjg4IDI2LjAwNyA4Mi40MjkgMTkuNjI0IDEwOC40MzQtMTQuMjU2IDEwLjMxLTEzLjQzMSAxNS41MjktMjkuMTY2IDE1Ljk2NC00NC44ODl6bTQzLjE3NCAwdjEwMC41MDloLS4wMTNjLS4xNzggNi4wMzUtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OS0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy00Mi4zMjYgMzUuNDc2LTEwNS4wMzQgMzguMTY0LTE1MC42NjEgMy4xNC01Mi43NzUtNDAuNTExLTYyLjcxNy0xMTYuMTM0LTIyLjIwNi0xNjguOTA5IDQwLjUxLTUyLjc3NiAxMTYuMTM1LTYyLjcxOCAxNjguOTA5LTIyLjIwOCAzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NXpNLTg4MC4yMDggMTcwNi4zNjh2MTAwLjUwOWgtLjAxM2MtLjE3OCA2LjAzNS0yLjgzNSAxMS44NTctNy44MTIgMTUuNzk3LTkuMTgyIDcuMjY5LTIyLjc4NSA1LjM4MS0zMC4zODQtNC4yMTctMi43NjItMy40ODktNC4zNS03LjUxNy00LjgxMi0xMS41OGgtLjE1M3YtNy43MTdjLTQyLjMyNiAzNS40NzYtMTA1LjAzNCAzOC4xNjQtMTUwLjY2MSAzLjE0LTE1Ljk2My0xMi4yNTMtMjguMDA3LTI3LjcxOS0zNS45MjEtNDQuNzkzbDM4LjM3OC0xNy43NzNjMjUuMjg1IDU0LjU5NiAxMDAuMTkxIDYxLjM0NyAxMzQuODMxIDEyLjE1MSAzNC42MzktNDkuMTk1IDMuMDMzLTExNy40NDEtNTYuODkyLTEyMi44NDItMzAuMDM0LTIuNzA3LTU4Ljk0NiAxMi4xMDYtNzQuMjk0IDM4LjA2M2wtMzYuNTExLTIxLjU4OGExMjEuNzkgMTIxLjc5IDAgMCAxIDguMjAzLTEyLjEyN2M0MC41MS01Mi43NzYgMTE2LjEzNS02Mi43MTggMTY4LjkwOS0yMi4yMDggMzAuNzcyIDIzLjYyMSA0Ni45ODEgNTkuMTc5IDQ3LjExOSA5NS4xODV6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS05MzMuNjA5IDkzMC4zMTFoLjAyOWMtLjEyOC0yMy4wNjktMTAuNTMyLTQ1LjgzNy0zMC4yNDgtNjAuOTcxLTE0Ljg4NC0xMS40MjUtMzIuNTk5LTE2LjU5OS00OS45OS0xNS45MzdsLTEuNjMtNDMuMTAxYzI3LjA5NC0xLjAzNSA1NC42OTMgNy4wMjUgNzcuODgxIDI0LjgyNCAzMC43NzIgMjMuNjIxIDQ2Ljk4MSA1OS4xNzkgNDcuMTE5IDk1LjE4NWguMDEzdjgwLjA1OGwtNTYuMDA0LTM2Ljk4MWE3Ni45MTYgNzYuOTE2IDAgMCAwIDEyLjgzLTQwLjUwMnoiIGZpbGw9IiNmZDVhM2UiLz48cGF0aCBkPSJNLTk0OS41NzkgOTc3Ljc5OWE3OS4yMzEgNzkuMjMxIDAgMCAwIDMuMTM0LTQuMzg2bDU2LjAwNCAzNi45OHYyMC40NTFoLS4wMTNjLS4xNzggNi4wMzQtMi44MzUgMTEuODU3LTcuODEyIDE1Ljc5Ny05LjE4MiA3LjI2OC0yMi43ODUgNS4zODEtMzAuMzg0LTQuMjE3LTIuNzYyLTMuNDg5LTQuMzUtNy41MTctNC44MTItMTEuNThoLS4xNTN2LTcuNzE3Yy0yNy4xMSAyMi43MjMtNjIuNTgyIDMxLjk5NC05Ni41NzIgMjYuNTJsNi45MTUtNDIuNTgxYzI3LjE1MiA0LjM2OCA1NS43NzQtNS45MjMgNzMuNjkzLTI5LjI2N3oiIGZpbGw9IiNmZmQwNTAiLz48cGF0aCBkPSJNLTEwNTguMDggOTkxLjk1YzEwLjUzNSA4LjA4NyAyMi40ODggMTMuMDQyIDM0Ljc0MSAxNS4wMTJsLTYuOTE1IDQyLjU4Yy0xOS4wNzctMy4wNzItMzcuNjg3LTEwLjc4OS01NC4wODktMjMuMzgtMTIuMDQtOS4yNDItMjEuODUtMjAuMzExLTI5LjM0MS0zMi41MmwzNi43OTMtMjIuNTI4YzQuODA1IDcuODIyIDExLjA5NSAxNC45MTMgMTguODExIDIwLjgzNnoiIGZpbGw9IiNhYWEiLz48cGF0aCBkPSJNLTI3Mi40ODggMTExOC43OTdhMTUuNzc1IDE1LjIyNCA3MS4wMjggMSAwIDguNDM2LTguMTU3bDIuMDEgNS4zMjVhMTAuMDgzIDkuNzMxIDcxLjAyOCAxIDEtNS4zOTIgNS4yMTR6IiBieDpzaGFwZT0icGllIDMwNSAyODUgMTMwLjQ3OSAyMDQuMTMgMzE2LjgxMSAyNzEuNzcyIDFAZGM1N2JmYTUiLz48cGF0aCBkPSJNLTEwNzIuMjE0IDg4My42NjFjLTIwLjA1OSAyNi4xMy0yMC44NSA2MC45ODUtNC42MTkgODcuNDk1bC0uMDE3LjAxMS0zNi43NzYgMjIuNTE3Yy0yNS4yNzgtNDEuMjkzLTI0LjA0NC05NS41ODQgNy4xOTktMTM2LjI4NSAyMi43MDktMjkuNTg1IDU2LjQ1My00NS43MSA5MS4wMi00Ny4wMzJsMS42MyA0My4wODkuMDAyLjAxMmMtMjIuMTk0Ljg0Ny00My44NTkgMTEuMTk5LTU4LjQzOSAzMC4xOTN6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTS0zMDguMjYyIDExMzUuNzUzaC4wMDZhMTYuODc0IDE2Ljg3NCAwIDAgMC02LjYxLTEzLjMyNiAxNi44NCAxNi44NCAwIDAgMC0xMC45MjYtMy40ODJsLS4zNTctOS40MmEyNi4yMjYgMjYuMjI2IDAgMCAxIDE3LjAyMyA1LjQyNWM2LjcyNCA1LjE2MyAxMC4yNjYgMTIuOTM0IDEwLjI5NyAyMC44MDNoLjAwMnYxNy40OTdsLTEyLjIzOS04LjA4MmExNi44MTUgMTYuODE1IDAgMCAwIDIuODA0LTguODUyeiIgZmlsbD0iI2ZkNWEzZSIvPjxwYXRoIGQ9Ik0tMzExLjc1MyAxMTQ2LjEzMmMuMjQxLS4zMTQuNDctLjYzNC42ODUtLjk1OWwxMi4yNCA4LjA4MnY0LjQ3aC0uMDAyYy0uMDQgMS4zMTktLjYxOSAyLjU5MS0xLjcwOCAzLjQ1Mi0yLjAwNyAxLjU4OS00Ljk3OSAxLjE3Ny02LjY0MS0uOTIxYTQuOTg4IDQuOTg4IDAgMCAxLTEuMDUxLTIuNTMxaC0uMDM0di0xLjY4N2MtNS45MjUgNC45NjYtMTMuNjc3IDYuOTkzLTIxLjEwNiA1Ljc5N2wxLjUxMi05LjMwN2M1LjkzNS45NTUgMTIuMTktMS4yOTQgMTYuMTA1LTYuMzk2eiIgZmlsbD0iI2ZmZDA1MCIvPjxwYXRoIGQ9Ik0tMzM1LjQ2NSAxMTQ5LjIyNWExNi44MyAxNi44MyAwIDAgMCA3LjU5MiAzLjI4MWwtMS41MTIgOS4zMDZhMjYuMjE2IDI2LjIxNiAwIDAgMS0xMS44MjEtNS4xMSAyNi4yNiAyNi4yNiAwIDAgMS02LjQxMi03LjEwOGw4LjA0MS00LjkyM2ExNi44NjQgMTYuODY0IDAgMCAwIDQuMTEyIDQuNTU0eiIgZmlsbD0iI2FhYSIvPjxwYXRoIGQ9Ik0tMzM4LjU1NCAxMTI1LjU1OGMtNC4zODUgNS43MTEtNC41NTggMTMuMzI3LTEuMDEgMTkuMTIybC0uMDA0LjAwMi04LjAzOCA0LjkyMmMtNS41MjQtOS4wMjUtNS4yNTUtMjAuODkxIDEuNTc0LTI5Ljc4NiA0Ljk2My02LjQ2NiAxMi4zMzgtOS45OSAxOS44OTMtMTAuMjc5bC4zNTYgOS40MTd2LjAwMmMtNC44NTEuMTg2LTkuNTg2IDIuNDQ4LTEyLjc3MSA2LjZ6IiBmaWxsPSIjOTdjYzY0Ii8+PHBhdGggZD0iTTE2Ny4yMDUgMzU3Ljg0OGMyNC43MTYgMTguOTcyIDUzLjg3MiAyOC4xNCA4Mi43OTUgMjguMTE3djc1LjgyNmMtNDUuMDUxLjAzNS05MC40NjctMTQuMjQ1LTEyOC45NjYtNDMuNzk3YTIxMy43MjQgMjEzLjcyNCAwIDAgMS0yMC44MDgtMTguMjJsNTMuNjIxLTUzLjYyMWExMzcuMzc1IDEzNy4zNzUgMCAwIDAgMTMuMzU4IDExLjY5NXoiIGZpbGw9IiNhYWEiLz48cGF0aCBkPSJNMzg1LjkwMiAyNDkuMzQzaC4wNWMtLjE5My0zNC45NzktMTMuODI1LTY5LjU2NC0zOS44MS05NS40ODVsNTMuNjIxLTUzLjYyMWM0MC41NjcgNDAuNDY4IDYxLjgwOCA5NC40OTQgNjIuMDE4IDE0OS4xMDZoLjAyMlYyNTBoLTc1LjkwMXoiIGZpbGw9IiNkMzVlYmUiLz48cGF0aCBkPSJNMzguMTk3LTUxOC44MjdsLTI1MCAyNTBoMjUwdi0yNTB6IiBmaWxsPSIjNTY1MmE3Ii8+PHBhdGggZD0iTTMzMi43NzUgMTQyLjE1NGMtMjQuNzExLTE4Ljk2OC01My44NTktMjguMTM1LTgyLjc3NS0yOC4xMTdWMzguMjA4YzQ1LjA0NC0uMDMgOTAuNDUgMTQuMjUgMTI4Ljk0MiA0My43OTdhMjEzLjYyNiAyMTMuNjI2IDAgMCAxIDIwLjgyMSAxOC4yMzJsLTUzLjYyMSA1My42MjFhMTM3LjIgMTM3LjIgMCAwIDAtMTMuMzY3LTExLjcwNHoiIGZpbGw9IiNmZDVhM2UiLz48cGF0aCBkPSJNMzU3LjgzNyAzMzIuNzg2YzE4LjEyNC0yMy42MTIgMjcuMzAxLTUxLjI3NSAyOC4wNjUtNzguOTE2VjI1MGg3NS45MDF2MTc2LjA0aC0uMDIyYy0uMjc2IDkuMy0zLjg5OSAxOC4zMTEtMTAuNjgxIDI1LjA2YTM1Ljk2OCAzNS45NjggMCAwIDEtMy4wNTUgMi43MTJjLTE2LjE0MiAxMi43NzktNDAuMDU3IDkuNDYtNTMuNDE2LTcuNDE0LTQuODU1LTYuMTMzLTcuNjQ3LTEzLjIxNS04LjQ1OS0yMC4zNThoLS4yNjh2LTEzLjU2NmMtMzguNjk4IDMyLjQzNS04Ny4wODYgNDkuMjc5LTEzNS45MDIgNDkuMzE3di03NS44MjZjMzUuMjA0LS4wMjggNzAuMDYxLTEzLjY3MiA5Ni4xNDMtMzkuODIyYTEzNy4zNTQgMTM3LjM1NCAwIDAgMCAxMS42OTQtMTMuMzU3eiIgZmlsbD0iI2ZmZDA1MCIvPjxwYXRoIGQ9Ik0xNTMuODQ3IDM0Ni4xNTNsLTUzLjYyMSA1My42MjFDNTkuNDg4IDM1OS4xNDIgMzguMjM3IDMwNC44NCAzOC4xOTcgMjUwYy0uMDMyLTQ1LjA0NyAxNC4yNDgtOTAuNDU3IDQzLjc5OC0xMjguOTUzYTIxMy44NyAyMTMuODcgMCAwIDEgMTguMjMxLTIwLjgyMUMxNDAuODU5IDU5LjQ5MyAxOTUuMTYxIDM4LjI0NSAyNTAgMzguMjA4djc1LjgyOWMtMzUuMjA2LjAyMy03MC4wNjYgMTMuNjYzLTk2LjE1MiAzOS44MTFhMTM3LjM0IDEzNy4zNCAwIDAgMC0xMS43MDUgMTMuMzY4Yy0xOC45NzEgMjQuNzEzLTI4LjEzOSA1My44NjUtMjguMTE4IDgyLjc4NC4wMjUgMzUuMjA3IDEzLjY2OCA3MC4wNjggMzkuODIyIDk2LjE1M3oiIGZpbGw9IiM5N2NjNjQiLz48L3N2Zz4=) no-repeat 0}.language-select{z-index:1}.language-select.popover{padding:0}.language-select__menu{list-style-type:none;padding:0;margin:0}.language-select__item{padding:.5em .8em;border-bottom:1px solid #eceff1;cursor:pointer}.language-select__item:before{content:" ";display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNSI+PHBhdGggZD0iTTEyLjAzNS4zNzNMNC41MDQgMTEuNjQxLjk3NSA3LjcwN2wtLjk3NiAxLjI0MiA0LjYyNSA1LjEwOUwxMy4xNyAxLjQ2eiIvPjwvc3ZnPg==) 50% no-repeat;background-size:contain;width:.8em;height:.8em;margin-right:.5em;visibility:hidden}.language-select__item_active:before{visibility:visible}.language-select__item:hover{background:#e4edfe}.popover{position:absolute;background:#fff;color:#000;border:1px solid #e5e5e5;padding:8px;font-size:14px}.popover:after,.popover:before{content:" ";position:absolute;border:8px solid transparent;top:50%;margin-top:-8px}.popover_position_right:before{left:-16px;border-right-color:#e5e5e5}.popover_position_right:after{left:-15px;border-right-color:#fff}.popover__list{margin:.5em 0;padding-left:20px}.error-splash{padding:10px;text-align:center}.test-result__name{padding-left:10px}.test-result__content{margin-bottom:300px}.app__content>.test-result{position:absolute;width:100%}.testresult__failure_expanded>.testresult__trace{display:block}.message{border-bottom:3px solid}.message_status_failed{border-color:#fd5a3e}.message_status_broken{border-color:#ffd050}.message_status_passed{border-color:#97cc64}.message_status_skipped{border-color:#aaa}.message_status_unknown{border-color:#d35ebe}.fullname__copy{cursor:pointer}.test-result-overview__trace{border-top:1px solid #eceff1;padding-top:10px;margin-top:10px;display:none}.test-result-overview__trace_expanded{display:block}.test-result-overview__trace-toggle{margin-top:5px;text-align:center;padding-top:5px;color:#999}.test-result-overview__trace-toggle:hover{background-color:#e4edfe}.test-result-execution__title{margin:15px 15px 10px}.test-result-execution__stage-title{margin:15px 15px 5px}.step{line-height:1.2em}.step__arrow,.step__status{left:7px;position:absolute}.step__arrow{display:none}.step__title{position:relative;padding:7px 15px 7px 25px}.step__title_hasContent{cursor:pointer}.step__title_hasContent>.step__arrow{display:block}.step__title:hover,.step__title:hover:before{background-color:#e4edfe}.step__title_stage{font-weight:700}.step__name{display:inline-flex;max-width:90%}.step__content{margin-left:20px;display:none}.step_expanded>.step__title>.step__arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.step_expanded>.step__content{display:block}.parameters{display:inline;white-space:nowrap}.parameters_name{font-style:italic}.parameters_separator:last-child{display:none}.attachment__filename{background:#f6f5f3;padding:15px}.attachment__code,.attachment__text{white-space:pre-wrap;word-break:break-word;margin:0;padding:0}.attachment__code{font:14px normal monospace,Courier New}.attachment__table{width:100%}.attachment__table tr{border-bottom:1px solid #eceff1}.attachment__table td{padding:10px 15px}.attachment__url{padding:0 15px;margin:.5em 0}.attachment__url_comment{color:#999}.attachment__table-container{overflow:auto}.attachment__table-container_fullscreen,.attachment__text-container_fullscreen{padding:15px;background-color:#fff}.attachment__media-container{text-align:center;cursor:zoom-in}.attachment__media-container_fullscreen{cursor:zoom-out}.attachment__iframe-container{height:100%}.attachment__embed,.attachment__media{max-width:100%;display:block;margin:auto}.attachment__embed_fullscreen,.attachment__media_fullscreen{margin:auto}.attachment__iframe{width:100%}.attachment__iframe_fullscreen{background-color:#fff;height:85vh}.modal__background{position:absolute;width:100%;height:100%;top:0;margin:0 auto;overflow:auto;background-color:hsla(0,0%,92.2%,.7);z-index:1000}.modal__title{display:flex}.modal__close{margin-left:auto}.modal__window{position:absolute;width:90%;margin-left:5%;top:0;z-index:1001}.blur{-webkit-filter:blur(3px);filter:blur(3px)}.block__arrow{position:absolute;visibility:visible;transition:-webkit-transform .1s;transition:transform .1s;transition:transform .1s,-webkit-transform .1s;font-weight:400;display:inline-block;vertical-align:middle;line-height:normal}.block__arrow__expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}[dir=rtl] .block__arrow{-webkit-transform:scaleX(-1);transform:scaleX(-1);-webkit-filter:FlipH;filter:FlipH}.angle{width:18px}.executor-icon{width:32px;height:32px;background:url(data:image/png;base64,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) 50% no-repeat;background-size:contain;display:inline-block}.executor-icon__jenkins{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxODAiIGhlaWdodD0iMTgwIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1IDAgMCAtMS4yNSAwIDE4MCkiPjxwYXRoIGQ9Ik0xMDcuOTY1IDMwLjY2MWwtMTIuNTA3LTEuODc2LTE2Ljg4My0xLjg3Ni0xMC45NDMtLjMxMi0xMC42MjkuMzEyLTguMTMgMi41MDItNy4xOSA3LjgxNi01LjYyOCAxNS45NDQtMS4yNSAzLjQ0LTcuNTAzIDIuNS00LjM3OCA3LjE5MS0zLjEyNiAxMC4zMTggMy40NCA5LjA2NyA4LjEyOCAyLjgxMyA2LjU2NS0zLjEyNyAzLjEyNy02Ljg3OCAzLjc1Mi42MjYgMS4yNSAxLjU2My0xLjI1IDcuMTktLjMxMyA5LjA2OCAxLjg3NiAxMi41MDUtLjA3NCA3LjE0M0w1MiAxMjUuNzA0bDEwLjAwNSA3LjE5MSAxNy41MDggNy41MDQgMTkuMzg0LTIuODE0IDE2Ljg4Mi0xMi4xOTMgNy44MTctMTIuNTA2IDUuMDAyLTkuMDY3IDEuMjUtMjIuNTEtMy43NTEtMTkuMzg0LTYuODc4LTE3LjE5NS02LjU2Ni05LjA2NyIgZmlsbD0iI2YwZDZiNyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTk3LjMzNC0yMy40MjVsLTQ0LjcwOC0xLjg3NnYtNy41MDRsMy43NTEtMjYuMjYyLTEuODc2LTIuMTg5LTMxLjI2MyAxMC42My0yLjE5IDMuNzUyLTMuMTI2IDM1LjMyOC03LjE5IDIxLjI2LTEuNTYzIDUuMDAyIDI1LjAxIDE3LjE5NSA3LjgxNyAzLjEyNyA2Ljg3OC04LjQ0IDUuOTQtNS4zMTYgNi44NzktMi4xODggMy4xMjYtLjkzOEw2OC41NyAxLjg5OWwyLjgxNC0zLjQ0TDc4LjU3NS45NjFsLTUuMDAyLTkuNjkzIDI3LjItMTIuODE4LTMuNDM5LTEuODc1IiBmaWxsPSIjMzM1MDYxIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMjMuMjM4IDg1LjY4N2w4LjEyOCAyLjgxMyA2LjU2NS0zLjEyNyAzLjEyNy02Ljg3OCAzLjc1Mi42MjYuOTM4IDMuNzUyLTEuODc2IDcuMTkgMS44NzYgMTcuMTk2LTEuNTY0IDkuMzggNS42MjggNi41NjUgMTIuMTkzIDkuNjkxLTMuNDQgNC42OS0xNy4xOTUtOC40NDEtNy4xOS01LjYyOC00LjA2NS04Ljc1NC02LjI1My04LjQ0MS0xLjg3Ni0xMC4wMDUgMS4yNTItMTAuNjMiIGZpbGw9IiM2ZDZiNmQiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik0zNi4wNTUgMTE1LjA3NXM0LjY5IDExLjU2NyAyMy40NDkgMTcuMTk1YzE4Ljc1OCA1LjYyNy45MzggNC4wNjUuOTM4IDQuMDY1bC0yMC4zMjItNy44MTctNy44MTYtNy44MTYtMy40MzktNi4yNTMgNy4xOS42MjZNMjYuNjc2IDg3Ljg3NXMtNi41NjUgMjEuODg1IDE4LjQ0NiAyNS4wMTFsLS45MzggMy43NTItMTcuMTk1LTQuMDY1LTUuMDAzLTE2LjI1NyAxLjI1Mi0xMC42MyAzLjQzOCAyLjE4OSIgZmlsbD0iI2RjZDlkOCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTM2LjY4IDU4Ljc5OWw0LjA5NCAzLjk2NnMxLjg0OC0uMjE0IDIuMTYtMi40MDJjLjMxMi0yLjE5IDEuMjUtMjEuODg2IDE0LjY5NC0zMi41MTcgMS4yMjYtLjk3LTEwLjAwNCAxLjU2NS0xMC4wMDQgMS41NjVMMzcuNjE5IDQ1LjA0Mk05NC4yMDkgNjQuNzM5cy43MjkgOS40NzcgMy4yOCA4Ljc0OGMyLjU1My0uNzI5IDIuNTUzLTMuMjggMi41NTMtMy4yOHMtNi4xOTgtNC4wMS01LjgzMy01LjQ2OCIgZmlsbD0iI2Y3ZTRjZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTEyMC4xNTcgOTkuNDQycy01LjE1My0xLjA4OC01LjYyOC01LjYyN2MtLjQ3NC00LjU0IDUuNjI4LS45MzggNi41NjYtLjYyNk04Mi4zMjcgOTkuMTI5cy02Ljg3OS0uOTM4LTYuODc5LTUuMzE0YzAtNC4zNzggNy44MTctNC4wNjUgMTAuMDA1LTIuMTkiIGZpbGw9IiNmN2U0Y2QiLz48cGF0aCBkPSJNMzkuODA3IDc4LjgwOHMtMTEuODggNy4xOS0xMy4xMy4zMTJjLTEuMjUxLTYuODc4LTQuMDY2LTExLjg4IDEuODc1LTE5LjA3bC00LjA2NCAxLjI1LTMuNzUyIDkuNjkxLTEuMjUgOS4zOCA3LjE5IDcuNTA0IDguMTI5LS42MjYgNC42OS0zLjc1Mi4zMTItNC42OU00NS40MzUgOTguNTA0czUuMzE1IDI3LjUxMiAzMi4yMDIgMzIuODI4YzIyLjEzNyA0LjM3NSAzMy43NjUtLjkzOCAzOC4xNDItNS45NCAwIDAtMTkuNjk2IDIzLjQ0Ny0zOC40NTUgMTYuMjU3LTE4Ljc1OC03LjE5MS0zMi41MTQtMjAuMzIyLTMyLjIwMi0yOC43NjMuNTMzLTE0LjM3Ni4zMTMtMTQuMzgyLjMxMy0xNC4zODJNMTE3Ljk2OSAxMjIuMjY2cy05LjA2Ni4zMTItOS4zOC03LjgxN2MwIDAgMC0xLjI1LjYyNS0yLjUgMCAwIDcuMTkyIDguMTI5IDExLjU2OCAzLjc1MSIgZmlsbD0iI2Y3ZTRjZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTc4LjI2OCAxMTEuMTAycy0xLjU2MSAxMi40NzctMTIuMTk5IDUuMjIzYy02Ljg3OC00LjY5LTYuMjUyLTExLjI1NS01LjAwMi0xMi41MDYgMS4yNS0xLjI1LjkxLTMuNzY5IDEuODYyLTIuMDQuOTUyIDEuNzI4LjYzOCA3LjM1NiA0LjA3OCA4LjkxOCAzLjQ0IDEuNTY0IDkuMDc3IDMuMzEgMTEuMjYuNDA1IiBmaWxsPSIjZjdlNGNkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNDguODc0IDI2LjU5N2wtMjkuMzg4LTEzLjEzczEyLjE5My00OC40NiA1Ljk0LTYzLjQ2OGwtNC4zNzcgMS41NjMtLjMxMyAxOC40NDYtOC4xMjggMzUuMDE2LTMuNDQgOS42OTIgMzAuNjQgMjAuNjM0IDkuMDY2LTguNzUzTTUxLjg5Ni0uMjA2bDQuMTctNS4wODd2LTE4Ljc1OWgtNS4wMDRzLS42MjQgMTMuMTMxLS42MjQgMTQuNjk1YzAgMS41NjMuNjI0IDcuMTkuNjI0IDcuMTlNNTItMjYuODY2bC0xNC4wNjktLjYyNCA0LjA2NS0yLjgxNEw1Mi0zMS44NjciIGZpbGw9IiM0OTcyOGIiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik0xMDAuMTQ4LTIzLjczOWwxMS41NjcuMzEzIDIuODE0LTI4Ljc2NC0xMS44OC0xLjU2Mi0yLjUwMSAzMC4wMTMiIGZpbGw9IiMzMzUwNjEiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik0xMDMuMjc0LTIzLjczOWwxNy41MDguOTM4czcuMTkgMTguMTMzIDcuMTkgMTkuMDcxYzAgLjkzOCA2LjI1NCAyNi4yNjIgNi4yNTQgMjYuMjYybC0xNC4wNyAxNC42OTQtMi44MTMgMi41MDEtNy41MDMtNy41MDNWMy4xNDhsLTYuNTY2LTI2Ljg4NyIgZmlsbD0iIzMzNTA2MSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTExMS4wOS0yMS41NWwtMTAuOTQyLTIuMTg5IDEuNTYzLTguNzU0YzQuMDY0LTEuODc2IDEwLjk0MiAzLjEyNyAxMC45NDIgMy4xMjdNMTExLjQwMyAzMy4xNjJsMjEuODg1LTE2LjI1Ny42MjUgNy41MDMtMTYuNTcgMTUuMzItNS45NC02LjU2NiIgZmlsbD0iIzQ5NzI4YiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTYyLjg1LTg1LjMzMmwtNi40NzMgMjYuMjY1LTMuMjE5IDE5LjM4LS41MzIgMTQuMzg2IDI5LjI5NiAxLjU2IDE4LjIyNi4wMDItMS42NTctMzIuODMgMi44MTMtMjUuMzI0LS4zMTItNC42OS0yMy43Ni0xLjg3Ni0xNC4zODIgMy4xMjciIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik05Ni4wODMtMjMuNDI2cy0xLjU2My0zMi41MTUgMy4xMjctNTUuNjVjMCAwLTkuMzgtNS45NDEtMjMuMTM2LTcuNTA0bDI2LjI2Mi45MzggMy4xMjYgMS44NzYtMy43NTEgNTEuMjczLS45MzggMTAuOTQzIiBmaWxsPSIjZGNkOWQ4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMTE1LjA2Mi00OS42OTFsMTIuMTkzIDMuNDQgMjMuMTM1IDEuMjUgMy40NCAxMC42MjktNi4yNTQgMTguNDQ2LTcuMTkuOTM4LTEwLjAwNS0zLjEyNi05LjU5OS00LjY4Ny01LjA5NS45MzUtMy45NzItMS41NiIgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTExNC44NDEtNDMuNDM1czguMTI5IDMuNzUgOS4zOCAzLjQzOEwxMjAuNzgyLTIyLjhsNC4wNjQgMS41NjNzMi44MTQtMTYuMjU3IDIuODE0LTE4LjEzM2MwIDAgMTcuNTA4LS45MzggMTkuMDcxLS45MzggMCAwIDMuNzUyIDcuMTkxIDIuODE0IDE0LjY5NWwzLjQ0LTEwLjAwNS4zMTItNS42MjgtNS4wMDItNy41MDMtNS42MjgtMS4yNS05LjM4LjMxMi0zLjEyNSA0LjA2NC0xMC45NDMtMS41NjMtMy40NC0xLjI1MSIgZmlsbD0iI2RjZDlkOCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTEwMi41NTYtMjEuMjQxTDk1LjY3OC0zLjczMyA4OC40ODcgNi41ODVzMS41NjIgNC4zNzcgMy43NTEgNC4zNzdoNy4xOTFsNi44NzgtMi41MDItLjYyNC0xMS41NjctMy4xMjctMTguMTM0IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTEwMy45LTE1LjI5N1M5NS4xNDUgMS41ODUgOTUuMTQ1IDQuMDg2YzAgMCAxLjU2MyAzLjc1MiAzLjc1MiAyLjgxNCAyLjE4OS0uOTM4IDYuODc4LTMuNDM5IDYuODc4LTMuNDM5djUuOTRsLTEwLjYzIDIuMTktNy4xOS0uOTM5IDEyLjE5My0yOC43NjMgMi41LS4zMTMiIGZpbGw9IiNkY2Q5ZDgiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik02NS42NjQgMjUuOTY4bC04LjY2Ljk0MS04LjEzIDIuNTAydi0yLjgxNGwzLjk3Mi00LjM4IDEyLjUwNS01LjYyOCIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik01MS42ODkgMjUuMDNzOS42OTItNC4wNjQgMTIuODE5LTMuMTI2bC4zMS0zLjc0OC04Ljc1MiAxLjg3Mi01LjMxNSAzLjc1Mi45MzggMS4yNSIgZmlsbD0iI2RjZDlkOCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTExNS4wMjggOS44OTdjLTUuMzA1LjE1Ni0xMC4wOTguNzg2LTE0LjI5NCAxLjk3LjI4NSAxLjcyLS4yNDggMy40MDguMTggNC42NDcgMS4xNy44NDMgMy4xMy44MyA0Ljg5OCAxLjAyNy0xLjUyOS43NTItMy42NzcgMS4wNDktNS40NC42MTUtLjA0MiAxLjE5NC0uNTc4IDEuOTM0LS45MDIgMi44NjggMi45ODIgMS4wNjUgMTAuMDIzIDguMDQ0IDEzLjk4NCA1LjczMyAxLjg4Ny0xLjEgMi42OS03LjM3OCAyLjgzNi0xMC40MzEuMTIyLTIuNTMzLS4yMy01LjA4Ny0xLjI2Mi02LjQyOSIgZmlsbD0iI2QzMzgzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTExNS4wMjggOS44OTdjLTUuMzA1LjE1Ni0xMC4wOTguNzg2LTE0LjI5NCAxLjk3LjI4NSAxLjcyLS4yNDggMy40MDguMTggNC42NDcgMS4xNy44NDMgMy4xMy44MyA0Ljg5OCAxLjAyNy0xLjUyOS43NTItMy42NzcgMS4wNDktNS40NC42MTUtLjA0MiAxLjE5NC0uNTc4IDEuOTM0LS45MDIgMi44NjggMi45ODIgMS4wNjUgMTAuMDIzIDguMDQ0IDEzLjk4NCA1LjczMyAxLjg4Ny0xLjEgMi42OS03LjM3OCAyLjgzNi0xMC40MzEuMTIyLTIuNTMzLS4yMy01LjA4Ny0xLjI2Mi02LjQyOXoiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2QzMzgzMyIgc3Ryb2tlLXdpZHRoPSIyIi8+PHBhdGggZD0iTTg5LjY2IDE4LjU3Yy0uMDE0LS40MDItLjAzLS44MDYtLjA0Ny0xLjIxMS0xLjY1Ni0xLjA4OC00LjMzLTEuMDc1LTYuMTQ4LTEuOTkgMi42OC0uMTE3IDQuNzktLjc2MiA2LjYxNC0xLjY3MmwtLjExOC0zLjAzMmMtMy4wMzYtMi4wNzktNS44MS01LjE3NC05LjM4NC03LjEyMy0xLjY5LS45MjItNy42MjItMy4yOTQtOS40Mi0yLjg3NS0xLjAxNy4yMzctMS4xMDkgMS41LTEuNTE2IDIuNjktLjg2NiAyLjU0OC0yLjg2MSA2LjYwNC0zLjAzNSAxMC40NC0uMjIyIDQuODQ2LS43MSAxMi45NjYgNC41MSAxMS45NjggNC4yMTMtLjgwNCA5LjExMy0yLjc0NCAxMi4zNzQtNC41MjYgMS45OTMtMS4wOSAzLjE0Ni0yLjQzNyA2LjE3LTIuNjciIGZpbGw9IiNkMzM4MzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik04OS42NiAxOC41N2MtLjAxNC0uNDAyLS4wMy0uODA2LS4wNDctMS4yMTEtMS42NTYtMS4wODgtNC4zMy0xLjA3NS02LjE0OC0xLjk5IDIuNjgtLjExNyA0Ljc5LS43NjIgNi42MTQtMS42NzJsLS4xMTgtMy4wMzJjLTMuMDM2LTIuMDc5LTUuODEtNS4xNzQtOS4zODQtNy4xMjMtMS42OS0uOTIyLTcuNjIyLTMuMjk0LTkuNDItMi44NzUtMS4wMTcuMjM3LTEuMTA5IDEuNS0xLjUxNiAyLjY5LS44NjYgMi41NDgtMi44NjEgNi42MDQtMy4wMzUgMTAuNDQtLjIyMiA0Ljg0Ni0uNzEgMTIuOTY2IDQuNTEgMTEuOTY4IDQuMjEzLS44MDQgOS4xMTMtMi43NDQgMTIuMzc0LTQuNTI2IDEuOTkzLTEuMDkgMy4xNDYtMi40MzcgNi4xNy0yLjY3eiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZDMzODMzIiBzdHJva2Utd2lkdGg9IjIiLz48cGF0aCBkPSJNOTIuNjc1IDEyLjc4OGMtLjQ2MyAyLjY0LS45OTggMy4zOTItLjc5MSA1LjY5NSA3LjAzOSA0LjY5MyA4LjM2LTguMDYxLjc5MS01LjY5NSIgZmlsbD0iI2QzMzgzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTkyLjY3NSAxMi43ODhjLS40NjMgMi42NC0uOTk4IDMuMzkyLS43OTEgNS42OTUgNy4wMzkgNC42OTMgOC4zNi04LjA2MS43OTEtNS42OTV6IiBmaWxsPSJub25lIiBzdHJva2U9IiNkMzM4MzMiIHN0cm9rZS13aWR0aD0iMiIvPjxwYXRoIGQ9Ik0xMDIuODY4IDEwLjY0OXMtMi4xOSAzLjEyNy0uNjI2IDQuMDY1YzEuNTY0LjkzOCAzLjEyNy0uMDAxIDQuMDY1IDEuNTYyLjkzOCAxLjU2NCAwIDIuNTAyLjMxMyA0LjM3Ny4zMTIgMS44NzYgMS44NzYgMi4xOSAzLjQzOSAyLjUwMiAxLjU2My4zMTIgNS45NC45MzggNi41NjYtLjYyNmwtMS44NzYgNS42MjgtMy43NTIgMS4yNS0xMS44OC02Ljg3OC0uNjI2LTMuNDR2LTYuODc3TTcwLjA0LjMzMWMtLjM3NSA0Ljg4LS43NzIgOS43NTItMS4yMTUgMTQuNjI2LS42NjEgNy4yNzkgMS43NDkgNi4wMDkgOC4wNTggNi4wMDkuOTYzIDAgNS45MzMtMS4xNSA2LjI4OC0xLjg3NiAxLjcwNi0zLjQ4My0yLjg1LTIuNzA5IDEuOTY0LTUuMzM1IDQuMDY1LTIuMjE2IDExLjI0NiAxLjM0NiA5LjYwNCA2LjI3My0uOTIgMS4wOTUtNC43OS4zNDEtNi4xNzYgMS4wNmwtNy4zMjggMy44Yy0zLjEwNyAxLjYxMi0xMC4yOSAzLjk2Mi0xMy42MDMgMS43MS04LjM5NC01LjcxLjUzLTE5Ljk3NSAzLjUyNS0yNS45MyIgZmlsbD0iI2VmM2QzYSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTc4LjI2OCAxMTEuMTAyYy04LjUyMiAxLjk4NC0xMi43NTYtMy41NjYtMTUuMzM5LTkuMzIzLTIuMzA2LjU1OS0xLjM4OCAzLjY5NS0uODA2IDUuMjkzIDEuNTI1IDQuMTk1IDcuNjcyIDkuNzc4IDEyLjY5NSA5LjAyMSAyLjE2LS4zMjUgNS4wODYtMi4zMDEgMy40NS00Ljk5MU0xMTkuNzg2IDEwMS4zOThsLjQwNC0uMDE2YzEuOTI2LTQgMy41OTMtOC4yMzggNi4wMjItMTEuNzctMS42MjctMy43OS0xMi4zMjItNy4xNDMtMTIuMTU3LS4zMzggMi4zMTMgMS4wMTEgNi4zMDUuMjA3IDguMzU2IDEuNDk4LTEuMTg2IDMuMjU0LTIuODk3IDYuMDIzLTIuNjI1IDEwLjYyNk04Mi42MyAxMDEuMjk0YzEuODI3LTMuMzUgMi40MjItNi44NjkgNS4wMi05LjQgMS4xNjktMS4xNCAzLjQ0My0yLjUyOSAyLjMxNi01LjY5OC0uMjY0LS43NDgtMi4xOS0yLjQxNC0zLjMtMi43NDItNC4wNjEtMS4xOTgtMTMuNTIyLS4yNDctMTAuMzE4IDQuODE1IDMuMzU4LS4xNTcgNy44NzEtMi4xODEgMTAuMzgxLjI1Ny0xLjkyNyAzLjA4LTUuMzY0IDkuMTc2LTQuMDk5IDEyLjc2OE0xMTguMjYyIDY3LjI1M2MtNi4xMTMtMy45MjgtMTIuOTMtOC4xOTgtMjIuOTQ3LTcuMjA4LTIuMTQgMS44NjEtMi45NTcgNi4wMDItLjg3NyA4LjczNyAxLjA4Mi0xLjg2LjQwMi01LjI4MyAzLjQxOS01Ljc5OCA1LjY4My0uOTczIDEyLjI5OSAzLjQ3NyAxNi4zODcgNS4wMzIgMi41MzUgNC4yNzQtLjIxOCA1Ljg0Ni0yLjUwMiA4LjU5Ny00LjY3NiA1LjYzNi0xMC45NDggMTIuNjIyLTEwLjcyIDIxLjA2IDEuODkgMS4zNyAyLjA1My0yLjA5MiAyLjMyNC0yLjcyMyAyLjQ0Mi01LjcxMyA4LjU4Ni0xMy4wMiAxMy4wNy0xNy45MTEgMS4xMDEtMS4yMDQgMi45MTQtMi4zNiAzLjExNi0zLjE1Ni41ODItMi4zMTYtMS41MTMtNS4wOS0xLjI3LTYuNjNNMzcuNjY4IDcxLjM4N2MtMS45MTcgMS4wOTQtMi4zNzMgNS45MS00LjYyMiA2LjA0OC0zLjIxNS4xOTUtMi42My02LjI1LTIuNjE2LTEwLjAxOC0yLjIxMyAyLjAwOS0yLjYwMiA4LjE5NC0uOTc3IDExLjM3MS0xLjg1Mi45MS0yLjY4LTEuMDAzLTMuNzA3LTEuNjc4IDEuMzIgOS41OTUgMTQuMDM2IDQuNDUgMTEuOTIyLTUuNzIzTTEyMi4xNTUgNjMuMjU3Yy0yLjg0Ni01LjQxNy02Ljg3Mi0xMS4zODItMTUuMjIyLTExLjU1NS0uMTcgMS43NDktLjMgNC40MS4wMDkgNS40NjQgNi4zODMuNjEzIDEwLjMyNSAzLjg2MiAxNS4yMTIgNi4wOTFNODIuMTQ5IDU5Ljc0NWM1LjMyNi0yLjggMTUuMTE0LTMuMTAxIDIyLjM1My0yLjg5LjM4OC0xLjU4NS4zNzktMy41NDUuMzk0LTUuNDc5LTkuMzA1LS40NjQtMjAuMzA3IDEuODM5LTIyLjc0NyA4LjM3TTgxLjEzNiA1NC41MjNjMy42ODMtOS4yNDcgMTYuMzQyLTguMTgzIDI3LjAxNi03LjkyNy0uNDctMS4yLTEuNDg4LTIuNjItMi43NTQtMy4xMzItMy40MjEtMS4zOTItMTIuODU2LTIuNDQ4LTE3LjYwNC4wNzQtMy4wMTIgMS42MDEtNC45NDcgNS4yMTktNi41OTcgNy4zNC0uNzk3IDEuMDIzLTQuNzY1IDMuNjQtLjA2IDMuNjQ1IiBmaWxsPSIjMjMxZjIwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMTE3LjgxOCAzLjUxNmMtNC4zMjItNy40MDItOC40NTgtMTUuMDA1LTEzLjU4NS0yMS41MzQgMi4xNSA2LjMyIDMuMDcgMTYuOSAzLjM5NCAyNC45NjUgNC40OTcgMi4xMDQgOC4zNDgtLjQ3NCAxMC4xOS0zLjQzMSIgZmlsbD0iIzgxYjBjNCIgZmlsbC1ydWxlPSJldmVub2RkIi8+PHBhdGggZD0iTTE0MS4wNzQtMjMuMDg5Yy00LjgzOC0uOTY4LTguMjM4LTUuNjcxLTEyLjk1OS01LjM3IDIuNTk0IDMuNjU4IDcuMTQgNS4yIDEyLjk2IDUuMzdNMTQzLjIxLTMwLjY2MWMtMy45NDUtLjQxNy04LjU3Ny0xLjA1Ni0xMi41NzgtLjcyNyAxLjg5NCAyLjg5MyA5LjE5IDEuODk1IDEyLjU3Ny43MjdNMTQ0LjU3Ni0zNy4xOWMtNC40MzMtLjA5Ni05Ljk0Mi0uMDA4LTE0LjE1Ni4zNDYgMi40OTMgMi42NzYgMTEuMjguOTkzIDE0LjE1Ni0uMzQ2IiBmaWxsPSIjMjMxZjIwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMTA5LjQ3OC01NS4wNTdjLjYzNS01LjU2NyAyLjg0Mi0xMS4yMDcgMi41NjYtMTcuMzA0LTIuNDUxLS44MjYtMy44NTktMS41NS03LjE0My0xLjU0NS0uMjMxIDUuMTgyLS45MjQgMTMuMTAyLS43MTcgMTguMDQxIDEuNjE1LS4xMDYgMy45OTYgMS4xNTQgNS4yOTQuODA4IiBmaWxsPSIjZGNkOWQ4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMTAyLjMzMSAyNi45ODVjLTIuMjI1LTEuNDUyLTQuMTItMy4yNjYtNi4yNTgtNC44MTgtNC43NC0uMjM0LTcuMzI3LjMyOS0xMC44MSAzLjA1LjA1Ny4yMTkuNDA3LjEyMS40Mi4zOSA1LjA3NC0yLjI2MiAxMS41MjUuOTIgMTYuNjQ4IDEuMzc4IiBmaWxsPSIjZjBkNmI3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNzUuNjk0LTcuNjAzYzEuMzk0IDYuMDQgNi44NTcgOS4xNyAxMS44MTcgMTIuNDk2IDUuMTItNi40OTggOC4yMzQtMTQuODU0IDExLjY2My0yMi45MTktOC4xMDEgMi40NDMtMTYuMzggNi40MDUtMjMuNDggMTAuNDIzIiBmaWxsPSIjODFiMGM0IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNMTA0LjE4NC01NS44NjVjLS4yMDctNC45MzkuNDg2LTEyLjg2LjcxNy0xOC4wNCAzLjI4NC0uMDA1IDQuNjkyLjcxOCA3LjE0MyAxLjU0NC4yNzYgNi4wOTctMS45MyAxMS43MzctMi41NjcgMTcuMzA0LTEuMjk3LjM0Ni0zLjY3OC0uOTE0LTUuMjkzLS44MDh6bS01MS4xMyAyOC4wOWMyLjE2NS0xOS45MDUgNS4zMDEtMzYuNjM5IDExLjA1My01NC4yNjUgMTIuNzY3LTMuODc3IDI4LjE1Ny00LjIxNCAzOS40NC0uNzE3LTIuMDcxIDkuOTQ5LTEuMTY2IDIyLjA2MS0yLjM3NyAzMi42NzgtLjkxMiA3Ljk4LS40NDcgMTYuMDA4LTEuNjk4IDI0LjE1LTEzLjY3MyAyLjg0NC0zMyAuNjY0LTQ2LjQxOC0xLjg0NnptNDkuNjUgMS43MmMtLjExNS04LjU0OS4zODMtMTYuOTgxIDEuMDM2LTI1LjU0MSAzLjI4My40OTMgNS41MS44MjIgOC41NiAxLjQ5LS45OSA4LjI0LS44NjggMTcuNTEzLTIuODg1IDI0LjgwMy0yLjMzMi0uMDIyLTQuMzg1LjAyNy02LjcxLS43NTJ6bTE2LjY1NCAxLjM3OGMtMS41NTguMzU4LTMuMzcyLjAxNC00Ljg2LS4wMTUuNjk5LTYuOTY4IDIuMzk3LTE0LjY1OCAyLjk5NC0yMS45NzQgMi4zNDItLjA3MiAzLjU5MyAxLjAzMiA1LjUyIDEuNDA0LjEwMyA2LjQyLS41NjEgMTUuMjY3LTMuNjU0IDIwLjU4NXptMjUuMjE1LTIzLjAzOGM0Ljg4MiAxLjE4NiA3Ljk1MiA3LjE2NSA2LjU4NiAxMy4zMDYtLjkxNiA0LjEyNi0yLjU0OCAxMS44OTctNC4yOTUgMTQuNTM3LTEuMjkgMS45NTMtNC43OSA0LjUxLTcuNTg0IDIuNzItNC41NDUtMi45MS0xMi41NTItMy43NTUtMTUuODY3LTcuMjc4IDEuNjYyLTUuNTM0IDIuMTc4LTEzLjEzNSAyLjg2NC0yMC4xNDYgNS42NzgtLjM1NCAxMi42NjUgMS41NjIgMTcuMzg3LS40NzItMy4yOTctMS4wNjgtNy41NzUtMS4wNzYtMTAuNDIzLTIuNjMyIDIuMzI4LTEuMTI1IDcuNzc4LS44OTggMTEuMzMyLS4wMzV6bS00NS4zOTkgMjkuNjljLTMuNDI5IDguMDY0LTYuNTQzIDE2LjQyLTExLjY2MyAyMi45MTgtNC45Ni0zLjMyNi0xMC40MjMtNi40NTUtMTEuODE3LTEyLjQ5NiA3LjEtNC4wMTggMTUuMzc5LTcuOTggMjMuNDgtMTAuNDIzem04LjQ1MyAyNC45NzJjLS4zMjUtOC4wNjUtMS4yNDUtMTguNjQ1LTMuMzk0LTI0Ljk2NSA1LjEyNyA2LjUyOSA5LjI2MyAxNC4xMzIgMTMuNTg1IDIxLjUzNC0xLjg0MyAyLjk1Ny01LjY5NCA1LjUzNS0xMC4xOTEgMy40M3ptLTkuNTgyIDMuNDA0Yy0xLjk0Mi4yMS0zLjU5MS0yLjIzMy02LjExNy0xLjE3Ny0uNTc5LS42NC0xLjEwNS0xLjMzMy0xLjY5NS0xLjk1NyA1LjU3OS02LjcyMyA4LjExNC0xNi4yNjIgMTIuNDIzLTI0LjE2MyAyLjMxMiA3LjU5IDIuMDQ2IDE1LjkwNCAyLjU1NSAyNC4xODgtMy4xNzctLjIwMi00Ljk0IDIuODczLTcuMTY2IDMuMTF6bS02LjE2MSA4LjEzMmMtLjIwNy0yLjMwMy4zMjgtMy4wNTYuNzkxLTUuNjk1IDcuNTctMi4zNjYgNi4yNDggMTAuMzg4LS43OTEgNS42OTV6TTgzLjQ5IDIxLjI0Yy0zLjI2MSAxLjc4Mi04LjE2IDMuNzIyLTEyLjM3MyA0LjUyNi01LjIyMiAxLTQuNzMzLTcuMTIyLTQuNTExLTExLjk2OC4xNzQtMy44MzYgMi4xNjktNy44OTIgMy4wMzUtMTAuNDQuNDA3LTEuMTkuNDk5LTIuNDUzIDEuNTE2LTIuNjkgMS43OTgtLjQxOSA3LjczIDEuOTUzIDkuNDIgMi44NzUgMy41NzUgMS45NDkgNi4zNDggNS4wNDQgOS4zODQgNy4xMjNsLjExOCAzLjAzMmMtMS44MjUuOTEtMy45MzQgMS41NTUtNi42MTQgMS42NzIgMS44MTguOTE1IDQuNDkyLjkwMiA2LjE0OCAxLjk5LjAxNi40MDUuMDMzLjgwOS4wNDcgMS4yMS0zLjAyNC4yMzMtNC4xNzcgMS41OC02LjE3IDIuNjd6bS0zMS4xNTIgNS42NThjLTIuNzA2LTIuNzQ4IDcuNTkyLTYuNDk0IDEwLjg3Mi02LjY5Ni0uMDE5IDEuNzQuOTkgMy4zNzkuNzg3IDQuNjI2LTMuODk0LjY4NC05LjAxMy4yMzMtMTEuNjU5IDIuMDd6bTMzLjM0NS0xLjI5Yy0uMDEzLS4yNjktLjM2My0uMTcxLS40Mi0uMzkgMy40ODMtMi43MjEgNi4wNy0zLjI4NCAxMC44MS0zLjA1IDIuMTM3IDEuNTUyIDQuMDMzIDMuMzY2IDYuMjU4IDQuODE4LTUuMTIzLS40NTctMTEuNTc0LTMuNjQtMTYuNjQ4LTEuMzc4em0zMC42MDctOS4yODFjLS4xNDcgMy4wNTMtLjk0OSA5LjMzMS0yLjgzNiAxMC40My0zLjk2IDIuMzEzLTExLjAwMi00LjY2Ny0xMy45ODQtNS43MzIuMzI0LS45MzQuODYtMS42NzQuOTAxLTIuODY4IDEuNzY0LjQzNCAzLjkxMi4xMzcgNS40NDEtLjYxNS0xLjc2OC0uMTk3LTMuNzI4LS4xODQtNC44OTgtMS4wMjctLjQyOC0xLjIzOS4xMDUtMi45MjctLjE4LTQuNjQ3IDQuMTk2LTEuMTg0IDguOTktMS44MTQgMTQuMjk0LTEuOTcgMS4wMzIgMS4zNDIgMS4zODQgMy44OTYgMS4yNjIgNi40Mjl6TTQ3Ljc4IDI0LjIzOWMtLjg1LjYwNi02LjYgOC4wODgtNy4zODggNy43NzctMTAuNDA1LTQuMTAzLTIwLjEzNC0xMS4xOTgtMjguODI4LTE3LjkxQzE5Ljg1NS0zLjY4IDIzLjItMjUuNDcxIDIzLjc5Mi00Ni40NzVjOS40OTUtNC40NDEgMTcuODM2LTEwLjg0MyAzMC43MjItMTEuNTEyLTEuNDkyIDEwLjU1LTIuODUzIDE5Ljk2Mi0zLjcgMjkuODk1LTMuMjM3IDEuMzY0LTcuODgyLS4wNjItMTAuOTEyLjQyMy0uMDI1IDMuNjUxIDQuNjI4IDEuNTk5IDUuMDE1IDQuMDU0LjI5MiAxLjg1Ny0yLjU2IDEuOTk4LTEuNjMxIDQuOTIyIDIuMzY5LS44NiAzLjYxMi0yLjc2MiA2LjEzOS0zLjQ3NyAyLjMwOCA1LjA1LS4wMzMgMTMuOTg1LjMgMTguMjA2LjA2My43OTIuMzk2IDQuMzkgMi4xNyAzLjc1OSAxLjU3Mi0uNTU5LS4wODktOS41NjkuMDgzLTEzLjU2My4xNTctMy42OC0uNDQ0LTcuMjQyIDEuMDQ2LTkuNTUyYTM1NS44MDQgMzU1LjgwNCAwIDAgMCAzOC41NzcgMy4xNmMtMi45NjQgMS4yNzEtNi40ODUgMi40NzUtMTAuMzQ2IDQuNjUtMi4wOTIgMS4xOC04LjY4OSAzLjYzNS05LjI5MyA1LjYyMy0uOTYzIDMuMTY3IDIuNTI4IDQuODU0IDMuMTI1IDcuNTctNi4yODUtMy40MjgtNy41MSAzLjI4NS04Ljk5OCA4LjA0Mi0xLjM0NyA0LjMwNy0yLjExNCA3LjUyNS0yLjQ0NCAxMC4wMS01LjQxNSAyLjU4MS0xMS4yMDMgNS4xOTUtMTUuODY0IDguNTA1em02My4wMSA2Ljg3MmM4LjY2OSA0LjIwNCAxMC4yMzEtMTUuNzEgNi44MzMtMjIuMTI2LjUyNi0xLjkxNCAyLjMzMi0yLjY0NiAzLjA3LTQuMzY2LTQuODM5LTguNjY3LTEwLjIxMi0xNi43NTYtMTUuMTQ4LTI1LjMyIDMuNjcyIDIuMjg1IDguOTE3LjQwOCAxMy4yMzggMi4xMiAxLjU4LjYyNCAyLjcyMiA0LjI0IDMuOTE4IDcuMTMyIDMuMjkgNy45NTggNi43NDMgMTcuOTkxIDguMjggMjUuNTg2LjM0NiAxLjczIDEuMjkyIDUuNSAxLjA4IDcuMDQtLjM3OCAyLjc1OC00LjEyIDQuODAzLTYuMDIzIDYuNTA4LTMuNTA2IDMuMTUtNS43MTMgNS45MjEtOS4zNyA4Ljg2Ni0xLjQ4My0yLjE4OS00LjY2Ni0zLjY2LTUuODc4LTUuNDR6bS04Mi44MzYgNzYuODhjLTQuMTMxLTQuNTQ1LTMuMjY2LTEzLjA2MS0yLjc2Ni0xOS4xMiA3LjQ2NiA0LjY5NyAxNy4zNzctLjM3MiAxNy4yODQtOC4zNiAzLjU2NC4wOTQgMS4zMzEgNC40NTEuNjg2IDcuMjU5LTIuMTA3IDkuMTY5IDMuNTUgMTkuMTMuMjU3IDI3LjUxNi02LjM5NS0uNDg1LTExLjY1LTMuMDk3LTE1LjQ2MS03LjI5NXptMjkuNTU3IDI2LjM4Yy05LjM1MS0yLjY1LTIxLjMzNy05LjQ0NS0yNS4xOC0xNy44NDYgMi45NzYuNDMyIDUuMDQyIDEuOTMzIDcuOTc3IDIuMTE4IDEuMTEuMDczIDIuNTYzLS40NjUgMy44MzgtLjE0OCAyLjU0LjYzIDQuNjg1IDYuMzI4IDYuNjAyIDguNDQ3IDEuODY5IDIuMDcgNC4xMTQgMi45NTUgNS42NTEgNC44NDIuOTg4LjQ3NiAyLjQ0OC40NDMgMi41MDQgMS45MjYtLjQyOC40NTgtLjg3OS44MDctMS4zOTIuNjYyem00OC42ODItMi40OTJjLTkuNzA3IDUuNDc2LTI2LjEzNyA5LjU5NS0zNi40NjIgNC40NDhDNjEuNDAxIDEzMi4xNzMgNTAuMTQgMTI1LjMgNDYuMyAxMTYuNTljMy41ODctOC40MDQtMS4wNjItMTYuMTA2LTEuMzU5LTI0LjYzOS0uMTU3LTQuNTQgMi4xMzgtOC41MDQgMi4zMTQtMTMuNDQ3LTEuMjI4LTIuMDI1LTQuOTc4LTIuMjc1LTcuNTczLTIuMTM2LS44NzQgNC4zNzMtMi40MDQgOS4yODgtNi45MDYgOS43OC02LjM3Mi42OTgtMTEuMDMtNC41NzUtMTEuMzItMTAuMDg2LS4zNDItNi40OCA0Ljk3Ny0xNy4yMiAxMi41MTgtMTYuNDc0IDIuOTEyLjI4OCAzLjYyOCAzLjIwNyA2LjgwMSAzLjE3NyAxLjcyLTMuNDMxLTIuNjUzLTQuNTEtMy4xMDMtNi45NjQtLjExNy0uNjM0LjM2My0zLjExMi42NDItNC4yNzQgMS4zNy01LjY1OCA0LjQyMy0xMi45ODIgNy40MjgtMTcuMjkgMy44MTQtNS40NjQgMTEuMzA3LTYuMjg3IDE5LjM2OC02LjgyMyAxLjQ0IDMuMTAyIDYuNzQ0IDIuODQ3IDEwLjIgMi4wMzUtNC4xNDIgMS42NC03Ljk5MiA1LjYxOC0xMS4xODQgOS4xMzgtMy42NjUgNC4wMzgtNy4zNzggOC4zNy03LjU2NiAxMy42NSA2LjkyNy05LjYxIDEyLjY1LTE4LjAwMyAyNS4yNDYtMjIuMjMgOS41MzEtMy4xOTcgMjAuNjYyIDEuNDY1IDI3Ljk4NiA2LjYwNyAzLjAzOSAyLjEzOCA0Ljg1MyA1LjUzIDcuMDEzIDguNjM0IDguMDgyIDExLjYyNSAxMS44NTMgMjguMjIgMTEuMDI0IDQ0LjMwMy0uMzQxIDYuNjMzLS4zMjYgMTMuMjQzLTIuNTUyIDE3LjcwNi0yLjMyNiA0LjY2Ni0xMC4xOTMgOC44NC0xNC43OTkgNC42Mi0uODUzIDQuNTM4IDMuODMgNy4zNDQgOS4zMyA1LjcxMS0zLjkyMiA1LjA2Mi04LjAzOCAxMS4xNDUtMTMuNjEzIDE0LjI5em0xOC4wODQtMTQ5LjY2M2M3LjU4NSAzLjc3IDIxLjc1NyAxMC4xNSAyNi41MTItLjAxNCAxLjc1NS0zLjc0NiAzLjgxNC0xMC4wNzkgNC43MjMtMTMuOTQ2IDEuMjg0LTUuNDU2LTEuMzkyLTE2LjkyMy03LTE4Ljc1NC00Ljk1My0xLjYxNy0xMC43MzMtMS41MTgtMTYuNjk5LS4zMi0uNzAyLjU4NS0xLjQ4NCAxLjYwMy0yLjAzMSAyLjY2NS00LjI2LjE2NS04LjI1LS4yMjktMTEuNjE1LTEuOTguMzItMy4xNS0xLjgxMi0zLjY1Ni0zLjgxLTQuMzA1LTEuNDgtNS44NzIgMi45NjMtMTMuNTQgMS45LTE4Ljg5NS0uNzU5LTMuODE1LTUuNDUyLTQuNDA1LTguOTAyLTUuMTE5LS4xMTMtMi4xMi4xNS0zLjg5LjM4Ni01LjY4My0uNzg4LTIuOTA2LTQuMzI2LTQuNTYtNy42NzgtNC45NjYtMTEuMDMtMS4zMjYtMjcuNzc2LTEuOTIyLTM4LjM4NCAxLjg5My0yLjk2IDcuMjYxLTUuMjkyIDE2LjA5My03Ljc1OCAyNC4zODQtMTAuMzQ3LTEuMTA1LTE4LjcxNSA0LjQ2NC0yNi42MDQgOC4xMTMtMi43MyAxLjI2Ni02LjUxIDEuOTY0LTcuNTMgNC4xMzgtLjk4OSAyLjEwNS0uNTg0IDYuMTQtLjgzIDkuOTUtLjYyNCA5LjczMy0xLjE2IDE5LjEyLTMuNzMgMjkuMDg2QzE0LjA3Ni03LjA2NSAxMi4wNjQtMy4xMiAxMC42NiAxLjE5IDkuMzYzIDUuMTgzIDcuMDk3IDEwLjExOSA2LjUwNiAxNC4xYy0uODc2IDUuOTAyIDQuNjgxIDYuMjMgOC4yMzUgOC43ODggNS40OTQgMy45NTYgOS44MDcgNi4xNDMgMTUuNzU2IDkuNzEzIDEuNzYzIDEuMDU3IDcuMDc3IDMuNzMzIDcuNjgyIDQuOTY1IDEuMjAxIDIuNDQzLTIuMDYzIDUuODg4LTIuOTM2IDcuODA0LTEuMzggMy4wMjgtMi4xIDUuNjAxLTIuMjk4IDguNTktNC45OTEuNzg4LTguNzc1IDMuNzU4LTExLjA2IDcuMTA4LTMuNzgxIDUuNTQzLTYuNDAzIDE1Ljc5OC0zLjEzMiAyMy41OTkuMjU3LjYxNCAxLjUzNiAxLjgyMiAxLjcyNSAyLjc2Ni4zNzIgMS44NTgtLjcgNC4zMjgtLjc2NyA2LjMwNS0uMzQ0IDEwLjEzOSAxLjcxNSAxOC44NzUgOC41NCAyMS45MzIgMi43NzEgMTEuMDM5IDEyLjY4OSAxNC43MDkgMjIuMDMzIDIwLjE5NSAzLjQ5MiAyLjA1IDcuMzQzIDMuMzYgMTEuMzE5IDQuODIzIDE0LjI2NCA1LjI1IDM2LjE1IDQuMjYxIDQ3Ljk4OC00LjY5MiA1LjAyLTMuNzk3IDEzLjA0NC0xMS44MTMgMTUuOTE0LTE3LjYxNyA3LjU4LTE1LjMyMyA3LjA0Mi00MC45MzEgMS43NC01OS41Ny0uNzEzLTIuNTAzLTEuNzQ3LTYuMTgyLTMuMTktOS4xODgtMS4wMDctMi4wOTktNC4xMzUtNi4yOTktMy43NTUtOC4xNTIuMzkxLTEuOTE2IDcuMTMyLTcuMDM1IDguNTc4LTguNDI4IDIuNjAyLTIuNTExIDcuNTQ3LTUuODQ0IDcuOTQ4LTkuMDEyLjQzLTMuMzcyLTEuNDg2LTcuOTg1LTIuNDU3LTExLjIzOC0zLjI0NS0xMC44NTktNi40MTItMjAuODk1LTEwLjA5MS0zMC41NzYiIGZpbGw9IiMyMzFmMjAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03My42NzQgNTcuMzhjLjQxMS41NDggMi42NzQgMS4zOCA1Ljg0LS4xNDUgMCAwLTMuNzUyLS42MjUtMy40NC02Ljg4bC0xLjU2NC4zMTNzLTEuNjE1IDUuNjcyLS44MzYgNi43MTIiIGZpbGw9IiNmN2U0Y2QiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik0xMDEuMDg2IDMuNjE3YTEuNzIgMS43MiAwIDEgMC0zLjQ0LjAwMSAxLjcyIDEuNzIgMCAwIDAgMy40NC0uMDAxTTEwMi44MDUtNC4zNTVhMS43MiAxLjcyIDAgMSAwLTMuNDQgMCAxLjcyIDEuNzIgMCAwIDAgMy40NCAwIiBmaWxsPSIjMWQxOTE5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cmVjdCB3aWR0aD0iNzAuNDEyIiBoZWlnaHQ9IjQuMTIiIHg9IjE2Ljg1NCIgeT0iMTc3LjM3OCIgdHJhbnNmb3JtPSJtYXRyaXgoLjggMCAwIC0uOCAwIDE0NCkiIHJ4PSIuOTgzIiByeT0iLjk4MyIvPjxyZWN0IHdpZHRoPSI1MC4wMzciIGhlaWdodD0iMy4yOTYiIHg9Ijc4LjUwMiIgeT0iLTIuMDk3IiByeD0iLjc4NiIgcnk9Ii43ODYiIHRyYW5zZm9ybT0ic2NhbGUoMSAtMSkiLz48cmVjdCB3aWR0aD0iNTQuODMxIiBoZWlnaHQ9IjMuMjk2IiB4PSIxMy40ODMiIHk9Ii0zLjY5NyIgcng9Ii43ODYiIHJ5PSIuNzg2IiB0cmFuc2Zvcm09InNjYWxlKDEgLTEpIi8+PHJlY3Qgd2lkdGg9IjQ1LjI0MyIgaGVpZ2h0PSIzLjI5NiIgeD0iODMuMjk2IiB5PSItMy42OTciIHJ4PSIuNzg2IiByeT0iLjc4NiIgdHJhbnNmb3JtPSJzY2FsZSgxIC0xKSIvPjwvZz48L3N2Zz4=)}.executor-icon__bamboo{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBpZD0iY2FudmFzX2JhY2tncm91bmQiIGQ9Ik0tMS0xaDIwMnYyMDJILTF6Ii8+PGc+PGcgc3Ryb2tlPSJudWxsIiBpZD0ic3ZnXzYyIj48ZyBzdHJva2U9Im51bGwiIHRyYW5zZm9ybT0ibWF0cml4KDEuODYxNjcgMCAwIDEuODYxNjcgLTEzMTI3Ljg0MyAtMTMyNjQuNDQ3KSIgaWQ9InN2Z182MSI+PHN0eWxlPi5zdDB7ZmlsbDojMjA1MDgxfTwvc3R5bGU+PGcgc3Ryb2tlPSJudWxsIiBpZD0ic3ZnXzQ2Ij48ZyBzdHJva2U9Im51bGwiIGlkPSJzdmdfNDciIHRyYW5zZm9ybT0ibWF0cml4KC42OTQ0NCAwIDAgLjY5NDQ0IC0zNDMuNzUgMTUuMjc4KSI+PHBhdGggc3Ryb2tlPSJudWxsIiBjbGFzcz0ic3QwIiBkPSJNMTA2NTUuNDA4IDEwMzEwLjU5OGMyLjYgMS42IDguMiAzLjMgMTUuOSAzLjNoMGMzLjcgMCA3LjQtLjQgMTAuNC0xLjIuMy0uMS42LS40LjYtLjcuNS01LjggMi4xLTExLjYgNC44LTE2LjguMS0uMi4xLS40IDAtLjYtLjEtLjItLjItLjQtLjQtLjUtMy0xLjQtNi4yLTMuMy05LjEtNS40LTQuNS0zLjItOC4yLTYuOS0xMC45LTEwLjYtLjItLjMtLjUtLjQtLjktLjMtLjMuMS0uNi4zLS42LjctMSA1LjEtMi40IDEwLjMtNC4xIDE1LjctMS44IDUuNS0zLjggMTAuNi02IDE1LjQtLjIuMy0uMS44LjMgMXoiIGlkPSJzdmdfNTUiLz48cGF0aCBzdHJva2U9Im51bGwiIGNsYXNzPSJzdDAiIGQ9Ik0xMDY4OC43MDggMTAzMzkuNzk4Yy4yLS4zLjMtLjcuMS0xLTIuNC00LTQuMi04LjMtNS4zLTEyLjktLjMtMS4xLS41LTIuMy0uNy0zLjUgMC0uMi0uMi0uNC0uMy0uNi0uMi0uMS0uNC0uMi0uNi0uMS0zLjMuNi02LjkgMS0xMC41IDEtNS41IDAtMTAuNy0uNy0xNS4xLTIuMi0uMy0uMS0uNyAwLS45LjItLjIuMi0uMy42LS4xLjkgMi4yIDQuNyA0LjIgOS44IDUuOSAxNS4xIDEuOCA1LjUgMy4yIDEwLjggNC4yIDE2IC4xLjQuNC43LjguN2guMWMzLjEtLjMgOC42LTIuMSAxNC44LTYuNyAyLjktMiA1LjYtNC41IDcuNi02Ljl6IiBpZD0ic3ZnXzU0Ii8+PHBhdGggc3Ryb2tlPSJudWxsIiBjbGFzcz0ic3QwIiBkPSJNMTA3MzQuMTA4IDEwMjQ5LjA5OGMtLjMtLjYtLjgtMS0xLjQtMS4xbC0zOS44LTguM2MtLjgtLjItMS42LjItMi4xLjktLjQuNy0uNCAxLjYuMSAyLjJsNiA4LjFjLTMuMyAyLjktNi45IDUuOC0xMC43IDguNi00LjYgMy40LTkuMyA2LjQtMTMuOSA4LjktLjQuMi0uNS43LS40IDEuMSAxLjIgMi44IDQuNyA3LjUgMTAuOSAxMiAzIDIuMiA2LjIgNCA5LjEgNS4yLjEgMCAuMi4xLjMuMS4yIDAgLjUtLjEuNi0uMyA0LjEtNC44IDkuMS04LjYgMTQuOC0xMS4zbDIgMTAuMWMuMi44LjggMS40IDEuNiAxLjZoLjNjLjcgMCAxLjMtLjQgMS43LTFsMjAuNy0zNWMuNC0uNi41LTEuMy4yLTEuOHoiIGlkPSJzdmdfNTMiLz48cGF0aCBzdHJva2U9Im51bGwiIGNsYXNzPSJzdDAiIGQ9Ik0xMDcxMC4wMDggMTAzNTYuODk4Yy01LjUtMi4yLTEwLjUtNS42LTE0LjctOS44LS4yLS4yLS40LS4yLS42LS4yLS4yIDAtLjQuMS0uNi4zLTIuMyAyLjQtNSA0LjktNy45IDctNC41IDMuMi05LjEgNS43LTEzLjQgNy4xLS4zLjEtLjUuNC0uNi43IDAgLjMuMS42LjQuOCA0LjUgMi41IDkuMSA1LjUgMTMuNyA4LjggNC43IDMuNCA5LjEgNyAxMyAxMC43LjIuMS40LjIuNi4yLjIgMCAuNC0uMS41LS4yIDIuNC0yLjEgNS43LTYuOSA4LjEtMTQuMiAxLjItMy42IDEuOS03LjEgMi4xLTEwLjMtLjEtLjQtLjMtLjgtLjYtLjl6IiBpZD0ic3ZnXzUyIi8+PHBhdGggc3Ryb2tlPSJudWxsIiBjbGFzcz0ic3QwIiBkPSJNMTA3OTguOTA4IDEwMzIwLjE5OGMtMi42LTEuNi04LjItMy4zLTE1LjktMy4zLTMuOCAwLTcuNC40LTEwLjQgMS4yLS4zLjEtLjYuNC0uNi43LS41IDUuOC0yLjEgMTEuNi00LjggMTYuOC0uMS4yLS4xLjQgMCAuNy4xLjIuMi40LjQuNSAzIDEuNCA2LjIgMy4zIDkuMSA1LjQgNC41IDMuMiA4LjIgNi45IDEwLjkgMTAuNi4yLjIuNC4zLjcuM2guMmMuMy0uMS42LS4zLjYtLjcgMS01LjEgMi40LTEwLjMgNC4xLTE1LjcgMS44LTUuNSAzLjgtMTAuNiA2LTE1LjQuMi0uNS4xLS45LS4zLTEuMWgweiIgaWQ9InN2Z181MSIvPjxwYXRoIHN0cm9rZT0ibnVsbCIgY2xhc3M9InN0MCIgZD0iTTEwNzY1LjYwOCAxMDI5MC44OThjLS4yLjMtLjMuNy0uMSAxIDIuNCA0IDQuMiA4LjMgNS4zIDEyLjkuMyAxLjEuNSAyLjMuNyAzLjUgMCAuMi4yLjQuMy42LjIuMS40LjIuNi4xIDMuMy0uNiA2LjktMSAxMC41LTEgNS41IDAgMTAuNy43IDE1LjEgMi4yaC4zczAgMCAwIDBjLjUgMCAuOC0uNC44LS44IDAtLjItLjEtLjQtLjItLjUtMi4yLTQuNi00LjEtOS43LTUuOC0xNS0xLjgtNS41LTMuMi0xMC44LTQuMi0xNi0uMS0uNC0uNS0uNy0uOS0uNy0zLjEuMy04LjUgMi4xLTE0LjggNi43LTIuOSAyLjEtNS42IDQuNi03LjYgN2gweiIgaWQ9InN2Z181MCIvPjxwYXRoIHN0cm9rZT0ibnVsbCIgY2xhc3M9InN0MCIgZD0iTTEwNzQ0LjMwOCAxMDI3NC4wOThjNS41IDIuMiAxMC41IDUuNiAxNC43IDkuOC4yLjIuNC4yLjYuMiAwIDAgMCAwIDAgMCAuMiAwIC40LS4xLjYtLjMgMi4zLTIuNCA1LTQuOSA3LjktNyA0LjUtMy4yIDkuMS01LjcgMTMuNC03LjEuMy0uMS41LS40LjYtLjcgMC0uMy0uMS0uNi0uNC0uOC00LjUtMi41LTkuMS01LjUtMTMuNy04LjgtNC43LTMuNC05LjEtNy0xMy0xMC43LS4zLS4zLS44LS4zLTEuMSAwLTIuNCAyLjEtNS43IDYuOS04LjEgMTQuMi0xLjIgMy42LTEuOSA3LjEtMi4xIDEwLjMuMS40LjMuOC42Ljl6IiBpZD0ic3ZnXzQ5Ii8+PHBhdGggc3Ryb2tlPSJudWxsIiBjbGFzcz0ic3QwIiBkPSJNMTA3NzEuNTA4IDEwMzQ5LjI5OGMtMy0yLjItNi4yLTQtOS4xLTUuMi0uMy0uMS0uNyAwLS45LjItNC4xIDQuOC05LjEgOC42LTE0LjggMTEuM2wtMi0xMC4xYy0uMi0uOC0uOC0xLjQtMS42LTEuNi0uOC0uMS0xLjYuMi0yIC45bC0yMC43IDM1Yy0uMy41LS40IDEuMi0uMSAxLjguMy42LjggMSAxLjQgMS4xbDM5LjggOC4zaC40YzEuMSAwIDItLjkgMi0yIDAtLjUtLjItMS0uNS0xLjRsLTUuOC04YzMuMy0yLjkgNi45LTUuOCAxMC43LTguNiA0LjYtMy40IDkuMy02LjQgMTMuOS04LjkuNC0uMi41LS43LjQtMS4xLTEuNC0yLjUtNC45LTcuMi0xMS4xLTExLjdoMHoiIGlkPSJzdmdfNDgiLz48L2c+PC9nPjwvZz48L2c+PC9nPjwvc3ZnPg==)}.executor-icon__teamcity{background-image:url(data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMjguMDEgMTI4LjAxIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI2Ni43MyIgeTE9Ii02NjIuODQiIHgyPSIyNi40IiB5Mj0iLTYxMy4wMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIC01ODUuMDEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMDYiIHN0b3AtY29sb3I9IiMwY2IwZjIiLz48c3RvcCBvZmZzZXQ9Ii4yMSIgc3RvcC1jb2xvcj0iIzEwYWRmMiIvPjxzdG9wIG9mZnNldD0iLjM3IiBzdG9wLWNvbG9yPSIjMWVhNWYzIi8+PHN0b3Agb2Zmc2V0PSIuNTQiIHN0b3AtY29sb3I9IiMzNDk3ZjUiLz48c3RvcCBvZmZzZXQ9Ii43MSIgc3RvcC1jb2xvcj0iIzUyODNmNyIvPjxzdG9wIG9mZnNldD0iLjg4IiBzdG9wLWNvbG9yPSIjNzk2YWY5Ii8+PHN0b3Agb2Zmc2V0PSIuOTciIHN0b3AtY29sb3I9IiM5MDVjZmIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjIwLjkiIHkxPSItNzA2LjMzIiB4Mj0iNDEuMTEiIHkyPSItNjU5LjU5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgLTU4NS4wMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4wNiIgc3RvcC1jb2xvcj0iIzBjYjBmMiIvPjxzdG9wIG9mZnNldD0iLjIiIHN0b3AtY29sb3I9IiMwZGIyZWUiLz48c3RvcCBvZmZzZXQ9Ii4zNSIgc3RvcC1jb2xvcj0iIzEyYjdlMCIvPjxzdG9wIG9mZnNldD0iLjUxIiBzdG9wLWNvbG9yPSIjMTljMGNhIi8+PHN0b3Agb2Zmc2V0PSIuNjgiIHN0b3AtY29sb3I9IiMyM2NjYWMiLz48c3RvcCBvZmZzZXQ9Ii44NSIgc3RvcC1jb2xvcj0iIzMwZGM4NSIvPjxzdG9wIG9mZnNldD0iLjk3IiBzdG9wLWNvbG9yPSIjM2JlYTYyIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI0OC42MiIgeTE9Ii02NDQuOTEiIHgyPSI4OC4xMiIgeTI9Ii01OTQuMjQiIHhsaW5rOmhyZWY9IiNhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iNjMuOTkiIHkxPSItNjA5LjkyIiB4Mj0iNjMuOTkiIHkyPSItNjg5LjkyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgLTU4NS4wMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBkPSJNNDUuOTIgMi45MmEyNSAyNSAwIDAgMC01LjUzLTJjLTI1LjctNi4xLTQ0LjggMTkuMS0zNC4zIDQyIC4xLjEgMTguNyA0MC45IDIxLjcgNDcuNCAwIDAgMzQuMi0xNS43IDQxLjItMzEuOCA2LjQ4LTE1LTQuNDUtNDIuMzgtNi40NS00Ni40OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNMTIzLjE5IDQ4LjQzYTI0LjM2IDI0LjM2IDAgMCAwLTguNi04Yy0uMSAwLTI0LjEtMTMuMi0yNC4xLTEzLjJTOC4wOSA3NSA4IDc1LjEzYy05LjMgMTAuNi0xMS40IDI3LjQtLjcgNDJhMjUuMjIgMjUuMjIgMCAwIDAgMTMgOS4yYzkuNyAzIDE4LjMgMS44IDI1LjUtMiAuMi0uMSA2Ny43LTM1LjkgNjcuOS0zNi4xIDEzLjE5LTYuOSAxOS4zLTI0LjUgOS40OS0zOS44eiIgZmlsbD0iIzBjYjBmMiIvPjxwYXRoIGQ9Ik0zOC40MiAzNy45NGwtMjIgMjctOC41MyAxMC4xOWMtOS4zIDEwLjYtMTEuNCAyNy40LS43IDQyYTI1LjIyIDI1LjIyIDAgMCAwIDEzIDkuMmM5LjcgMyAxOC40IDEuOCAyNS42LTIgMCAwIDEuNy0uOSA0LjYtMi41IDkuMTQtNC45NCAyMS43NS0zOC4xNSAzMC4zNS02My44M3oiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJNNzMgNjMuOTNMOTAuNDkgMjdhLjEuMSAwIDAgMSAuMS0uMWMuMS0uMyAxLjUtMy45IDEuNi00LjFhMTcgMTcgMCAwIDAtMS44LTE1LjkgMTQuMjkgMTQuMjkgMCAwIDAtOC45LTYuMyAxNi40IDE2LjQgMCAwIDAtMTcuMSA1LjdjLS4xLjEtMy45IDQuNS0zLjkgNC41bC0yOCAzNC41eiIgZmlsbD0idXJsKCNjKSIvPjxnPjxwYXRoIGZpbGw9InVybCgjZCkiIGQ9Ik0yMy45OSAyMy45M2g4MHY4MGgtODB6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTQyLjc5IDQxLjYzaC0xMC44di03aDI5LjN2N2gtMTAuN3YyNy41OWgtNy44VjQxLjYzek02MS4yOSA1MmMwLTEwIDcuNC0xOC4xIDE4LjEtMTguMSA2LjUgMCAxMC41IDIuMiAxMy43IDUuNGwtNC45IDUuNmMtMi43LTIuNC01LjQtMy45LTguOS0zLjktNS44IDAtMTAuMSA0LjktMTAuMSAxMC44di4xYzAgNiA0LjEgMTAuOSAxMC4xIDEwLjkgNCAwIDYuNC0xLjYgOS4xLTQuMWw0LjkgNC45Yy0zLjYgMy44LTcuNSA2LjItMTQuMiA2LjJBMTcuNDEgMTcuNDEgMCAwIDEgNjEuMjkgNTJNMzEuOTkgODcuOTNoMjkuM3Y1LjNoLTI5LjN6Ii8+PC9nPjwvc3ZnPg==)}.executor-icon__gitlab{background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNjAgNTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNTkuNjgyIDMxLjM5MmwtMy4zNS0xMC4yNkw0OS43MDUuNzhjLS4zNC0xLjA0LTEuODIxLTEuMDQtMi4xNzMgMGwtNi42MjcgMjAuMzM5aC0yMi4wMkwxMi4yNTguNzhjLS4zNC0xLjA0LTEuODIxLTEuMDQtMi4xNzMgMEwzLjQ2OSAyMS4xMTkuMTE5IDMxLjM5MWMtLjMwMy45MzIuMDI1IDEuOTYuODI2IDIuNTQxTDI5Ljg5NiA1NC45bDI4Ljk1MS0yMC45NjhhMi4yNzUgMi4yNzUgMCAwIDAgLjgzNy0yLjU0MSIgZmlsbD0iI2ZjNmQyNiIvPjxwYXRoIGQ9Ik0yOS45MDEgNTQuODg3bDExLjAxLTMzLjc2N2gtMjIuMDJ6IiBmaWxsPSIjZTI0MzI5Ii8+PHBhdGggZD0iTTI5Ljg5MyA1NC44ODdMMTguODgzIDIxLjEySDMuNDY2eiIgZmlsbD0iI2ZjNmQyNiIvPjxwYXRoIGQ9Ik0zLjQ2MiAyMS4xM0wuMTEyIDMxLjM5Yy0uMzAzLjkzMS4wMjUgMS45Ni44MjYgMi41NDFsMjguOTUxIDIwLjk2OEwzLjQ2MyAyMS4xMyIgZmlsbD0iI2ZjYTMyNiIvPjxwYXRoIGQ9Ik0zLjQ2NiAyMS4xM2gxNS40MjlMMTIuMjU1Ljc5MWMtLjM0LTEuMDQxLTEuODIxLTEuMDQxLTIuMTczIDBMMy40NjYgMjEuMTMiIGZpbGw9IiNlMjQzMjkiLz48cGF0aCBkPSJNMjkuOTAxIDU0Ljg4N2wxMS4wMS0zMy43NjdINTYuMzR6IiBmaWxsPSIjZmM2ZDI2Ii8+PHBhdGggZD0iTTU2LjMzIDIxLjEzbDMuMzUgMTAuMjZhMi4yNyAyLjI3IDAgMCAxLS44MjYgMi41NDFMMjkuOTAzIDU0Ljg4NyA1Ni4zMjkgMjEuMTMiIGZpbGw9IiNmY2EzMjYiLz48cGF0aCBkPSJNNTYuMzQgMjEuMTNINDAuOTEyTDQ3LjUzOS43OTFjLjM0LTEuMDQxIDEuODIxLTEuMDQxIDIuMTczIDBMNTYuMzQgMjEuMTMiIGZpbGw9IiNlMjQzMjkiLz48L2c+PC9zdmc+)}.executor-icon__github{background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIC4yOTdjLTYuNjMgMC0xMiA1LjM3My0xMiAxMiAwIDUuMzAzIDMuNDM4IDkuOCA4LjIwNSAxMS4zODUuNi4xMTMuODItLjI1OC44Mi0uNTc3IDAtLjI4NS0uMDEtMS4wNC0uMDE1LTIuMDQtMy4zMzguNzI0LTQuMDQyLTEuNjEtNC4wNDItMS42MUM0LjQyMiAxOC4wNyAzLjYzMyAxNy43IDMuNjMzIDE3LjdjLTEuMDg3LS43NDQuMDg0LS43MjkuMDg0LS43MjkgMS4yMDUuMDg0IDEuODM4IDEuMjM2IDEuODM4IDEuMjM2IDEuMDcgMS44MzUgMi44MDkgMS4zMDUgMy40OTUuOTk4LjEwOC0uNzc2LjQxNy0xLjMwNS43Ni0xLjYwNS0yLjY2NS0uMy01LjQ2Ni0xLjMzMi01LjQ2Ni01LjkzIDAtMS4zMS40NjUtMi4zOCAxLjIzNS0zLjIyLS4xMzUtLjMwMy0uNTQtMS41MjMuMTA1LTMuMTc2IDAgMCAxLjAwNS0uMzIyIDMuMyAxLjIzLjk2LS4yNjcgMS45OC0uMzk5IDMtLjQwNSAxLjAyLjAwNiAyLjA0LjEzOCAzIC40MDUgMi4yOC0xLjU1MiAzLjI4NS0xLjIzIDMuMjg1LTEuMjMuNjQ1IDEuNjUzLjI0IDIuODczLjEyIDMuMTc2Ljc2NS44NCAxLjIzIDEuOTEgMS4yMyAzLjIyIDAgNC42MS0yLjgwNSA1LjYyNS01LjQ3NSA1LjkyLjQyLjM2LjgxIDEuMDk2LjgxIDIuMjIgMCAxLjYwNi0uMDE1IDIuODk2LS4wMTUgMy4yODYgMCAuMzE1LjIxLjY5LjgyNS41N0MyMC41NjUgMjIuMDkyIDI0IDE3LjU5MiAyNCAxMi4yOTdjMC02LjYyNy01LjM3My0xMi0xMi0xMiIvPjwvc3ZnPg==)}.executor{line-height:32px}.status-details{overflow:auto;margin-bottom:7px}.status-details_status_failed{border-color:#fd5a3e}.status-details_status_broken{border-color:#ffd050}.status-details_status_passed{border-color:#97cc64}.status-details_status_skipped{border-color:#aaa}.status-details_status_unknown{border-color:#d35ebe}.status-details_status_failed{background:#ffe7e6}.status-details_status_broken{background:#fffae6}.status-details_status_passed{background:#eef9eb}.status-details_status_skipped{background:#f2f2f2}.status-details_status_unknown{background:#faebf7}.status-details__expanded>.status-details__content>.status-details__trace{display:block}.status-details__expanded>.status-details__content{display:inline-block}.status-details__message{padding:15px}.status-details__trace{float:left;display:none;padding:15px;white-space:pre;border-top:1px solid #fff}.status-details__content{display:block}.status-details__trace-toggle:hover{background-color:#e4edfe}.table__head,.table__row{display:flex}.table__row{border-bottom:1px solid #eceff1;text-decoration:none;color:#000}.table__head{border-bottom:1px solid #e5e5e5;font-weight:700}.table__col{line-height:1.5em;padding:10px 15px;flex:1}.table__col_center{text-align:center}.table__col_right{text-align:right;justify-content:flex-end}.table__col_sortable{cursor:pointer;display:flex}.table__col_sortable>span{overflow:hidden;padding-right:5px}.table__col_sortable:after{flex-shrink:0;vertical-align:middle;content:" ";display:inline-block;width:12px;height:18px;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIj48cGF0aCBmaWxsPSIjYTVhNWE1IiBkPSJNMjU2IDUwbDEzMi4wMzQgMTc2SDEyMy45NjZMMjU2IDUwem0xMzIuMDM0IDIzNkgxMjMuOTY2TDI1NiA0NjJsMTMyLjAzNC0xNzZ6Ii8+PC9zdmc+) 50% no-repeat;background-size:contain}.table__col_sorted_down:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIj48cGF0aCBmaWxsPSIjYTVhNWE1IiBkPSJNMjU2IDUwbDEzMi4wMzQgMTc2SDEyMy45NjZMMjU2IDUweiIvPjxwYXRoIGQ9Ik0zODguMDM0IDI4NkgxMjMuOTY2TDI1NiA0NjJsMTMyLjAzNC0xNzZ6Ii8+PC9zdmc+)}.table__col_sorted_up:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIj48cGF0aCBkPSJNMjU2IDUwbDEzMi4wMzQgMTc2SDEyMy45NjZMMjU2IDUweiIvPjxwYXRoIGZpbGw9IiNhNWE1YTUiIGQ9Ik0zODguMDM0IDI4NkgxMjMuOTY2TDI1NiA0NjJsMTMyLjAzNC0xNzZ6Ii8+PC9zdmc+)}.table_hover .table__row:not([disabled]):hover{background:#e4edfe}.table .table__row_summary{background:#f6f5f3}.table .table__row_active{background:#fffacd}.tabs{list-style-type:none;position:relative;background:#fff;border-bottom:1px solid #e5e5e5;padding:0;margin:0}.tab{font-size:16px}.tab,.tab>a{display:inline-block}.tab>a{padding:7.5px 15px;border-bottom:3px solid transparent}.tab>a:hover{border-bottom-color:#eceff1}.tab_active>a,.tab_active>a:hover{border-bottom-color:#000}.pane__subtitle{color:#999;padding-left:5px;margin:10px 0;font-weight:400;font-size:18px}.pane__title{padding:0 15px 10px;width:100%;display:flex;position:relative;margin:7px 0 0;border-bottom:1px solid #eceff1;font-size:24px;font-weight:700}.pane__title_borderless{border:none}.pane__search{display:inline-block;padding:0 .5em;width:100%}.pane__title-text{text-align:left}.pane__controls>a{text-decoration:none;color:#000;opacity:.7}.pane__controls>a:hover{opacity:1}.pane__section{margin:15px 0;padding:0 15px}.pane__section-title{margin:0 0 15px}.side-by-side{height:100%;width:100%;padding:0;margin:0;overflow:hidden;display:flex;position:absolute}[dir=ltr] .side-by-side{direction:ltr;flex-direction:row}[dir=ltr] .side-by-side__left{overflow:auto;flex:0 0 auto}[dir=ltr] .side-by-side__right{overflow:auto;flex:1 1 auto}[dir=rtl] .side-by-side{direction:ltr;box-orient:horizontal;flex-direction:row-reverse}[dir=rtl] .side-by-side__left{direction:rtl;overflow:auto;flex:0 0 auto}[dir=rtl] .side-by-side__right{direction:rtl;overflow:auto;flex:1 1 auto}[dir=rtl] .tree__ctrl{overflow:hidden}.gutter{background:#eceff1 no-repeat 50%}.gutter:hover{cursor:ew-resize}.gutter-horizontal{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==)}.tree__ctrl{display:flex;flex-wrap:wrap;border-top:1px solid #eceff1;background:hsla(0,0%,94.1%,.2)}.tree__filter,.tree__filter-marks,.tree__sorter{padding:0 15px;position:relative;white-space:nowrap}.tree__strut{flex:1}.tree__empty{border-top:1px solid #eceff1;padding:8px 0 0 15px}.tree .pane__controls{display:flex}.tree__download,.tree__info{color:#999;padding:7px}.sorter{overflow:hidden;color:#999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sorter_enabled{color:#000}.sorter__item{cursor:pointer;display:inline-block;padding-right:15px}.search__container{width:100%;max-width:350px;float:right}.search__input{width:100%;height:32px;font-size:.8em;display:inline-block;padding:0 30px 0 10px;border:1px solid #e5e5e5;line-height:20px;background:no-repeat right 8px center}.search__input:hover{border-color:#888}.search__input:focus{border-color:#51a7e8;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(81,167,232,.5)}.status-toggle__items{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;word-break:break-word}.status-toggle__item{cursor:pointer;padding:5px 0;display:inline-block;white-space:nowrap}.y-label{vertical-align:baseline;letter-spacing:1px;color:#fff;padding:2px 4px 2px 5px;border-radius:3px}.y-label_status_failed{background:#fd5a3e}.y-label_status_broken{background:#ffd050}.y-label_status_passed{background:#97cc64}.y-label_status_skipped{background:#aaa}.y-label_status_unknown{background:#d35ebe}.n-label{vertical-align:baseline;letter-spacing:1px;padding:1px 3px 1px 4px;border-radius:3px;border:1px solid;font-weight:700}.n-label_status_failed{color:#fd5a3e}.n-label_status_broken{color:#ffd050}.n-label_status_passed{color:#97cc64}.n-label_status_skipped{color:#aaa}.n-label_status_unknown{color:#d35ebe}.n-label_status_failed{border-color:#fd5a3e}.n-label_status_broken{border-color:#ffd050}.n-label_status_passed{border-color:#97cc64}.n-label_status_skipped{border-color:#aaa}.n-label_status_unknown{border-color:#d35ebe}.marks-toggle__items{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;word-break:break-word}.marks-toggle__item{cursor:pointer;padding:5px 0;display:inline-block;white-space:nowrap}.y-label-mark{background:#97cc64;color:#fff;padding:2px 4px 2px 5px;border-radius:3px}.n-label-mark,.y-label-mark{vertical-align:baseline;letter-spacing:1px}.n-label-mark{padding:1px 3px 1px 4px;border-radius:3px;border:1px solid;font-weight:700}.node{margin-left:0;position:relative;display:block;text-decoration:none;color:#000}.node .node{margin-left:20px}.node:last-child{padding-bottom:10px}.node__arrow{left:7px;position:absolute}.node__flaky{padding-left:10px;padding-right:5px;opacity:0}.node__flaky_shown{opacity:1}.node__newFailed{padding-left:10px;padding-right:5px;opacity:0}.node__newFailed_shown{opacity:1}.node__order{padding-left:5px;padding-right:10px}.node__anchor{left:10px;position:absolute}.node__stats{display:block;float:right;white-space:nowrap}.node__title{overflow:hidden;line-height:1.2em;padding:7px 15px 7px 25px;flex:1;display:flex;cursor:pointer;border-top:1px solid #eceff1;position:relative}.node__leaf .node__title{padding:7px 15px 7px 35px}.node__title_active,.node__title_active:before{background-color:#fffacd}.node__title:hover,.node__title:hover:before{background-color:#e4edfe}.node__time{padding:5px}.node__parameters{color:#999;min-width:2ch}.node__children,.node__parameters_separator:last-child{display:none}.node__expanded>.node__children{display:block}.node:focus{outline:0}[dir=rtl] .attachment-row.attachment-row_selected>.attachment-row__arrow>.fa-angle-right{-webkit-transform:rotate(180deg);transform:rotate(180deg)}[dir=ltr] .node__expanded>.node__title>.node__arrow,[dir=rtl] .node__expanded>.node__title>.node__arrow,[dir=rtl] .step_expanded>.step__title>.step__arrow{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.empty-view{padding:10px;text-align:center}.trend__tooltip{white-space:nowrap;display:flex;flex-direction:column}.trend__tooltip_label{text-align:left;display:inline-block}.trend__tooltip_name{vertical-align:middle}.chart{margin-right:15px;margin-bottom:15px;margin-top:15px;position:relative;flex:1}.chart__title{margin-top:0;margin-bottom:15px;font-size:18px}.chart__caption{text-anchor:middle}.chart__body>div{padding-top:50%;position:relative}.chart__svg{position:absolute;top:0;left:0;width:100%;height:100%}.chart__legend{position:absolute;height:50%;top:10%;right:10%;display:grid}.chart__legend-icon{position:relative;top:-1px;border-radius:3px;display:inline-block;vertical-align:middle;width:20px;height:16px;margin-right:5px}.chart__legend-icon_status_failed{background:#fd5a3e}.chart__legend-icon_status_broken{background:#ffd050}.chart__legend-icon_status_passed{background:#97cc64}.chart__legend-icon_status_skipped{background:#aaa}.chart__legend-icon_status_unknown{background:#d35ebe}.chart__bar{shape-rendering:crispEdges;fill:#4682b4}.chart__arc{stroke:#fff;stop-opacity:0}.chart__fill_status_failed{fill:#fd5a3e}.chart__fill_status_broken{fill:#ffd050}.chart__fill_status_passed{fill:#97cc64}.chart__fill_status_skipped{fill:#aaa}.chart__fill_status_unknown{fill:#d35ebe}.chart__axis line,.chart__axis path{shape-rendering:crispEdges;stroke:#000;fill:none}.widgets-grid{position:absolute;top:0;left:0;right:0;bottom:0;padding:15px 15px 0;max-height:100%;overflow:auto;display:flex}.widgets-grid__col{flex:1 0 0%;width:50%;min-width:300px}.widgets-grid__col+.widgets-grid__col{flex:1 0 0%;padding-left:15px}@media (max-width:1000px){.widgets-grid{display:block}.widgets-grid__col{width:100%}.widgets-grid__col+.widgets-grid__col{padding-left:0}}.loader{margin:auto;text-align:center}.loader__mask{position:relative;top:0;bottom:0;left:0;right:0;display:flex}.loader__text{font-size:14px;margin-top:1em}.loader_container{position:absolute;top:50%;left:50%;margin-left:-19px;margin-top:-19px}.timeline{padding:15px;overflow:auto;height:100vh}.timeline__brush_svg,.timeline__chart_svg{width:100%}.timeline__chart__axis_x .tick{opacity:.3;stroke-dasharray:1,4;shape-rendering:crispEdges}.timeline__item:hover{opacity:.7}.timeline__group_title{font-size:12px;fill:#838383;dominant-baseline:central}.timeline__host-bg{fill:#eee;stroke:#e0e0e0;rx:3;ry:9}.timeline__brush{position:absolute;width:100%}.timeline__brush .selection{fill:#000;fill-opacity:.3}.timeline__brush__axis_bg{fill:#fff}.timeline__brush .handle{fill:#fff;stroke:#000;stroke-opacity:.5;stroke-width:1px}.timeline__slider_track{stroke-linecap:round;stroke:#000;stroke-opacity:.3;stroke-width:10px}.timeline__slider_handle{fill:#fff;stroke:#000;stroke-opacity:.5;stroke-width:1px;cursor:pointer}.timeline__slider_text{text-anchor:middle}.categories-trend__chart>div,.duration-trend__chart>div,.retry-trend__chart>div{position:relative;padding-top:50%}.summary-widget{padding:1em 0}.summary-widget__stats{padding:2em 0}.summary-widget__chart>div{height:100%;padding-bottom:12px}.history-trend__chart>div,.summary-widget__chart>div{position:relative;padding-top:50%}.test-result-history__row{padding:7px 15px 7px 0}.test-result-history__success-rate{padding-bottom:10px}.test-result-retries__row{padding:7px 15px;cursor:pointer}.test-result-retries__row:hover{background-color:#e4edfe}.environment{margin-bottom:.5em}.environment__key{color:#999}.testresult-link:not(:last-child):after{content:","} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/behaviors.json b/apiAutoTest_v3/report/html/self/widgets/behaviors.json new file mode 100644 index 0000000..925c533 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/behaviors.json @@ -0,0 +1,4 @@ +{ + "total" : 31, + "items" : [ ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/categories-trend.json b/apiAutoTest_v3/report/html/self/widgets/categories-trend.json new file mode 100644 index 0000000..34e05e0 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/categories-trend.json @@ -0,0 +1,5 @@ +[ { + "data" : { + "Product defects" : 23 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/categories.json b/apiAutoTest_v3/report/html/self/widgets/categories.json new file mode 100644 index 0000000..ff4f889 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/categories.json @@ -0,0 +1,15 @@ +{ + "total" : 1, + "items" : [ { + "uid" : "8fb3a91ba5aaf9de24cc8a92edc82b5d", + "name" : "Product defects", + "statistic" : { + "failed" : 23, + "broken" : 0, + "skipped" : 0, + "passed" : 0, + "unknown" : 0, + "total" : 23 + } + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/duration-trend.json b/apiAutoTest_v3/report/html/self/widgets/duration-trend.json new file mode 100644 index 0000000..f8490eb --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/duration-trend.json @@ -0,0 +1,5 @@ +[ { + "data" : { + "duration" : 1926 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/duration.json b/apiAutoTest_v3/report/html/self/widgets/duration.json new file mode 100644 index 0000000..880c445 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/duration.json @@ -0,0 +1,311 @@ +[ { + "uid" : "ad8b5e83abae28e2", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "400f0b538799da08", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "68edada79f2c2c5c", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "35d5cf5672473543", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "9adb4eda7ef664b4", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "981f584b9cbf47d6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "cbcafb24c8f79dae", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "91abfb7f4e48e0a7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "bae95a6a19479944", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "800d22e4a7f18199", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "83d8b1f10123a10c", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "34ae4840c9eb7a0a", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "620574a4f8cb8351", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "b7ed8bb51662c63b", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "827168807ae28c0", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "80a39a45c3baceac", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "a0e7fbd23128cdaf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "da61aa4a47447f1", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "46efc3b9e725d261", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "65bf4ee0f2e87568", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "ba062d37a9003d15", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "c56320550a22c0db", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "3c7a94555e07633b", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "1b1ea3622c7cbb0e", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "da0b4417fe54e65b", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "10d62acf0e332229", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8c18ed11d24a69cf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "ead755efe8123e8", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "75224b36c281fcd6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "6c322c83493913f2", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8727397adfee82f7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "status" : "failed", + "severity" : "normal" +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/environment.json b/apiAutoTest_v3/report/html/self/widgets/environment.json new file mode 100644 index 0000000..8878e54 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/environment.json @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/executors.json b/apiAutoTest_v3/report/html/self/widgets/executors.json new file mode 100644 index 0000000..8878e54 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/executors.json @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/history-trend.json b/apiAutoTest_v3/report/html/self/widgets/history-trend.json new file mode 100644 index 0000000..c37b805 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/history-trend.json @@ -0,0 +1,10 @@ +[ { + "data" : { + "failed" : 23, + "broken" : 0, + "skipped" : 0, + "passed" : 8, + "unknown" : 0, + "total" : 31 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/launch.json b/apiAutoTest_v3/report/html/self/widgets/launch.json new file mode 100644 index 0000000..8878e54 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/launch.json @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/retry-trend.json b/apiAutoTest_v3/report/html/self/widgets/retry-trend.json new file mode 100644 index 0000000..c900d54 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/retry-trend.json @@ -0,0 +1,6 @@ +[ { + "data" : { + "run" : 31, + "retry" : 0 + } +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/severity.json b/apiAutoTest_v3/report/html/self/widgets/severity.json new file mode 100644 index 0000000..4198fb6 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/severity.json @@ -0,0 +1,311 @@ +[ { + "uid" : "da0b4417fe54e65b", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "65bf4ee0f2e87568", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "10d62acf0e332229", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8727397adfee82f7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "827168807ae28c0", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "ad8b5e83abae28e2", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "620574a4f8cb8351", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "400f0b538799da08", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "1b1ea3622c7cbb0e", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8c18ed11d24a69cf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "da61aa4a47447f1", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "75224b36c281fcd6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "981f584b9cbf47d6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "34ae4840c9eb7a0a", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "83d8b1f10123a10c", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "6c322c83493913f2", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "bae95a6a19479944", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "35d5cf5672473543", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "b7ed8bb51662c63b", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "cbcafb24c8f79dae", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "91abfb7f4e48e0a7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "ead755efe8123e8", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "9adb4eda7ef664b4", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "3c7a94555e07633b", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "68edada79f2c2c5c", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "80a39a45c3baceac", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "a0e7fbd23128cdaf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "46efc3b9e725d261", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "800d22e4a7f18199", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "c56320550a22c0db", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "ba062d37a9003d15", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "status" : "failed", + "severity" : "normal" +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/status-chart.json b/apiAutoTest_v3/report/html/self/widgets/status-chart.json new file mode 100644 index 0000000..880c445 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/status-chart.json @@ -0,0 +1,311 @@ +[ { + "uid" : "ad8b5e83abae28e2", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509874783, + "stop" : 1725509874802, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "400f0b538799da08", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams-POST-query|json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509873976, + "stop" : 1725509874012, + "duration" : 36 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "68edada79f2c2c5c", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg-POST-query-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509873921, + "stop" : 1725509873965, + "duration" : 44 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "35d5cf5672473543", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509874610, + "stop" : 1725509874629, + "duration" : 19 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "9adb4eda7ef664b4", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509874568, + "stop" : 1725509874598, + "duration" : 30 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "981f584b9cbf47d6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874936, + "stop" : 1725509874957, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "cbcafb24c8f79dae", + "name" : "test_bpm[http://36.139.193.99:8088/refresh-GET-None-None-expect_data11-None-None-None]", + "time" : { + "start" : 1725509875409, + "stop" : 1725509875429, + "duration" : 20 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "91abfb7f4e48e0a7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-post-application/json-case_data8-expect_data8-None-None-None]", + "time" : { + "start" : 1725509875262, + "stop" : 1725509875279, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "bae95a6a19479944", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data7-expect_data7-None-None-None]", + "time" : { + "start" : 1725509875221, + "stop" : 1725509875250, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "800d22e4a7f18199", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509875131, + "stop" : 1725509875157, + "duration" : 26 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "83d8b1f10123a10c", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509875303, + "stop" : 1725509875320, + "duration" : 17 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "34ae4840c9eb7a0a", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509874526, + "stop" : 1725509874557, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "620574a4f8cb8351", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509875031, + "stop" : 1725509875058, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "b7ed8bb51662c63b", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-delete-query-case_data6-expect_data6-select-sql_data6-ids]", + "time" : { + "start" : 1725509874074, + "stop" : 1725509874102, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "827168807ae28c0", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/addOrg-POST-json-case_data2-expect_data2-delete|select-sql_data2-demId]", + "time" : { + "start" : 1725509873838, + "stop" : 1725509873888, + "duration" : 50 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "80a39a45c3baceac", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/updateDem-put-json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509873794, + "stop" : 1725509873815, + "duration" : 21 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "a0e7fbd23128cdaf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874897, + "stop" : 1725509874926, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "da61aa4a47447f1", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data1-expect_data1-None-None-None]", + "time" : { + "start" : 1725509874244, + "stop" : 1725509874267, + "duration" : 23 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "46efc3b9e725d261", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509874707, + "stop" : 1725509874750, + "duration" : 43 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "65bf4ee0f2e87568", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data0-expect_data0-None-None-None]", + "time" : { + "start" : 1725509874200, + "stop" : 1725509874231, + "duration" : 31 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "ba062d37a9003d15", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data9-expect_data9-None-None-None]", + "time" : { + "start" : 1725509874661, + "stop" : 1725509874683, + "duration" : 22 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "c56320550a22c0db", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data5-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874463, + "stop" : 1725509874504, + "duration" : 41 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "3c7a94555e07633b", + "name" : "test_bpm[http://36.139.193.99:8088/api/org/v1/org/deleteOrg-POST-json-testAddOrg-expect_data5-None-None-None]", + "time" : { + "start" : 1725509874033, + "stop" : 1725509874049, + "duration" : 16 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "1b1ea3622c7cbb0e", + "name" : "test_bpm[http://36.139.193.99:8088/api/demension/v1/dem/addDem-post-application/json-case_data0-expect_data0-delete-sql_data0-None]", + "time" : { + "start" : 1725509873503, + "stop" : 1725509873548, + "duration" : 45 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "da0b4417fe54e65b", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data3-expect_data3-None-None-None]", + "time" : { + "start" : 1725509874349, + "stop" : 1725509874377, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "10d62acf0e332229", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509875082, + "stop" : 1725509875109, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8c18ed11d24a69cf", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-json-case_data4-expect_data4-None-None-None]", + "time" : { + "start" : 1725509874400, + "stop" : 1725509874428, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "ead755efe8123e8", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874981, + "stop" : 1725509875008, + "duration" : 27 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "75224b36c281fcd6", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data6-expect_data6-None-None-None]", + "time" : { + "start" : 1725509875182, + "stop" : 1725509875211, + "duration" : 29 + }, + "status" : "passed", + "severity" : "normal" +}, { + "uid" : "6c322c83493913f2", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data2-expect_data2-None-None-None]", + "time" : { + "start" : 1725509874288, + "stop" : 1725509874316, + "duration" : 28 + }, + "status" : "failed", + "severity" : "normal" +}, { + "uid" : "8727397adfee82f7", + "name" : "test_bpm[http://36.139.193.99:8088/auth-POST-application/json-case_data10-expect_data10-None-None-None]", + "time" : { + "start" : 1725509875344, + "stop" : 1725509875383, + "duration" : 39 + }, + "status" : "failed", + "severity" : "normal" +} ] \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/suites.json b/apiAutoTest_v3/report/html/self/widgets/suites.json new file mode 100644 index 0000000..0232a7c --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/suites.json @@ -0,0 +1,37 @@ +{ + "total" : 3, + "items" : [ { + "uid" : "f807542b498ef7f359918df354af54f0", + "name" : "test_case.test_lao_zhang", + "statistic" : { + "failed" : 9, + "broken" : 0, + "skipped" : 0, + "passed" : 3, + "unknown" : 0, + "total" : 12 + } + }, { + "uid" : "d6bee4aab82b7aa6ffaaa10289749982", + "name" : "test_case.test_lisi", + "statistic" : { + "failed" : 9, + "broken" : 0, + "skipped" : 0, + "passed" : 3, + "unknown" : 0, + "total" : 12 + } + }, { + "uid" : "7a8b7e46177bbd4d1efa8551fea4a38d", + "name" : "test_case.test_demo", + "statistic" : { + "failed" : 5, + "broken" : 0, + "skipped" : 0, + "passed" : 2, + "unknown" : 0, + "total" : 7 + } + } ] +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/html/self/widgets/summary.json b/apiAutoTest_v3/report/html/self/widgets/summary.json new file mode 100644 index 0000000..a791e55 --- /dev/null +++ b/apiAutoTest_v3/report/html/self/widgets/summary.json @@ -0,0 +1,20 @@ +{ + "reportName" : "Allure Report", + "testRuns" : [ ], + "statistic" : { + "failed" : 23, + "broken" : 0, + "skipped" : 0, + "passed" : 8, + "unknown" : 0, + "total" : 31 + }, + "time" : { + "start" : 1725509873503, + "stop" : 1725509875429, + "duration" : 1926, + "minDuration" : 16, + "maxDuration" : 50, + "sumDuration" : 891 + } +} \ No newline at end of file diff --git a/apiAutoTest_v3/report/log/2024-09-04-18-43-11.log b/apiAutoTest_v3/report/log/2024-09-04-18-43-11.log new file mode 100644 index 0000000..4c1aab1 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-18-43-11.log @@ -0,0 +1,43 @@ +2024-09-04 18:43:12,502 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 18:43:12,503 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 18:43:12,503 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-04 18:43:12,503 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-04 18:43:12,539 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 18:43:12,540 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 18:43:12,540 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-04 18:43:12,540 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-04 18:43:12,575 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 18:43:12,575 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 18:43:12,576 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-04 18:43:12,576 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-04 18:43:12,974 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-04 18:43:13,377 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-04 18:43:13,479 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831281404127322112', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-04 18:43:13,545 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} -- 张三 +2024-09-04 18:43:13,582 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} -- 张三 +2024-09-04 18:43:13,609 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-04 18:43:13,667 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831281404127322112'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-04 18:43:13,784 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODUsImlhdCI6MTcyNTQ0NjQ4NX0.HCmwLju_veSNH4k-13xUJbOIJdTxE-nrGgCyKv7BXuwoTrKKXPrIN2n52axVLcKZ5ul2f_sBPDm3pDoe7EIG4g","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-04 18:43:13,812 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281407675703296"} -- 张三 +2024-09-04 18:43:13,880 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281407965110272"} -- 张三 +2024-09-04 18:43:13,922 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281408145465344"} -- 张三 +2024-09-04 18:43:13,972 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281408346791936"} -- 张三 +2024-09-04 18:43:14,038 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281408632004608"} -- 张三 +2024-09-04 18:43:14,101 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831281408896245760"} -- 张三 +2024-09-04 18:43:14,129 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831281409009491968"} -- 张三 +2024-09-04 18:43:14,165 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831281409135321088"} -- 张三 +2024-09-04 18:43:14,234 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831281409449893888"} -- 张三 +2024-09-04 18:43:14,289 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODYsImlhdCI6MTcyNTQ0NjQ4Nn0.AL7uBytPFfzLDk4DEUchJ9J3pfly6H-KvI3Ql5LewNlzGqmaX40NCXwJsXLu20rDjfeJ5eFR70IS6sGw1QZDJg","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-04 18:43:14,333 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODYsImlhdCI6MTcyNTQ0NjQ4Nn0.AL7uBytPFfzLDk4DEUchJ9J3pfly6H-KvI3Ql5LewNlzGqmaX40NCXwJsXLu20rDjfeJ5eFR70IS6sGw1QZDJg","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-04 18:43:14,457 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODYsImlhdCI6MTcyNTQ0NjQ4Nn0.AL7uBytPFfzLDk4DEUchJ9J3pfly6H-KvI3Ql5LewNlzGqmaX40NCXwJsXLu20rDjfeJ5eFR70IS6sGw1QZDJg","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-04 18:43:14,484 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281410494275584"} -- 张三 +2024-09-04 18:43:14,534 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281410708185088"} -- 张三 +2024-09-04 18:43:14,578 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281410901123072"} -- 张三 +2024-09-04 18:43:14,622 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281411081478144"} -- 张三 +2024-09-04 18:43:14,668 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831281411274416128"} -- 张三 +2024-09-04 18:43:14,716 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831281411479937024"} -- 张三 +2024-09-04 18:43:14,752 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831281411626737664"} -- 张三 +2024-09-04 18:43:14,776 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831281411719012352"} -- 张三 +2024-09-04 18:43:14,841 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831281411995836416"} -- 张三 +2024-09-04 18:43:14,898 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODYsImlhdCI6MTcyNTQ0NjQ4Nn0.AL7uBytPFfzLDk4DEUchJ9J3pfly6H-KvI3Ql5LewNlzGqmaX40NCXwJsXLu20rDjfeJ5eFR70IS6sGw1QZDJg","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-04 18:43:14,939 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1MzI4ODYsImlhdCI6MTcyNTQ0NjQ4Nn0.AL7uBytPFfzLDk4DEUchJ9J3pfly6H-KvI3Ql5LewNlzGqmaX40NCXwJsXLu20rDjfeJ5eFR70IS6sGw1QZDJg","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-11-44.log b/apiAutoTest_v3/report/log/2024-09-04-20-11-44.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-11-44.log diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-13-01.log b/apiAutoTest_v3/report/log/2024-09-04-20-13-01.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-13-01.log diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-13-47.log b/apiAutoTest_v3/report/log/2024-09-04-20-13-47.log new file mode 100644 index 0000000..5584e8a --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-13-47.log @@ -0,0 +1,4 @@ +2024-09-04 20:13:47,115 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-04 20:13:47,128 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 20:13:47,128 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 20:13:47,129 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-15-40.log b/apiAutoTest_v3/report/log/2024-09-04-20-15-40.log new file mode 100644 index 0000000..434d82f --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-15-40.log @@ -0,0 +1,4 @@ +2024-09-04 20:15:40,996 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-04 20:15:41,010 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 20:15:41,010 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 20:15:41,010 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-21-44.log b/apiAutoTest_v3/report/log/2024-09-04-20-21-44.log new file mode 100644 index 0000000..5d3462f --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-21-44.log @@ -0,0 +1,4 @@ +2024-09-04 20:21:45,872 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 20:21:45,873 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 20:21:45,873 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-04 20:21:45,873 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-04-20-23-29.log b/apiAutoTest_v3/report/log/2024-09-04-20-23-29.log new file mode 100644 index 0000000..8601ca6 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-04-20-23-29.log @@ -0,0 +1,4 @@ +2024-09-04 20:23:30,719 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-04 20:23:30,719 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-04 20:23:30,719 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-04 20:23:30,719 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-05-11-14-20.log b/apiAutoTest_v3/report/log/2024-09-05-11-14-20.log new file mode 100644 index 0000000..2bc00e2 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-05-11-14-20.log @@ -0,0 +1,43 @@ +2024-09-05 11:14:22,665 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:14:22,665 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:14:22,666 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:14:22,666 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:14:22,709 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:14:22,709 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:14:22,709 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:14:22,709 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:14:22,746 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:14:22,747 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:14:22,748 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:14:22,748 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:14:23,192 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:14:23,656 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:14:23,793 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831530833862303744', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:14:23,858 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} -- 张三 +2024-09-05 11:14:23,892 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} -- 张三 +2024-09-05 11:14:23,935 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:14:24,004 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831530833862303744'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:14:24,137 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTQsImlhdCI6MTcyNTUwNTk1NH0.nRpPTS7wBZIPu3rpNvhveaMmEyecm1SXf9hY5xmuiU8fDQPi-Ca7K0JDT6Z7Io0Yr9U9H5RRMDJovuEN27G5BA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:14:24,173 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530838044024832"} -- 张三 +2024-09-05 11:14:24,239 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530838329237504"} -- 张三 +2024-09-05 11:14:24,290 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530838551535616"} -- 张三 +2024-09-05 11:14:24,336 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530838736084992"} -- 张三 +2024-09-05 11:14:24,393 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530838979354624"} -- 张三 +2024-09-05 11:14:24,446 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831530839189069824"} -- 张三 +2024-09-05 11:14:24,491 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831530839369424896"} -- 张三 +2024-09-05 11:14:24,516 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831530839503642624"} -- 张三 +2024-09-05 11:14:24,570 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831530839675609088"} -- 张三 +2024-09-05 11:14:24,645 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTUsImlhdCI6MTcyNTUwNTk1NX0.yTIgazBF7ab1Syau4zbti_Pt9-r2HBxewPfcRF3L9q0CXIFqme0gO-TQKZGLeFDNmUQshvmkP1gCC5-nGrlYvA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:14:24,713 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTUsImlhdCI6MTcyNTUwNTk1NX0.yTIgazBF7ab1Syau4zbti_Pt9-r2HBxewPfcRF3L9q0CXIFqme0gO-TQKZGLeFDNmUQshvmkP1gCC5-nGrlYvA","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:14:24,840 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTUsImlhdCI6MTcyNTUwNTk1NX0.yTIgazBF7ab1Syau4zbti_Pt9-r2HBxewPfcRF3L9q0CXIFqme0gO-TQKZGLeFDNmUQshvmkP1gCC5-nGrlYvA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:14:24,870 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530840980037632"} -- 张三 +2024-09-05 11:14:24,938 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530841256861696"} -- 张三 +2024-09-05 11:14:24,999 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530841525297152"} -- 张三 +2024-09-05 11:14:25,057 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530841755983872"} -- 张三 +2024-09-05 11:14:25,123 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831530842045390848"} -- 张三 +2024-09-05 11:14:25,182 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831530842267688960"} -- 张三 +2024-09-05 11:14:25,232 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831530842485792768"} -- 张三 +2024-09-05 11:14:25,260 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831530842620010496"} -- 张三 +2024-09-05 11:14:25,316 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831530842833920000"} -- 张三 +2024-09-05 11:14:25,441 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTUsImlhdCI6MTcyNTUwNTk1NX0.yTIgazBF7ab1Syau4zbti_Pt9-r2HBxewPfcRF3L9q0CXIFqme0gO-TQKZGLeFDNmUQshvmkP1gCC5-nGrlYvA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:14:25,491 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTIzNTUsImlhdCI6MTcyNTUwNTk1NX0.yTIgazBF7ab1Syau4zbti_Pt9-r2HBxewPfcRF3L9q0CXIFqme0gO-TQKZGLeFDNmUQshvmkP1gCC5-nGrlYvA","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-05-11-23-48.log b/apiAutoTest_v3/report/log/2024-09-05-11-23-48.log new file mode 100644 index 0000000..27fc4d1 --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-05-11-23-48.log @@ -0,0 +1,158 @@ +2024-09-05 11:23:50,899 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:23:50,899 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:23:50,900 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:23:50,900 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:23:50,963 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:23:50,963 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:23:50,964 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:23:50,964 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:23:51,022 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 11:23:51,023 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 11:23:51,023 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 11:23:51,028 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 11:23:51,414 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:23:55,056 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:23:58,149 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:01,228 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:04,292 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:07,349 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:07,410 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:10,455 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:13,504 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:16,544 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:19,583 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:22,629 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:22,729 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:25,802 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:28,879 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:31,955 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:35,035 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:38,116 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831533284036288512', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:38,202 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} -- 张三 +2024-09-05 11:24:38,231 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} -- 张三 +2024-09-05 11:24:38,251 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:41,291 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:44,340 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:47,384 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:50,428 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:53,461 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 11:24:53,541 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:24:56,607 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:24:59,658 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:25:02,705 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:25:05,759 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:25:08,812 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831533284036288512'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 11:25:08,963 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTI5OTksImlhdCI6MTcyNTUwNjU5OX0.XYuTYZcRobV0E1x1ijt3sF5oF-q0n_QMR3cBRcXv_GSKoUVOdzEcM6cO65TKN6zCYS2hvrKfFNmoweLh4jVOXw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:25:08,986 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533542602547200"} -- 张三 +2024-09-05 11:25:12,045 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533555432923136"} -- 张三 +2024-09-05 11:25:15,091 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533568208773120"} -- 张三 +2024-09-05 11:25:18,139 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533580988817408"} -- 张三 +2024-09-05 11:25:21,189 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533593781444608"} -- 张三 +2024-09-05 11:25:24,245 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533606607626240"} -- 张三 +2024-09-05 11:25:24,315 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533606897033216"} -- 张三 +2024-09-05 11:25:27,372 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533619710631936"} -- 张三 +2024-09-05 11:25:30,420 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533632494870528"} -- 张三 +2024-09-05 11:25:33,472 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533645308469248"} -- 张三 +2024-09-05 11:25:36,514 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533658063347712"} -- 张三 +2024-09-05 11:25:39,562 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533670830809088"} -- 张三 +2024-09-05 11:25:39,638 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533671166353408"} -- 张三 +2024-09-05 11:25:42,676 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533683908648960"} -- 张三 +2024-09-05 11:25:45,741 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533696764190720"} -- 张三 +2024-09-05 11:25:48,797 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533709577789440"} -- 张三 +2024-09-05 11:25:51,861 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533722420748288"} -- 张三 +2024-09-05 11:25:54,925 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533735280484352"} -- 张三 +2024-09-05 11:25:54,994 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533735574085632"} -- 张三 +2024-09-05 11:25:58,045 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533748370907136"} -- 张三 +2024-09-05 11:26:01,089 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533761142562816"} -- 张三 +2024-09-05 11:26:04,142 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533773935190016"} -- 张三 +2024-09-05 11:26:07,190 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533786719428608"} -- 张三 +2024-09-05 11:26:10,239 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533799516250112"} -- 张三 +2024-09-05 11:26:10,316 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533799830822912"} -- 张三 +2024-09-05 11:26:13,378 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533812686364672"} -- 张三 +2024-09-05 11:26:16,431 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533825487380480"} -- 张三 +2024-09-05 11:26:19,478 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533838263230464"} -- 张三 +2024-09-05 11:26:22,529 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533851055857664"} -- 张三 +2024-09-05 11:26:25,574 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831533863835901952"} -- 张三 +2024-09-05 11:26:25,660 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831533864200806400"} -- 张三 +2024-09-05 11:26:25,693 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831533864335024128"} -- 张三 +2024-09-05 11:26:25,717 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533864439881728"} -- 张三 +2024-09-05 11:26:28,771 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533877228314624"} -- 张三 +2024-09-05 11:26:31,816 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533889987387392"} -- 张三 +2024-09-05 11:26:34,869 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533902813569024"} -- 张三 +2024-09-05 11:26:37,911 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533915581030400"} -- 张三 +2024-09-05 11:26:40,952 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533928340103168"} -- 张三 +2024-09-05 11:26:41,019 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533928616927232"} -- 张三 +2024-09-05 11:26:44,064 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533941388582912"} -- 张三 +2024-09-05 11:26:47,114 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533954168627200"} -- 张三 +2024-09-05 11:26:50,161 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533966952865792"} -- 张三 +2024-09-05 11:26:53,201 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533979716132864"} -- 张三 +2024-09-05 11:26:56,239 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831533992454234112"} -- 张三 +2024-09-05 11:26:56,311 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDYsImlhdCI6MTcyNTUwNjcwNn0.157JiTP2ah21cD1AlaFNV8iAVWMhG_Q0Nkr6IljpKrukB-MQG3c_LEFhivXXZC8AhtyJLpSqCQqCvGoQPhE6Dw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:26:59,361 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMDksImlhdCI6MTcyNTUwNjcwOX0.q8DQH7rNuxMWgDwY_2QPSrvjPQEI_o2qAvoij5KLQswkXEpfogZucgV8SnGYZ0n14PZ2zV6YdopJMyyjqeuOEg","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:02,414 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTIsImlhdCI6MTcyNTUwNjcxMn0.fvceF-XLGUh-qwkqG7hye4LC11oe-N8rs4O7kmhL7J-1hZl6P3N6U7uCA6BjFmA4bINtjfcopCbTFCO78DSw_A","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:05,460 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTUsImlhdCI6MTcyNTUwNjcxNX0.9WUsg4ZQ81fGfpb3EONbKAVwdXwqAo5K4a0OKMx2oWQrOytx_Nn-M6NY6oJY3cy1spId4nYk7QEWgX738Dr-AA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:08,510 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMTgsImlhdCI6MTcyNTUwNjcxOH0.UGKFLtqnUsa32LRt4eZx15uITMzt9tACC5sZIkx-Vaq-WGOU07-6r7w2O-CME4RWowbkBIh0yip1EKz-UrGlmw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:11,556 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:11,631 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjIsImlhdCI6MTcyNTUwNjcyMn0.LLJuULBIUGUzwGOBBjeOp00OoGDHGqAavQjqAVOBBQ0pIK--aGYzP7KsB9YFW3mNfcPczwduwlx633H6Xh_Zqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:14,695 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjUsImlhdCI6MTcyNTUwNjcyNX0.MRu3tADIYEw1SHeh-Xc72VYhv--SOJKdsdsFVgOBYf6vr0sueZy2_PpPfFmSaeM45mB8yzyifHM8eeANXFpr_w","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:17,731 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMjgsImlhdCI6MTcyNTUwNjcyOH0.PeW9YWyRcQo0X0Q2R7Tc9RoxFiOV-Rz2jnxGVdekhTD325yJ3YPUI0HYBtnmO9LfxrFobWiMesncceabz6d-wQ","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:20,780 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzEsImlhdCI6MTcyNTUwNjczMX0.lT5MNiH-cZYW03WabpxhR_KuGodyOfY2SiQ_bHDH7fGuLSE5woOBrTDQK3rVGzb_i1_85xe7a0GeBM2Ngibc3g","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:23,836 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzQsImlhdCI6MTcyNTUwNjczNH0.PxHVLbFX-pZCbMvDsLljN3CNoIVO_qYYWznSs7RI0lR6zdYA23i_wZaC-qz9Bi4BtSLNEo3aBdzKenEbDXLSpQ","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:26,879 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:27:27,037 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMxMzcsImlhdCI6MTcyNTUwNjczN30.m1HuCgXH7L0Ra2zGvUIjwgTvMYAAX7cYqwvXcFvYmDQGDj3yrhTZ0kCe7LIDrGChFXSIfaBOFFBpKJe5B1GWwA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:27:27,059 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534121722683392"} -- 张三 +2024-09-05 11:27:30,107 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534134506921984"} -- 张三 +2024-09-05 11:27:33,188 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534147400212480"} -- 张三 +2024-09-05 11:27:36,280 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534160389971968"} -- 张三 +2024-09-05 11:27:39,346 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534173253902336"} -- 张三 +2024-09-05 11:27:42,393 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534186042335232"} -- 张三 +2024-09-05 11:27:42,469 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534186365296640"} -- 张三 +2024-09-05 11:27:45,520 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534199141146624"} -- 张三 +2024-09-05 11:27:48,568 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534211933773824"} -- 张三 +2024-09-05 11:27:51,608 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534224688652288"} -- 张三 +2024-09-05 11:27:54,650 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534237451919360"} -- 张三 +2024-09-05 11:27:57,704 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534250240352256"} -- 张三 +2024-09-05 11:27:57,775 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534250559119360"} -- 张三 +2024-09-05 11:28:00,818 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534263322386432"} -- 张三 +2024-09-05 11:28:03,866 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534276102430720"} -- 张三 +2024-09-05 11:28:06,919 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534288903446528"} -- 张三 +2024-09-05 11:28:09,967 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534301691879424"} -- 张三 +2024-09-05 11:28:13,027 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534314522255360"} -- 张三 +2024-09-05 11:28:13,119 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534314912325632"} -- 张三 +2024-09-05 11:28:16,164 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534327679787008"} -- 张三 +2024-09-05 11:28:19,209 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534340447248384"} -- 张三 +2024-09-05 11:28:22,255 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534353231486976"} -- 张三 +2024-09-05 11:28:25,307 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534366015725568"} -- 张三 +2024-09-05 11:28:28,358 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534378829324288"} -- 张三 +2024-09-05 11:28:28,436 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534379152285696"} -- 张三 +2024-09-05 11:28:31,499 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534392007827456"} -- 张三 +2024-09-05 11:28:34,560 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534404808843264"} -- 张三 +2024-09-05 11:28:37,637 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534417618247680"} -- 张三 +2024-09-05 11:28:40,699 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534430582841344"} -- 张三 +2024-09-05 11:28:43,749 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831534443375468544"} -- 张三 +2024-09-05 11:28:43,829 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831534443711012864"} -- 张三 +2024-09-05 11:28:43,866 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831534443874590720"} -- 张三 +2024-09-05 11:28:43,890 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534443975254016"} -- 张三 +2024-09-05 11:28:46,925 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534456709160960"} -- 张三 +2024-09-05 11:28:49,963 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534469443067904"} -- 张三 +2024-09-05 11:28:53,007 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534482210529280"} -- 张三 +2024-09-05 11:28:56,051 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534494977990656"} -- 张三 +2024-09-05 11:28:59,101 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534507770617856"} -- 张三 +2024-09-05 11:28:59,174 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534508080996352"} -- 张三 +2024-09-05 11:29:02,219 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534520856846336"} -- 张三 +2024-09-05 11:29:05,286 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534533716582400"} -- 张三 +2024-09-05 11:29:08,346 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534546542764032"} -- 张三 +2024-09-05 11:29:11,383 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534559289253888"} -- 张三 +2024-09-05 11:29:14,429 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831534572065103872"} -- 张三 +2024-09-05 11:29:14,519 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDQsImlhdCI6MTcyNTUwNjg0NH0.dcuCNZZa9Gl-uMikYcPn0SuN-Xp8uSBhYnZmE9a4sOkYC38xIv6p_79GzizgrcBic2FTw-e419KuOqYFqemvcw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:17,573 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNDgsImlhdCI6MTcyNTUwNjg0OH0.E72Ly7siFrAWFqb0VWv2YTH2aoh_bX39slvlh0jXdg2jdJdopRVV_kqpB1JLeK0wJcLVELJxk1MIOW7hy59Bww","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:20,629 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTEsImlhdCI6MTcyNTUwNjg1MX0.fI9aVZSXrcvWo2OqQqzJcOu5U0o91E6sUHEqkPqq4oPOAjdQ690y523ZbngiBk_nbtgSt41incQvpIIj-qMPEQ","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:23,677 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTQsImlhdCI6MTcyNTUwNjg1NH0.YTv0hSjqOJHNnjoiAycR9MB2paNEuy1E-eoW6YnvkDmVCqWjr5Md67QIU5dN4gv3eAw4gsgLelydM1klbPpbdw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:26,729 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNTcsImlhdCI6MTcyNTUwNjg1N30.gmFFM_PbAs2RwEHn5gFkGEhggRMFIqDSt7zzGLNJg8E7Ihhd-NNvEbTFoNc-P2NpzLD-D6AyblvuSV4bzLAocw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:29,793 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 11:29:29,858 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjAsImlhdCI6MTcyNTUwNjg2MH0.D8P87DqMefmvUVjAaCVgsBQmRGwjjU-uwiW5McYgekA6LKRFDwH4rjZ4hGlgB1_dZYzZUeW3AYsyY2Ithfpn5Q","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:29:32,896 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjMsImlhdCI6MTcyNTUwNjg2M30.mOc7Vrb2VHZ27l232kbmspY0Ht-yAEpxqgeg-nQw_bNV7x5ruFj2imx7jH4QHfPLoUPyXaV2RJqwPqI3CHrKuQ","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:29:35,940 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjYsImlhdCI6MTcyNTUwNjg2Nn0.F85m4qdVR0b1_g9CHFmO8vbln8jD0a3ogc6fKXg6bjBvUtzffG4zVs-vmrTraCHxndSMEeM24iRJl-ETXhfeSQ","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:29:38,976 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNjksImlhdCI6MTcyNTUwNjg2OX0.hPLQ-i5v8Jr0mD4GMfB1guyz7YtB_MLtNFqOVoSjp4biGCvmuYigbft0utW7wAF_xnpqqUvS1aSf7imL0c9sHg","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:29:42,022 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzIsImlhdCI6MTcyNTUwNjg3Mn0.BH3g0yOcJA30zugkEeVex8h53zM23-qOFKUAUbUe_sMROBk0x2FRj_zHBYEgMRIOZsbJpAqIkmnI8pT84Jc6xw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 11:29:45,062 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTMyNzUsImlhdCI6MTcyNTUwNjg3NX0.wiX-ZwfqbeLs0Dhh6oxrAnxfHwBZBl_SS4h6CfKU6pIa6izVfOHuCL0aBtOgu8rz63w9XMCF77mdnFSNXu04LQ","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 diff --git a/apiAutoTest_v3/report/log/2024-09-05-12-17-51.log b/apiAutoTest_v3/report/log/2024-09-05-12-17-51.log new file mode 100644 index 0000000..76da01f --- /dev/null +++ b/apiAutoTest_v3/report/log/2024-09-05-12-17-51.log @@ -0,0 +1,43 @@ +2024-09-05 12:17:53,183 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 12:17:53,183 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 12:17:53,183 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 12:17:53,183 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 12:17:53,210 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 12:17:53,210 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 12:17:53,211 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 12:17:53,211 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 12:17:53,239 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为case, -- 张三 +2024-09-05 12:17:53,239 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为expect, -- 张三 +2024-09-05 12:17:53,239 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为sql, -- 张三 +2024-09-05 12:17:53,239 - user_read_ini.py[line:28] - INFO: 执行方法get_file_path为:根据key获取file节点下key对应文件的路径,形参key的传参为excel, -- 张三 +2024-09-05 12:17:53,547 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/addDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 1, 'name': 'requests添加的维度'}, 期望数据:{'message': '添加维度成功'}, 服务器返回数据:{"state":true,"message":"添加维度成功!","value":"","code":200} -- 张三 +2024-09-05 12:17:53,815 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/updateDem, 用例数据:{'code': 'requestsAddDem', 'description': 'requestsAddDem', 'isDefault': 0, 'name': 'requestsAddDem'}, 期望数据:{'message': '更新维度成功'}, 服务器返回数据:{"state":true,"message":"更新维度成功!","value":"","code":200} -- 张三 +2024-09-05 12:17:53,887 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/addOrg, 用例数据:{'code': 'testAddOrg', 'demId': '1831546815687270400', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '测试添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据:{'message': '添加组织成功'}, 服务器返回数据:{"state":true,"message":"添加组织成功!","value":"","code":200} -- 张三 +2024-09-05 12:17:53,964 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgUsers/addUsersForOrg, 用例数据:{'orgCode': 'testAddOrg', 'accounts': 'admin,guest'}, 期望数据:{'message': '加入成功'}, 服务器返回数据:{"state":true,"message":"加入成功","value":"","code":200} -- 张三 +2024-09-05 12:17:54,011 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/api/org/v1/orgParam/saveOrgParams, 用例数据:{'query': {'orgCode': 'testAddOrg'}, 'body': [{'alias': 'hxxmts', 'value': '项目中没有关系户'}]}, 期望数据:{'message': '保存组织参数成功!'}, 服务器返回数据:{"state":true,"message":"保存组织参数成功!","value":"","code":200} -- 张三 +2024-09-05 12:17:54,047 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/org/v1/org/deleteOrg, 用例数据:testAddOrg, 期望数据:{'message': '删除组织成功!'}, 服务器返回数据:{"state":true,"message":"部分删除成功,其中编码为【\"testAddOrg\"】的组织不存在;","value":"","code":200} -- 张三 +2024-09-05 12:17:54,100 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, 用例数据:{'ids': '1831546815687270400'}, 期望数据:{'message': '删除维度成功!'}, 服务器返回数据:{"state":false,"message":"【requestsAddDem(requestsAddDem)】的维度下存在组织,不允许删除 ","value":"","code":200} -- 张三 +2024-09-05 12:17:54,230 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjQsImlhdCI6MTcyNTUwOTc2NH0.J_HOuG3fdAoTTnfa4mILK97aLZhTY0B32tacncdLvsupfuEbvQz61Xpv8MTiSorLhkjerDTNengw-rbASx7SNA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 12:17:54,266 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818736529408"} -- 张三 +2024-09-05 12:17:54,315 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546818946244608"} -- 张三 +2024-09-05 12:17:54,375 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819197902848"} -- 张三 +2024-09-05 12:17:54,428 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819416006656"} -- 张三 +2024-09-05 12:17:54,503 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546819734773760"} -- 张三 +2024-09-05 12:17:54,555 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546819952877568"} -- 张三 +2024-09-05 12:17:54,597 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546820129038336"} -- 张三 +2024-09-05 12:17:54,628 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820259061760"} -- 张三 +2024-09-05 12:17:54,683 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546820485554176"} -- 张三 +2024-09-05 12:17:54,749 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 12:17:54,801 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 +2024-09-05 12:17:54,924 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'username': '超级管理员', 'account': 'admin', 'userId': '1', 'expiration': 86400, 'loginStatus': True}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 12:17:54,955 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821634793472"} -- 张三 +2024-09-05 12:17:55,007 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': '#!$!@#!@#', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546821848702976"} -- 张三 +2024-09-05 12:17:55,057 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminadminadminadminadminadminadminadminadmin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822054223872"} -- 张三 +2024-09-05 12:17:55,107 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'a', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822268133376"} -- 张三 +2024-09-05 12:17:55,155 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'adminxyz', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ='}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账户错误或该租户未启用","code":200,"logId":"1831546822473654272"} -- 张三 +2024-09-05 12:17:55,210 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': ''}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822700146688"} -- 张三 +2024-09-05 12:17:55,250 - test_bpm.py[line:57] - INFO: 断言成功,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '#!$!@#!@#'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"账号或密码错误","code":200,"logId":"1831546822863724544"} -- 张三 +2024-09-05 12:17:55,278 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jznbF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546822989553664"} -- 张三 +2024-09-05 12:17:55,320 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': '123456'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1831546823161520128"} -- 张三 +2024-09-05 12:17:55,382 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/auth, 用例数据:{'username': 'admin', 'password': 'bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQqmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerVlYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ'}, 期望数据:{'message': '账号或密码错误'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}} -- 张三 +2024-09-05 12:17:55,427 - test_bpm.py[line:54] - ERROR: 断言失败,接口url为:http://36.139.193.99:8088/refresh, 用例数据:None, 期望数据:{'message': '刷新token成功'}, 服务器返回数据:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE3MjU1OTYxNjUsImlhdCI6MTcyNTUwOTc2NX0.FoJLBa_jfSBAslH-cQrJmmHlRZNx14ddBlmEEnnd6GNbJQdwXCAeUvt5FIqLz_HI1WzuLeFHsMRSdOcW7GfEqw","username":"admin","account":"admin","userId":"","expiration":86400,"loginStatus":true} -- 张三 diff --git a/apiAutoTest_v3/request_method/__init__.py b/apiAutoTest_v3/request_method/__init__.py new file mode 100644 index 0000000..7752c56 --- /dev/null +++ b/apiAutoTest_v3/request_method/__init__.py @@ -0,0 +1,9 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:01 +# Description: +# +# --------------------------------------------------------------------------- diff --git a/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..9825858 Binary files /dev/null and b/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..bfcac3c Binary files /dev/null and b/apiAutoTest_v3/request_method/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-312.pyc b/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-312.pyc new file mode 100644 index 0000000..f3b464d Binary files /dev/null and b/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-312.pyc differ diff --git a/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-39.pyc b/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-39.pyc new file mode 100644 index 0000000..7de8099 Binary files /dev/null and b/apiAutoTest_v3/request_method/__pycache__/request_method.cpython-39.pyc differ diff --git a/apiAutoTest_v3/request_method/request_method.py b/apiAutoTest_v3/request_method/request_method.py new file mode 100644 index 0000000..572920e --- /dev/null +++ b/apiAutoTest_v3/request_method/request_method.py @@ -0,0 +1,55 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: request_method.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:35 +# Description: +# +# --------------------------------------------------------------------------- +import requests + +from apiAutoTest_v3.common.basic_read_ini import ReadIni + + +class RequestMethod: + def __init__(self): + """关联登录成功的token""" + login_url = ReadIni().get_host("bpm_host") + "/auth" + login_data = {"username": "admin", "password": "bF6N3L93cX8pV6x2yEqxNjwIIPaEOYw9bNI5GuIY4g9MeoFyPFPL5WteHaV0LcxQ" + "qmDJWlhuCRMXzAPvrFcxJrA8BgGjJpmB1WMrQrazIJPbWbCfmDit2s2jzn+DRerV" + "lYIFojDM96y24drEniwWzHtaJKiWoc7LGL1csNmokvQ="} + self.bpm_session = requests.sessions.Session() + res = self.bpm_session.post(url=login_url, json=login_data) + token = res.json().get("token") + self.bpm_session.headers["Authorization"] = f"Bearer {token}" + + def request_all(self, req_method, req_url, req_mime, case_data): + """ + 封装公共的请求方法 + :param req_method:请求方法 + :param req_url:请求的url + :param req_mime:媒体类型 + :param case_data:用例数据 + :return:Response type + """ + if req_mime == "application/json" or req_mime == "json": + return self.bpm_session.request(method=req_method, url=req_url, json=case_data) + + elif req_mime == "application/x-www-form-urlencoded" or req_mime == "form": + # 除了上传文件和json类型在请求体中传参以外,其他类型的数据全部使用data关键字传参。 + return self.bpm_session.request(method=req_method, url=req_url, data=case_data) + + elif req_mime == "multipart/form-data" or req_mime == "form-data": + return self.bpm_session.request(method=req_method, url=req_url, files=case_data) + + elif req_mime == "query" or req_mime == "params": + return self.bpm_session.request(method=req_method, url=req_url, params=case_data) + + elif req_mime is None: + return self.bpm_session.request(method=req_method, url=req_url) + + # 判断媒体类型是否为query|json或者为json|query, 表示请求体和地址栏同时传参 + elif req_mime == "query|json" or req_mime == "json|query": + # requests是支持地址栏和请求体同时传参的。地址栏使用params传参,请求体根据不同的媒体类型选择不同的关键字传参。 + return self.bpm_session.request(method=req_method, url=req_url, params=case_data["query"], json=case_data["body"]) \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/__init__.py b/apiAutoTest_v3/test_case/__init__.py new file mode 100644 index 0000000..7752c56 --- /dev/null +++ b/apiAutoTest_v3/test_case/__init__.py @@ -0,0 +1,9 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 14:01 +# Description: +# +# --------------------------------------------------------------------------- diff --git a/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..af029ba Binary files /dev/null and b/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..d6a7d00 Binary files /dev/null and b/apiAutoTest_v3/test_case/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/test_case/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..052bf0a Binary files /dev/null and b/apiAutoTest_v3/test_case/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..e338dc3 Binary files /dev/null and b/apiAutoTest_v3/test_case/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__init__.py b/apiAutoTest_v3/test_case/test_demo/__init__.py new file mode 100644 index 0000000..83c0891 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_demo/__init__.py @@ -0,0 +1,11 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 17:32 +# Description: +# +# --------------------------------------------------------------------------- + +namespace = "demo" \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..d695222 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..7d9729f Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..ea334de Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..0be89aa Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..ca6f527 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..c460a21 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_demo/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_demo/conftest.py b/apiAutoTest_v3/test_case/test_demo/conftest.py new file mode 100644 index 0000000..d8559f2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_demo/conftest.py @@ -0,0 +1,28 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: conftest.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:43 +# Description: +# +# --------------------------------------------------------------------------- +import pytest +from apiAutoTest_v3.common.db import DB +from apiAutoTest_v3.request_method.request_method import RequestMethod + + +# DB自定义固件 +@pytest.fixture(scope="session") +def fix_db(): + db = DB() + yield db + db.close() + + +# RequestMethod自定义固件 +@pytest.fixture(scope="session") +def fix_req(): + req = RequestMethod() + yield req + diff --git a/apiAutoTest_v3/test_case/test_demo/pytest.ini b/apiAutoTest_v3/test_case/test_demo/pytest.ini new file mode 100644 index 0000000..335edb2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_demo/pytest.ini @@ -0,0 +1,20 @@ +[pytest] +; ;开启日志 +; log_cli=true +; ;设置日志的级别,如果不设置级别的话,可以设置为NOTSET,如果要设置级别,级别可以有debug,info,warning,error,致命 +; log_level=NOTSET +; ;设置日志显示的信息格式 +; log_format=%(levelname)s--%(asctime)s--%(message)s +; ;设置日志中时间显示的格式 +; log_date_format=%Y-%m-%d %H:%M:%S +; ;每个py文件运行的时候追加的命令 +; ;addopts=-vs + +; ;设置日志保存的文件 +; log_file=../report/log/bpm_test.log +;设置日志保存在文件中的级别 +log_file_level=error +;设置日志在文件中的信息格式 +log_file_format=%(levelname)s--%(asctime)s--%(message)s +;设置文件日志中时间显示的格式 +log_file_date_format=%Y-%m-%d %H:%M:%S \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_demo/test_bpm.py b/apiAutoTest_v3/test_case/test_demo/test_bpm.py new file mode 100644 index 0000000..ac50f13 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_demo/test_bpm.py @@ -0,0 +1,57 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: test_bpm.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:46 +# Description: +# +# --------------------------------------------------------------------------- +import pytest + +from apiAutoTest_v3 import log +from apiAutoTest_v3.common.read_excel import ReadExcel +from apiAutoTest_v3.test_case.test_demo import namespace + +excel = ReadExcel(namespace) + + +class TestBPM: + + @pytest.mark.parametrize("url, method, mime, case_data, expect_data, sql_type, sql_data, update_key", excel.get_data()) + def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key): + + # 判断sql语句的类型是否为delete + if sql_type == "delete": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 判断sql语句类型是否为select + elif sql_type == "select": + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 判断sql语句的类型是否为select|delete 或者为 delete|select + elif sql_type == "select|delete" or sql_type == "delete|select": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 使用RequestMethod类对象发送请求 + res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data) + + # 断言 + try: + for key in expect_data.keys(): + assert expect_data[key] == res.json().get(key) + except AssertionError: + log.error(f"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") + raise AssertionError("断言失败") + else: + log.info(f"断言成功,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__init__.py b/apiAutoTest_v3/test_case/test_lao_zhang/__init__.py new file mode 100644 index 0000000..f356da5 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lao_zhang/__init__.py @@ -0,0 +1,12 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 17:33 +# Description: +# +# --------------------------------------------------------------------------- + + +namespace = "lao_zhang" \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..946f18f Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..3e581b8 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..566d267 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..bda59df Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..943bdee Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..1d82593 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lao_zhang/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/conftest.py b/apiAutoTest_v3/test_case/test_lao_zhang/conftest.py new file mode 100644 index 0000000..d8559f2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lao_zhang/conftest.py @@ -0,0 +1,28 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: conftest.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:43 +# Description: +# +# --------------------------------------------------------------------------- +import pytest +from apiAutoTest_v3.common.db import DB +from apiAutoTest_v3.request_method.request_method import RequestMethod + + +# DB自定义固件 +@pytest.fixture(scope="session") +def fix_db(): + db = DB() + yield db + db.close() + + +# RequestMethod自定义固件 +@pytest.fixture(scope="session") +def fix_req(): + req = RequestMethod() + yield req + diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/pytest.ini b/apiAutoTest_v3/test_case/test_lao_zhang/pytest.ini new file mode 100644 index 0000000..335edb2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lao_zhang/pytest.ini @@ -0,0 +1,20 @@ +[pytest] +; ;开启日志 +; log_cli=true +; ;设置日志的级别,如果不设置级别的话,可以设置为NOTSET,如果要设置级别,级别可以有debug,info,warning,error,致命 +; log_level=NOTSET +; ;设置日志显示的信息格式 +; log_format=%(levelname)s--%(asctime)s--%(message)s +; ;设置日志中时间显示的格式 +; log_date_format=%Y-%m-%d %H:%M:%S +; ;每个py文件运行的时候追加的命令 +; ;addopts=-vs + +; ;设置日志保存的文件 +; log_file=../report/log/bpm_test.log +;设置日志保存在文件中的级别 +log_file_level=error +;设置日志在文件中的信息格式 +log_file_format=%(levelname)s--%(asctime)s--%(message)s +;设置文件日志中时间显示的格式 +log_file_date_format=%Y-%m-%d %H:%M:%S \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lao_zhang/test_bpm.py b/apiAutoTest_v3/test_case/test_lao_zhang/test_bpm.py new file mode 100644 index 0000000..3505578 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lao_zhang/test_bpm.py @@ -0,0 +1,57 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: test_bpm.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:46 +# Description: +# +# --------------------------------------------------------------------------- +import pytest + +from apiAutoTest_v3 import log +from apiAutoTest_v3.common.read_excel import ReadExcel +from apiAutoTest_v3.test_case.test_lao_zhang import namespace + +excel = ReadExcel(namespace) + + +class TestBPM: + + @pytest.mark.parametrize("url, method, mime, case_data, expect_data, sql_type, sql_data, update_key", excel.get_data()) + def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key): + + # 判断sql语句的类型是否为delete + if sql_type == "delete": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 判断sql语句类型是否为select + elif sql_type == "select": + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 判断sql语句的类型是否为select|delete 或者为 delete|select + elif sql_type == "select|delete" or sql_type == "delete|select": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 使用RequestMethod类对象发送请求 + res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data) + + # 断言 + try: + for key in expect_data.keys(): + assert expect_data[key] == res.json().get(key) + except AssertionError: + log.error(f"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") + raise AssertionError("断言失败") + else: + log.info(f"断言成功,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lisi/__init__.py b/apiAutoTest_v3/test_case/test_lisi/__init__.py new file mode 100644 index 0000000..ec1d743 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lisi/__init__.py @@ -0,0 +1,12 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: __init__.py +# Author: lao_zhao +# Datetime: 2024/9/4 17:33 +# Description: +# +# --------------------------------------------------------------------------- + + +namespace = "lisi" \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-312.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..80d629a Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-312.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-39.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..a0ea9a6 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/__init__.cpython-39.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..708680e Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..faccfe1 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/conftest.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc new file mode 100644 index 0000000..e4a24c2 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-312-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc b/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc new file mode 100644 index 0000000..9c83088 Binary files /dev/null and b/apiAutoTest_v3/test_case/test_lisi/__pycache__/test_bpm.cpython-39-pytest-8.3.2.pyc differ diff --git a/apiAutoTest_v3/test_case/test_lisi/conftest.py b/apiAutoTest_v3/test_case/test_lisi/conftest.py new file mode 100644 index 0000000..d8559f2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lisi/conftest.py @@ -0,0 +1,28 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: conftest.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:43 +# Description: +# +# --------------------------------------------------------------------------- +import pytest +from apiAutoTest_v3.common.db import DB +from apiAutoTest_v3.request_method.request_method import RequestMethod + + +# DB自定义固件 +@pytest.fixture(scope="session") +def fix_db(): + db = DB() + yield db + db.close() + + +# RequestMethod自定义固件 +@pytest.fixture(scope="session") +def fix_req(): + req = RequestMethod() + yield req + diff --git a/apiAutoTest_v3/test_case/test_lisi/pytest.ini b/apiAutoTest_v3/test_case/test_lisi/pytest.ini new file mode 100644 index 0000000..335edb2 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lisi/pytest.ini @@ -0,0 +1,20 @@ +[pytest] +; ;开启日志 +; log_cli=true +; ;设置日志的级别,如果不设置级别的话,可以设置为NOTSET,如果要设置级别,级别可以有debug,info,warning,error,致命 +; log_level=NOTSET +; ;设置日志显示的信息格式 +; log_format=%(levelname)s--%(asctime)s--%(message)s +; ;设置日志中时间显示的格式 +; log_date_format=%Y-%m-%d %H:%M:%S +; ;每个py文件运行的时候追加的命令 +; ;addopts=-vs + +; ;设置日志保存的文件 +; log_file=../report/log/bpm_test.log +;设置日志保存在文件中的级别 +log_file_level=error +;设置日志在文件中的信息格式 +log_file_format=%(levelname)s--%(asctime)s--%(message)s +;设置文件日志中时间显示的格式 +log_file_date_format=%Y-%m-%d %H:%M:%S \ No newline at end of file diff --git a/apiAutoTest_v3/test_case/test_lisi/test_bpm.py b/apiAutoTest_v3/test_case/test_lisi/test_bpm.py new file mode 100644 index 0000000..3505578 --- /dev/null +++ b/apiAutoTest_v3/test_case/test_lisi/test_bpm.py @@ -0,0 +1,57 @@ +# -*-coding:utf-8 -*- # +# --------------------------------------------------------------------------- +# ProjectName: test62 +# FileName: test_bpm.py +# Author: lao_zhao +# Datetime: 2024/9/4 15:46 +# Description: +# +# --------------------------------------------------------------------------- +import pytest + +from apiAutoTest_v3 import log +from apiAutoTest_v3.common.read_excel import ReadExcel +from apiAutoTest_v3.test_case.test_lao_zhang import namespace + +excel = ReadExcel(namespace) + + +class TestBPM: + + @pytest.mark.parametrize("url, method, mime, case_data, expect_data, sql_type, sql_data, update_key", excel.get_data()) + def test_bpm(self, fix_db, fix_req, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key): + + # 判断sql语句的类型是否为delete + if sql_type == "delete": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 判断sql语句类型是否为select + elif sql_type == "select": + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 判断sql语句的类型是否为select|delete 或者为 delete|select + elif sql_type == "select|delete" or sql_type == "delete|select": + # 使用DB类对象调用delete方法执行删除的sql语句,DB类对象===fix_db自定义固件 + fix_db.delete(sql_data['delete']) + + # 使用DB类对象调用select方法执行查询的sql语句, 并获取查询结果,DB类对象===fix_db自定义固件 + select_result = fix_db.select(sql_data['select']) + # 将查询结果更新到用例数据中 + case_data[update_key] = select_result + + # 使用RequestMethod类对象发送请求 + res = fix_req.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data) + + # 断言 + try: + for key in expect_data.keys(): + assert expect_data[key] == res.json().get(key) + except AssertionError: + log.error(f"断言失败,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") + raise AssertionError("断言失败") + else: + log.info(f"断言成功,接口url为:{url}, 用例数据:{case_data}, 期望数据:{expect_data}, 服务器返回数据:{res.text}") \ No newline at end of file