使用C#创建CANoe测试环境

时间:2015-02-19 05:36:29

标签: c# xml visual-studio-2005 automated-tests

我想创建一个CANoe测试环境,该环境将执行以下操作:

  1. 运行并停止CANoe软件
  2. 解析XML文件(测试模块)并在GUI中显示列表
  3. 选择单个测试模块并执行测试模块
  4. 所以我完成了前两个。下面显示的脚本是我使用相应的配置文件执行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文件和所有文件合并。 我承认上面显示的片段可能令人困惑或者只是完全错误。忍受我,我在这方面完全陌生,只是做了试验和错误的方法。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

我终于想出了答案。以前,我让人们使用带有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);   
    }