VSTS Build - Choose which unit tests run depending on which files were modified in a pull request










2















I would like to control which unit tests run in a VSTS build pipeline based on which files were modified in the PR that triggered the pipeline.



Is there a way to detect which files were modified in a pull request during a VSTS build triggered for that PR, and then choose which tests to run based on that information?










share|improve this question


























    2















    I would like to control which unit tests run in a VSTS build pipeline based on which files were modified in the PR that triggered the pipeline.



    Is there a way to detect which files were modified in a pull request during a VSTS build triggered for that PR, and then choose which tests to run based on that information?










    share|improve this question
























      2












      2








      2








      I would like to control which unit tests run in a VSTS build pipeline based on which files were modified in the PR that triggered the pipeline.



      Is there a way to detect which files were modified in a pull request during a VSTS build triggered for that PR, and then choose which tests to run based on that information?










      share|improve this question














      I would like to control which unit tests run in a VSTS build pipeline based on which files were modified in the PR that triggered the pipeline.



      Is there a way to detect which files were modified in a pull request during a VSTS build triggered for that PR, and then choose which tests to run based on that information?







      continuous-integration azure-devops azure-pipelines azure-pipelines-release-pipeline






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 '18 at 5:08









      DanJosefDanJosef

      173213




      173213






















          1 Answer
          1






          active

          oldest

          votes


















          1














          Yes, this is possible:



          Manual Approach



          One approach to this is to have a custom Powershell task in your pipeline that sets a variable based on whether a certain file was changed in the last commit. So you might have a pipeline like this:



          Example build pipeline



          Your 'Set criteria for files in last commit' step would contain an inline powershell script to set a Build variable depending on whether a certain string was within the list of files from the last commit, where 'YOURFILE.cs' is the file you are interested in (you could replace this with any logic):



          $ChangedFiles = & git show --pretty="" --name-only

          if ($ChangedFiles -like '*YOURFILE.cs*')
          Write-Output ("##vso[task.setvariable variable=RunTests;]true")

          else
          Write-Output ("##vso[task.setvariable variable=RunTests;]false")



          Then, in your 'Run tests' step, you can set a conditional control option which will look at this variable to decide whether or not to run that set of tests:



          Custom control option



          Visual Studio Test Impact Analysis



          If you are using the Visual Studio Test task to run your tests, there is also a built in option to only run the tests that are impacted by the build, via the Test Impact Analysis feature.



          Impacted tests



          This may be of use to you but doesn't directly answer your specific question and has a wider scope. More information is available on the Azure Devops documentation pages






          share|improve this answer

























          • This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

            – DanJosef
            Dec 20 '18 at 0:37










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331777%2fvsts-build-choose-which-unit-tests-run-depending-on-which-files-were-modified%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Yes, this is possible:



          Manual Approach



          One approach to this is to have a custom Powershell task in your pipeline that sets a variable based on whether a certain file was changed in the last commit. So you might have a pipeline like this:



          Example build pipeline



          Your 'Set criteria for files in last commit' step would contain an inline powershell script to set a Build variable depending on whether a certain string was within the list of files from the last commit, where 'YOURFILE.cs' is the file you are interested in (you could replace this with any logic):



          $ChangedFiles = & git show --pretty="" --name-only

          if ($ChangedFiles -like '*YOURFILE.cs*')
          Write-Output ("##vso[task.setvariable variable=RunTests;]true")

          else
          Write-Output ("##vso[task.setvariable variable=RunTests;]false")



          Then, in your 'Run tests' step, you can set a conditional control option which will look at this variable to decide whether or not to run that set of tests:



          Custom control option



          Visual Studio Test Impact Analysis



          If you are using the Visual Studio Test task to run your tests, there is also a built in option to only run the tests that are impacted by the build, via the Test Impact Analysis feature.



          Impacted tests



          This may be of use to you but doesn't directly answer your specific question and has a wider scope. More information is available on the Azure Devops documentation pages






          share|improve this answer

























          • This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

            – DanJosef
            Dec 20 '18 at 0:37















          1














          Yes, this is possible:



          Manual Approach



          One approach to this is to have a custom Powershell task in your pipeline that sets a variable based on whether a certain file was changed in the last commit. So you might have a pipeline like this:



          Example build pipeline



          Your 'Set criteria for files in last commit' step would contain an inline powershell script to set a Build variable depending on whether a certain string was within the list of files from the last commit, where 'YOURFILE.cs' is the file you are interested in (you could replace this with any logic):



          $ChangedFiles = & git show --pretty="" --name-only

          if ($ChangedFiles -like '*YOURFILE.cs*')
          Write-Output ("##vso[task.setvariable variable=RunTests;]true")

          else
          Write-Output ("##vso[task.setvariable variable=RunTests;]false")



          Then, in your 'Run tests' step, you can set a conditional control option which will look at this variable to decide whether or not to run that set of tests:



          Custom control option



          Visual Studio Test Impact Analysis



          If you are using the Visual Studio Test task to run your tests, there is also a built in option to only run the tests that are impacted by the build, via the Test Impact Analysis feature.



          Impacted tests



          This may be of use to you but doesn't directly answer your specific question and has a wider scope. More information is available on the Azure Devops documentation pages






          share|improve this answer

























          • This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

            – DanJosef
            Dec 20 '18 at 0:37













          1












          1








          1







          Yes, this is possible:



          Manual Approach



          One approach to this is to have a custom Powershell task in your pipeline that sets a variable based on whether a certain file was changed in the last commit. So you might have a pipeline like this:



          Example build pipeline



          Your 'Set criteria for files in last commit' step would contain an inline powershell script to set a Build variable depending on whether a certain string was within the list of files from the last commit, where 'YOURFILE.cs' is the file you are interested in (you could replace this with any logic):



          $ChangedFiles = & git show --pretty="" --name-only

          if ($ChangedFiles -like '*YOURFILE.cs*')
          Write-Output ("##vso[task.setvariable variable=RunTests;]true")

          else
          Write-Output ("##vso[task.setvariable variable=RunTests;]false")



          Then, in your 'Run tests' step, you can set a conditional control option which will look at this variable to decide whether or not to run that set of tests:



          Custom control option



          Visual Studio Test Impact Analysis



          If you are using the Visual Studio Test task to run your tests, there is also a built in option to only run the tests that are impacted by the build, via the Test Impact Analysis feature.



          Impacted tests



          This may be of use to you but doesn't directly answer your specific question and has a wider scope. More information is available on the Azure Devops documentation pages






          share|improve this answer















          Yes, this is possible:



          Manual Approach



          One approach to this is to have a custom Powershell task in your pipeline that sets a variable based on whether a certain file was changed in the last commit. So you might have a pipeline like this:



          Example build pipeline



          Your 'Set criteria for files in last commit' step would contain an inline powershell script to set a Build variable depending on whether a certain string was within the list of files from the last commit, where 'YOURFILE.cs' is the file you are interested in (you could replace this with any logic):



          $ChangedFiles = & git show --pretty="" --name-only

          if ($ChangedFiles -like '*YOURFILE.cs*')
          Write-Output ("##vso[task.setvariable variable=RunTests;]true")

          else
          Write-Output ("##vso[task.setvariable variable=RunTests;]false")



          Then, in your 'Run tests' step, you can set a conditional control option which will look at this variable to decide whether or not to run that set of tests:



          Custom control option



          Visual Studio Test Impact Analysis



          If you are using the Visual Studio Test task to run your tests, there is also a built in option to only run the tests that are impacted by the build, via the Test Impact Analysis feature.



          Impacted tests



          This may be of use to you but doesn't directly answer your specific question and has a wider scope. More information is available on the Azure Devops documentation pages







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 18 '18 at 6:51

























          answered Nov 16 '18 at 11:01









          ThomasThomas

          189110




          189110












          • This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

            – DanJosef
            Dec 20 '18 at 0:37

















          • This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

            – DanJosef
            Dec 20 '18 at 0:37
















          This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

          – DanJosef
          Dec 20 '18 at 0:37





          This is close to what I intend. If I read your "manual" answer correctly, it will run ALL tests in a project if particular files are modified in the commit. Is there some way to specify a list of tests instead? In other words, I want the output of the Powershell script to be a list of the test methods to run. For example: If file "foo.cs" is modified, then run test method "foo_test". If file "bar.*.cs" is mofified, then run test methods "bar_*_test".

          – DanJosef
          Dec 20 '18 at 0:37



















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331777%2fvsts-build-choose-which-unit-tests-run-depending-on-which-files-were-modified%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Top Tejano songwriter Luis Silva dead of heart attack at 64

          ReactJS Fetched API data displays live - need Data displayed static

          Evgeni Malkin