Allgemein Für Administratoren Für Architekten Für Entwickler Für Projektleiter Für Tester News Produkte Publikationen
X
Sven Hubert

Sven Hubert

Mehrere Test-Konfigurationen im Teambuild verwenden

Freitag, 25. April 2008

Um ein verteiltes Test-Szenario umzusetzen, muss man evtl. mit mehreren Testlauf-Konfigurationen (Abb. Solution mit mehreren testrunconfig-Dateien) arbeiten und diese in einem Build ausführen. Der Standard-Buildprozess kann nur die in der .vsmdi-Datei aktivierte Testrunconfig verwenden. Dies ist für Tests auf mehreren VSTT-Controllern (Visual Studio Team System Load Test Controller) aber nicht ausreichend. Wir haben daher den Buildtypen angepasst, um auch dieses Szeanrio zu unterstützen.


Voraussetzung für die folgenden Beschreibungen sind vorhandene Unit-Tests, die der Testliste „Calc Tests“ zugeordnet wurden. Die Metadaten im Buildtype müssen wie folgt angepasst werden:

    <MetaDataFile Include=$(BuildProjectFolderPath)/../../TFS Support/Smoke Tests/WindowsFormsApplication/WindowsFormsApplication.vsmdi>        <TestList>Calc Tests</TestList>        <TestRunConfig>$(SolutionRoot)\Local.testrunconfig</TestRunConfig>    </MetaDataFile>    <MetaDataFile Include=$(BuildProjectFolderPath)/../../TFS Support/Smoke Tests/WindowsFormsApplication/WindowsFormsApplication.vsmdi>        <TestList>Calc Tests</TestList>        <TestRunConfig>$(SolutionRoot)\RemoteXP.testrunconfig</TestRunConfig>    </MetaDataFile>    <MetaDataFile Include=$(BuildProjectFolderPath)/../../TFS Support/Smoke Tests/WindowsFormsApplication/WindowsFormsApplication.vsmdi>        <TestList>Calc Tests</TestList>        <TestRunConfig>$(SolutionRoot)\RemoteVista.testrunconfig</TestRunConfig>

    </MetaDataFile>

Dies ordnet den Metadaten entsprechende testrunconfig-Dateien zu, unter deren Verwendung die Tests später ausgeführt werden sollen. Das Team-Foundation-Build-Target (Version 2008!) „CoreTestConfiguration“ muss wie folgt überschrieben werden (im lokalen Buildtype):

    <Target Name=CoreTestConfiguration

            DependsOnTargets=$(CoreTestConfigurationDependsOn)

            Outputs=@(TestOutputs)>

        <Warning Condition= ‚$(V8TestToolsTask)’==’true‘ and ‚$(TestNames)‘!=“

                 Text=Warning: The TestNames property cannot be used in in combination with the V8 TestToolsTask and will be ignored. />

        <Warning Condition= ‚$(V8TestToolsTask)’==’true‘ and ‚@(LocalTestContainer)‘ != “

                 Text=Warning: The TestContainer item group cannot be used in combination with the V8 TestToolsTask and will be ignored. />

        <Message Text=Info: V8TestToolsTask = $(V8TestToolsTask) />

        <Message Text=Info: LocalMetaDataFile %(LocalMetaDataFile.Identity), %(LocalMetaDataFile.TestList), %(LocalMetaDataFile.TestRunConfig) />

        <Message Text=Info: MetaDataFile %(MetaDataFile.Identity), %(MetaDataFile.TestList), %(MetaDataFile.TestRunConfig) />

        <!– MetaDataFile tests for non-desktop builds. –>

        <TestToolsTask

              Condition= ‚$(IsDesktopBuild)‘!=’true‘ and ‚$(V8TestToolsTask)‘!=’true‘ and ‚%(LocalMetaDataFile.Identity)‘ != “

              BuildFlavor=$(Configuration)

              Platform=$(Platform)

              PublishServer=$(TeamFoundationServerUrl)

              PublishBuild=$(BuildNumber)

              SearchPathRoot=$(OutDir)

              PathToResultsFilesRoot=$(TestResultsRoot)

              MetaDataFile=%(LocalMetaDataFile.Identity)

              RunConfigFile=%(LocalMetaDataFile.TestRunConfig)

              TestLists=%(LocalMetaDataFile.TestList)

              TeamProject=$(TeamProject)

              TestNames=$(TestNames)

              ContinueOnError=true />

        <!– 8.0 MetaDataFile tests for non-desktop builds. –>

        <TestToolsTask

              Condition= ‚$(IsDesktopBuild)‘!=’true‘ and ‚$(V8TestToolsTask)’==’true‘ and ‚%(LocalMetaDataFile.Identity)‘ != “

              BuildFlavor=$(Configuration)

              Platform=$(Platform)

              PublishServer=$(TeamFoundationServerUrl)

              PublishBuild=$(BuildNumber)

              SearchPathRoot=$(OutDir)

              PathToResultsFilesRoot=$(TestResultsRoot)

              MetaDataFile=%(LocalMetaDataFile.Identity)

              RunConfigFile=%(LocalMetaDataFile.TestRunConfig)

              TestLists=%(LocalMetaDataFile.TestList)

              TeamProject=$(TeamProject)

              ContinueOnError=true />

        <!– TestContainer tests for non-desktop builds. –>

        <TestToolsTask

                Condition= ‚$(IsDesktopBuild)‘!=’true‘ and ‚$(V8TestToolsTask)‘!=’true‘ and ‚@(LocalTestContainer)‘ != “

                BuildFlavor=$(Configuration)

                Platform=$(Platform)

                PublishServer=$(TeamFoundationServerUrl)

                PublishBuild=$(BuildNumber)

                SearchPathRoot=$(OutDir)

                PathToResultsFilesRoot=$(TestResultsRoot)

                RunConfigFile=$(RunConfigFile)

                TestContainers=@(LocalTestContainer)

                TeamProject=$(TeamProject)

                TestNames=$(TestNames)

                ContinueOnError=true />

        <!– MetaDataFile tests for desktop builds. –>

        <TestToolsTask

              Condition= ‚$(IsDesktopBuild)’==’true‘ and ‚$(V8TestToolsTask)‘!=’true‘ and ‚%(MetaDataFile.Identity)‘ != “

              SearchPathRoot=$(OutDir)

              PathToResultsFilesRoot=$(TestResultsRoot)

              MetaDataFile=%(MetaDataFile.Identity)

              RunConfigFile=%(MetaDataFile.TestRunConfig)

              TestLists=%(MetaDataFile.TestList)

              TestNames=$(TestNames)

              ContinueOnError=true />

        <!– 8.0 MetaDataFile tests for desktop builds. –>

        <TestToolsTask

              Condition= ‚$(IsDesktopBuild)’==’true‘ and ‚$(V8TestToolsTask)’==’true‘ and ‚%(MetaDataFile.Identity)‘ != “

              SearchPathRoot=$(OutDir)

              PathToResultsFilesRoot=$(TestResultsRoot)

              MetaDataFile=%(MetaDataFile.Identity)

              RunConfigFile=%(MetaDataFile.TestRunConfig)

              TestLists=%(MetaDataFile.TestList)

              ContinueOnError=true />

        <!– TestContainer tests for desktop builds. –>

        <TestToolsTask

                Condition= ‚$(IsDesktopBuild)’==’true‘ and ‚$(V8TestToolsTask)‘!=’true‘ and ‚@(LocalTestContainer)‘ != “

                SearchPathRoot=$(OutDir)

                PathToResultsFilesRoot=$(TestResultsRoot)

                RunConfigFile=$(RunConfigFile)

                TestContainers=@(LocalTestContainer)

                TestNames=$(TestNames)

                ContinueOnError=true />

        <!– Populate TestOutputs with MetaData Files and Test Containers. –>

        <ItemGroup>

            <!– TestContainer tests for non-desktop and desktop builds. –>

            <TestOutputs Condition= ‚@(LocalTestContainer)‘ != “

                         Include=%(LocalTestContainer.Identity)>

                <Platform>$(Platform)</Platform>

                <Configuration>$(Configuration)</Configuration>

            </TestOutputs>

            <!– MetaDataFile tests for non-desktop builds. –>

            <TestOutputs Condition= ‚$(IsDesktopBuild)‘!=’true‘ and ‚%(LocalMetaDataFile.Identity)‘ != “

                         Include=%(LocalMetaDataFile.Identity)>

                <Platform>$(Platform)</Platform>

                <Configuration>$(Configuration)</Configuration>

            </TestOutputs>

            <!– MetaDataFile tests for desktop builds. –>

            <TestOutputs Condition= ‚$(IsDesktopBuild)’==’true‘ and ‚%(MetaDataFile.Identity)‘ != “

                         Include=%(MetaDataFile.Identity)>

                <Platform>$(Platform)</Platform>

                <Configuration>$(Configuration)</Configuration>

            </TestOutputs>

        </ItemGroup>

    </Target>

Das überschriebene Target ist dabei generisch und kann auch mit einer testrunconfig-Datei verwendet werden. Hat man diese Änderungen im Buildtypen vorgenommen, kann man den ersten Build anstoßen. Das Ergebnis sind mehrere Testläufe im Build, die je nach testrunconfig-Einstellungen z.B. auf unterschiedlichen VSTT-Controllern laufen (Abb. Testergebnisse im Build-Bericht).

Verwandte Artikel:

Benötigen Sie Unterstützung bei der Software-Entwicklung und Architektur von .NET basierten Lösungen oder bei Einführung und Anpassung von Visual Studio / Microsoft Test Manager / Team Foundation Server?

Wir stehen Ihnen unter info(at)aitgmbh.de gerne zur Verfügung.

Hinterlasse eine Antwort