From 7ee0732afe1701934435e0643d2dc2b0fe6b69e4 Mon Sep 17 00:00:00 2001 From: floraachy <1622042529@qq.com> Date: Fri, 29 Dec 2023 15:29:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4requests=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E7=9A=84=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E6=96=87=E4=BB=B6=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E8=B0=83=E7=94=A8=E8=AF=B7=E6=B1=82=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=B8=8A=E4=BC=A0=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../projects/issues/test_new_issue.yaml | 2 +- .../gitlink/projects/test_upload_files.yaml | 68 ++++++++++++++++++- utils/requests_utils/base_request.py | 33 ++++----- 4 files changed, 85 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 8811037..87e00fb 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,7 @@ case_info: 具体的用例数据,是以列表的形式进行管理 cookies:请求cookies,格式是:DICT, CookieJar对象 request_type:请求数据类型:params, json, file, data payload:请求参数 - files: 需要上传的文件,参考如下传参:{接口中文件参数的名称:'文件路径地址'} + files: 需要上传的文件的相对路径,会自动拼接files目录。 os.path.join(files, "这里传递的files参数值") assert_response:响应断言 assert_sql:数据库断言 extract:后置提取参数 diff --git a/interface/gitlink/projects/issues/test_new_issue.yaml b/interface/gitlink/projects/issues/test_new_issue.yaml index 8aef150..831c787 100644 --- a/interface/gitlink/projects/issues/test_new_issue.yaml +++ b/interface/gitlink/projects/issues/test_new_issue.yaml @@ -26,7 +26,7 @@ case_info: description: ${generate_paragraph} branch_name: master status_id: 1 - priority_id: ${random.choice([1,2,3,4,5])} + priority_id: ${random.choice([1,2,3,4])} milestone_id: issue_tag_ids: assigner_ids: diff --git a/interface/gitlink/projects/test_upload_files.yaml b/interface/gitlink/projects/test_upload_files.yaml index 58fa9fb..52a4636 100644 --- a/interface/gitlink/projects/test_upload_files.yaml +++ b/interface/gitlink/projects/test_upload_files.yaml @@ -12,20 +12,84 @@ case_common: case_info: - id: gitlink_upload_file_01 - title: 测试文件上传 + title: 正常上传文件 severity: - run: True + run: true url: /api/attachments.json method: POST headers: cookies: ${cookie} + Content-Type: application/json; charset=utf-8; cookies: request_type: file payload: files: TOC出库订单导入模板(2).xlsx assert_response: status_code: 200 + asserFileName: + message: 断言接口返回的filename + expect_value: TOC出库订单导入模板(2).xlsx + assert_type: == + type_jsonpath: $.title assert_sql: extract: type_jsonpath: attachment_id: $.id + +- + id: gitlink_upload_file_02 + title: file为空,文件上传失败 + severity: + run: true + url: /api/attachments.json + method: POST + headers: + cookies: ${cookie} + Content-Type: application/json; charset=utf-8; + cookies: + request_type: file + payload: + files: + assert_response: + status_code: 200 + assertStatus: + message: 断言接口返回的status + expect_value: -1 + assert_type: == + type_jsonpath: $.status + assertMessage: + message: 断言接口返回的message + expect_value: 未上传文件 + assert_type: == + type_jsonpath: $.message + assert_sql: + extract: + +# 由于requests采用的是session方式,fixture执行了login后会产生cookies, session会记录cookies。因此下述用例虽然没用传登录cookies,但是实际有,会上传成功。暂时还没想好如何解决这一问题 +- + id: gitlink_upload_file_03 + title: 无用户登录信息上传文件,提示用户先登录 + severity: + run: False + url: /api/attachments.json + method: POST + headers: + Content-Type: application/json; charset=utf-8; + cookies: + request_type: file + payload: + files: TOC出库订单导入模板(2).xlsx + assert_response: + status_code: 200 + assertStatus: + message: 断言接口返回的status + expect_value: 401 + assert_type: == + type_jsonpath: $.status + assertMessage: + message: 断言接口返回的message + expect_value: 请登录后再操作 + assert_type: == + type_jsonpath: $.message + assert_sql: + extract: diff --git a/utils/requests_utils/base_request.py b/utils/requests_utils/base_request.py index 1d9646d..9de2892 100644 --- a/utils/requests_utils/base_request.py +++ b/utils/requests_utils/base_request.py @@ -33,7 +33,7 @@ class BaseRequest: requests.session可以自动处理cookies,做状态保持。 """ if cls.session is None: - cls.session = requests.Session() + cls.session = requests.Session() # 创建一个 session return cls.session @classmethod @@ -46,13 +46,12 @@ class BaseRequest: try: return cls.send_api_request(url=req_data.get("url"), - method=req_data.get("method").lower(), - request_type=req_data.get("request_type", None), - header=req_data.get("headers", None), - payload=req_data.get("payload", None), - files=req_data.get("files", None), - cookies=req_data.get("cookies", None)) - + method=req_data.get("method").lower(), + request_type=req_data.get("request_type", None), + header=req_data.get("headers", None), + payload=req_data.get("payload", None), + files=req_data.get("files", None), + cookies=req_data.get("cookies", None)) except requests.exceptions.RequestException as e: logger.error(f"请求出错,{str(e)}") raise ValueError(f"请求出错,{str(e)}") @@ -75,17 +74,17 @@ class BaseRequest: session = cls.get_session() if request_type: if request_type.lower() == 'params': - res = session.request(method=method, url=url, params=payload, headers=headers, cookies=cookies, + response = session.request(method=method, url=url, params=payload, headers=headers, cookies=cookies, timeout=cls.TIMEOUT) - return res + return response elif request_type.lower() == 'data': - res = session.request(method=method, url=url, data=payload, headers=headers, cookies=cookies, + response = session.request(method=method, url=url, data=payload, headers=headers, cookies=cookies, timeout=cls.TIMEOUT) - return res + return response elif request_type.lower() == 'json': - res = session.request(method=method, url=url, json=payload, headers=headers, cookies=cookies, + response = session.request(method=method, url=url, json=payload, headers=headers, cookies=cookies, timeout=cls.TIMEOUT) - return res + return response elif request_type.lower() == 'file': if files: file_name = os.path.basename(files) @@ -94,10 +93,12 @@ class BaseRequest: headers['Content-Type'] = encoder.content_type response = session.request(method=method, url=url, data=encoder.to_string(), headers=headers, cookies=cookies, timeout=cls.TIMEOUT) - return response else: - logger.error("上传的文件不能为空") + logger.warning(f"文件为空进行上传! files={files}") + response = session.request(method=method, url=url, files=files, headers=headers, + cookies=cookies, timeout=cls.TIMEOUT) + return response else: logger.error("request_type可选关键字为params, json, data, file") raise ValueError('request_type可选关键字为params, json, data, file')