2013-12-20 3 views
0

우리는 VS2013의 MVC/C#에 앱을 작성하고 있습니다.웹 성능 테스트 용 테스트 러너 사용

우리는 UI 테스트를 위해 셀레늄 웹 드라이버를 사용하고 프로세스를 선언적이고 절차 적으로 만들기 위해 프레임 워크를 작성했습니다. 여기에 예를

[Test, Category("UITest")] 
    public void CanCreateMeasureSucceedWithOnlyRequiredFields() 
    { 
     ManageMeasureDto dto = new ManageMeasureDto() 
     { 
      Name = GetRandomString(10), 
      MeasureDataTypeId = MeasureDataTypeId.FreeText, 
      DefaultTarget = GetRandomString(10), 
      Description = GetRandomString(100)  
     }; 

     new ManageScreenUITest<MeasureConfigurationController, ManageMeasureDto>(c => c.ManageMeasure(dto), WebDrivers).Execute(ManageScreenExpectedResult.SavedSuccessfullyMessage); 
    } 

execute 메소드는 DTO의 값을 취하고 selenium.sendKeys 실제로 응답이 우리가 원하는 것을 포함 주장, 테스트를 수행하는 양식을 제출하는 다른 방법의 무리를 호출합니다.

우리는이 프레임 워크의 결과에 만족하지만 유사한 테스트가로드 테스트 시나리오를 작성하는 데 사용될 수 있음이 나에게 발생합니다.

IE에서 HTTPWebRequest를 사용하여 웹 서버에 요청을 보내는 UI 테스트 프레임 워크를 구현할 수있었습니다. 기본적으로 거기에서

, 내가 할 수있는 "갱"내 테스트 시나리오를 작성하는 예 :

public void MeasureTestScenario() 
{ 
    CanListMeasures(); 
    CanSearchMeasures(); 
    measureId = CanCreateMeasure(); 
    CanEditMeasure(measureId); 
} 

내가 부하이 "시나리오"를 실행 어떻게 퍼즐의 누락 된 조각은? IE, 나는이 병렬 테스트의 1..N을 실행할 수있는 테스트를 마쳤습니다. 시간을 늘리거나 각 시나리오 사이에서 임의로 대기하는 등의 작업을 수행하십시오. 동시 테스트의 수는 실행시 구성 가능할 것입니다. 시간도, 즉 5 개의 테스트 스레드를 추가로 생성합니다. 웹 요청의 일부로 실행 시간을 기록 할 수 있으므로보고는 매우 중요하지 않습니다.

아마도 다른 접근법이 있습니다. 예를 들어 C#을 사용하여보다 전통적인 부하 테스트 도구를 제어 할 수 있습니까?

이 방법의 가장 큰 장점은 더 복잡한 화면, 즉 개체 컬렉션이 포함 된 화면을 처리한다는 점입니다. DB에서 무작위 부모 레코드를 얻을 수 있고, 기존 오토마타 코드를 사용하여 중첩 된 dto를 생성하고, 무작위 값을 변경하는 코드를 작성한 다음 테스트 프레임 워크를 사용하여 해당 dto 값을 웹 요청으로 제출할 수 있습니다. JMeter 스크립트를 손쉽게 코딩 할 수 있습니다. 건배, dave

+2

이것은 단위 테스트에 적합한 것으로 들리지 않습니다.사이트를로드 테스트하는 데는 다양한 도구가 있지만 가능한 가장 작은 단위를 테스트하여 예상대로 수행하는지 테스트해야합니다. –

+0

전적으로 동의합니다. 이것은 단위 테스트에 관한 것이 아닙니다. 우리는 작고 집중된 단위 테스트의 완전한 배터리를 가지고 있습니다. 우리는 또한 통합 테스트, 구성 생성 테스트, 심지어 nUnit 테스트로 실행되는 웹/UI 테스트 (일부는 nCrunch에서 실행됩니다) (실제 단위 및 일부 통합 테스트) 및 일부는 DXCore 테스트 러너 (UI 테스트 용)를 사용합니다. 우리에게 NUnit은 모든 종류의 테스트에 대해 코드를 실행하고 결과를 선언하는 편리한 방법입니다. – Dave

+0

NUnit은 테스트가 성능 정보를 추출하기에 충분한 데이터를 기록하는 경우 잘 작동합니다. 좋은 로깅이 있다면 실행하는 모든 테스트에 대한 성능 정보를 제공하는 로그 파서를 작성하는 것이 어렵지 않습니다. – evanmcdonnal

답변

0

다른 작업/테스트에 대한 러너로 NUnit을 사용하는 것이 좋지만 성능 테스트를위한 올바른 도구라고 생각하지 않습니다.

리플렉션을 사용하며, 오버 헤드가 있으며, 결국 웹 클라이언트 등의 미리 정의 된 설정을 사용합니다. 성능 테스트 도구를 사용하면 훨씬 좋습니다. NUnit을 사용하여 구성/시작 할 수 있습니다.

0

NUnit을 사용할 수 없다는 것에 동의하지 않습니다. 적절한 로깅을 사용하면 기능 테스트 러너를 성능 테스트에 사용할 수 있습니다. 오버 헤드는 테스트 코드 자체가 요청을 보내고 응답을 받거나 페이지가 요청 될 때 및로드가 완료 될 때와 같이 데이터를 제공 할 때 중요하지 않습니다. 로그 파일을 구문 분석하고 몇 가지 기본 메트릭을 생성하는 것은 매우 간단한 작업입니다. 일을 바꿀 가능성이있는 거대한 프로젝트가된다면 쓸만한 커맨드 라인 앱으로 1 ~ 2 시간이 걸릴 수 있습니다.

나는 진짜 질문은 당신이 당신의 정상적인 테스트 러너와 함께 할 수 있다고 생각한다. 이미 테스트 코드에 많은 로깅을 가지고 있고 쉽게 호출 할 수 있다면 NUnit을 사용하면 꽤 매력적입니다. 괜찮은로드 시나리오를 지원하는 충분한 로깅 또는 프레임 워크가없는 경우 일부로드 테스트 도구/프레임 워크를 사용하는 것이 더 쉬울 것입니다.