다음을 통해 공유


방법: 레코더 플러그 인 만들기

WebTestRecorderPlugin을 사용하여 기록된 웹 성능 테스트를 수정할 수 있습니다.선택 후 수정을 발생 중지 웹 성능에서 레코더 도구 모음이 있지만 되는 테스트 하기 전에 테스트 저장 하 고 웹 성능 테스트 편집기에 표시 됩니다.

레코더 플러그 인의 주된 이점은 동적 매개 변수에 대한 사용자 지정 상관 관계 연결을 직접 수행해야 하는 문제를 해결할 수 있다는 점입니다.웹 성능 테스트에서는 기본 제공 상관 관계 기능을 사용하여 테스트가 완료될 때 또는 사용자가 웹 성능 테스트 편집기 도구 모음의 동적 매개 변수를 웹 테스트 매개 변수로 승격을 사용할 때 웹 기록에서 동적 매개 변수를 검색합니다.자세한 내용은 방법: 동적 매개 변수로 인한 웹 성능 테스트 재생 문제 해결을 참조하십시오.그러나 기본 제공 검색 기능으로 항상 모든 동적 매개 변수를 찾을 수 있는 것은 아닙니다.예를 들어 대개 5-30분마다 값이 변경되는 세션 ID는 찾지 못합니다.따라서 상관 관계 프로세스를 사용자가 직접 수행해야 합니다.자세한 내용은 방법: 동적 매개 변수를 웹 성능 테스트 매개 변수로 승격을 참조하십시오.

WebTestRecorderPlugin을 사용하면 사용자 고유의 사용자 지정 플러그 인에 대한 코드를 작성할 수 있습니다.이 플러그 인은 웹 성능 테스트가 저장되고 웹 성능 테스트 편집기에 표시되기 전에 여러 가지 방법으로 상관 관계 연결을 수행하거나 웹 성능 테스트를 수정할 수 있습니다.따라서 많은 기록에 대해 특정 동적 변수를 연결해야 하는 것으로 판단될 경우 이 프로세스를 자동화할 수 있습니다.

레코더 플러그 인은 웹 성능 테스트에서 추출 및 유효성 검사 규칙을 추가하거나, 컨텍스트 매개 변수를 추가하거나, 주석을 트랜잭션으로 변환하는 데도 사용할 수도 있습니다.

다음 절차에서는 레코더 플러그 인의 기본적인 코드를 만들고 이 플러그 인을 배포 및 실행하는 방법에 대해 설명합니다.절차 다음에 나오는 샘플 코드에서는 Visual C#을 사용하여 사용자 지정 동적 매개 변수 상관 관계 레코더 플러그 인을 만드는 방법을 보여 줍니다.

요구 사항

  • Visual Studio Ultimate

레코더 플러그 인 만들기

레코더 플러그 인을 만들려면

  1. 레코더 플러그 인을 만들어 웹 성능 테스트와 웹 성능 및 부하 테스트 프로젝트를 포함 하는 솔루션을 엽니다.

  2. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 누르고 추가, 다음을 선택 하 고 새 프로젝트.

    새 프로젝트 추가 대화 상자가 표시됩니다.

  3. 설치된 템플릿에서 **Visual C#**을 선택합니다.

  4. 템플릿 목록에서 클래스 라이브러리를 선택합니다.

  5. 이름 텍스트 상자에 레코더 플러그 인의 이름을 입력합니다.

    클래스 라이브러리가 솔루션 탐색기에 추가되고 새 클래스가 코드 편집기에서 열립니다.

  6. 솔루션 탐색기의 새 클래스 라이브러리 프로젝트 폴더에서 참조 폴더를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

    팁

    새 클래스 라이브러리 프로젝트 폴더의 예는 RecorderPlugins입니다.

    참조 추가 대화 상자가 표시됩니다.

  7. .NET 탭을 선택합니다.

  8. 스크롤 선택 Microsoft.VisualStudio.QualityTools.WebTestFramework 다음 선택 확인.

    Microsoft.VisualStudio.QualityTools.WebTestFramework가 솔루션 탐색기의 참조 폴더에 추가됩니다.

  9. 레코더 플러그 인의 코드를 작성합니다.먼저 WebTestRecorderPlugin에서 파생되는 새 공용 클래스를 만듭니다.

  10. PostWebTestRecording 메서드를 재정의합니다.

    public class Class1 : WebTestRecorderPlugin
        {
            public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
            {
                base.PostWebTestRecording(sender, e);
            }
        }
    

    이벤트 인수는 작업에 사용할 두 개의 개체, 즉 기록된 결과와 기록된 웹 성능 테스트 개체를 제공합니다.따라서 결과를 반복하여 특정 값을 찾고 웹 성능 테스트 내의 동일한 요청으로 이동하여 수정 작업을 수행할 수 있습니다.컨텍스트 매개 변수를 추가하거나 URL의 일부를 매개 변수화하려는 경우에 웹 성능 테스트를 수정할 수도 있습니다.

    [!참고]

    웹 성능 테스트를 수정할 경우에는 RecordedWebTestModified 속성도 e.RecordedWebTestModified = true;로 설정해야 합니다.

  11. 웹 기록이 발생한 후 레코더 플러그 인에서 실행할 작업에 따라 원하는 코드를 더 추가합니다.예를 들어 다음 샘플과 같이 사용자 지정 상관 관계를 처리하는 코드를 추가할 수 있습니다.주석을 트랜잭션으로 변환하거나 웹 성능 테스트에 유효성 검사 규칙을 추가하는 등의 작업을 위한 레코더 플러그 인을 만들 수도 있습니다.

  12. 빌드 메뉴에서 < 클래스 라이브러리 프로젝트 이름 > 빌드를 선택 합니다.

  13. 그런 다음 레코더 플러그 인을 Visual Studio Ultimate에 등록하기 위해 배포해야 합니다.

Ff400224.collapse_all(ko-kr,VS.110).gif레코더 플러그 인 배포

레코더 플러그 인을 컴파일한 후 결과 DLL 두 위치 중 하나에 배치 해야 합니다.

  • %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\My Documents\Visual Studio 2012\WebTestPlugins

주의 정보주의

레코더 플러그 인을 두 위치 중 하나에 복사한 후 Visual Studio Ultimate을 다시 시작해야 레코더 플러그 인이 등록됩니다.

Ff400224.collapse_all(ko-kr,VS.110).gif레코더 플러그 인 실행

새 웹 성능 테스트를 만들면 WebTestRecordPlugins 사용 대화 상자가 표시됩니다.WebTestRecordPlugins 사용 대화 상자에는 실행할 수 있는 사용 가능한 모든 플러그 인이 표시됩니다.

레코더 플러그 인을 실행하려면

  1. 새 웹 성능 테스트를 만듭니다.자세한 내용은 방법: 웹 성능 테스트 레코더를 사용하여 새 웹 성능 테스트 만들기을 참조하십시오.

    WebTestRecordPlugins 사용 대화 상자가 나타납니다.

  2. 레코더 플러그 인에 대한 확인란을 선택 하 고 확인 선택 합니다.

    웹 성능 테스트의 기록이 완료된 후 새 레코더 플러그 인이 실행됩니다.

    주의 정보주의

    이 플러그 인을 사용하는 부하 테스트 또는 웹 성능 테스트를 실행할 때 다음과 유사한 오류가 발생할 수 있습니다.

    Request failed: Exception in <plug-in> event: Could not load file or assembly '<"Plug-in name".dll file>, Version=<n.n.n.n>, Culture=neutral, PublicKeyToken=null' or one of its dependencies.The system cannot find the file specified.

    이 오류는 플러그 인의 코드를 변경한 후 새 DLL 버전 (Version=0.0.0.0)을 만들었지만 해당 플러그 인이 계속해서 원래 플러그 인 버전을 참조하는 경우에 발생합니다.이 문제를 해결하려면 다음 단계를 수행합니다.

    1. 웹 성능 및 부하 테스트 프로젝트의 참조에서 경고가 표시 됩니다.참조를 제거했다가 플러그 인 DLL에 다시 추가합니다.

    2. 테스트 또는 적절한 위치에서 플러그 인을 제거했다가 다시 추가합니다.

예제

이 샘플에서는 사용자 지정된 웹 성능 테스트 레코더 플러그 인을 만들어 사용자 지정 동적 매개 변수 상관 관계 연결을 수행하는 방법을 보여 줍니다.

[!참고]

전체 샘플 코드 목록은 이 항목의 맨 아래에 있습니다.

샘플 코드 검토

결과를 반복하여 ReportSession이 있는 첫 번째 페이지 찾기

이 코드 샘플 부분에서는 기록된 각 개체를 반복하고 응답 본문에서 ReportSession을 검색합니다.

           foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage; 
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {

추출 규칙 추가

응답을 찾았으면 추출 규칙을 추가해야 합니다.이 코드 샘플 부분에서는 ExtractionRuleReference 클래스를 사용하여 추출 규칙을 만든 다음 웹 성능 테스트에서 추출 규칙을 추가할 올바른 요청을 찾습니다.각 결과 개체에는 웹 성능 테스트에서 올바른 요청을 가져오기 위해 코드에서 사용되는 DeclarativeWebTestItemId라는 새 속성이 추가되어 있습니다.

           ExtractionRuleReference ruleReference = new ExtractionRuleReference();
           ruleReference.Type = typeof(ExtractText);
           ruleReference.ContextParameterName = "SessionId";
           ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
               e.RecordedWebTestModified = true;
           }

쿼리 문자열 매개 변수 바꾸기

이제 코드에서는 다음 코드 샘플 부분과 같이 이름이 ReportSession인 모든 쿼리 문자열 매개 변수를 찾아 해당 값을 {{SessionId}}로 변경합니다.

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
               {
                    if (param.Name.Equals("ReportSession"))
                    {
                        param.Value = "{{SessionId}}";
                    }
                }
            }
using System.ComponentModel;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

namespace RecorderPlugin
{
    [DisplayName("Correlate ReportSession")]
    [Description("Adds extraction rule for Report Session and binds this to querystring parameters that use ReportSession")]
    public class CorrelateSessionId : WebTestRecorderPlugin
    {
        public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
        {
            //first find the session id
            bool foundId = false;
            foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage;
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {
                            //add an extraction rule to this request
                            // Get the corresponding request in the Declarative Web performance test
                            ExtractionRuleReference ruleReference = new ExtractionRuleReference();

                            ruleReference.Type = typeof(ExtractText);
                            ruleReference.ContextParameterName = "SessionId";
                            ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

                            WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                            if (requestInWebTest != null)
                            {
                                requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
                                e.RecordedWebTestModified = true;
                            }
                            foundId = true;

                        }
                    }
                    else
                    {
                        //now update query string parameters
                        WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                        if (requestInWebTest != null)
                        {
                            foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
                            {
                                if (param.Name.Equals("ReportSession"))
                                {
                                    param.Value = "{{SessionId}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

참고 항목

작업

방법: 코딩된 웹 성능 테스트 만들기

방법: 웹 성능 테스트 편집기를 사용하여 기존 웹 성능 테스트 편집

참조

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

기타 리소스

부하 및 웹 성능 테스트에 대한 사용자 지정 플러그 인 만들기 및 사용