2025년 3월 14일 금요일

Grinder jython 2


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}")

댓글 없음: