Skip to content

Commit 1fba236

Browse files
authored
Merge pull request #8 from aquality-automation/feature/add-Reqnroll-plugin
Add Reqnroll Plugin
2 parents 9de58f5 + f3d51ec commit 1fba236

File tree

9 files changed

+201
-3
lines changed

9 files changed

+201
-3
lines changed

AqualityTracking.Integrations/AqualityTracking.Integrations.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{38B81A9B-FA2
99
EndProject
1010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AqualityTracking.SpecFlowPlugin", "src\AqualityTracking.SpecFlowPlugin\AqualityTracking.SpecFlowPlugin.csproj", "{80F5C607-A534-4629-9C5A-067522667610}"
1111
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AqualityTracking.ReqnrollPlugin", "src\AqualityTracking.ReqnrollPlugin\AqualityTracking.ReqnrollPlugin.csproj", "{5F06C9AD-6994-4602-A7DB-7E618440253B}"
13+
EndProject
1214
Global
1315
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1416
Debug|Any CPU = Debug|Any CPU
@@ -23,13 +25,18 @@ Global
2325
{80F5C607-A534-4629-9C5A-067522667610}.Debug|Any CPU.Build.0 = Debug|Any CPU
2426
{80F5C607-A534-4629-9C5A-067522667610}.Release|Any CPU.ActiveCfg = Release|Any CPU
2527
{80F5C607-A534-4629-9C5A-067522667610}.Release|Any CPU.Build.0 = Release|Any CPU
28+
{5F06C9AD-6994-4602-A7DB-7E618440253B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
29+
{5F06C9AD-6994-4602-A7DB-7E618440253B}.Debug|Any CPU.Build.0 = Debug|Any CPU
30+
{5F06C9AD-6994-4602-A7DB-7E618440253B}.Release|Any CPU.ActiveCfg = Release|Any CPU
31+
{5F06C9AD-6994-4602-A7DB-7E618440253B}.Release|Any CPU.Build.0 = Release|Any CPU
2632
EndGlobalSection
2733
GlobalSection(SolutionProperties) = preSolution
2834
HideSolutionNode = FALSE
2935
EndGlobalSection
3036
GlobalSection(NestedProjects) = preSolution
3137
{0FE70831-5707-48AA-AD1E-8EC02E04C177} = {38B81A9B-FA2A-425C-BEB5-40E69E0005CE}
3238
{80F5C607-A534-4629-9C5A-067522667610} = {38B81A9B-FA2A-425C-BEB5-40E69E0005CE}
39+
{5F06C9AD-6994-4602-A7DB-7E618440253B} = {38B81A9B-FA2A-425C-BEB5-40E69E0005CE}
3340
EndGlobalSection
3441
GlobalSection(ExtensibilityGlobals) = postSolution
3542
SolutionGuid = {CC3B552A-F385-48E0-8496-DE13B78ECAED}

AqualityTracking.Integrations/src/AqualityTracking.Integrations.Core/AqualityTracking.Integrations.Core.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5-
65
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
76
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
7+
<Version>1.1.0</Version>
88
<Authors>aquality automation committers</Authors>
99
<Company>aquality automation</Company>
1010
<Description>Aquality Tracking integration core for .NET test frameworks.</Description>
@@ -34,7 +34,7 @@
3434
<ItemGroup>
3535
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
3636
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.4" />
37-
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
37+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
3838
</ItemGroup>
3939

4040
</Project>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.0</TargetFramework>
5+
<Version>1.1.0</Version>
6+
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
7+
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
8+
<Authors>aquality automation committers</Authors>
9+
<Company>aquality automation</Company>
10+
<Description>Aquality Tracking integration for Reqnroll 2.4.1</Description>
11+
<PackageDescription>Aquality Tracking integration for Reqnroll 2.4.1</PackageDescription>
12+
<RepositoryUrl>https://github.com/aquality-automation/aquality-tracking-integrations-dotnet</RepositoryUrl>
13+
<RepositoryType>git</RepositoryType>
14+
<PackageTags>aquality-tracking</PackageTags>
15+
<PackageLicenseExpression></PackageLicenseExpression>
16+
<PackageLicenseFile>LICENSE</PackageLicenseFile>
17+
<Copyright>Copyright 2020 Aquality Automation</Copyright>
18+
<IsPackable>true</IsPackable>
19+
</PropertyGroup>
20+
21+
<ItemGroup>
22+
<Content Include="Resources\aqualityTracking.Template.json">
23+
<Pack>True</Pack>
24+
</Content>
25+
</ItemGroup>
26+
27+
<ItemGroup>
28+
<None Include="..\..\..\LICENSE">
29+
<Pack>True</Pack>
30+
<PackagePath></PackagePath>
31+
</None>
32+
</ItemGroup>
33+
34+
<ItemGroup>
35+
<ProjectReference Include="..\AqualityTracking.Integrations.Core\AqualityTracking.Integrations.Core.csproj" />
36+
</ItemGroup>
37+
38+
<ItemGroup>
39+
<PackageReference Include="Reqnroll" Version="2.4.1" />
40+
</ItemGroup>
41+
42+
</Project>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using AqualityTracking.Integrations.Core;
2+
using Reqnroll;
3+
4+
namespace AqualityTracking.ReqnrollPlugin
5+
{
6+
7+
[Binding]
8+
public class AqualityTrackingBindings
9+
{
10+
private static readonly AqualityTrackingLifecycle lifecycle = AqualityTrackingLifecycle.Instance;
11+
12+
private readonly FeatureContext featureContext;
13+
private readonly ScenarioContext scenarioContext;
14+
15+
public AqualityTrackingBindings(FeatureContext featureContext, ScenarioContext scenarioContext)
16+
{
17+
this.featureContext = featureContext;
18+
this.scenarioContext = scenarioContext;
19+
}
20+
21+
[BeforeTestRun]
22+
public static void StartTestRun()
23+
{
24+
lifecycle.StartTestRun();
25+
}
26+
27+
[AfterTestRun]
28+
public static void FinishTestRun()
29+
{
30+
lifecycle.FinishTestRun();
31+
}
32+
33+
[BeforeScenario(Order = 0)]
34+
public void StartTestExecution()
35+
{
36+
var testName = $"{featureContext.FeatureInfo.Title}: {scenarioContext.ScenarioInfo.Title}";
37+
lifecycle.StartTestExecution(testName);
38+
}
39+
40+
[AfterScenario(Order = int.MaxValue)]
41+
public void FinishTestExecution()
42+
{
43+
var testCaseResult = new TestCaseResultParser(scenarioContext.ScenarioExecutionStatus, scenarioContext.TestError).Parse();
44+
lifecycle.FinishTestExecution(testCaseResult.FinalResultId, testCaseResult.FailReason);
45+
}
46+
}
47+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Reqnroll.Plugins;
2+
using Reqnroll.UnitTestProvider;
3+
4+
[assembly: RuntimePlugin(typeof(AqualityTracking.ReqnrollPlugin.AqualityTrackingPlugin))]
5+
6+
namespace AqualityTracking.ReqnrollPlugin
7+
{
8+
public class AqualityTrackingPlugin : IRuntimePlugin
9+
{
10+
public void Initialize(RuntimePluginEvents runtimePluginEvents, RuntimePluginParameters runtimePluginParameters,
11+
UnitTestProviderConfiguration unitTestProviderConfiguration)
12+
{
13+
// Add Reqnroll customizations
14+
}
15+
}
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"enabled": true,
3+
"host": "{aquality_tracking_address}",
4+
"token": "{api_token}",
5+
"projectId": 0,
6+
"executor": "{name_of_executor}",
7+
"suiteName": "{name_of_test_suite}",
8+
"buildName": "{name_of_ci_build}",
9+
"environment": "{name_of_execution_environment}",
10+
"ciBuild": "{link_to_ci_build}",
11+
"debug": false
12+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using AqualityTracking.Integrations.Core;
2+
using System;
3+
using Reqnroll;
4+
5+
namespace AqualityTracking.ReqnrollPlugin
6+
{
7+
internal class TestCaseResultParser
8+
{
9+
private readonly ScenarioExecutionStatus executionStatus;
10+
private readonly Exception testError;
11+
12+
internal TestCaseResultParser(ScenarioExecutionStatus executionStatus, Exception testError)
13+
{
14+
this.executionStatus = executionStatus;
15+
this.testError = testError;
16+
}
17+
18+
internal TestCaseResult Parse()
19+
{
20+
var testCaseResult = new TestCaseResult();
21+
22+
switch (executionStatus)
23+
{
24+
case ScenarioExecutionStatus.OK:
25+
testCaseResult.FinalResultId = FinalResultId.Passed;
26+
break;
27+
case ScenarioExecutionStatus.TestError:
28+
testCaseResult.FinalResultId = FinalResultId.Failed;
29+
testCaseResult.FailReason = $"Message:{Environment.NewLine}{testError.Message}{Environment.NewLine}{Environment.NewLine}" +
30+
$"Stack Trace:{Environment.NewLine}{testError.StackTrace}";
31+
break;
32+
case ScenarioExecutionStatus.BindingError:
33+
case ScenarioExecutionStatus.StepDefinitionPending:
34+
testCaseResult.FinalResultId = FinalResultId.Failed;
35+
testCaseResult.FailReason = testError?.Message;
36+
break;
37+
case ScenarioExecutionStatus.UndefinedStep:
38+
testCaseResult.FinalResultId = FinalResultId.Failed;
39+
testCaseResult.FailReason = "No matching step definition found for one or more steps.";
40+
break;
41+
case ScenarioExecutionStatus.Skipped:
42+
testCaseResult.FinalResultId = FinalResultId.Pending;
43+
testCaseResult.FailReason = "Test skipped.";
44+
break;
45+
default:
46+
testCaseResult.FinalResultId = FinalResultId.NotExecuted;
47+
break;
48+
}
49+
50+
return testCaseResult;
51+
}
52+
}
53+
54+
internal class TestCaseResult
55+
{
56+
internal FinalResultId FinalResultId { get; set; }
57+
internal string FailReason { get; set; }
58+
}
59+
}

AqualityTracking.Integrations/src/AqualityTracking.SpecFlowPlugin/AqualityTracking.SpecFlowPlugin.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5-
5+
<Version>1.1.0</Version>
66
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
77
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
88
<Authors>aquality automation committers</Authors>

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
[![Build Status](https://dev.azure.com/aquality-automation/aquality-automation/_apis/build/status/aquality-automation.aquality-tracking-integrations-dotnet?branchName=master)](https://dev.azure.com/aquality-automation/aquality-automation/_build/latest?definitionId=15&branchName=master)
12
[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=aquality-automation_aquality-tracking-integrations-dotnet&metric=alert_status)](https://sonarcloud.io/dashboard?id=aquality-automation_aquality-tracking-integrations-dotnet)
23
[![NuGet](https://img.shields.io/nuget/v/AqualityTracking.Integrations.Core)](https://www.nuget.org/packages/AqualityTracking.Integrations.Core)
34

@@ -39,6 +40,20 @@ Add the following `stepDefinition` assembly to [specflow.json](https://specflow.
3940
]
4041
```
4142

43+
## Reqnroll [![NuGet](https://img.shields.io/nuget/v/AqualityTracking.ReqnrollPlugin)](https://www.nuget.org/packages/AqualityTracking.ReqnrollPlugin)
44+
45+
Currently supports [Reqnroll](https://reqnroll.net) 2.4.x.
46+
47+
Install [AqualityTracking.ReqnrollPlugin](https://www.nuget.org/packages/AqualityTracking.ReqnrollPlugin) NuGet package.
48+
49+
Add the following `stepDefinition` assembly to [reqnroll.json](https://docs.reqnroll.net/latest/installation/configuration.html).
50+
51+
```json
52+
"bindingAssemblies": [
53+
{ "assembly": "AqualityTracking.ReqnrollPlugin" }
54+
]
55+
```
56+
4257
### License
4358

4459
Library's source code is made available under the [Apache 2.0 license](https://github.com/aquality-automation/aquality-tracking-integrations-dotnet/blob/master/LICENSE).

0 commit comments

Comments
 (0)