mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-13 08:59:44 +08:00
feat: log client/server IP and port
This commit is contained in:
@@ -2,6 +2,10 @@
|
||||
|
||||
## 3.0.13 (2020-06-15)
|
||||
|
||||
**Added**
|
||||
|
||||
- feat: log client/server IP and port
|
||||
|
||||
**Fixed**
|
||||
|
||||
- fix: avoid '.csv' been converted to '_csv'
|
||||
|
||||
@@ -172,16 +172,31 @@ class HttpSession(requests.Session):
|
||||
# timeout default to 120 seconds
|
||||
kwargs.setdefault("timeout", 120)
|
||||
|
||||
# set stream to True, in order to get client/server IP/Port
|
||||
kwargs["stream"] = True
|
||||
|
||||
start_timestamp = time.time()
|
||||
response = self._send_request_safe_mode(method, url, **kwargs)
|
||||
response_time_ms = round((time.time() - start_timestamp) * 1000, 2)
|
||||
|
||||
# get the length of the content, but if the argument stream is set to True, we take
|
||||
# the size from the content-length header, in order to not trigger fetching of the body
|
||||
if kwargs.get("stream", False):
|
||||
content_size = int(dict(response.headers).get("content-length") or 0)
|
||||
else:
|
||||
content_size = len(response.content or "")
|
||||
try:
|
||||
client_ip, client_port = response.raw.connection.sock.getsockname()
|
||||
self.data.address.client_ip = client_ip
|
||||
self.data.address.client_port = client_port
|
||||
logger.debug(f"client IP: {client_ip}, Port: {client_port}")
|
||||
except AttributeError:
|
||||
logger.warning(f"failed to get client address info!")
|
||||
|
||||
try:
|
||||
server_ip, server_port = response.raw.connection.sock.getpeername()
|
||||
self.data.address.server_ip = server_ip
|
||||
self.data.address.server_port = server_port
|
||||
logger.debug(f"server IP: {server_ip}, Port: {server_port}")
|
||||
except AttributeError:
|
||||
logger.warning(f"failed to get server address info!")
|
||||
|
||||
# get length of the response content
|
||||
content_size = int(dict(response.headers).get("content-length") or 0)
|
||||
|
||||
# record the consumed time
|
||||
self.data.stat.response_time_ms = response_time_ms
|
||||
|
||||
@@ -66,10 +66,10 @@ if __name__ == "__main__":
|
||||
def __ensure_absolute(path: Text) -> Text:
|
||||
if path.startswith("./"):
|
||||
# Linux/Darwin, hrun ./test.yml
|
||||
path = path[len("./"):]
|
||||
path = path[len("./") :]
|
||||
elif path.startswith(".\\"):
|
||||
# Windows, hrun .\\test.yml
|
||||
path = path[len(".\\"):]
|
||||
path = path[len(".\\") :]
|
||||
|
||||
path = ensure_path_sep(path)
|
||||
project_meta = load_project_meta(path)
|
||||
|
||||
@@ -110,6 +110,13 @@ class RequestStat(BaseModel):
|
||||
elapsed_ms: float = 0
|
||||
|
||||
|
||||
class AddressData(BaseModel):
|
||||
client_ip: Text = "N/A"
|
||||
client_port: int = 0
|
||||
server_ip: Text = "N/A"
|
||||
server_port: int = 0
|
||||
|
||||
|
||||
class RequestData(BaseModel):
|
||||
method: MethodEnum = MethodEnum.GET
|
||||
url: Url
|
||||
@@ -140,6 +147,7 @@ class SessionData(BaseModel):
|
||||
# while when 30X redirect occurs, req_resps will contain multiple request & response
|
||||
req_resps: List[ReqRespData] = []
|
||||
stat: RequestStat = RequestStat()
|
||||
address: AddressData = AddressData()
|
||||
validators: Dict = {}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user