Commit 37ecbe4c by Autho

接口自动化框架v2.0

parent 9e76ad41

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

module.exports = __webpack_public_path__ + "favicon.ico";
\ No newline at end of file
[ {
"data" : {
"Product defects" : 12
}
} ]
\ No newline at end of file
[ {
"data" : {
"duration" : 12938
}
} ]
\ No newline at end of file
[ {
"data" : {
"run" : 32,
"retry" : 60
}
} ]
\ No newline at end of file
'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
}));
[ {
"data" : {
"Product defects" : 12
}
} ]
\ No newline at end of file
[ {
"data" : {
"duration" : 12938
}
} ]
\ No newline at end of file
[ {
"data" : {
"run" : 32,
"retry" : 60
}
} ]
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C412AF0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...test\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_张三\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C412AF0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_张三\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "c8e32599-3367-453e-9bd7-f088940f45b8-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'删除组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'中'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/deleteOrg'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "'add_org_test'"}, {"name": "expect_data", "value": "{'state': True, 'message': '删除组织成功!', 'value': ''}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1710831047045, "stop": 1710831047094, "uuid": "74845cdb-6d65-45f1-bff6-ddc6b090f874", "historyId": "1c1f33c035e6f92d84e4975fce86c461", "testCaseId": "5b39a66235dce8bb894e044ec8b32592", "fullName": "test_case.test_张三.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "删除组织"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-张三"}, {"name": "parentSuite", "value": "test_case.test_张三"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_张三.test_bpm"}]}
\ No newline at end of file
DEBUG  urllib3.connectionpool:connectionpool.py:271 Resetting dropped connection: 120.46.172.186
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 500 None
ERROR  root:test_bpm.py:65 断言成功,请求的url为:http://120.46.172.186:8080/auth,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'user': 'admin', 'password': 'MTIzNDU2'}, 期望数据为:{'message': '账号或密码错误'},服务器返回的数据为:{"state":false,"message":"账号或密码错误","logId":"1769979782658801664"}
\ No newline at end of file
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
INFO  root:__init__.py:43 执行的函数或方法为:select,其功能为:使用游标对象执行查询的sql语句,并返回查询的结果
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/addOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/addOrg,请求的方法为:POST,请求的媒体类型为:json, 请求的用例数据:{'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}, 期望数据为:{'message': '添加组织成功'},服务器返回的数据为:{"state":true,"message":"添加组织成功!","value":""}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481C40>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979790250491904', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_basic\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481C40>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979790250491904', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_basic\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "fc497cd6-1c56-42f9-9dfd-78d0a68447cb-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'添加组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/addOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'add_org_test', 'demId': '不知道', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}"}, {"name": "expect_data", "value": "{'message': '添加组织成功'}"}, {"name": "sql_type", "value": "'select|delete'"}, {"name": "sql_data", "value": "{'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}"}, {"name": "update_key", "value": "'demId'"}], "start": 1710831041789, "stop": 1710831041977, "uuid": "7753f011-87c5-4533-9908-641fd0845ca3", "historyId": "0efdd2c4f8e6121b29407cc5a5fa588c", "testCaseId": "dba452b4cd07103342b046890245d967", "fullName": "test_case.test_basic.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "添加组织"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-basic"}, {"name": "parentSuite", "value": "test_case.test_basic"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_basic.test_bpm"}]}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...test\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_李四\\test_bpm.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_李四\\test_bpm.py:64: AssertionError"}, "attachments": [{"name": "log", "source": "10ff2914-ace5-41cb-b329-68670e9dd1a6-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'删除组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'中'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/deleteOrg'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "'add_org_test'"}, {"name": "expect_data", "value": "{'state': True, 'message': '删除组织成功!', 'value': ''}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1710831051020, "stop": 1710831051068, "uuid": "713edde2-236f-46c3-8743-a63f5811b113", "historyId": "54fa446dd3adfc5c34c749a611aad827", "testCaseId": "48f059f8dc0311549e0e5db6509caae1", "fullName": "test_case.test_李四.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "删除组织"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-李四"}, {"name": "parentSuite", "value": "test_case.test_李四"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_李四.test_bpm"}]}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_张三\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_张三\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "213dc555-393c-4fcc-9fae-0ce504e28d4e-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'添加维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功'}"}, {"name": "sql_type", "value": "'delete'"}, {"name": "sql_data", "value": "'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "None"}], "start": 1710831045350, "stop": 1710831045489, "uuid": "456d9c6f-feec-4321-8f01-87aafd13cb0f", "historyId": "60017b91adf587725ed0cf764eff922a", "testCaseId": "5b39a66235dce8bb894e044ec8b32592", "fullName": "test_case.test_张三.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "添加维度"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-张三"}, {"name": "parentSuite", "value": "test_case.test_张三"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_张三.test_bpm"}]}
\ No newline at end of file
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:链接是数据库,获取链接对象和游标对象
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_host,其功能为:根据key获取host节点下key对应的域名
DEBUG  urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 120.46.172.186:8080
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 200 None
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
\ No newline at end of file
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:链接是数据库,获取链接对象和游标对象
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_host,其功能为:根据key获取host节点下key对应的域名
DEBUG  urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 120.46.172.186:8080
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 200 None
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE assert '删除组织成功!' == '部分删除成功,其中编码为...test\"】的组织不存在;'\nE \nE - 部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;\nE + 删除组织成功!\n\ntest_case\\test_李四\\test_bpm.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '删除组织'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/org/v1/org/deleteOrg', method = 'post', mime = 'json'\ncase_data = 'add_org_test', expect_data = {'message': '删除组织成功!', 'state': True, 'value': ''}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_李四\\test_bpm.py:64: AssertionError"}, "attachments": [{"name": "log", "source": "2f46042a-4dbf-4711-9d4f-8bdee71ad478-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'删除组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'中'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/deleteOrg'"}, {"name": "method", "value": "'post'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "'add_org_test'"}, {"name": "expect_data", "value": "{'state': True, 'message': '删除组织成功!', 'value': ''}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1710831051164, "stop": 1710831051212, "uuid": "5b58e7c2-c02c-4d77-a03b-5f156d7a0092", "historyId": "54fa446dd3adfc5c34c749a611aad827", "testCaseId": "48f059f8dc0311549e0e5db6509caae1", "fullName": "test_case.test_李四.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "删除组织"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-李四"}, {"name": "parentSuite", "value": "test_case.test_李四"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_李四.test_bpm"}]}
\ No newline at end of file
{"uuid": "87d6a17e-1c18-45df-a15f-24fe507c3556", "befores": [{"name": "api_name", "status": "passed", "start": 1710831050739, "stop": 1710831050739}], "start": 1710831050739, "stop": 1710831050800}
\ No newline at end of file
{"uuid": "c9d951b9-ddbb-4897-b826-d54607dd6293", "befores": [{"name": "mime", "status": "passed", "start": 1710831048989, "stop": 1710831048989}], "start": 1710831048989, "stop": 1710831049140}
\ No newline at end of file
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:链接是数据库,获取链接对象和游标对象
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_host,其功能为:根据key获取host节点下key对应的域名
DEBUG  urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 120.46.172.186:8080
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 200 None
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
\ No newline at end of file
{"uuid": "e5510b8e-9055-4e1c-bf55-b35e612b215a", "befores": [{"name": "case_level", "status": "passed", "start": 1710831043127, "stop": 1710831043127}], "start": 1710831043127, "stop": 1710831043239}
\ No newline at end of file
{"uuid": "66685de6-a1c2-4393-a339-968c63b27855", "befores": [{"name": "url", "status": "passed", "start": 1710831049731, "stop": 1710831049731}], "start": 1710831049731, "stop": 1710831049924}
\ No newline at end of file
{"uuid": "b81dfb2c-a73e-4412-b687-afea0fc4eafe", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831045019, "stop": 1710831045019}], "start": 1710831045019, "stop": 1710831045176}
\ No newline at end of file
{"uuid": "ecc8fa7d-2415-4e82-b3ef-e3fd0023e7da", "befores": [{"name": "expect_data", "status": "passed", "start": 1710831045187, "stop": 1710831045187}], "start": 1710831045187, "stop": 1710831045336}
\ No newline at end of file
{"uuid": "f5c3a23a-b5de-43a4-903a-6c6177b32849", "befores": [{"name": "method", "status": "passed", "start": 1710831042211, "stop": 1710831042211}], "start": 1710831042210, "stop": 1710831042407}
\ No newline at end of file
{"uuid": "ef51150d-d5f4-42aa-8c75-a4230af43328", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831039482, "stop": 1710831039482}], "start": 1710831039482, "stop": 1710831039576}
\ No newline at end of file
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 500 None
ERROR  root:test_bpm.py:65 断言成功,请求的url为:http://120.46.172.186:8080/auth,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'username': 'admin', 'password': ''}, 期望数据为:{'message': '账号或密码错误'},服务器返回的数据为:{"state":false,"message":"账号或密码错误","logId":"1769979779592765440"}
\ No newline at end of file
{"uuid": "4f3ffce1-1206-426c-b0f8-d47c043b6de6", "befores": [{"name": "api_name", "status": "passed", "start": 1710831051163, "stop": 1710831051163}], "start": 1710831051161, "stop": 1710831051229}
\ No newline at end of file
{"uuid": "616bbc38-e5b1-45c0-8fa8-25f1eba84644", "befores": [{"name": "url", "status": "passed", "start": 1710831039167, "stop": 1710831039167}], "start": 1710831039167, "stop": 1710831039267}
\ No newline at end of file
{"uuid": "4478662a-e198-4660-b509-a47d9fa0c0b0", "befores": [{"name": "mime", "status": "passed", "start": 1710831051883, "stop": 1710831051883}], "start": 1710831051883, "stop": 1710831051988}
\ No newline at end of file
{"uuid": "c5af3ee2-a237-49cc-b1e0-b30703dfa9b5", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831047845, "stop": 1710831047845}], "start": 1710831047845, "stop": 1710831047945}
\ No newline at end of file
{"uuid": "be01a2f3-507e-4daa-adf5-494f1c1015a8", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831039382, "stop": 1710831039382}], "start": 1710831039382, "stop": 1710831039475}
\ No newline at end of file
{"uuid": "55d73193-79da-4283-b8cf-59a3e15c5ed8", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831048070, "stop": 1710831048070}], "start": 1710831048070, "stop": 1710831048174}
\ No newline at end of file
{"uuid": "a616b061-a655-45ef-9519-d0f05bce8d2d", "befores": [{"name": "case_level", "status": "passed", "start": 1710831047043, "stop": 1710831047044}], "start": 1710831047043, "stop": 1710831047114}
\ No newline at end of file
{"uuid": "8cb56888-f926-4378-8834-5b326e8d0d02", "befores": [{"name": "update_key", "status": "passed", "start": 1710831048071, "stop": 1710831048071}], "start": 1710831048071, "stop": 1710831048173}
\ No newline at end of file
{"uuid": "8682834d-363e-43f8-a333-7d09c95fb5e3", "befores": [{"name": "method", "status": "passed", "start": 1710831050338, "stop": 1710831050338}], "start": 1710831050338, "stop": 1710831050532}
\ No newline at end of file
{"uuid": "5ee04e1f-6803-4d7e-b498-46f67e417a28", "befores": [{"name": "case_title", "status": "passed", "start": 1710831039035, "stop": 1710831039035}], "start": 1710831039035, "stop": 1710831039097}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF8E0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '维度管理', api_name = '根据维度编码删除维度'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', method = 'DELETE', mime = 'query'\ncase_data = {'ids': '1769979822747959296'}, expect_data = {'message': '删除维度成功'}, sql_type = 'select'\nsql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功' == '【接口自动化框架(abc...度下存在组织,不允许删除 '\nE \nE - 【接口自动化框架(abc_123_xyz)】的维度下存在组织,不允许删除 \nE + 删除维度成功\n\ntest_case\\test_李四\\test_bpm.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CF8E0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '维度管理', api_name = '根据维度编码删除维度'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', method = 'DELETE', mime = 'query'\ncase_data = {'ids': '1769979822747959296'}, expect_data = {'message': '删除维度成功'}, sql_type = 'select'\nsql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_李四\\test_bpm.py:64: AssertionError"}, "attachments": [{"name": "log", "source": "ad455260-0561-4ba2-ba5d-93d7b4e74141-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'根据维度编码删除维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'中'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'"}, {"name": "method", "value": "'DELETE'"}, {"name": "mime", "value": "'query'"}, {"name": "case_data", "value": "{'ids': '1769979822747959296'}"}, {"name": "expect_data", "value": "{'message': '删除维度成功'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "'ids'"}], "start": 1710831051429, "stop": 1710831051520, "uuid": "0006a949-0298-40cf-b813-0bfd9e46be94", "historyId": "1c7a166eac0506c837895ac82aebe103", "testCaseId": "48f059f8dc0311549e0e5db6509caae1", "fullName": "test_case.test_李四.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "根据维度编码删除维度"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-李四"}, {"name": "parentSuite", "value": "test_case.test_李四"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_李四.test_bpm"}]}
\ No newline at end of file
{"uuid": "130e61c5-ee56-408b-a477-5301d782f646", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831040743, "stop": 1710831040743}], "start": 1710831040743, "stop": 1710831040898}
\ No newline at end of file
{"uuid": "5c4b0f3d-5cbb-4409-9db2-3ed043b53f00", "befores": [{"name": "api_name", "status": "passed", "start": 1710831050804, "stop": 1710831050804}], "start": 1710831050804, "stop": 1710831050868}
\ No newline at end of file
{"uuid": "2bf15ade-c5f4-4fa1-9bfe-2c8a51412e76", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831048989, "stop": 1710831048989}], "start": 1710831048989, "stop": 1710831049138}
\ No newline at end of file
{"uuid": "fa2c5755-52a8-43c2-97ba-1c81aca3343a", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831046354, "stop": 1710831046354}], "start": 1710831046354, "stop": 1710831046548}
\ No newline at end of file
{"uuid": "a62eff54-b46f-4b5f-8970-8f708126d398", "befores": [{"name": "module_name", "status": "passed", "start": 1710831051883, "stop": 1710831051883}], "start": 1710831051883, "stop": 1710831051991}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_张三\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_张三\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "c3acc47f-7481-4ed2-9a10-5e7195cbd524-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'添加维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功'}"}, {"name": "sql_type", "value": "'delete'"}, {"name": "sql_data", "value": "'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "None"}], "start": 1710831045514, "stop": 1710831045655, "uuid": "526b297c-05b4-49ce-9031-6d7803690c54", "historyId": "60017b91adf587725ed0cf764eff922a", "testCaseId": "5b39a66235dce8bb894e044ec8b32592", "fullName": "test_case.test_张三.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "添加维度"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-张三"}, {"name": "parentSuite", "value": "test_case.test_张三"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_张三.test_bpm"}]}
\ No newline at end of file
{"uuid": "865abd39-6686-4bdc-baf6-a623a06c9e44", "befores": [{"name": "expect_data", "status": "passed", "start": 1710831039482, "stop": 1710831039482}], "start": 1710831039482, "stop": 1710831039576}
\ No newline at end of file
{"uuid": "3c6b75aa-f719-4530-8f5c-79bef4a19a55", "befores": [{"name": "case_title", "status": "passed", "start": 1710831048989, "stop": 1710831048989}], "start": 1710831048989, "stop": 1710831049142}
\ No newline at end of file
{"uuid": "d2d115ec-346b-47d5-9f82-f0f1b33b07fd", "befores": [{"name": "url", "status": "passed", "start": 1710831040595, "stop": 1710831040595}], "start": 1710831040595, "stop": 1710831040660}
\ No newline at end of file
{"uuid": "5c48c8d7-cdd6-4ed0-ab5c-f57a71c7dea8", "befores": [{"name": "mime", "status": "passed", "start": 1710831041999, "stop": 1710831041999}], "start": 1710831041999, "stop": 1710831042201}
\ No newline at end of file
{"uuid": "666163b9-a3fd-481f-bebe-da13d6defc5d", "befores": [{"name": "case_data", "status": "passed", "start": 1710831039167, "stop": 1710831039167}], "start": 1710831039167, "stop": 1710831039267}
\ No newline at end of file
{"uuid": "0cff07f5-acde-43af-88aa-59beb36eccff", "befores": [{"name": "case_level", "status": "passed", "start": 1710831039896, "stop": 1710831039896}], "start": 1710831039896, "stop": 1710831040001}
\ No newline at end of file
{"uuid": "3b452797-4874-4e3c-a997-d955deb4aae5", "befores": [{"name": "api_name", "status": "passed", "start": 1710831042829, "stop": 1710831042829}], "start": 1710831042829, "stop": 1710831043059}
\ No newline at end of file
{"uuid": "b5ea5e71-fbe4-4524-98aa-c0a74d0295ae", "befores": [{"name": "module_name", "status": "passed", "start": 1710831051539, "stop": 1710831051539}], "start": 1710831051539, "stop": 1710831051649}
\ No newline at end of file
{"uuid": "4700ab6c-e155-4eb4-abab-c64b6840e8db", "befores": [{"name": "expect_data", "status": "passed", "start": 1710831047611, "stop": 1710831047611}], "start": 1710831047611, "stop": 1710831047713}
\ No newline at end of file
{"uuid": "9e9efa82-a6fe-4851-bc44-e45f2d303ce7", "befores": [{"name": "api_name", "status": "passed", "start": 1710831045944, "stop": 1710831045944}], "start": 1710831045944, "stop": 1710831046141}
\ No newline at end of file
{"uuid": "b4fb35f2-4483-4dd3-88bf-27541893b9f1", "befores": [{"name": "url", "status": "passed", "start": 1710831039692, "stop": 1710831039692}], "start": 1710831039692, "stop": 1710831039793}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481E50>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '维度管理', api_name = '根据维度编码删除维度'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', method = 'DELETE', mime = 'query'\ncase_data = {'ids': '1769979790250491904'}, expect_data = {'message': '删除维度成功'}, sql_type = 'select'\nsql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data.keys():\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功' == '【接口自动化框架(abc...度下存在组织,不允许删除 '\nE \nE - 【接口自动化框架(abc_123_xyz)】的维度下存在组织,不允许删除 \nE + 删除维度成功\n\ntest_case\\test_basic\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481E50>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '维度管理', api_name = '根据维度编码删除维度'\ncase_title = '正向用例', case_level = '中', url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', method = 'DELETE', mime = 'query'\ncase_data = {'ids': '1769979790250491904'}, expect_data = {'message': '删除维度成功'}, sql_type = 'select'\nsql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_basic\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "2dc33b69-4bd1-4908-90cf-65b8e6082c47-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'根据维度编码删除维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'中'"}, {"name": "url", "value": "'http://120.46.172.186:8080/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 ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "'ids'"}], "start": 1710831043128, "stop": 1710831043223, "uuid": "eea13a5b-dc6b-4fe3-8760-56dece5fd0d0", "historyId": "ed6b696b19db663c6cae237a503e8a1a", "testCaseId": "dba452b4cd07103342b046890245d967", "fullName": "test_case.test_basic.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "根据维度编码删除维度"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-basic"}, {"name": "parentSuite", "value": "test_case.test_basic"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_basic.test_bpm"}]}
\ No newline at end of file
{"uuid": "5f3110c9-486b-4c85-a306-7993c3544068", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831049530, "stop": 1710831049530}], "start": 1710831049530, "stop": 1710831049721}
\ No newline at end of file
{"uuid": "c0bf9a17-8db8-4e3a-8d2e-596f4d07c246", "befores": [{"name": "case_level", "status": "passed", "start": 1710831040741, "stop": 1710831040741}], "start": 1710831040741, "stop": 1710831040901}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_张三\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C49E430>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_张三\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "65d08b6c-4004-4cfe-8426-a6d77ccc1357-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'添加维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功'}"}, {"name": "sql_type", "value": "'delete'"}, {"name": "sql_data", "value": "'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "None"}], "start": 1710831045187, "stop": 1710831045326, "uuid": "20322d92-4b33-43d0-9ed3-5b342438ed85", "historyId": "60017b91adf587725ed0cf764eff922a", "testCaseId": "5b39a66235dce8bb894e044ec8b32592", "fullName": "test_case.test_张三.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "添加维度"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-张三"}, {"name": "parentSuite", "value": "test_case.test_张三"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_张三.test_bpm"}]}
\ No newline at end of file
{"uuid": "df7876de-2025-4f39-828c-caaada44183f", "befores": [{"name": "case_data", "status": "passed", "start": 1710831051163, "stop": 1710831051163}], "start": 1710831051163, "stop": 1710831051225}
\ No newline at end of file
{"uuid": "529be9c2-4334-4483-893f-d0b6317e215b", "befores": [{"name": "case_data", "status": "passed", "start": 1710831046559, "stop": 1710831046560}], "start": 1710831046559, "stop": 1710831046756}
\ No newline at end of file
{"uuid": "384ede7f-8d80-46a5-8c7d-1fb3a9e54c63", "befores": [{"name": "mime", "status": "passed", "start": 1710831045735, "stop": 1710831045735}], "start": 1710831045735, "stop": 1710831045935}
\ No newline at end of file
{"uuid": "e3fe4501-09b5-4091-a54c-29a37dd6b0d5", "befores": [{"name": "module_name", "status": "passed", "start": 1710831043803, "stop": 1710831043803}], "start": 1710831043803, "stop": 1710831043917}
\ No newline at end of file
{"uuid": "963ab325-901a-4d74-b5bc-3f1f512ddef7", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831050135, "stop": 1710831050135}], "start": 1710831050135, "stop": 1710831050327}
\ No newline at end of file
{"uuid": "4becbc6c-f876-4090-92f5-21aa31be046f", "befores": [{"name": "module_name", "status": "passed", "start": 1710831041401, "stop": 1710831041401}], "start": 1710831041401, "stop": 1710831041556}
\ No newline at end of file
{"uuid": "a8381c09-7341-4969-b87e-c11d0d6b6932", "befores": [{"name": "url", "status": "passed", "start": 1710831047957, "stop": 1710831047957}], "start": 1710831047957, "stop": 1710831048063}
\ No newline at end of file
{"uuid": "6baa8b5b-e9df-4663-bd3f-2a50aaae576b", "befores": [{"name": "expect_data", "status": "passed", "start": 1710831040370, "stop": 1710831040370}], "start": 1710831040370, "stop": 1710831040432}
\ No newline at end of file
{"uuid": "b4bb4611-999d-4e80-bb6a-c1e654123115", "befores": [{"name": "case_level", "status": "passed", "start": 1710831041561, "stop": 1710831041561}], "start": 1710831041561, "stop": 1710831041714}
\ No newline at end of file
{"uuid": "ddf5b5e3-a849-4da3-a408-9e5fb248aed4", "befores": [{"name": "case_level", "status": "passed", "start": 1710831039279, "stop": 1710831039279}], "start": 1710831039279, "stop": 1710831039377}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CE9A0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_李四\\test_bpm.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_李四.test_bpm.TestBPM object at 0x000002D12C4CE9A0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C66C760>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C66CA30>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979822747959296', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-李四\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"李四\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_李四\\test_bpm.py:64: AssertionError"}, "attachments": [{"name": "log", "source": "75a79724-3f33-463a-9d55-b90d972b621a-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'添加组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/addOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'add_org_test', 'demId': '不知道', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}"}, {"name": "expect_data", "value": "{'message': '添加组织成功'}"}, {"name": "sql_type", "value": "'select|delete'"}, {"name": "sql_data", "value": "{'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}"}, {"name": "update_key", "value": "'demId'"}], "start": 1710831049531, "stop": 1710831049713, "uuid": "7a05abcf-9b74-4cce-9774-061bb6543a30", "historyId": "91edb1ed0e89f57e955e8d265dcc4888", "testCaseId": "48f059f8dc0311549e0e5db6509caae1", "fullName": "test_case.test_李四.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "添加组织"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-李四"}, {"name": "parentSuite", "value": "test_case.test_李四"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_李四.test_bpm"}]}
\ No newline at end of file
{"uuid": "dc593ccc-7d36-4197-93d2-2265e1c6d679", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831047845, "stop": 1710831047845}], "start": 1710831047845, "stop": 1710831047946}
\ No newline at end of file
{"uuid": "2842bb26-5b5b-4e4e-958d-f80c5a6d7734", "befores": [{"name": "case_title", "status": "passed", "start": 1710831051303, "stop": 1710831051303}], "start": 1710831051303, "stop": 1710831051418}
\ No newline at end of file
{"uuid": "b03dd03b-6cd6-4941-9ccb-34ef14d1128e", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831049731, "stop": 1710831049731}], "start": 1710831049731, "stop": 1710831049919}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481B50>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_basic\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_basic.test_bpm.TestBPM object at 0x000002D12C481B50>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C4A1FA0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C580820>, module_name = '维度管理', api_name = '添加维度'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/demension/v1/dem/addDem', method = 'POST', mime = 'application/json'\ncase_data = {'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, expect_data = {'message': '添加维度成功'}\nsql_type = 'delete', sql_data = 'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";', update_key = None\n\n @allure.epic(\"BPM项目-basic\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"basic\", table_name=\"登录-维度管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_basic\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "7df42b64-8d0b-407c-9fa0-e07369091a35-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'添加维度'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功'}"}, {"name": "sql_type", "value": "'delete'"}, {"name": "sql_data", "value": "'DELETE FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'"}, {"name": "update_key", "value": "None"}], "start": 1710831041402, "stop": 1710831041544, "uuid": "baf59d51-7586-4eee-9d90-671792470472", "historyId": "abc0c8fde646a04d91cb8062c1980c5c", "testCaseId": "dba452b4cd07103342b046890245d967", "fullName": "test_case.test_basic.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "添加维度"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-basic"}, {"name": "parentSuite", "value": "test_case.test_basic"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_basic.test_bpm"}]}
\ No newline at end of file
{"uuid": "e2419e86-efd5-43f9-9c51-0730147172b5", "befores": [{"name": "mime", "status": "passed", "start": 1710831051303, "stop": 1710831051303}], "start": 1710831051303, "stop": 1710831051416}
\ No newline at end of file
{"uuid": "2599146a-f9ff-401e-b0eb-2af486ef6312", "befores": [{"name": "expect_data", "status": "passed", "start": 1710831043128, "stop": 1710831043128}], "start": 1710831043128, "stop": 1710831043237}
\ No newline at end of file
{"uuid": "0993fcea-55ce-4b15-a859-fd8574c5c6ed", "befores": [{"name": "case_level", "status": "passed", "start": 1710831041232, "stop": 1710831041232}], "start": 1710831041232, "stop": 1710831041384}
\ No newline at end of file
{"uuid": "566e90db-531b-4078-a121-536a8a94423f", "befores": [{"name": "case_level", "status": "passed", "start": 1710831051769, "stop": 1710831051769}], "start": 1710831051769, "stop": 1710831051875}
\ No newline at end of file
{"uuid": "45093191-c90f-4f87-8f7a-02b1cf6ad20c", "befores": [{"name": "module_name", "status": "passed", "start": 1710831051769, "stop": 1710831051769}], "start": 1710831051769, "stop": 1710831051877}
\ No newline at end of file
{"uuid": "1e69b746-1946-4d59-a2fa-2929883cde63", "befores": [{"name": "mime", "status": "passed", "start": 1710831040908, "stop": 1710831040908}], "start": 1710831040908, "stop": 1710831041061}
\ No newline at end of file
{"uuid": "419c20a8-bb6e-41df-94ef-2a151bbdd678", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831040595, "stop": 1710831040595}], "start": 1710831040595, "stop": 1710831040658}
\ No newline at end of file
{"uuid": "ac653bc1-1691-46cb-8588-695905d0569f", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831046978, "stop": 1710831046978}], "start": 1710831046978, "stop": 1710831047035}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C412610>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979806826381312', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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_张三\\test_bpm.py:60: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_张三.test_bpm.TestBPM object at 0x000002D12C412610>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000002D12C70FD60>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x000002D12C6ED400>, module_name = '组织管理', api_name = '添加组织'\ncase_title = '正向用例', case_level = '高', url = 'http://120.46.172.186:8080/api/org/v1/org/addOrg', method = 'POST', mime = 'json'\ncase_data = {'code': 'add_org_test', 'demId': '1769979806826381312', 'exceedLimitNum': 0, 'grade': '', ...}, expect_data = {'message': '添加组织成功'}\nsql_type = 'select|delete'\nsql_data = {'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}\nupdate_key = 'demId'\n\n @allure.epic(\"BPM项目-张三\") # 项目名称\n # @allure.feature(\"模块名称\") # 模块名称\n # @allure.story(\"接口名称\") # 接口名称\n # @allure.title(\"接口用例标题\") # 接口用例标题\n # @allure.severity(\"接口用例等级\") # 接口用例等级\n @pytest.mark.parametrize(\"module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(username=\"张三\", table_name=\"组织管理\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, case_title, case_level, url, method, mime, case_data, expect_data, sql_type, sql_data, update_key):\n # allure报告中展示的结果\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(case_title)\n allure.dynamic.severity(case_level)\n \n # 1.1 判断sql语句类型是否为delete\n if sql_type == \"delete\":\n # 1.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n # 1.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 2.1 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 2.2 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data)\n # 2.3 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 2.3 使用RequestsMethod类对象request_all方法发生请求\n \n # 3.1 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 3.2 使用DB类对象使用delete方法执行删除的sql语句。DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data[\"delete\"])\n # 3.3 使用DB类对象使用select方法执行查询的sql语句,并接收查询的结果。DB类对象就是自定义固件db_fix\n select_result = db_fix.select(sql_data[\"select\"])\n # 3.4 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 3.5 使用RequestsMethod类对象request_all方法发生请求\n \n # 使用RequestsMethod类对象request_all方法发生请求\n res = req_fix.request_all(req_url=url, req_method=method, req_mime=mime, case_data=case_data)\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},请求的方法为:{method},请求的媒体类型为:{mime}, 请求的用例数据:{case_data}, 期望数据为:{expect_data},服务器返回的数据为:{res.text}\")\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_张三\\test_bpm.py:63: AssertionError"}, "attachments": [{"name": "log", "source": "724e92b4-19b3-4e7e-b932-d971491f78ed-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'组织管理'"}, {"name": "api_name", "value": "'添加组织'"}, {"name": "case_title", "value": "'正向用例'"}, {"name": "case_level", "value": "'高'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/org/v1/org/addOrg'"}, {"name": "method", "value": "'POST'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'add_org_test', 'demId': '不知道', 'exceedLimitNum': 0, 'grade': '', 'limitNum': 0, 'name': '接口自动化框架添加的组织', 'nowNum': 0, 'orderNo': 0, 'parentId': '0'}"}, {"name": "expect_data", "value": "{'message': '添加组织成功'}"}, {"name": "sql_type", "value": "'select|delete'"}, {"name": "sql_data", "value": "{'delete': 'DELETE FROM uc_org WHERE `CODE_`=\"add_org_test\";', 'select': 'select ID_ FROM uc_demension WHERE `CODE_`=\"abc_123_xyz\";'}"}, {"name": "update_key", "value": "'demId'"}], "start": 1710831045736, "stop": 1710831045921, "uuid": "8ed8b747-73d5-47c3-b8ec-9398626ac28c", "historyId": "d7cdb71713becb34d4632630e9bec688", "testCaseId": "5b39a66235dce8bb894e044ec8b32592", "fullName": "test_case.test_张三.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "组织管理"}, {"name": "story", "value": "添加组织"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM项目-张三"}, {"name": "parentSuite", "value": "test_case.test_张三"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "TimeIsALine"}, {"name": "thread", "value": "13940-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_张三.test_bpm"}]}
\ No newline at end of file
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/deleteOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/deleteOrg,请求的方法为:post,请求的媒体类型为:json, 请求的用例数据:add_org_test, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''},服务器返回的数据为:{"state":true,"message":"部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;","value":""}
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/deleteOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/deleteOrg,请求的方法为:post,请求的媒体类型为:json, 请求的用例数据:add_org_test, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''},服务器返回的数据为:{"state":true,"message":"部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;","value":""}
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/deleteOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/deleteOrg,请求的方法为:post,请求的媒体类型为:json, 请求的用例数据:add_org_test, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''},服务器返回的数据为:{"state":true,"message":"部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;","value":""}
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/deleteOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/deleteOrg,请求的方法为:post,请求的媒体类型为:json, 请求的用例数据:add_org_test, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''},服务器返回的数据为:{"state":true,"message":"部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;","value":""}
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/org/v1/org/deleteOrg HTTP/1.1" 200 None
ERROR  root:test_bpm.py:63 断言失败,请求的url为:http://120.46.172.186:8080/api/org/v1/org/deleteOrg,请求的方法为:post,请求的媒体类型为:json, 请求的用例数据:add_org_test, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''},服务器返回的数据为:{"state":true,"message":"部分删除成功,其中编码为【\"add_org_test\"】的组织不存在;","value":""}
\ No newline at end of file
{"uuid": "c3ce560b-bdff-46cb-8110-ee9d5709e87d", "befores": [{"name": "case_data", "status": "passed", "start": 1710831051428, "stop": 1710831051428}], "start": 1710831051428, "stop": 1710831051530}
\ No newline at end of file
{"uuid": "f75456dd-e6e6-485f-9a94-4a65b9be5113", "befores": [{"name": "sql_data", "status": "passed", "start": 1710831039167, "stop": 1710831039167}], "start": 1710831039167, "stop": 1710831039265}
\ No newline at end of file
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:链接是数据库,获取链接对象和游标对象
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:get_sql_connect_msg,其功能为:根据key获取sql节点下key对应的数据库链接信息
INFO  root:__init__.py:43 执行的函数或方法为:__init__,其功能为:获取ini文件的路径,使用Configparser对象的read方法读取ini文件
INFO  root:__init__.py:43 执行的函数或方法为:get_host,其功能为:根据key获取host节点下key对应的域名
DEBUG  urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 120.46.172.186:8080
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /auth HTTP/1.1" 200 None
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
INFO  root:__init__.py:43 执行的函数或方法为:delete,其功能为:使用游标对象执行删除的sql语句
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "POST /api/demension/v1/dem/addDem HTTP/1.1" 200 None
ERROR  root:test_bpm.py:62 断言失败,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/addDem,请求的方法为:POST,请求的媒体类型为:application/json, 请求的用例数据:{'code': 'abc_123_xyz', 'description': 'abc_123_xyz', 'isDefault': 0, 'name': '接口自动化框架'}, 期望数据为:{'message': '添加维度成功'},服务器返回的数据为:{"state":true,"message":"添加维度成功!","value":""}
\ No newline at end of file
DEBUG  urllib3.connectionpool:connectionpool.py:433 http://120.46.172.186:8080 "GET /api/demension/v1/dem/getDem?code=abc_123_xyz HTTP/1.1" 200 None
ERROR  root:test_bpm.py:65 断言成功,请求的url为:http://120.46.172.186:8080/api/demension/v1/dem/getDem,请求的方法为:GET,请求的媒体类型为:query, 请求的用例数据:{'code': 'abc_123_xyz'}, 期望数据为:{'isDelete': '0'},服务器返回的数据为:{"createTime":"2024-03-19 14:50:41","isDelete":"0","id":"1769979790250491904","demCode":"abc_123_xyz","demName":"接口自动化框架","demDesc":"abc_123_xyz","isDefault":0,"organId":0,"code":"abc_123_xyz","name":"接口自动化框架","pkVal":"1769979790250491904"}
\ No newline at end of file
{"uuid": "4bbcf13d-c5bb-4db9-8835-cd654762523b", "befores": [{"name": "url", "status": "passed", "start": 1710831047266, "stop": 1710831047266}], "start": 1710831047266, "stop": 1710831047343}
\ No newline at end of file
{"uuid": "cf01f157-628f-41da-8c11-48bd5198e27d", "befores": [{"name": "update_key", "status": "passed", "start": 1710831041720, "stop": 1710831041720}], "start": 1710831041720, "stop": 1710831041769}
\ No newline at end of file
{"uuid": "17e14ab7-efa4-485f-9462-d78b0794cf92", "befores": [{"name": "mime", "status": "passed", "start": 1710831046978, "stop": 1710831046978}], "start": 1710831046978, "stop": 1710831047036}
\ No newline at end of file
{"uuid": "9dbd1458-2a8d-4f58-b7a1-974ee4a16bbb", "befores": [{"name": "api_name", "status": "passed", "start": 1710831049147, "stop": 1710831049148}], "start": 1710831049147, "stop": 1710831049300}
\ No newline at end of file
{"uuid": "93a171f9-a3fb-456c-b2b6-e9cd58dd2652", "befores": [{"name": "url", "status": "passed", "start": 1710831039103, "stop": 1710831039103}], "start": 1710831039103, "stop": 1710831039160}
\ No newline at end of file
{"uuid": "5314524d-0552-4f1a-acda-6ad8593cefdb", "befores": [{"name": "mime", "status": "passed", "start": 1710831047044, "stop": 1710831047044}], "start": 1710831047044, "stop": 1710831047112}
\ No newline at end of file
{"uuid": "ccd3112f-7199-4d30-9cf0-7a702dc1bf4e", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831039382, "stop": 1710831039382}], "start": 1710831039382, "stop": 1710831039476}
\ No newline at end of file
{"uuid": "7969bedf-a0b9-47e1-8faa-278aafe7480e", "befores": [{"name": "sql_type", "status": "passed", "start": 1710831041999, "stop": 1710831041999}], "start": 1710831041999, "stop": 1710831042199}
\ No newline at end of file
{"uuid": "a13c68db-f29d-4875-840c-aec92d14ba09", "befores": [{"name": "method", "status": "passed", "start": 1710831045187, "stop": 1710831045187}], "start": 1710831045187, "stop": 1710831045338}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment