使用C#创建CANoe测试环境
Create a CANoe test environment using C#
我想创建一个可以执行以下操作的 CANoe 测试环境:
- 运行 并停止 CANoe 软件
- 解析 XML 文件(测试模块)并在 GUI 中显示列表
- Select单独测试模块并执行测试模块
所以我完成了前两个。下面显示的脚本是我用相应的配置文件执行 CANoe 程序本身时所做的。 ConfigFile 字符串来自 OpenFileDialog 中的选定文件。
private void button1_Click(object sender, EventArgs e)
{
mApp = new CANoe.Application();
mMsr = (CANoe.Measurement)mApp.Measurement;
string ConfigFile = textBox1.Text;
try
{
mApp.Open(ConfigFile,true,true);
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
至于解析,我是用 Treeview 列表做的。所以数字 1 和 2 完成了。现在,我在第三部分,我不知道从哪里开始。
我已经尝试先选择一个特定节点并单击应该用于 运行 测试模块的按钮,但首先显示一个消息框。
private TreeNode selectedNode = null;
private void button3_Click(object sender, EventArgs e)
{
string testMod;
testMod = treeView1.SelectedNode.Text;
MessageBox.Show(treeView1.SelectedNode.Text);
}
我想用可能 运行 GUI 中列出的 XML 文件中的测试模块替换 MessageBox 方法。所以不是 MessageBox.Show(treeView1.SelectedNode.Text),它会是这样的:
string testMod;
testMod = treeView1.SelectedNode.Text;
if (mMsr != null) mMsr.Start();
CANoe.System sys = null;
CANoe.Namespaces nss = null;
CANoe.Namespace ns = null;
CANoe.Variables vars = null;
if (testMod = *the name of the test module*)
{
*//something like this*
sys = (CANoe.System)mApp.System;
nss = (CANoe.Namespaces)sys.Namespaces;
ns = (CANoe.Namespace)nss["_01_Test_Preparation"];
vars = (CANoe.Variables)ns.Variables;
mSysVar_start = (CANoe.Variable)vars["_01_01_Get_Dem_ID_start"];
mSysVar = (CANoe.Variable)vars["_01_01_Get_Dem_ID"];
mSysVar_start.Value = 1;
System.Threading.Thread.Sleep(1000);
mMsr.Start();
*//or something similar*
}
“01_Test_Preparation”是测试模块,而“01_01_Get_dem_ID_start”是测试用例。我必须弄清楚如何将这些与 xml 文件和所有内容结合起来。
我承认上面显示的片段可能令人困惑或完全错误。请耐心等待,我对此完全陌生,只是在做试错法。
提前致谢。
我终于想出了一个答案。以前,我问过人们如何使用带有 switch 的 foreach 语句。我想将 node.Name 的字符串与 xml 等于测试模块的情况下的字符串值进行比较。我得到了建议,很好的建议。这是结果:
private void RecurseTree(TreeNode node,string ParentNode)
{
CANoe.System sys = null;
CANoe.Namespaces nss = null;
CANoe.Namespace ns = null;
CANoe.Variables vars = null;
sys = (CANoe.System)mApp.System;
nss = (CANoe.Namespaces)sys.Namespaces;
if (node.Checked == true)
{
ns = (CANoe.Namespace)nss[ParentNode];
vars = (CANoe.Variables)ns.Variables;
mSysVar_start = (CANoe.Variable)vars[node.Name + "_start"];
mSysVar = (CANoe.Variable)vars[node.Name];
mSysVar_start.Value = 1;
int chk = 0;
System.Threading.Thread.Sleep(1000);
if ((int)mSysVar.Value != 0) while ((int)mSysVar.Value == 1 || (int)mSysVar.Value == 2) continue;
else chk = 1;
if ((int)mSysVar.Value==3||(int)mSysVar.Value==4 ||chk==1)
{
if (mMsr!=null) mMsr.Stop();
System.Threading.Thread.Sleep(1000);
if (mMsr!=null) mMsr.Start();
System.Threading.Thread.Sleep(1000);
}
}
foreach (TreeNode childNode in node.Nodes) RecurseTree(childNode, ParentNode);
}
private void msrstart_Click(object sender, EventArgs e)
{
if (mMsr != null) mMsr.Start();
foreach (TreeNode node in treeView1.Nodes) RecurseTree(node, node.Name);
}
我想创建一个可以执行以下操作的 CANoe 测试环境:
- 运行 并停止 CANoe 软件
- 解析 XML 文件(测试模块)并在 GUI 中显示列表
- Select单独测试模块并执行测试模块
所以我完成了前两个。下面显示的脚本是我用相应的配置文件执行 CANoe 程序本身时所做的。 ConfigFile 字符串来自 OpenFileDialog 中的选定文件。
private void button1_Click(object sender, EventArgs e)
{
mApp = new CANoe.Application();
mMsr = (CANoe.Measurement)mApp.Measurement;
string ConfigFile = textBox1.Text;
try
{
mApp.Open(ConfigFile,true,true);
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
至于解析,我是用 Treeview 列表做的。所以数字 1 和 2 完成了。现在,我在第三部分,我不知道从哪里开始。 我已经尝试先选择一个特定节点并单击应该用于 运行 测试模块的按钮,但首先显示一个消息框。
private TreeNode selectedNode = null;
private void button3_Click(object sender, EventArgs e)
{
string testMod;
testMod = treeView1.SelectedNode.Text;
MessageBox.Show(treeView1.SelectedNode.Text);
}
我想用可能 运行 GUI 中列出的 XML 文件中的测试模块替换 MessageBox 方法。所以不是 MessageBox.Show(treeView1.SelectedNode.Text),它会是这样的:
string testMod;
testMod = treeView1.SelectedNode.Text;
if (mMsr != null) mMsr.Start();
CANoe.System sys = null;
CANoe.Namespaces nss = null;
CANoe.Namespace ns = null;
CANoe.Variables vars = null;
if (testMod = *the name of the test module*)
{
*//something like this*
sys = (CANoe.System)mApp.System;
nss = (CANoe.Namespaces)sys.Namespaces;
ns = (CANoe.Namespace)nss["_01_Test_Preparation"];
vars = (CANoe.Variables)ns.Variables;
mSysVar_start = (CANoe.Variable)vars["_01_01_Get_Dem_ID_start"];
mSysVar = (CANoe.Variable)vars["_01_01_Get_Dem_ID"];
mSysVar_start.Value = 1;
System.Threading.Thread.Sleep(1000);
mMsr.Start();
*//or something similar*
}
“01_Test_Preparation”是测试模块,而“01_01_Get_dem_ID_start”是测试用例。我必须弄清楚如何将这些与 xml 文件和所有内容结合起来。 我承认上面显示的片段可能令人困惑或完全错误。请耐心等待,我对此完全陌生,只是在做试错法。
提前致谢。
我终于想出了一个答案。以前,我问过人们如何使用带有 switch 的 foreach 语句。我想将 node.Name 的字符串与 xml 等于测试模块的情况下的字符串值进行比较。我得到了建议,很好的建议。这是结果:
private void RecurseTree(TreeNode node,string ParentNode)
{
CANoe.System sys = null;
CANoe.Namespaces nss = null;
CANoe.Namespace ns = null;
CANoe.Variables vars = null;
sys = (CANoe.System)mApp.System;
nss = (CANoe.Namespaces)sys.Namespaces;
if (node.Checked == true)
{
ns = (CANoe.Namespace)nss[ParentNode];
vars = (CANoe.Variables)ns.Variables;
mSysVar_start = (CANoe.Variable)vars[node.Name + "_start"];
mSysVar = (CANoe.Variable)vars[node.Name];
mSysVar_start.Value = 1;
int chk = 0;
System.Threading.Thread.Sleep(1000);
if ((int)mSysVar.Value != 0) while ((int)mSysVar.Value == 1 || (int)mSysVar.Value == 2) continue;
else chk = 1;
if ((int)mSysVar.Value==3||(int)mSysVar.Value==4 ||chk==1)
{
if (mMsr!=null) mMsr.Stop();
System.Threading.Thread.Sleep(1000);
if (mMsr!=null) mMsr.Start();
System.Threading.Thread.Sleep(1000);
}
}
foreach (TreeNode childNode in node.Nodes) RecurseTree(childNode, ParentNode);
}
private void msrstart_Click(object sender, EventArgs e)
{
if (mMsr != null) mMsr.Start();
foreach (TreeNode node in treeView1.Nodes) RecurseTree(node, node.Name);
}