{ "uid" : "fd64392edbae973f", "name" : "反向用例-用户名正确-密码过短", "fullName" : "test_case.test_basic.test_case.TestBPM#test_bpm", "historyId" : "423b926d9c9c8e8a56af3847b1819589", "time" : { "start" : 1721015509291, "stop" : 1721015509331, "duration" : 40 }, "status" : "failed", "statusMessage" : "AssertionError: 断言失败,描述失败的原因", "statusTrace" : "self = <APIAutoTest_v3_1.test_case.test_basic.test_case.TestBPM object at 0x0000018E4AAF0C40>\nreq_fix = <APIAutoTest_v3_1.request_method.request_method.RequestMethod object at 0x0000018E4AB84220>\ndb_fix = <APIAutoTest_v3_1.common.db.DB object at 0x0000018E4AB84C70>, module_name = '认证接口', api_name = '登录系统', level = '中'\ncase_title = '反向用例-用户名正确-密码过短', case_method = 'POST', case_url = 'http://36.139.193.99:8088/auth', case_mime = 'application/json'\ncase_data = {'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIE...5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=', 'username': 'admin'}\nexpect_data = {'message': '账户错误或该租户未启用', 'state': False}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\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, level, case_title, case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(USERNAME).get_data())\n def test_bpm(self, req_fix, db_fix, module_name, api_name, level, case_title, case_method, case_url, case_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(level)\n \n print(case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key)\n \n # 判断sql语句类型是否为delete,如果是,使用DB类对象调用delete方法执行删除的sql语句\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句, DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n \n # 判断sql语句的类型是否为select,如果是,使用DB类对象调用select方法执行查询语句,并接收查询的结果\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者 delete|select ,如果是,使用DB类对象执行sql语句\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句。\n db_fix.delete(sql_data[\"delete\"])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并接收查询的结果\n select_result = db_fix.select(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n result = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n print(result.text)\n \n try:\n for key in expect_data:\n> assert expect_data[key] == result.json().get(key)\nE AssertionError: assert False == None\nE + where None = <built-in method get of dict object at 0x0000018E4AC3DF40>('state')\nE + where <built-in method get of dict object at 0x0000018E4AC3DF40> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...EsImlhdCI6MTcyMTAxNTQ1MX0.SKaoGdldOU9XaDlq2V_Dq2r8A287XYtlFRUTQvfg-wz_j-DxsfKW3uqby8IycQ5nOZ_QigKbPxj3o6_cMjs_lQ', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...EsImlhdCI6MTcyMTAxNTQ1MX0.SKaoGdldOU9XaDlq2V_Dq2r8A287XYtlFRUTQvfg-wz_j-DxsfKW3uqby8IycQ5nOZ_QigKbPxj3o6_cMjs_lQ', ...} = <bound method Response.json of <Response [200]>>()\nE + where <bound method Response.json of <Response [200]>> = <Response [200]>.json\n\ntest_case\\test_basic\\test_case.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <APIAutoTest_v3_1.test_case.test_basic.test_case.TestBPM object at 0x0000018E4AAF0C40>\nreq_fix = <APIAutoTest_v3_1.request_method.request_method.RequestMethod object at 0x0000018E4AB84220>\ndb_fix = <APIAutoTest_v3_1.common.db.DB object at 0x0000018E4AB84C70>, module_name = '认证接口', api_name = '登录系统', level = '中'\ncase_title = '反向用例-用户名正确-密码过短', case_method = 'POST', case_url = 'http://36.139.193.99:8088/auth', case_mime = 'application/json'\ncase_data = {'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIE...5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=', 'username': 'admin'}\nexpect_data = {'message': '账户错误或该租户未启用', 'state': False}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\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, level, case_title, case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(USERNAME).get_data())\n def test_bpm(self, req_fix, db_fix, module_name, api_name, level, case_title, case_method, case_url, case_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(level)\n \n print(case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key)\n \n # 判断sql语句类型是否为delete,如果是,使用DB类对象调用delete方法执行删除的sql语句\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句, DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n \n # 判断sql语句的类型是否为select,如果是,使用DB类对象调用select方法执行查询语句,并接收查询的结果\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者 delete|select ,如果是,使用DB类对象执行sql语句\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句。\n db_fix.delete(sql_data[\"delete\"])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并接收查询的结果\n select_result = db_fix.select(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n result = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n print(result.text)\n \n try:\n for key in expect_data:\n assert expect_data[key] == result.json().get(key)\n except AssertionError:\n> raise AssertionError(\"断言失败,描述失败的原因\")\nE AssertionError: 断言失败,描述失败的原因\n\ntest_case\\test_basic\\test_case.py:63: AssertionError", "flaky" : false, "newFailed" : false, "beforeStages" : [ { "name" : "db_fix", "time" : { "start" : 1721015508791, "stop" : 1721015508821, "duration" : 30 }, "status" : "passed", "steps" : [ ], "attachments" : [ ], "parameters" : [ ], "hasContent" : false, "stepsCount" : 0, "attachmentsCount" : 0, "shouldDisplayMessage" : false }, { "name" : "req_fix", "time" : { "start" : 1721015508741, "stop" : 1721015508791, "duration" : 50 }, "status" : "passed", "steps" : [ ], "attachments" : [ ], "parameters" : [ ], "hasContent" : false, "stepsCount" : 0, "attachmentsCount" : 0, "shouldDisplayMessage" : false } ], "testStage" : { "status" : "failed", "statusMessage" : "AssertionError: 断言失败,描述失败的原因", "statusTrace" : "self = <APIAutoTest_v3_1.test_case.test_basic.test_case.TestBPM object at 0x0000018E4AAF0C40>\nreq_fix = <APIAutoTest_v3_1.request_method.request_method.RequestMethod object at 0x0000018E4AB84220>\ndb_fix = <APIAutoTest_v3_1.common.db.DB object at 0x0000018E4AB84C70>, module_name = '认证接口', api_name = '登录系统', level = '中'\ncase_title = '反向用例-用户名正确-密码过短', case_method = 'POST', case_url = 'http://36.139.193.99:8088/auth', case_mime = 'application/json'\ncase_data = {'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIE...5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=', 'username': 'admin'}\nexpect_data = {'message': '账户错误或该租户未启用', 'state': False}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\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, level, case_title, case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(USERNAME).get_data())\n def test_bpm(self, req_fix, db_fix, module_name, api_name, level, case_title, case_method, case_url, case_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(level)\n \n print(case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key)\n \n # 判断sql语句类型是否为delete,如果是,使用DB类对象调用delete方法执行删除的sql语句\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句, DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n \n # 判断sql语句的类型是否为select,如果是,使用DB类对象调用select方法执行查询语句,并接收查询的结果\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者 delete|select ,如果是,使用DB类对象执行sql语句\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句。\n db_fix.delete(sql_data[\"delete\"])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并接收查询的结果\n select_result = db_fix.select(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n result = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n print(result.text)\n \n try:\n for key in expect_data:\n> assert expect_data[key] == result.json().get(key)\nE AssertionError: assert False == None\nE + where None = <built-in method get of dict object at 0x0000018E4AC3DF40>('state')\nE + where <built-in method get of dict object at 0x0000018E4AC3DF40> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...EsImlhdCI6MTcyMTAxNTQ1MX0.SKaoGdldOU9XaDlq2V_Dq2r8A287XYtlFRUTQvfg-wz_j-DxsfKW3uqby8IycQ5nOZ_QigKbPxj3o6_cMjs_lQ', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...EsImlhdCI6MTcyMTAxNTQ1MX0.SKaoGdldOU9XaDlq2V_Dq2r8A287XYtlFRUTQvfg-wz_j-DxsfKW3uqby8IycQ5nOZ_QigKbPxj3o6_cMjs_lQ', ...} = <bound method Response.json of <Response [200]>>()\nE + where <bound method Response.json of <Response [200]>> = <Response [200]>.json\n\ntest_case\\test_basic\\test_case.py:61: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <APIAutoTest_v3_1.test_case.test_basic.test_case.TestBPM object at 0x0000018E4AAF0C40>\nreq_fix = <APIAutoTest_v3_1.request_method.request_method.RequestMethod object at 0x0000018E4AB84220>\ndb_fix = <APIAutoTest_v3_1.common.db.DB object at 0x0000018E4AB84C70>, module_name = '认证接口', api_name = '登录系统', level = '中'\ncase_title = '反向用例-用户名正确-密码过短', case_method = 'POST', case_url = 'http://36.139.193.99:8088/auth', case_mime = 'application/json'\ncase_data = {'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIE...5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=', 'username': 'admin'}\nexpect_data = {'message': '账户错误或该租户未启用', 'state': False}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\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, level, case_title, case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(USERNAME).get_data())\n def test_bpm(self, req_fix, db_fix, module_name, api_name, level, case_title, case_method, case_url, case_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(level)\n \n print(case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key)\n \n # 判断sql语句类型是否为delete,如果是,使用DB类对象调用delete方法执行删除的sql语句\n if sql_type == \"delete\":\n # 使用DB类对象调用delete方法执行删除的sql语句, DB类对象就是自定义固件db_fix\n db_fix.delete(sql_data)\n \n # 判断sql语句的类型是否为select,如果是,使用DB类对象调用select方法执行查询语句,并接收查询的结果\n elif sql_type == \"select\":\n # 使用DB类对象调用select方法执行查询语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 判断sql语句的类型是否为select|delete 或者 delete|select ,如果是,使用DB类对象执行sql语句\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete方法执行删除的sql语句。\n db_fix.delete(sql_data[\"delete\"])\n \n # 使用DB类对象调用select方法执行查询的sql语句, 并接收查询的结果\n select_result = db_fix.select(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n result = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n print(result.text)\n \n try:\n for key in expect_data:\n assert expect_data[key] == result.json().get(key)\n except AssertionError:\n> raise AssertionError(\"断言失败,描述失败的原因\")\nE AssertionError: 断言失败,描述失败的原因\n\ntest_case\\test_basic\\test_case.py:63: AssertionError", "steps" : [ ], "attachments" : [ { "uid" : "776550ffaf8dccb0", "name" : "log", "source" : "776550ffaf8dccb0.txt", "type" : "text/plain", "size" : 706 }, { "uid" : "4d0cd821f8a9dba0", "name" : "stdout", "source" : "4d0cd821f8a9dba0.txt", "type" : "text/plain", "size" : 851 } ], "parameters" : [ ], "hasContent" : true, "stepsCount" : 0, "attachmentsCount" : 2, "shouldDisplayMessage" : true }, "afterStages" : [ { "name" : "db_fix::0", "time" : { "start" : 1721015510221, "stop" : 1721015510221, "duration" : 0 }, "status" : "passed", "steps" : [ ], "attachments" : [ ], "parameters" : [ ], "hasContent" : false, "stepsCount" : 0, "attachmentsCount" : 0, "shouldDisplayMessage" : false }, { "name" : "req_fix::0", "time" : { "start" : 1721015510221, "stop" : 1721015510221, "duration" : 0 }, "status" : "passed", "steps" : [ ], "attachments" : [ ], "parameters" : [ ], "hasContent" : false, "stepsCount" : 0, "attachmentsCount" : 0, "shouldDisplayMessage" : false } ], "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_case" }, { "name" : "subSuite", "value" : "TestBPM" }, { "name" : "host", "value" : "LAPTOP-O09782E1" }, { "name" : "thread", "value" : "18996-MainThread" }, { "name" : "framework", "value" : "pytest" }, { "name" : "language", "value" : "cpython3" }, { "name" : "package", "value" : "test_case.test_basic.test_case" }, { "name" : "resultFormat", "value" : "allure2" } ], "parameters" : [ { "name" : "api_name", "value" : "'登录系统'" }, { "name" : "case_data", "value" : "{'username': 'admin', 'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8='}" }, { "name" : "case_method", "value" : "'POST'" }, { "name" : "case_mime", "value" : "'application/json'" }, { "name" : "case_title", "value" : "'反向用例-用户名正确-密码过短'" }, { "name" : "case_url", "value" : "'http://36.139.193.99:8088/auth'" }, { "name" : "expect_data", "value" : "{'state': False, 'message': '账户错误或该租户未启用'}" }, { "name" : "level", "value" : "'中'" }, { "name" : "module_name", "value" : "'认证接口'" }, { "name" : "sql_data", "value" : "None" }, { "name" : "sql_type", "value" : "None" }, { "name" : "update_key", "value" : "None" } ], "links" : [ ], "hidden" : false, "retry" : false, "extra" : { "severity" : "normal", "retries" : [ ], "categories" : [ { "name" : "Product defects", "matchedStatuses" : [ ], "flaky" : false } ], "tags" : [ ] }, "source" : "fd64392edbae973f.json", "parameterValues" : [ "'登录系统'", "{'username': 'admin', 'password': 'F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8=F4/DVgPS/NEruLxVVRqHktsb1R2fVpw81t5VuGfFjwp0G7U4k6spHPr/ejPlw8XxIVilJ+SyIH0G5FbQStFEd/94mmI7+2Dw2c7MXXIERYKjd3XNe4gZR4ANJclCJHNGfE+mtnX5voprYwEo9m6ponCdmmXTMx9cWVEJ4K/nbR8='}", "'POST'", "'application/json'", "'反向用例-用户名正确-密码过短'", "'http://36.139.193.99:8088/auth'", "{'state': False, 'message': '账户错误或该租户未启用'}", "'中'", "'认证接口'", "None", "None", "None" ] }