class RequestBuilder:
def __init__(self, grinder_request, logger):
self.grinder_request = grinder_request
self.logger = logger
self.base_url = ""
self.request_url = ""
self.port = 80
self.parameters = {}
self.cookies = {}
def set_base_url(self, base_url):
self.base_url = base_url
return self
def set_request_url(self, request_url):
self.request_url = request_url
return self
def set_port(self, port):
self.port = port
return self
def set_parameters(self, params):
self.parameters.update(params)
return self
def set_cookies(self, cookies):
self.cookies.update(cookies)
return self
def build_full_url(self, overrides={}):
# 호출 시 덮어쓸 속성 가져오기
active_port = overrides.get("port", self.port)
active_parameters = overrides.get("parameters", self.parameters)
param_string = "&".join([f"{k}={v}" for k, v in active_parameters.items()])
return f"{self.base_url}:{active_port}{self.request_url}?{param_string}"
def execute_get(self, overrides={}):
# 동적으로 속성을 덮어쓴 URL 생성
full_url = self.build_full_url(overrides)
self.logger.info(f"GET 요청 URL: {full_url}")
# GET 요청 실행
response = self.grinder_request.GET(full_url)
self.logger.info(f"GET 응답: {response.text}")
return response
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPRequest
from common_module import RequestBuilder
# nGrinder의 HTTP Request 객체 생성
http_request = HTTPRequest()
# Logger 객체 생성
logger = grinder.logger
# RequestBuilder 인스턴스 생성
builder = RequestBuilder(http_request, logger)
builder.set_base_url("http://example.com") \
.set_request_url("/api/test") \
.set_port(8080) \
.set_parameters({"key1": "value1", "key2": "value2"}) \
.set_cookies({"SESSION": "abc123"})
# 기본 속성으로 GET 요청 실행
get_response = builder.execute_get()
print(f"GET Response: {get_response.text}")
# 덮어쓰기 속성으로 GET 요청 실행
overrides = {
"port": 9090,
"parameters": {"key3": "value3", "key4": "value4"}
}
get_response_with_overrides = builder.execute_get(overrides)
print(f"GET Response with Overrides: {get_response_with_overrides.text}")
댓글 없음:
댓글 쓰기