기술자료/.NET

Visual Studio 2005로 로드런너 흉내내기 ( 웹 부하테스트 하기 )

하인도1 2007. 6. 14. 11:23

MOSS 프로젝트를 하다보니, 역시 웹기반이여서 웹 기반 부하테스트를 할 기회가 생겼다.
얼씨구나 한 것 까지는 좋았는데, 이게 생각보다 큰 비용을 지불하는 고급 기능이였다.
어느 정도 고급인지는 알길은 없지만, 개인적인 범위나 간단한 테스트용도로는 쓸만하다고 판단된다.

쓰는 방법은 아래와 같다.

구성 준비

Visual Studio의 제품 별로 다르지만, 제품 군 중에, Visual Studio 2005 Team System(이하 VSTS) 제품에만 팀 개발자 및 테스터 도구을 설치할 수 있다. 그러므로 VSTS를 설치할 수 있으며, 또한 팀 개발자 및 테스트 도구부분을 설치해주어야 한다


Visual Studio Test 프로젝트 시작

Visual Studio 을 실행 한 뒤에 새로 만들기” -> “프로젝트를 한다.



프로젝트 종류 에서 “Visual C#” -> “테스트” -> “테스트 프로젝트를 선택 한 뒤 , 이름에 적절한 이름을 넣고 확인을 클릭한다.



웹 테스트를 위한 스크립트 작성

만들어진 프로젝트에서 오른쪽 마우스 클릭해서 나오는 Context 메뉴에서 추가” -> “웹 테스트를 선택한다.



스크립트 생성을 위한 웹브라우징 하기.
자동으로 Internet Explore가 뜨는데, 여기서 시나리오 대로 웹 브라우징을 한다. 브라우징을 시작하면 왼편의 웹 테스트 레코더에 이동한 경로에 대한 사항들이 저장된다. 브라우징이 완료되면 중지를 클릭한다.




















스크립트 생성

캡처 한 스크립트에 대한 접속 스크립트 소스를 생성해야 한다. 코드 생성 방법은 .webtest 파일을 선택한 뒤에 왼편 창에서 나오는 상위 메뉴 중 코드 생성을 선택한다.

생성이 완료되면 해당 cs 파일이 생성이 되는데 이 cs 파일을 열면 테스트를 위한 전체 진행 프로그램이 자동 생성되었음을 확인할 수 있다.


스크립트 소스 수정

코드 내에 수정할 필요가 있는 사항들을 수정한다.
코드 자체를 이해할 수 있다면 최소한 각 시나리오 별로 스크립트를 나누어 추가 스크립트 구성도 가능하고 제작도 가능하다. 이 중 다른 부분은 제외하더라도, 굵게 표시한 ThinkTime 정도의 값의 수정이 필요하다. Action 별로 지연시간을 의미하는데, 테스트의 중요한 요소 이므로 적절한 값으로 대체하여 구성한다



public override IEnumerator<WebTestRequest> GetRequestEnumerator()

{

   WebTestRequest request1 = new WebTestRequest("http://tsquare.netswork.co.kr/");

  request1.ThinkTime = 8;

  ExtractHiddenFields rule1 = new ExtractHiddenFields();

  rule1.ContextParameterName = "1";

  request1.ExtractValues += new EventHandler<ExtractionEventArgs>(rule1.Extract);

  yield return request1;

 

WebTestRequest request2 = new WebTestRequest("http://tsquare.netswork.co.kr/_layouts/TLogin.aspx");

request2.Method = "POST";

request2.QueryStringParameters.Add("ReturnUrl", "%2f_layouts%2fAuthenticate.aspx%3fSource%3d%252f", false, false);

request2.QueryStringParameters.Add("Source", "%2f", false, false);

FormPostHttpBody request2Body = new FormPostHttpBody();

request2Body.FormPostParameters.Add("__VIEWSTATE", this.Context["$HIDDEN1.__VIEWSTATE"].ToString());

request2Body.FormPostParameters.Add("AccountID", "test001");

request2Body.FormPostParameters.Add("password", "test001");

request2Body.FormPostParameters.Add("__EVENTVALIDATION", this.Context["$HIDDEN1.__EVENTVALIDATION"].ToString());

request2Body.FormPostParameters.Add("login.x", "40");

request2Body.FormPostParameters.Add("login.y", "40");

request2.Body = request2Body;

ExtractHiddenFields rule2 = new ExtractHiddenFields();

rule2.ContextParameterName = "1";

request2.ExtractValues += new EventHandler<ExtractionEventArgs>(rule2.Extract);

yield return request2;

 

              [ 이하 생략 ]

 



부하테스트 설정
코드 정리가 되면 부하 테스트를 위한 준비를 시작한다. 프로젝트 위에서 마우스 오른쪽 버튼을 클릭하여 추가” -> “부하 테스트를 선택하여 부하테스트 제작 마법사를 띄운다.




패턴에 단계 부하에서 단계적으로 몇 명에 해당하는 부하를 넣을지를 판단하여 채운다.


부하테스트를 위한 테스트를 추가한다.





클라이언트 예상 브라우저를 선택한다. 만일 다양한 버전의 브라우저를 사용하는 환경에 대한 테스트라면 그 브라우저 사용 비율에 맞추어 추가한다


클라이언트와 서버 사이의 네트워크 매체를 설정한다.

일반적인 인트라넷은 LAN으로 하면 되고, 익스트라넷 또는 인터넷 환경이면 그에 맞는 유형과 비율을 설정한다.


부하테스트를 모니터링 할 대상을 설정한다. 그러나 AD 환경과 같이 모든 컴퓨터에 바로 접속할 수 있는 환경이 아닌 경우 타 시스템의 정보를 확인하는 작업은 제대로 진행되지 않는다. 차라리 대상 서버에서 직접 성능 MMC(제어판->를 이용하는 것이 좋다



테스트 실행

확장자가 .loadtest 라는 파일이 생성되는데, 이 파일을 연 뒤에 왼쪽 트리의 최상위에서 마우스 오른쪽 버튼을 클릭해서 테스트 실행을 선택한다



리포트 확인

실행을 하면 자동적으로 결과 리포트를 띄워주는데, 기본적으로 그래프를 제공하고 해당 로그 내용을 표나 요약등으로 확인할 수 있다.


728x90