VSTS Build - Choose which unit tests run depending on which files were modified in a pull request
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
add a comment |
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
add a comment |
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
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
continuous-integration azure-devops azure-pipelines azure-pipelines-release-pipeline
asked Nov 16 '18 at 5:08
DanJosefDanJosef
173213
173213
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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:
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:
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.
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
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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:
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:
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.
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
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
add a comment |
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:
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:
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.
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
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
add a comment |
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:
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:
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.
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
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:
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:
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.
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
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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