Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Zorg ervoor dat u bekend bent met de basisuitvoering van TAEF- en weet hoe u Ontwerptests gebruiken, voordat u doorgaat met deze sectie. Mogelijk wilt u ook een overzicht van een voorbeeld van een gegevensgestuurde test doorlopen dat wordt vermeld in de gebruikershandleiding.
Scenario-Based Testen met TAEF
Wanneer u het hebt over testen op scenarioniveau, hebt u het echt over een reeks tests, waarbij het uitvoeren van de volgende test alleen zinvol is als de vorige test in het scenario is geslaagd. In sommige gevallen hebt u mogelijk niet eens alle informatie die u nodig hebt om de volgende test uit te voeren als de vorige test is mislukt. Om dit te bereiken, houdt TAEF de uitvoeringseenheid als een testmethode en maakt het testen van scenario's mogelijk, wat bekend staat als 'ExecutionGroup's. U kunt op scenario's gebaseerde tests in TAEF hebben, ongeacht of u nog andere functies hebt, zoals gegevensgestuurde tests. Als u uw scenario ontwerpt om gebruik te maken van gegevensgestuurde tests, kunt u gegevensgestuurde ondersteuning toepassen op klasseniveau met behulp van gegevensgestuurde klassefunctionaliteit die door TAEF wordt aangeboden. Door gegevensgestuurde ondersteuning toe te passen op klasseniveau, kunt u alle tests in uw klasse sequentieel laten uitvoeren voor elke rij.
Deze pagina richt zich op het opgeven van een reeks tests binnen een klasse als een ExecutionGroup.
Uitvoeringsgroepen
Voordat u uitvoeringsgroepen bespreekt, is het belangrijk om te weten dat in TAEF de volgorde van de uitvoering van tests binnen een klasse de volgorde is waarin u ze hebt gekwalificeerd als een TEST_METHOD(...) in het geval van systeemeigen code, of [TestMethod] eigenschap heeft toegevoegd vóór de methode in het geval van beheerde code. TAEF garandeert niet de volgorde van uitvoering van klassen zelf.
In scenariotests is het mogelijk niet voldoende om alleen de volgorde van uitvoering te garanderen. U moet ook garanderen dat alle vorige tests in het scenario zijn geslaagd voordat u verdergaat met de volgende test in het scenario. Hier zult u het concept 'ExecutionGroup' als nuttig ervaren.
Bekijk een origineel voorbeeld:
1 class ExecutionDependencyExample
2 {
3 BEGIN_TEST_CLASS(ExecutionDependencyExample)
4 TEST_CLASS_PROPERTY(L"ExecutionGroup", L"DependentTests")
5 END_TEST_CLASS()
6
7 TEST_METHOD(Test1)
8 {
9 Log::Comment(L"Test1 passes.");
10 }
11
12 TEST_METHOD(Test2)
13 {
14 Log::Comment(L"Test2 fails.");
15 VERIFY_ARE_EQUAL(2, 3);
16 }
17
18 TEST_METHOD(Test3)
19 {
20 Log::Comment(L"Test3 is blocked; so you shouldn't see this.");
21 }
22 };
Zie regel 4 in het bovenstaande C++-bestandsfragment. In dit specifieke geval kwalificeert u alle tests binnen de klasse ExecutionDependencyExample om tot een "ExecutionGroup" genaamd "DependentTests" te behoren. Dit betekent dat 'Test1', 'Test2' en 'Test3' deel uitmaken van de uitvoeringsgroep 'DependentTests'. Zoals eerder vermeld, wordt Test2 uitgevoerd als en alleen als Test1 wordt uitgevoerd en geslaagd. Op dezelfde manier zal Test3 alleen worden uitgevoerd als Test2 succesvol wordt uitgevoerd en geslaagd is.
U ziet dat Test2 is ontworpen om te mislukken (zie de regels 14 en 15 hierboven).
Omdat Test2 mislukt in onze "DependentTests" "ExecutionGroup", wordt Test3 niet uitgevoerd en wordt in plaats daarvan gemarkeerd als geblokkeerd. Hiermee kunt u proberen de bovenstaande test uit te voeren en te zien of dit inderdaad waar is.
te Examples\CPP.ExecutionDependency.Example.dll
Test Authoring and Execution Framework v2.93k for x86
StartGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test1
Test1 passes.
EndGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test1
[Passed]
StartGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test2
Test2 fails.
Error: Verify: AreEqual(2, 3) - Values (2, 3) [File: >f:source\executiondependencyexample\executiondependencyexample.cpp,
Function: WEX::TestExecution::Examples::ExecutionDependencyExample::Test2, Line:21]
EndGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test2[Failed]
StartGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test3
Blocked: This test belongs to an execution group and depends on the previous test being executed in the same environment successfully. The dependent test must be selected for execution, must request the same execution environment (e.g. 'ThreadingModel') and must be executed successfully.
EndGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test3 [Blocked]
Non-passing Tests:
WEX::TestExecution::Examples::ExecutionDependencyExample::Test2 [Failed]
WEX::TestExecution::Examples::ExecutionDependencyExample::Test3 [Blocked]
Summary: Total=3, Passed=1, Failed=1, Blocked=1, Not Run=0, Skipped=0
Zoals voorspeld, is Test1 geslaagd, Test2 mislukt en Test3 geblokkeerd. Met Test3 registreert TAEF een bericht waarin staat dat Test3 deel uitmaakt van een uitvoeringsgroep en de vorige test niet is uitgevoerd.
Dit foutbericht geeft ook aan dat alle tests voordat de huidige test wordt uitgevoerd die deel uitmaken van dezelfde ExecutionGroup moeten worden geselecteerd. Met andere woorden, als u alleen Test2 probeert uit te voeren met behulp van een selectiecriteria tijdens runtime, zult u merken dat Test2 wordt geblokkeerd omdat deze wordt uitgevoerd afhankelijk van Test1, die deel uitmaakt van dezelfde ExecutionGroup.
te Examples\CPP.ExecutionDependency.Example.dll /name:*Test2*
Test Authoring and Execution Framework v2.9.3k for x86
StartGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test2
Blocked: This test belongs to an execution group and depends on the previous test being executed in the same environment successfully. The dependent test must be selected for execution, must request the same execution environment (e.g. 'ThreadingModel') and must be executed successfully.
EndGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test2 [Blocked]
Summary: Total=1, Passed=0, Failed=0, Blocked=1, Not Run=0, Skipped=0
Als u echter Test1 selecteert, wat de eerste test in de ExecutionGroup is, wordt deze uitgevoerd.
te Examples\CPP.ExecutionDependency.Example.dll /name:*Test1*
Test Authoring and Execution Framework v2.9.3k for x86
StartGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test1
Test1 passes.
EndGroup: WEX::TestExecution::Examples::ExecutionDependencyExample::Test1 [Passed]
Summary: Total=1, Passed=1, Failed=0, Blocked=0, Not Run=0, Skipped=0
Als u tests hebt die niet tot de ExecutionGroup behoren, worden ze ook uitgevoerd, ongeacht het resultaat van de uitvoering van de tests binnen de ExecutionGroup. Het is ook mogelijk om meer dan één ExecutionGroup binnen een klasse te hebben. Houd er echter rekening mee dat ExecutionGroup niet tussen klassen kan worden verdeeld. Als u dit doet, worden ze in plaats daarvan beschouwd als twee afzonderlijke ExecutionGroups, één in elke klasse.
Het bericht zegt ook dat Test3 moet worden uitgevoerd in dezelfde omgeving als Test2. Laten we dit aspect in een beetje meer detail begrijpen. Aangezien een onderdeel van een ExecutionGroup echt betekent dat u deel uitmaakt van de op scenario's gebaseerde test, wordt het van cruciaal belang dat alle tests worden aangevraagd en dus worden uitgevoerd in dezelfde omgeving. Als het Threading-model bijvoorbeeld wordt gewijzigd in een ExecutionGroup, ziet u geblokkeerde tests. Als Test2 in het bovenstaande voorbeeld bijvoorbeeld is ontworpen om succesvol te worden uitgevoerd, maar de eigenschap 'ThreadingModel' is ingesteld op 'MTA', wordt Test3 nog steeds geblokkeerd.
Laten we eens kijken naar een ander voorbeeld: Voorbeelden\TAEF\CSharp\ExecutionDependentGroupsExample (raadpleeg de nieuwste TAEF release-share)
1 [TestClass]
2 public class CSharpExecutionDependentGroupsExample
3 {
4 //First Execution Group: Test1, Test2
5 [TestMethod]
6 [TestProperty("ExecutionGroup", "First Execution Group")]
7 public void Test1()
8 {
9 Log.Comment("Part of First Execution Group");
10 }
11 [TestMethod]
12 [TestProperty("ExecutionGroup", "First Execution Group")]
13 public void Test2()
14 {
15 Log.Comment("Part of First Execution Group");
16 }
17
18 //Second Execution Group: Test3, Test4. Test4 fails
19 [TestMethod]
20 [TestProperty("ExecutionGroup", "Second Execution Group")]
21 public void Test3()
22 {
23 Log.Comment("Part of Second Execution Group");
24 }
25 [TestMethod]
26 [TestProperty("ExecutionGroup", "Second Execution Group")]
27 public void Test4()
28 {
29 Log.Comment("Part of Second Execution Group - last in group fails");
30 Verify.IsTrue(false);
31 }
32
33 //Third Execution Group: Test5, Test6, Test7. Test6 fails, Test7 will be blocked.
34 [TestMethod]
35 [TestProperty("ExecutionGroup", "Third Execution Group")]
36 public void Test5()
37 {
38 Log.Comment("Part of Third Execution Group");
39 }
40 [TestMethod]
41 [TestProperty("ExecutionGroup", "Third Execution Group")]
42 public void Test6()
43 {
44 Log.Comment("Part of Third Execution Group - middle in this set of 3 fails");
45 Verify.IsTrue(false);
46 }
47 [TestMethod]
48 [TestProperty("ExecutionGroup", "Third Execution Group")]
49 public void Test7()
50 {
51 Log.Comment("Part of Third Execution Group");
52 }
53
54 //Fourth Execution Group: Test8, Test9
55 [TestMethod]
56 [TestProperty("ExecutionGroup", "Fourth Execution Group")]
57 public void Test8()
58 {
59 Log.Comment("Part of Fourth Execution Group");
60 }
61 [TestMethod]
62 [TestProperty("ExecutionGroup", "Fourth Execution Group")]
63 public void Test9()
64 {
65 Log.Comment("Part of Fourth Execution Group");
66 }
67 }
In dit voorbeeld zijn vier verschillende uitvoeringsgroepen:
- "First Execution Group" bevat Test1, Test2; beide moeten slagen.
- 'Second Execution Group' bevat Test3 en Test4. Test4 is de laatste test in deze ExecutionGroup en mislukt.
- 'Derde uitvoeringsgroep' bevat Test5, Test6 en Test7. Test5 wordt uitgevoerd en geslaagd, hoewel Test4 van de vorige ExecutionGroup is mislukt. Test6 is ontworpen om te mislukken, waardoor Test7 wordt geblokkeerd.
- De vierde uitvoeringsgroep bevat Test8 en Test9. Nogmaals, hoewel Test7 van de vorige ExecutionGroup was geblokkeerd omdat Test6 was mislukt, zal Test8 succesvol worden uitgevoerd en zal Test9 dat ook.
Om de ExecutionGroups in dit voorbeeld beter te begrijpen, gaan we de eigenschappen in dit voorbeeld vermelden.
te Examples\CSharp.ExecutionDependentGroups.Example.dll /listproperties
Test Authoring and Execution Framework v2.9.3k for x86
F:\ \Examples\CSharp.ExecutionDependentGroups.Example.dll
WEX.Examples.CSharpExecutionDependentGroupsExample
WEX.Examples.CSharpExecutionDependentGroupsExample.Test1
Property[ExecutionGroup] = First Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test2
Property[ExecutionGroup] = First Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test3
Property[ExecutionGroup] = Second Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test4
Property[ExecutionGroup] = Second Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test5
Property[ExecutionGroup] = Third Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test6
Property[ExecutionGroup] = Third Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test7
Property[ExecutionGroup] = Third Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test8
Property[ExecutionGroup] = Fourth Execution Group
WEX.Examples.CSharpExecutionDependentGroupsExample.Test9
Property[ExecutionGroup] = Fourth Execution Group
Wanneer u de bovenstaande test uitvoert, bevestigt de volgende uitvoer de voorspelde uitvoeringsvolgorde.
te Examples\CSharp.ExecutionDependentGroups.Example.dll
Test Authoring and Execution Framework v2.9.3k for x86
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test1
Part of First Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test1 [Passed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test2
Part of First Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test2 [Passed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test3
Part of Second Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test3 [Passed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test4
Part of Second Execution Group - last in group fails
Error: Verify: IsTrue [File: Need_Symbols, Function: Test4, Line: 0]
Error: [HRESULT: 0x80131604]. Operation failed: 'WEX.Examples.CSharpExecutionDependentGroupsExample.Test4'.
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test4 [Failed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test5
Part of Third Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test5 [Passed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test6
Part of Third Execution Group - middle in this set of 3 fails
Error: Verify: IsTrue [File: Need_Symbols, Function: Test6, Line: 0]
Error: [HRESULT: 0x80131604]. Operation failed: 'WEX.Examples.CSharpExecutionDependentGroupsExample.Test6'.
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test6 [Failed]
Error: WEX.Examples.CSharpExecutionDependentGroupsExample.Test7 belongs to an execution group and depends
on the previous test being executed in the same environment successfully.
Error: Please make sure that the dependent test is selected for execution, requests the same execution .
environment metadata(e.g. 'ThreadingModel') and that it executed successfully.
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test7
Blocked EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test7 [Blocked]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test8
Part of Fourth Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test8 [Passed]
StartGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test9
Part of Fourth Execution Group
EndGroup: WEX.Examples.CSharpExecutionDependentGroupsExample.Test9 [Passed]
Failed Tests:
WEX.Examples.CSharpExecutionDependentGroupsExample.Test4
WEX.Examples.CSharpExecutionDependentGroupsExample.Test6
Summary: Total=9, Passed=6, Failed=2, Blocked=1, Not Run=0, Skipped=0
U ziet dat de uitvoeringsvolgorde van de test is zoals verwacht.