From 53b30b5ee8e5a993eb52cc0e029293e60b8f7c09 Mon Sep 17 00:00:00 2001 From: zhanhuasheng Date: Tue, 26 Mar 2024 10:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TestCase/inbox/test_04_ticketInfo.py | 4 -- TestCase/inbox/test_05_team.py | 13 ++++++ TestData/inbox/team_test_data.py | 7 ++++ TestFile/inbox/team_delete.py | 5 +++ TestFile/inbox/team_select.py | 54 ++++++++++++++++++++++++ TestLog/2024-03-22_log.log | 4 ++ Utils/req_handler.py | 5 ++- YamlCase/inbox/team.yaml | 62 ++++++++++++++++++++++++++++ main.py | 2 +- 9 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 TestCase/inbox/test_05_team.py create mode 100644 TestData/inbox/team_test_data.py create mode 100644 TestFile/inbox/team_delete.py create mode 100644 TestFile/inbox/team_select.py create mode 100644 TestLog/2024-03-22_log.log create mode 100644 YamlCase/inbox/team.yaml diff --git a/TestCase/inbox/test_04_ticketInfo.py b/TestCase/inbox/test_04_ticketInfo.py index a5d18bf..6159be5 100644 --- a/TestCase/inbox/test_04_ticketInfo.py +++ b/TestCase/inbox/test_04_ticketInfo.py @@ -3,10 +3,6 @@ from Utils import yaml_handler from Utils import req_handler from TestData.inbox.ticketInfo_test_data import ticketInfoData -''' -这个文件和ticketStatus公用一个变量类 -''' - class TestTicketInfo: yaml_path = r'inbox\ticketInfo.yaml' diff --git a/TestCase/inbox/test_05_team.py b/TestCase/inbox/test_05_team.py new file mode 100644 index 0000000..8ed5844 --- /dev/null +++ b/TestCase/inbox/test_05_team.py @@ -0,0 +1,13 @@ +import pytest +from Utils import yaml_handler +from Utils import req_handler +from TestData.inbox.team_test_data import teamData + +class TestTeam: + + yaml_path = r'inbox\team.yaml' + yaml_data = yaml_handler.yaml_handler.get_case(yaml_path) + @pytest.mark.parametrize('case',yaml_data) + def test_team(self,case): + print(case) + req_handler.ReqHandler.send_requests(case=case,var_class=teamData) diff --git a/TestData/inbox/team_test_data.py b/TestData/inbox/team_test_data.py new file mode 100644 index 0000000..b9bf78c --- /dev/null +++ b/TestData/inbox/team_test_data.py @@ -0,0 +1,7 @@ +from Utils.global_variate import Global + +class teamData(Global): + pass + # brandId = 6052 + # shopId = 7238 + diff --git a/TestFile/inbox/team_delete.py b/TestFile/inbox/team_delete.py new file mode 100644 index 0000000..a37c190 --- /dev/null +++ b/TestFile/inbox/team_delete.py @@ -0,0 +1,5 @@ +from Utils.sql_handler import test_env_conn +from TestData.inbox.team_test_data import teamData + +room_delete_sql = f'delete from `resource_room_rel` where room_id = {teamData.other_room_id}' +test_env_conn.execute_sql(sql=room_delete_sql) \ No newline at end of file diff --git a/TestFile/inbox/team_select.py b/TestFile/inbox/team_select.py new file mode 100644 index 0000000..4932a83 --- /dev/null +++ b/TestFile/inbox/team_select.py @@ -0,0 +1,54 @@ +from Utils.sql_handler import test_env_conn +from TestData.inbox.team_test_data import teamData + +team_select_sql = f'select * from `resource_item` where brand_id = {teamData.brandId} and resource_id = 1' +team_select_result = test_env_conn.select_many_value(sql=team_select_sql) + +team_num = len(team_select_result) +team_id = team_select_result[0]['id'] +team_name = team_select_result[0]['name'] +setattr(teamData, 'team_num', team_num) +setattr(teamData, 'team_id', team_id) +setattr(teamData, 'team_name', team_name) +team_room_list_select_sql = f'select room_id from `resource_room_rel` where item_id = {team_id}' +team_room_list_select_result = test_env_conn.select_many_value(sql=team_room_list_select_sql) +team_room_list = tuple(i['room_id'] for i in team_room_list_select_result) + +if team_room_list != (): + open_room_select_sql = f'select * from `im_room` where room_id in {team_room_list} and status = 1' + open_room_select_result = test_env_conn.select_many_value(sql=open_room_select_sql) + pending_room_select_sql = f'select * from `im_room` where room_id in {team_room_list} and status = 2' + pending_room_select_result = test_env_conn.select_many_value(sql=pending_room_select_sql) + close_room_select_sql = f'select * from `im_room` where room_id in {team_room_list} and status = 3' + close_room_select_result = test_env_conn.select_many_value(sql=close_room_select_sql) + setattr(teamData, 'open_room_num', len(open_room_select_result)) + setattr(teamData, 'pending_room_num', len(pending_room_select_result)) + setattr(teamData, 'close_room_num', len(close_room_select_result)) + other_room_select_sql = f'select * from `im_room` where room_id not in {team_room_list} and site_id = {teamData.shopId} and status = 1 limit 10' +else: + setattr(teamData, 'open_room_num', 0) + setattr(teamData, 'pending_room_num', 0) + setattr(teamData, 'close_room_num', 0) + other_room_select_sql = f'select * from `im_room` where `cate_id` = {teamData.brandId} and site_id = {teamData.shopId} and status = 1 limit 10' + +other_room_select_result = test_env_conn.select_one_value(sql=other_room_select_sql) +setattr(teamData, 'other_room_id', other_room_select_result['room_id']) +setattr(teamData, 'open_room_num_add' , teamData.open_room_num + 1) + +team_member_select_sql = f'select * from `resource_item_cs_rel` where item_id = {team_id}' +team_member_select_result = test_env_conn.select_many_value(sql=team_member_select_sql) +team_member_num = len(team_member_select_result) +team_member_id = team_member_select_result[0]['cs_id'] +setattr(teamData, 'team_member_num', team_member_num) +setattr(teamData, 'team_member_id', team_member_id) +team_member_info_select_sql = f'select * from `customer_service` where id = {team_member_id}' +team_member_info_select_result = test_env_conn.select_one_value(sql=team_member_info_select_sql) +setattr(teamData, 'team_member_name', team_member_info_select_result['name']) +setattr(teamData, 'team_member_image', team_member_info_select_result['profile']) +setattr(teamData, 'team_member_email', team_member_info_select_result['email']) + + +team_member_open_room_select_sql = f'select * from `im_room` where room_id in {team_room_list} and status = 1 and allocation_uid = {team_member_id}' +team_member_open_room_select_result = test_env_conn.select_many_value(sql=team_member_open_room_select_sql) +setattr(teamData, 'team_member_open_room_num', len(team_member_open_room_select_result)) + diff --git a/TestLog/2024-03-22_log.log b/TestLog/2024-03-22_log.log new file mode 100644 index 0000000..205a928 --- /dev/null +++ b/TestLog/2024-03-22_log.log @@ -0,0 +1,4 @@ +2024-03-22 16:14:59,138 [INFO] in log_handler (line 30): __main__ - Info +This is an info message. +2024-03-22 16:14:59,139 [ERROR] in log_handler (line 37): __main__ - Error +This is an error message. diff --git a/Utils/req_handler.py b/Utils/req_handler.py index 314950c..1754619 100644 --- a/Utils/req_handler.py +++ b/Utils/req_handler.py @@ -29,6 +29,8 @@ class ReqHandler: case = case.replace(r"'${%s}'"%word,str(value)) #替换掉${}变量符 else: case = case.replace(r"${%s}"%word,str(value)) #替换掉${}变量符 + if re.findall(r'\$\{(.+?)\}',case): #保底 + case = case.replace(r'${%s}'%word,str(value)) except Exception: import traceback print(traceback.print_exc()) @@ -116,6 +118,7 @@ class ReqHandler: :param expected: 传入期望结果 :return: ''' + try: assert res.status_code == 200 #先断言状态码是正确的 if isinstance(expected,list): @@ -127,7 +130,7 @@ class ReqHandler: assert_way = item_key path = list(item_value.keys())[0] #拿到path路径 value = list(item_value.values())[0] - res_path_value = jsonpath.jsonpath(res.json(),path)[0] + res_path_value = jsonpath.jsonpath(res.json(),path)[0] if str(path)[0:2] == '$.' else path if isinstance(res_path_value,str) and '{"contentList":' in res_path_value: res_path_value = res_path_value.replace('\\','') #兼容websocket,当遇到包含{"contentList":内容的值,且类型是字符串时,会自动去除所有\号 if assert_way == 'eq': #eq代表完全相同 diff --git a/YamlCase/inbox/team.yaml b/YamlCase/inbox/team.yaml new file mode 100644 index 0000000..e0a830c --- /dev/null +++ b/YamlCase/inbox/team.yaml @@ -0,0 +1,62 @@ +api1: + title: 检查团队信息 + url: /api/v1/resource/getResourceItemList + method: post + before_sql: inbox/team_select.py + data: {"resourceType":"team","v":"${v}"} + expected: + - eq: {"$.code" : 0} + - eq: {"$.data.list[?(@.id == '${team_id}')].name" : "${team_name}"} + + +api2: + title: 检查会话状态数量 + url: /api/v1/chat/local/count + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"keyword":"","countType":["all","unread","mention","assigned","unassigned","'${team_id}'"],"v":"${v}"} + expected: + - eq: {"$.code" : 0} + - eq: {"$.data.list.${team_id}.openCount" : "${open_room_num}"} + - eq: {"$.data.list.${team_id}.waitCount" : "${pending_room_num}"} + - eq: {"$.data.list.${team_id}.closeCount" : "${close_room_num}"} + +api3: + title: 分配一个会话给团队 + url: /api/v1/resource/roomAssignToResourceItem + method: post + data: {"roomId":"'${other_room_id}'","srcResourceItemId":0,"distResourceItemId":"${team_id}","v":"${v}"} + expected: + - eq: {"$.code" : 0} + +api4: + title: 检查团队会话是否增加 + url: /api/v1/chat/local/count + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"keyword":"","countType":["all","unread","mention","assigned","unassigned","'${team_id}'"],"v":"${v}"} + after_sql: inbox/team_delete.py + expected: + - eq: { "$.code": 0 } + - eq: { "$.data.list.${team_id}.openCount": "${open_room_num_add}" } + +api5: + title: 检查团队会话是否移除 + url: /api/v1/chat/local/count + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"keyword":"","countType":["all","unread","mention","assigned","unassigned","'${team_id}'"],"v":"${v}"} + expected: + - eq: { "$.code": 0 } + - eq: { "$.data.list.${team_id}.openCount": "${open_room_num}" } + +api6: + title: 检查团队成员信息 + url: /api/v1/resource/getResourceItemList + method: post + data: {"resourceType":"team","v":"${v}"} + expected: + - eq: {"$.code" : 0} + - eq: {"$.data.list[?(@.id == '${team_id}')].members[?(@.id == '${team_member_id}')].name" : "${team_member_name}"} + - eq: {"$.data.list[?(@.id == '${team_id}')].members[?(@.id == '${team_member_id}')].email" : "${team_member_email}"} + - eq: {"$.data.list[?(@.id == '${team_id}')].members[?(@.id == '${team_member_id}')].profile" : "${team_member_image}"} + - eq: {"$.data.list[?(@.id == '${team_id}')].members[?(@.id == '${team_member_id}')].openedRoomCount" : "${team_member_open_room_num}"} + + diff --git a/main.py b/main.py index a341166..ddd4d2a 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ from Utils.sql_handler import test_env_conn if __name__ == '__main__': try: - pytest.main(['-vs',f'--alluredir=./allureReports','--clean-alluredir']) + pytest.main(['-vs',r'C:\Users\rd71\PycharmProjects\willdesk_api_auto\TestCase\inbox\test_05_team.py',f'--alluredir=./allureReports','--clean-alluredir']) finally: test_env_conn.close_db() #关闭数据库链接 -- GitLab