Visual Studio 2005로 로드런너 흉내내기 ( 웹 부하테스트 하기 )
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 라는 파일이 생성되는데, 이 파일을 연 뒤에 왼쪽 트리의 최상위에서 마우스 오른쪽 버튼을 클릭해서 “테스트 실행”을 선택한다
리포트 확인
실행을 하면 자동적으로 결과 리포트를 띄워주는데, 기본적으로 그래프를 제공하고 해당 로그 내용을 표나 요약등으로 확인할 수 있다.