Skip to content

Commit 1ab93db

Browse files
committed
将时间类型修改为datetime,然后通过自定义json_decoder来确保生成的时间格式正确性
1 parent 69e1989 commit 1ab93db

3 files changed

Lines changed: 46 additions & 16 deletions

File tree

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "testsolar-testtool-sdk"
3-
version = "0.1"
3+
version = "0.1.2"
44
description = "TestSolar测试工具SDK"
55
authors = [
66
{name = "asiazhang", email = "asiazhang2002@gmail.com"},

‎src/testsolar_testtool_sdk/model/testresult.py‎

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from enum import Enum
22
from typing import List, Optional
3+
from datetime import datetime
34

45
from pydantic import BaseModel, Field
56

@@ -54,29 +55,48 @@ class Attachment(BaseModel):
5455
class TestCaseLog(BaseModel):
5556
__test__ = False
5657

57-
time: str = Field(alias="Time")
58+
time: datetime = Field(alias="Time")
5859
level: LogLevel = Field(alias="Level")
5960
content: str = Field(alias="Content")
6061
attachments: List[Attachment] = Field(alias="Attachments")
6162
assert_error: TestCaseAssertError = Field(alias="AssertError")
6263
runtime_error: Optional[TestCaseRuntimeError] = Field(None, alias="RuntimeError")
6364

65+
class Config:
66+
json_encoders = {
67+
datetime: lambda dt: _format_datetime(dt),
68+
}
69+
6470

6571
class TestCaseStep(BaseModel):
6672
__test__ = False
6773

68-
start_time: str = Field(alias="StartTime")
69-
end_time: Optional[str] = Field(alias="EndTime")
74+
start_time: datetime = Field(alias="StartTime")
75+
end_time: Optional[datetime] = Field(alias="EndTime")
7076
title: str = Field(alias="Title")
7177
logs: List[TestCaseLog] = Field(alias="Logs")
7278

79+
class Config:
80+
json_encoders = {
81+
datetime: lambda dt: _format_datetime(dt),
82+
}
83+
84+
85+
def _format_datetime(t: datetime) -> str:
86+
return t.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
87+
7388

7489
class TestResult(BaseModel):
7590
__test__ = False
7691

7792
test: TestCase = Field(alias="Test")
78-
start_time: str = Field(alias="StartTime")
79-
end_time: Optional[str] = Field(alias="EndTime")
93+
start_time: datetime = Field(alias="StartTime")
94+
end_time: Optional[datetime] = Field(alias="EndTime")
8095
result_type: ResultType = Field(alias="ResultType")
8196
message: str = Field(alias="Message")
8297
steps: List[TestCaseStep] = Field(alias="Steps")
98+
99+
class Config:
100+
json_encoders = {
101+
datetime: lambda dt: _format_datetime(dt),
102+
}

‎tests/test_report.py‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import concurrent.futures
22
import io
3+
import json
34
import logging
45
import random
56
from datetime import datetime, timedelta
6-
from typing import BinaryIO
77
from functools import partial
8+
from typing import BinaryIO
89

910
from src.testsolar_testtool_sdk.model.load import LoadResult, LoadError
1011
from src.testsolar_testtool_sdk.model.test import TestCase
@@ -22,10 +23,6 @@
2223
logger.setLevel(logging.DEBUG)
2324

2425

25-
def _format_datetime(t: datetime) -> str:
26-
return t.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
27-
28-
2926
def generate_demo_load_result() -> LoadResult:
3027
r: LoadResult = LoadResult(Tests=[], LoadErrors=[])
3128

@@ -62,8 +59,8 @@ def generate_test_result(index: int) -> TestResult:
6259
start: datetime = datetime.utcnow() - timedelta(seconds=40)
6360
_tr = TestResult(
6461
Test=TestCase(Name=f"mumu/mu.py/test_case_name_{index}_p1", Attributes={}),
65-
StartTime=_format_datetime(start),
66-
EndTime=_format_datetime(datetime.utcnow()),
62+
StartTime=start,
63+
EndTime=datetime.utcnow(),
6764
ResultType=ResultType.SUCCEED,
6865
Message="ファイルが見つかりません。ファイルパスを確認して、もう一度試してください。",
6966
Steps=[generate_testcase_step(f"{index}_{x}") for x in range(10)],
@@ -76,7 +73,7 @@ def generate_testcase_log(index: str) -> TestCaseLog:
7673
start: datetime = datetime.utcnow() - timedelta(seconds=15)
7774

7875
return TestCaseLog(
79-
Time=_format_datetime(start),
76+
Time=start,
8077
Level=LogLevel.INFO,
8178
Attachments=[
8279
# Attachment(
@@ -95,8 +92,8 @@ def generate_testcase_log(index: str) -> TestCaseLog:
9592
def generate_testcase_step(index: str) -> TestCaseStep:
9693
start: datetime = datetime.utcnow() - timedelta(seconds=10)
9794
return TestCaseStep(
98-
StartTime=_format_datetime(start),
99-
EndTime=_format_datetime(datetime.utcnow()),
95+
StartTime=start,
96+
EndTime=datetime.utcnow(),
10097
Title=get_random_unicode(100),
10198
Logs=[generate_testcase_log(f"{index}_{x}") for x in range(100)],
10299
)
@@ -156,6 +153,19 @@ def send_test_result(pipe_io: BinaryIO):
156153
reporter.report_run_case_result(run_case_result)
157154

158155

156+
def test_datetime_formatted():
157+
run_case_result = generate_test_result(0)
158+
data = run_case_result.model_dump_json(by_alias=True, indent=2)
159+
tr = json.loads(data)
160+
assert tr['StartTime'].endswith("Z")
161+
assert tr['EndTime'].endswith("Z")
162+
163+
assert tr['Steps'][0]['StartTime'].endswith("Z")
164+
assert tr['Steps'][0]['EndTime'].endswith("Z")
165+
166+
assert tr['Steps'][0]['Logs'][0]['Time'].endswith("Z")
167+
168+
159169
def test_report_run_case_result():
160170
# 创建一个Reporter实例
161171
pipe_io = io.BytesIO()

0 commit comments

Comments
 (0)