Sauce Labs with Azure DevOps
Azure DevOps (formerly Visual Studio Team Services or VSTS) is a Microsoft product that provides version control, reporting, requirements management, project management, automated builds, testing and release management capabilities.
What You'll Need
- A Sauce Labs account (Log in or sign up for a free trial license)
- Your Sauce Labs Username and Access Key
- An existing Azure DevOps pipeline
note
The Sauce Labs OnDemand plugin for Azure DevOps has been deprecated.
Using Azure DevOps
Follow the instructions below to integrate Sauce Labs testing into your Azure pipeline.
- Sign in to your Azure DevOps organization and go to your project.
- Go to Pipelines > New pipeline.
- Link the new pipeline to your repository (see Azure Pipelines Documentation for guidance). You'll likely need to provide permissions for Azure Pipelines to access your repository management system.
- Set your Sauce Labs username and access key as environment variables in your pipeline by clicking Pipeline > Variables, and then pasting the values of your username and access key.
- In your source code, you'll need to reference the Sauce Labs environment variables that you set in Azure DevOps. For example:
C# example
var sauceUserName = Environment.GetEnvironmentVariable("SAUCE_USERNAME");
var sauceAccessKey = Environment.GetEnvironmentVariable("SAUCE_ACCESS_KEY");
Create a YAML file using one of the templates below. You'll also need to reference your Sauce Labs environment variables here.
- Node.js
- Java
- C#
trigger:
- main
pool:
vmImage: ubuntu-latest
# Multiple pipelines can re-use variables
# that are stored in a variable group
variables:
- group: sauce-labs-variables
steps:
- task: NodeTool@0
inputs:
versionSpec: '14.x'
displayName: 'Install Node.js'
- script: |
# Navigate to the working directory
cd ./webdriverio/webdriver/examples/w3c/
# Install node packages
npm install
# Run tests on Sauce and enables a high level of logging for CI
npm run test.saucelabs.us -- --logLevel "debug"
|
env:
# Reads the value from 'sauceUsername' in Azure DevOps and
# stores it into SAUCE_USERNAME env variable
SAUCE_USERNAME: $(sauceUsername)
SAUCE_ACCESS_KEY: $(sauceAccessKey)
displayName: 'install and run WebdriverIO tests in Sauce Labs'# Build your Java project and run tests with Apache Maven.
trigger:
– main
pr:
– main
pool:
vmImage: 'ubuntu-latest'
# Sets the environment variables for the pipeline.
# We create a variable sauce_user and assign it a value of $(SAUCE_USERNAME), which comes from the Azure DevOps.
variables:
– name: sauce_user
value: $(SAUCE_USERNAME)
– name: sauce_key
value: $(SAUCE_ACCESS_KEY)
steps:
– bash: echo $SAUCE_USER
– bash: echo $SAUCE_KEY
# Builds and runs the tests in the Maven project.
– task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'pool:
name: Hosted VS2017
demands:
– msbuild
– visualstudio
– vstest
steps:
– script: set
displayName: print all variables
– task: NuGetToolInstaller@0
displayName: 'Use NuGet 4.4.1'
inputs:
versionSpec: 4.4.1
– task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '**\*.sln'
– task: VSBuild@1
displayName: 'Build solution'
inputs:
solution: '**\*.sln'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
logProjectEvents: true
– task: PowerShell@2
displayName: 'Set Sauce Environment Variables'
inputs:
targetType: filePath
filePath: ./setEnvironmentVariables.ps1
arguments: '$env:SAUCE_USER $env:SAUCE_KEY'
# Using powershell ##vso command to set an environment variable in the system
– powershell: |
Write-Host "Sauce Username stored in Azure DevOps variables is=>$($env:SAUCE_USER)";
Write-Host "Sauce Access Key stored in Azure DevOps variables is=>$($env:SAUCE_KEY)";
Write-Host "Sauce Username stored in Env variables is=>$($env:SAUCE_USERNAME)";
Write-Host "Sauce Access Key stored in Env variables is=>$($env:SAUCE_ACCESS_KEY)";
Write-Host "Sauce Build Repository URI stored in Env variables is=>$($env:BUILD_REPOSITORY_URI)";
|
# Checking to make sure that environment variables were set between yml tasks
– powershell: |
Write-Host "Sauce Username stored in Env Variables variables is=>$($env:SAUCE_USERNAME)";
Write-Host "Sauce Access Key stored in Azure DevOps variables is=>$($env:SAUCE_ACCESS_KEY)";
displayName: display env variables bw posh tasks
– task: VSTest@2
displayName: 'Run Best Practices Framework'
inputs:
searchFolder: '$(System.DefaultWorkingDirectory)'
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*Selenium*.dll
!**\SauceExamples\packages\*.dll
!**\packages\*.dll
testFiltercriteria: 'TestCategory=BestPractices'
runInParallel: true
codeCoverageEnabled: true
testRunTitle: 'NUnit Automation Framework'
rerunFailedTests: true
rerunFailedThreshold: 10
rerunMaxAttempts: 2
failOnMinTestsNotRun: true