문제

내가 하려고 부하 테스트는 웹 서비스입니다.

나는 간단하는 방법 2params 는 안 된 웹 서비스와 응답을 반환,그리고 내가 만들어진 단위 테스트에서 이 방법입니다.

기 때문에 나 고 싶 을 테스트하는 다양한 입력을 효과적으로 테스트 서비스,나는 설정 CSV 으로~1000 행으로 데이터 소스 단위를 위한 시험입니다.

나는 실행할 수 있습이 하나의 단위 테스트 및 스핀를 통해 모든 행은 순차적으로 호출하는 웹 서비스로 다른 값입니다.

그러나, 이는 내가 필요합니다.나 각각의 행에 해당하는 다른 사용자에서 다른 스레드를 사용하여 부하 테스트 구성함을 생각하는 시대,진입로 사용자가 단계 부하 테스트,혼합 config,etc.

내가 이것을 달성할 수 있는 제거하여 내부터 데이터 소스 단위 테스트 및 하드 코딩 값.. 그러나 이것은 근본적으로 결함을 테스트: 테스트 웹 서비스,필요한 각 사용자 을 보내는 다른 값과 다른 결과입니다.

...

그래서,어떻게 훅 데이터 원본을 부하 테스트 및 로드하는 테스트 시작하는 사용자의 인스턴스 단위의 테스트는 서로 다른 값을?

도움이 되었습니까?

해결책

이 답변을 가이드로 사용하여 끝납니다 : https://stackoverflow.com/a/7813465/237723

콘솔 앱 메소드에서 단위 테스트를 만드는 대신 단위 테스트를 사용하는 로드 테스트를 작성하는 대신, 입력을 취한 간단한 ASP.NET 웹 양식을 작성하고 웹 서비스라고합니다. 이 새 양식을 사용하여 웹 성능 테스트를 기록하고 해당 WTEST를 실행하기 위해로드 테스트를 만들었습니다.


  1. 테스트를 기록한 후 CSV를이 테스트에 데이터 소스로 추가했습니다.

  2. 2 '요청'이 녹음되었습니다 : 초기 GET & POSTENT POST. 둘 다 을 모두 맡기십시오! 나는 존재하지 않았기 때문에 favicon.ico 요청을 제거했습니다. (이러한 예방 조치는 피할 수 있음)

  3. POST 요청을 확장하여 CSV의 해당 열에서 값을 가져 오기 위해 My 2 웹 서비스 입력에 해당하는 텍스트 상자 매개 변수의 속성을 수정했습니다.

  4. DataSource 액세스 방법을 '커서 자동으로 이동하지 마십시오'(데이터 소스를 테이블로 확장하고 오른쪽 클릭 / F4를 통해 속성을 편집해야합니다.)

  5. i는 userID (int)를 실행중인 userID (int)에 따라 수동으로 이동하는 WebTestPlugin (링크 된 답변에서)을 만들었습니다. 이것은 사용자 인스턴스에 해당합니다. 부하 테스트가 단계 계획에 따라 회전합니다. 이 클래스를 만든 후에 프로젝트를 작성한 다음 웹 성능 테스트에 추가하십시오.


  6. public class webtestplugin : WebTestPlugin
    {
        public override void PreWebTest(object sender, PreWebTestEventArgs e)
        {
            base.PreWebTest(sender, e);
            e.WebTest.MoveDataTableCursor("DataSource1", "addresses#csv", e.WebTest.Context.WebTestUserId);                        
        }
    }
    
    .

다른 팁

그냥 귀하의 질문에 대답하기 위해,나는 확신이 할 수 없는 상자의 MSTest 및 NUnit(이 방법 다리지 않으면서 이 시나리오).


그러나,이 문서를 작성하는 가지 않는다.내 경험에서 시뮬레이션,~1000 사용자의 단일 기계가 생산 결과이기 때문에,테스트가 발생하는 모든 종류의 제한 클라이언트-thread pool 문제,송신 및 수신 트래픽이 문제,등등.나는 이런 말을 할 수 없을 극복지만,그것은 꼬이 충분히 고려하는 다른 방법으로 접근하고 있습니다.

실제로 추천하지 않을 사용하여 부하 테스트 도구(많은 사람들이 있다)이 경우에,그것은 간단하는 도구는 자신의 건너뛰 구성 문제와 학습 곡선 제 3 자.

내가 무엇을 추천 쓰 도구,자신만의 실행하는 그것에서 분리되는 기계입니다.그것은 필요가 없 의해 실행되는 테스트 프레임워크(I 얻을 수 없습니다 나 자신을 호출하는 단위 테스트,하지 않기 때문에),콘솔 응용 프로그램 될 것이다.여기에 몇 가지 코드로 당신이 시작하기:

private ConcurrentBag<string> logs = new ConcurrentBag<string>();

public void GetLoad(int numberOfUsers, List<string> myParams)
{
    var users = new string[numberOfUsers];
    for (int i = 0; i < numberOfUsers; i++)
    {
        users[i] = string.Format("LoadTest{0}", i + 1);
    }

    var userThreads = new List<Thread>();
    for (int i = 0; i < numberOfUsers; i++)
    {
        int index = i;
        userThreads.Add(new Thread(()=> CallWebService(users[index], myParams[index])));
    }

    Parallel.ForEach(userThreads, thread=>thread.Start());
    foreach (var userThread in userThreads)
    {
        userThread.Join();
    }
    var outputFilename = string.Format("LoadTest.{0}Users.txt", numberOfUsers);
    File.AppendAllLines(outputFilename, logs);
}

이미지는 수정을 수행 할 위치 표시를 보여줍니다.

여기에 이미지 설명을 입력하십시오 >>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top