chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//Copyright 2012-2019 Keysight Technologies
//
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using OpenTap;
using OpenTap.Plugins.BasicSteps;
 
 
// This examples shows how to build, save and execute a test plan using TAP API.
namespace OpenTap.TestPlanExecution.BuildTestplan.Api
{
    class Program
    {
        static void Main()
        {
            // If you have plugins in directories different from the location of your OpenTAP installation, then add those directories here.
            // PluginManager.DirectoriesToSearch.Add(@"C:\SomeOtherDirectory");
 
            // Start finding plugins.
            PluginManager.SearchAsync();
 
            // Point to log file to be used.
            SessionLogs.Initialize("console_log.txt");
 
            // Create a new Test Plan.
            TestPlan myTestPlan = new TestPlan();
 
            // All Test Plan steps are added as child steps.
            myTestPlan.ChildTestSteps.Add(new DelayStep { DelaySecs = .1, Name = "Delay1"});
 
            // Sequences can be created and added to TestPlan.
            SequenceStep mySequenceStep = new SequenceStep();
            mySequenceStep.ChildTestSteps.Add(new DelayStep { DelaySecs = .2, Name = "Delay2"});
 
            LogStep logStep = new LogStep
            {
                Name = "SomeName",
                LogMessage = "Hello from myTestPlan at " + DateTime.Now.ToLongTimeString(),
                Severity = LogSeverity.Info
            };
            mySequenceStep.ChildTestSteps.Add(logStep); 
 
            // Sequences are added to the Test Plan like any other step.
            myTestPlan.ChildTestSteps.Add(mySequenceStep);
 
            // The Test Plan can be saved for later reuse.
            string myFilePath = Path.Combine(AssemblyDirectory, myTestPlan.Name + ".TapPlan");
            myTestPlan.Save(myFilePath);
 
            // Add any ResultListeners that should be used.
            // If not specified, a list of ResultListeners with a single LogResultListener will be created.
            // Alternatively, the ResultListeners could be defined in settings files.
            List<ResultListener> resultListeners = new List<ResultListener>();
            resultListeners.Add(new LogResultListener());
            //resultListeners.Add(new Keysight.OpenTap.Plugins.Csv.CsvResultListener());
 
            // Execute the TestPlan. This is the equivalent of the Run button in the TAP GUI.
            myTestPlan.Execute(resultListeners);
 
            // After the TestPlan has been run Macros, if used, can be expanded.
            SessionLogs.Rename(EngineSettings.Current.SessionLogPath.Expand(date: DateTime.Now));
 
            Console.WriteLine("This example builds a TestPlan programmatically.");
            Console.WriteLine("Press any key to exit.");
            Console.ReadLine();
 
        }
 
        public static string AssemblyDirectory
        {
            get
            {
                string codeBase = Assembly.GetExecutingAssembly().Location;
                UriBuilder uri = new UriBuilder(codeBase);
                string path = Uri.UnescapeDataString(uri.Path);
                return Path.GetDirectoryName(path);
            }
        }
    }
}