class RequestBuilder:
def __init__(self, grinder_request, logger):
self.grinder_request = grinder_request # nGrinder의 HTTPRequest 객체
self.logger = logger # nGrinder의 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):
param_string = "&".join([f"{k}={v}" for k, v in self.parameters.items()])
return f"{self.base_url}:{self.port}{self.request_url}?{param_string}"
def execute_get(self):
full_url = self.build_full_url()
self.logger.info(f"GET 요청 URL: {full_url}") # 로그 추가
response = self.grinder_request.GET(full_url)
self.logger.info(f"GET 응답: {response.text}") # 응답 로그 기록
return response
def execute_post(self):
full_url = f"{self.base_url}:{self.port}{self.request_url}"
self.logger.info(f"POST 요청 URL: {full_url}") # 로그 추가
self.logger.info(f"POST 요청 데이터: {self.parameters}") # 요청 데이터 로그
response = self.grinder_request.POST(full_url, self.parameters)
self.logger.info(f"POST 응답: {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}")
# POST 요청 실행 및 로그 출력
post_response = builder.execute_post()
print(f"POST Response: {post_response.text}")
댓글 없음:
댓글 쓰기