tag 标签: python

相关帖子
相关博文
  • 热度 1
    2022-8-29 10:07
    581 次阅读|
    0 个评论
    接上期: 支持Python的新版vTESTstudio 7.0测试用例编写方法大集合(上)-面包板社区 (eet-china.com) 测试用例编辑方法 Method 2 T est T able Test Table 是我们常见的也是大多数工程师正在使用的一种编辑方式,他的好处在于对于初学者很友好,上手比较简单。 图 15 Test Table 编辑界面 在Test Table中拥有许多指令,都是可以直接用。只需要按照要求在输入区进行输入,编译成功后,在我们的CANoe中就可以进行自动化测试了。 图 16 Test Commands 1 图 17 Test Commands 2 Method 3 T est S equence D iagram Test Sequence Diagram 顾名思义它是一种序列图形式的编辑方式,他的好处在于对整个测试用例而言让人看上去很直观,但是操作上面就要稍微比Test Table要难了。 图 18 Test Sequence Diagram编辑区 在Test Sequence Diagram的编辑取中集成了许多的控件,这些控件就是我们搭建序列图的关键,可以让我们灵活使用。输入区的操作和Test Table类似,也需要去使用Test Commands中的函数去进行输入。 Test Sequence Diagram还拥有Path View,把我们序列图方式写出来的测试用例表格化,方便编写人员的检查工作。 图 19 Test Sequence Diagram中Path View Method 4 S tate D iagram State Diagram状态机的编辑方式,他对整个State Diagram中编写的路径,全部至少遍历一次和转移路径的总数最少,尽可能避免已经走过的路径。 图 20 State Diagram编辑区 State Diagram也是有Path View界面。 图 21 State Diagram中Path View State Diagram的路径介绍: 1.从Initial元素开始,先进入一个分支,进而进入更深层的分支; 2.走遍周围所有的还没有走过的迁移,直到a、b、c任意一个条件满足: a) 到达Final元素; b) 到达了一个已经进入过的State(即形成了循环); c) 周围已经没有未经历过的迁移(即形成了循环); 3.在b和c条件下,路径选择将会以尽快到达Final元素为目标执行 图 22 测试用例路径 输入区的操作和Test Table类似,也需要去使用Test Commands中的函数去进行输入。 Method 5 CAPL F ile CAPL File就是用CANoe独有的编程语言进行测试用例的编辑,使用这种方式就要求编辑人员对CAPL编程要精通,用纯CAPL的形式编辑出来导入到Test Table中。 图 23 CAPL编辑区域 图 24 CAPL编辑测试用例 把测试用例导入到Test Table才可以执行哦! 图 25 CAPL测试用例导入Test Table Method 6 C# F ile C# File就是用C#进行测试用例的编辑,这就对C#精通的工程师比较友好,用C#的形式编辑出来导入到Test Table中。 图 26 C#编辑区域 图 27 C#编辑测试用例 把测试用例导入到Test Table才可以执行哦! 图 28 C#测试用例导入Test Table 总结: vTESTstudio作为一款编辑测试用例的软件,具有高覆盖度及复用性、变体及追踪特性、编辑形式多样、易于后期的维护等优点。并且vTESTstudio与CANoe联合使用,使得自动化测试更加的方便快捷。北汇信息作为Vector的合作伙伴,已为多家OEM/Tier1定制部件级功能测试系统(包括车身域控制器,及传统分布式控制器功能测试开发),提供系统级及实车级测试验证服务,期待交流分享和合作的机会。
  • 热度 2
    2022-6-5 20:45
    1114 次阅读|
    0 个评论
    随着软件开发在造车行业中占有越来越重要的地位,敏捷开发的思想在造车领域中也逐渐地被重视起来,随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇信息在自动化测试方面的丰富经验,简单介绍一下实施自动化测试可能需要具备的技能及具体实践流程。 自动化测试城门 -Python 要实现完全的自动化测试,我们首先要做的是先实现半自动化测试,即编写自动化测试脚本。俗话说Life is short,I use Python,Python作为一种简单易上手的高级编程语言,凭借其“无所不包”的库,成为测试脚本开发的不二之选。这里简单介绍一下,测试脚本开发常用的一些Python标准库。 城门士卒-os库 在编写测试脚本时,不可避免地会遇到对文件路径的获取及编辑,os库里的path函数可以方便地实现这些操作,如绝对路径获取os.path.abspath()、路径拼接os.path.join()、路径存在判断os.path.exist()等;如果你需要在Python中运行测试工具提供的命令,那么os库的system函数或popen函数可以让你方便地调用cmd(Windows)或shell(Linux)。 城门士卒-sys库 如果你所编写的测试脚本有跨平台运行的需求,那么你可以通过sys库的platform函数获取脚本的运行环境。根据运行环境的不同,编写不同的批处理命令;sys库中的argv函数,还可以为你的测试脚本提供简单的命令行接口,当你的脚本需要接收外部传递的参数时,你可以通过sys.argv .attributes.getNamedItem( "lang" ).nodeValue 获取第一个标签为title的元素的文本信息的代码如下: root.getElementsByTagName( "title" ) .firstChild.data 瓮城参将——XML修改 XML元素的属性和文本内容修改很简单,在上小节中获取对应的元素信息后,直接对其进行赋值即可。但是,修改后的信息保存在XML对象中。要完成对实际XML文件的修改,我们还需要用XML对象中的内容覆盖原有的XML文件,这一步存在很多棘手的问题。 在XML文件中,为了避免元素文本内容中存在的特殊字符引起解析器错误,在文本内容中引入 实体引用 来替代可能导致错误的字符,如回车、双引号 " 、单引号 ' 。如果使用python的xml.dom.minidom库解析并使用writexml输出XML文件,该库会将这些 实体引用 转义为其实际字符进行保存。如果不对XML对象中的内容进行处理,导出的XML文件将会存在很多错误。 为了避免这个情况的出现,我们需要使用之前小节介绍的正则表达式将这些字符再替换为其实体引用。这个过程需要我们能熟练使用正则表达式进行文本查找与替换。 除了XML文件中的实体引用外,如果XML文件中存在中文字符,那么还有一个需要注意的事情:不要使用with open as的方式读写XML文件,要使用open指定文件的编码为'utf-8’ 的方式,对XML文件进行写入。如下所示: f = open ( self .JenkinsJobXMLPath , 'w' , encoding = "utf-8" ) dom.writexml(f , indent = '' , addindent = ' \t ' , newl = '' , encoding = 'utf-8' ) f.close() 小结 上述两个问题是修改XML文件时普遍会遇到的问题。解决了这两个问题,我们基本上就可以完美实现XML文件的修改了。此时,我们就可以编写自动化程度更高的测试脚本,然而我们依然无法实现完全的自动化测试,因为我们仍然需要手动地去执行测试脚本。那么,我们该如何实现测试脚本的自动执行呢?这就需要我们打通自动化测试的最后一个关卡,Jenkins。 自动化测试总兵—— Jenkins Jenkins 是一个 开源、免费 的可扩展持续集成引擎,主要用于: • 持续、自动地构建/测试软件项目; • 监控一些定时执行的任务。 为了实现测试脚本的自动化运行,我们需要配置JenkinsJob,使Jenkins在设置的触发条件满足时,自动搭建测试脚本的运行环境,然后执行测试脚本,最后将测试结果发送给相关人员。因此我们需要了解Jenkins的源码管理、构建触发器、构建及邮件通知等设置。 总兵的连招1——源码管理 Jenkins服务器最基本的作用是监视版本控制器,当版本库有新的更改时,检出版本库中的文件,或者,你可以选择只是定期检出版本库中最新的文件。无论哪种方式,Jenkins与版本控制软件的集成是必不可少的。 Jenkins开箱即用式支持Git、CVS和SVN,还通过插件与大量其他版本控制工具进行集成,如ClearCase、Perforce、PVCS等等。 不同的版本控制软件在Jenkins端的需要的配置并不相同,有的甚至差异很大。但是只要你熟悉你所使用的版本控制软件,那么在Jenkins端,就可以很容易地对版本库进行配置。 以SVN为例,为了从SVN仓库中获取源码,我们需要提供相应SVN版本库的URL,在完成URL输入后,Jenkins会检查URL的有效性,如果所提供的URL要求身份认证,Jenkins将会自动提示选择相应的凭据以验证账号信息,如下图所示。 默认情况下,Jenkins会将给定的代码库中的文件检出到Jenkins Job的Workspace中。如果你需要将代码库检出到指定的目录中,你可以在 Local module directory 中输入你想要的目录名或相对Workspace的路径。 如果你需要从多个SVN版本库中获取文件,可以点击“Add module ...”按钮,来添加别的版本库。 总兵的连招2——构建触发器 常用的构建触发器有 周期性构建 和 SCM轮询构建 ,两者都是使用相同corn风格语法进行设置,如下图所示。 我们只需要了解corn风格的语法,就可以方便地进行构建触发器的设置。corn风格的语法包含五个由空格分隔的字段: MINUTE HOUR DOM MONTH DOW 每个字段使用下面的值: MINUTE 小时内的分钟数(0-59) HOUR 一天的小时数(0-23) DOM 本月的天数(1-31) MONTH 月份(1-12) DOW 本周的一天(0-7),其中0和7都是星期日。 要为一个字段指定多个值,可以使用以下操作符: ▲“*”代表一个字段的所有可能的值。如,“* * ** *”表示周期为一分钟; ▲使用“M-N”定义范围。如,在DOW中“1-5”表示周一到周五; ▲使用“/”定义范围间隔时间。如,MINUTE字段“*/5”表示每5分钟; ▲ 逗号分隔的列表表示有效值。如,MINUTE字段“15,45”表示在每小时的第15和第45分钟运行。 总兵的连招3——构建 在完成了之前的配置后,Jenkins应该知道 在何时从何处 获取测试工程及源码。现在我们需要做的事情是,告诉Jenkins在获取测试工程和源码后该如何做。一般情况下,我们会将之前编写的测试脚本放在测试工程的版本库中,或者从专门的测试脚本库中检出到Jenkins Job的Workspace中,因此我们在这里只需要执行编写好的测试脚本即可。 执行脚本的方式可以根据具体脚本的运行环境,选择执行Shell或Windows批处理命令。因此我们需要简单地了解Shell或Windows的常用批处理命令。为了避免编写复杂的批处理命令,我们应尽量把工作放在测试脚本中完成。本文以如下图所示的简单的Windows批处理为例,简单介绍一下构建步骤的编写。 在上图中,有两行命令: 第一行的作用是将目录由初始的Workspace目录切换到Workspace下的Script目录; 第二行的作用是运行Script目录中的测试脚本Script.py,并为该脚本传递一个参数,该参数为Jenkins的环境变量JOB_NAME,即当前Jenkins Job的名称。 这样就完成了对测试脚本的调用。 总兵的连招4——邮件通知 自动化测试的一个重要环节,就是将测试结果通知到相关人员,如开发\测试人员,或项目管理人员等。Jenkins对电子邮件提供了开箱即用的支持,我们可以在 构建后处理 中勾选 E-mail Notification ,如下图所示。然后输入需要通知的人员邮箱,即可使Jenkins在构建完成后,向指定的人员发送一封友好的电子邮件。 如果你想对邮件内容进行高度定制,那么E-mailNotification就无法满足需求,我们需要安装可编辑的电子邮件插件Editable EmailNotification,来实现电子邮件的定制化工作。 在Editable EmailNotification中,我们可以用HTML编写电子邮件的内容,并引用Jenkins的环境变量,这样我们就可以在邮件中描述当前Jenkins Job的测试执行概况,让收件人快速地了解当前的测试状态。但是这要求我们对HTML和Jenkins环境变量都有比较深的了解。 有些情况下,我们需要在邮件中执行一些数据提取等复杂工作,比如将控制台输出中的一些数据在邮件中进行展示,这时我们需要借助email-ext-plugin插件提供的Groovy接口,用Groovy编写邮件内容。 总之,Jenkins的邮件通知功能非常强大,我们可以在自动化测试的工作中不断进行探索。 小结 本节简单介绍了Jenkins的传统表单类型的Freestyle Job,然而目前Jenkins的发展方向是 Pipeline Job,Jenkins将Pipeline作为优先开发项目。这就意味着Pipeline在应用程序中是作为实体被设计和支持的,而不是通过在Jenkins中连接一堆任务而形成流水线。Pipeline类型的Job可以通过编程实现,可以实现更复杂构建逻辑和工作流,更重要的是在Pipeline中有专门的用于流水线编程的结构化DSL,其可以在工作空间中轻松地实现文件共享功能。同时Pipeline具有全新的Jenkins可视化界面 ——Blue Ocean,其为Pipeline的每个阶段添加了图形化的展示,如下图所示。 因此我们在熟悉了表单类型的 Freestyle Job后,可以尝试将其转换为Pipeline的Job,当然目前并非所有的Jenkins插件都支持Pipeline,有些老旧的插件还无法支持Pipeline,我们需要根据实际的工作情况进行Jenkins工程类型的选择。 攻城总结 古人云:知所不豫,行且通焉。虽然通过本文,我们全面地了解了自动化测试的流程,但是只有在自动化测试的实践中不断探索,我们才能真正窥得自动化测试的全貌。北汇信息作为专业的自动化测试服务供应商,也可以为客户提供优质全面的自动化测试服务。 、 、 、 。每个子元素都包含一个 文本内容 ,但只有子元素title和元素book拥有 属性 。 我们在解析XML时,一般需要获取的就是元素的 属性值 以及元素的 文本内容。 以下我们就简单介绍一下,如何通过python获取元素的属性值及文本内容。 Python 的XML库提供了一个通过标签名称获取元素的函数getElementsByTagName(),该函数返回的是一个包含元素对象的list,通过调用元素对象的attributes方法,我们就可以方便地获取元素的属性值。如,我们可以使用如下命令获取XML文件中第一个标签为title的lang属性值: root.getElementsByTagName("title") .attributes.getNamedItem( "lang" ).nodeValue 获取第一个标签为title的元素的文本信息的代码如下: root.getElementsByTagName( "title" ) .firstChild.data 瓮城参将——XML修改 XML元素的属性和文本内容修改很简单,在上小节中获取对应的元素信息后,直接对其进行赋值即可。但是,修改后的信息保存在XML对象中。要完成对实际XML文件的修改,我们还需要用XML对象中的内容覆盖原有的XML文件,这一步存在很多棘手的问题。 在XML文件中,为了避免元素文本内容中存在的特殊字符引起解析器错误,在文本内容中引入 实体引用 来替代可能导致错误的字符,如回车、双引号 " 、单引号 ' 。如果使用python的xml.dom.minidom库解析并使用writexml输出XML文件,该库会将这些 实体引用 转义为其实际字符进行保存。如果不对XML对象中的内容进行处理,导出的XML文件将会存在很多错误。 为了避免这个情况的出现,我们需要使用之前小节介绍的正则表达式将这些字符再替换为其实体引用。这个过程需要我们能熟练使用正则表达式进行文本查找与替换。 除了XML文件中的实体引用外,如果XML文件中存在中文字符,那么还有一个需要注意的事情:不要使用with open as的方式读写XML文件,要使用open指定文件的编码为'utf-8’ 的方式,对XML文件进行写入。如下所示: f = open ( self .JenkinsJobXMLPath , 'w' , encoding = "utf-8" ) dom.writexml(f , indent = '' , addindent = ' \t ' , newl = '' , encoding = 'utf-8' ) f.close() 小结 上述两个问题是修改XML文件时普遍会遇到的问题。解决了这两个问题,我们基本上就可以完美实现XML文件的修改了。此时,我们就可以编写自动化程度更高的测试脚本,然而我们依然无法实现完全的自动化测试,因为我们仍然需要手动地去执行测试脚本。那么,我们该如何实现测试脚本的自动执行呢?这就需要我们打通自动化测试的最后一个关卡,Jenkins。 自动化测试总兵—— Jenkins Jenkins 是一个 开源、免费 的可扩展持续集成引擎,主要用于: • 持续、自动地构建/测试软件项目; • 监控一些定时执行的任务。 为了实现测试脚本的自动化运行,我们需要配置JenkinsJob,使Jenkins在设置的触发条件满足时,自动搭建测试脚本的运行环境,然后执行测试脚本,最后将测试结果发送给相关人员。因此我们需要了解Jenkins的源码管理、构建触发器、构建及邮件通知等设置。 总兵的连招1——源码管理 Jenkins服务器最基本的作用是监视版本控制器,当版本库有新的更改时,检出版本库中的文件,或者,你可以选择只是定期检出版本库中最新的文件。无论哪种方式,Jenkins与版本控制软件的集成是必不可少的。 Jenkins开箱即用式支持Git、CVS和SVN,还通过插件与大量其他版本控制工具进行集成,如ClearCase、Perforce、PVCS等等。 不同的版本控制软件在Jenkins端的需要的配置并不相同,有的甚至差异很大。但是只要你熟悉你所使用的版本控制软件,那么在Jenkins端,就可以很容易地对版本库进行配置。 以SVN为例,为了从SVN仓库中获取源码,我们需要提供相应SVN版本库的URL,在完成URL输入后,Jenkins会检查URL的有效性,如果所提供的URL要求身份认证,Jenkins将会自动提示选择相应的凭据以验证账号信息,如下图所示。 默认情况下,Jenkins会将给定的代码库中的文件检出到Jenkins Job的Workspace中。如果你需要将代码库检出到指定的目录中,你可以在 Local module directory 中输入你想要的目录名或相对Workspace的路径。 如果你需要从多个SVN版本库中获取文件,可以点击“Add module ...”按钮,来添加别的版本库。 总兵的连招2——构建触发器 常用的构建触发器有 周期性构建 和 SCM轮询构建 ,两者都是使用相同corn风格语法进行设置,如下图所示。 我们只需要了解corn风格的语法,就可以方便地进行构建触发器的设置。corn风格的语法包含五个由空格分隔的字段: MINUTE HOUR DOM MONTH DOW 每个字段使用下面的值: MINUTE 小时内的分钟数(0-59) HOUR 一天的小时数(0-23) DOM 本月的天数(1-31) MONTH 月份(1-12) DOW 本周的一天(0-7),其中0和7都是星期日。 要为一个字段指定多个值,可以使用以下操作符: ▲“*”代表一个字段的所有可能的值。如,“* * ** *”表示周期为一分钟; ▲使用“M-N”定义范围。如,在DOW中“1-5”表示周一到周五; ▲使用“/”定义范围间隔时间。如,MINUTE字段“*/5”表示每5分钟; ▲ 逗号分隔的列表表示有效值。如,MINUTE字段“15,45”表示在每小时的第15和第45分钟运行。 总兵的连招3——构建 在完成了之前的配置后,Jenkins应该知道 在何时从何处 获取测试工程及源码。现在我们需要做的事情是,告诉Jenkins在获取测试工程和源码后该如何做。一般情况下,我们会将之前编写的测试脚本放在测试工程的版本库中,或者从专门的测试脚本库中检出到Jenkins Job的Workspace中,因此我们在这里只需要执行编写好的测试脚本即可。 执行脚本的方式可以根据具体脚本的运行环境,选择执行Shell或Windows批处理命令。因此我们需要简单地了解Shell或Windows的常用批处理命令。为了避免编写复杂的批处理命令,我们应尽量把工作放在测试脚本中完成。本文以如下图所示的简单的Windows批处理为例,简单介绍一下构建步骤的编写。 在上图中,有两行命令: 第一行的作用是将目录由初始的Workspace目录切换到Workspace下的Script目录; 第二行的作用是运行Script目录中的测试脚本Script.py,并为该脚本传递一个参数,该参数为Jenkins的环境变量JOB_NAME,即当前Jenkins Job的名称。 这样就完成了对测试脚本的调用。 总兵的连招4——邮件通知 自动化测试的一个重要环节,就是将测试结果通知到相关人员,如开发\测试人员,或项目管理人员等。Jenkins对电子邮件提供了开箱即用的支持,我们可以在 构建后处理 中勾选 E-mail Notification ,如下图所示。然后输入需要通知的人员邮箱,即可使Jenkins在构建完成后,向指定的人员发送一封友好的电子邮件。 如果你想对邮件内容进行高度定制,那么E-mailNotification就无法满足需求,我们需要安装可编辑的电子邮件插件Editable EmailNotification,来实现电子邮件的定制化工作。 在Editable EmailNotification中,我们可以用HTML编写电子邮件的内容,并引用Jenkins的环境变量,这样我们就可以在邮件中描述当前Jenkins Job的测试执行概况,让收件人快速地了解当前的测试状态。但是这要求我们对HTML和Jenkins环境变量都有比较深的了解。 有些情况下,我们需要在邮件中执行一些数据提取等复杂工作,比如将控制台输出中的一些数据在邮件中进行展示,这时我们需要借助email-ext-plugin插件提供的Groovy接口,用Groovy编写邮件内容。 总之,Jenkins的邮件通知功能非常强大,我们可以在自动化测试的工作中不断进行探索。 小结 本节简单介绍了Jenkins的传统表单类型的Freestyle Job,然而目前Jenkins的发展方向是 Pipeline Job,Jenkins将Pipeline作为优先开发项目。这就意味着Pipeline在应用程序中是作为实体被设计和支持的,而不是通过在Jenkins中连接一堆任务而形成流水线。Pipeline类型的Job可以通过编程实现,可以实现更复杂构建逻辑和工作流,更重要的是在Pipeline中有专门的用于流水线编程的结构化DSL,其可以在工作空间中轻松地实现文件共享功能。同时Pipeline具有全新的Jenkins可视化界面 ——Blue Ocean,其为Pipeline的每个阶段添加了图形化的展示,如下图所示。 因此我们在熟悉了表单类型的 Freestyle Job后,可以尝试将其转换为Pipeline的Job,当然目前并非所有的Jenkins插件都支持Pipeline,有些老旧的插件还无法支持Pipeline,我们需要根据实际的工作情况进行Jenkins工程类型的选择。 攻城总结 古人云:知所不豫,行且通焉。虽然通过本文,我们全面地了解了自动化测试的流程,但是只有在自动化测试的实践中不断探索,我们才能真正窥得自动化测试的全貌。北汇信息作为专业的自动化测试服务供应商,也可以为客户提供优质全面的自动化测试服务。
  • 2022-5-28 16:53
    242 次阅读|
    0 个评论
    Python 是由 Guidovan Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的,Python可以粘性整合现有程序,简单易学,具备庞大的计算生态,因此也被称为“超级语言”。 TPT作为一款模型测试工具,除了可以自动生成默认的报告,也可以根据客户需求进行报告定制化,那么能够使用Python去自定义报告吗? “当然可以,而且可以自定义库生成想要的报告”。 TPT 对于Python的支持情况 在TPT中,Python需要编写在Script评估中(通过如下方式新建)。由于TPT的高度定制化,语法与Python相比具有通用性和独立性的特点,测试人员只需具备简单的编程知识即可操作。 新建Script评估 TPT script评估基于Python2.7,TPT支持Python2.7的绝大部分特性,如图所示。 TPT支持Python情况 TPT中内置很多自定义报告函数,直接使用即可,非常方便,如下图所示。 报告自定义内置函数 TPT 通过内置函数自定义报告过程 在TPT中使用内置函数自定义报告需要遵循一定的方法,如下所示,在TPT中的help中关于自定义报告的介绍。 自定义报告方法 TPT内置函数自定义报告支持添加“评估列表”、“信号图像”、“自定义图片”、“章节”、“目录”等,接下来我们以自定义添加信号图像为例介绍自定义报告过程。 目标:将测试用例的输出信号添加在报告中 在TPT中编辑如下测试用例,输出信号为“Test_Out_1”和“Test_Out_2”。 TPT中的测试用例 信号曲线 在TPT中添加script评估,编辑如下: 自定义报告添加信号图像 在报告中效果如下: TPT自动生成的报告 如果测试用例输出信号较多,手动添加信号较为繁琐,我们也可以引用Python中的列表和for循环来检索和加载信号。 for循环遍历输出信号 TPT 通过自定义库实现报告定制化 假设一个测试团队对报告的要求是相同的,那么如果团队每个成员都将代码写一遍非常繁琐,这时候可以自定义一个库,然后组内同事共同加载和调用。我们还是以上面添加信号图像为例进行说明,编写如下: 自定义lib 将自定义lib保存成“.tptpy”文件,并放置在TPT的安装目录中(最好新建文件夹进行保存,可能会有很多库)。 自定义的lib存放位置 “Preferences”。 “Assessment Library”中加载自定义库路径。此项设置会应用在所有TPT工程上。 加载自定义库路径 然后在当前使用的TPT工程中的“AssessmentLibrary”中,选择使用哪些库。 选择使用的函数 选择好使用的库后,在TPT中新建“Script”评估,使用快捷填充键选择要使用的自定义库。 选择自定义函数 “Auto completion hot key”中进行设置。 快捷填充键设置 在自定义库名称后输入 ”.” ,然后再次点击快捷填充键,选择要使用的函数。 选择使用的函数 最后,输入章节名称,运行即可得要想要的报告。 填写自定义章节名称 运行测试后,得到如下报告: 自定义报告 总结 本文只是介绍了将测试用例输出信号加载到报告中,我们当然也可以通过脚本自定义Table、Image、Requirements、Table等,也可以通过不同的组合得到想要的报告。 通过在自定义报告中使用Python,可以提高我们的测试效率,并且提高代码的复用性。当然,Python不止可以应用在自定义报告上,我们也可以使用在评估、TPT配置中,甚至将TPT工程保存为“.tptprj”文件格式后,可以对工程本身进行修改。 关于Python在TPT中的使用,更多精彩内容请查看: TPT 中脚本评估的使用(上):强大的内置函数库 TPT 中脚本评估的使用(下):测试管理与软件交互 PikeTec公司是全球知名的基于模型的嵌入式系统测试工具TPT的软件供应商,总部位于德国柏林,其创始人均在戴姆勒公司拥有十多年的软件测试经验。TPT产品曾被评为2005年戴姆勒最佳创新软件,并在戴姆勒、大众、奥迪、保时捷、通用等汽车整车厂及多家零部件企业(博世、大陆、海拉等)中得到广泛应用,如戴姆勒的多个车型的混合动力汽车的动力总成、电池管理控制器的测试,博世的汽油机和柴油机控制系统测试等。 北汇信息作为PikeTec在中国的独家合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。目前,TPT已被众多国内知名主机厂和零部件企业认可,在新能源(VCU/BMS/MCU)以及ADAS等领域中被广泛应用。
  • 热度 2
    2022-5-15 19:50
    858 次阅读|
    0 个评论
    CANoe 提供的COM接口使得外部脚本能够访问或控制CANoe软件,从而实现自动化测试任务,而易用且具有丰富生态的Python无疑是一个很好的选择。本文将介绍CANoe COM基本构成、常用COM对象以及Python脚本调用CANoe COM的方法,在此之前,先介绍一些基本概念。 CANoe COM Server &Python pywin32 COM 全称ComponentObject Model,是微软为Windows平台软件提出的、实现软件之间互操作的标准。它不会规定软件的具体实现,而是声明一种对象模型,使得满足这种模型的对象之间能交互,这些对象通常被称为 组件 (Component)。组件会实现特定的功能,而这些功能以特定的方式提供——即 接口 (Interface),其他组件通过接口使用它们。另外,组件需要经过 注册 (Registry),才能被其他软件发现和使用。注册后的组件向其他软件提供服务,因此组件将作为 服务端 (COM Server),其他想要使用服务的作为 客户端 (COM Client)。 在安装完成CANoe软件后,CANoe已经在Windows组件服务管理器中注册了CANoe COM Server,如果需要重新注册,可以在安装目录下(默认为C:\ProgramFiles\Vector CANoe 14)的Exec64文件夹中找到RegisterComponents.exe,运行即手动注册。 Python pywin32 package ,它提供了许多Python扩展以调用Windows API,其中就包括COM组件,由于Python脚本将使用CANoeCOM提供的服务,因此Python脚本将作为COM Client,在pywin32包中就对应win32com.client模块,所以后续的Python脚本都要导入win32com.client模块。 了解以上的概念后,下面就看看本文的主要内容。 COM Object Hierarchy 在CANoe中,各个功能模块按照一定的层级组织在一起构成整个CANoe软件。与这些功能模块直接相关的COM组件同样也是按照相应的层级组织的,这就形成了COM Object Hierarchy: CommunicationSetup从左向右的层级顺序,找到相应的属性或是方法,从而实现设置。 Type Library 了解COM Object Hierarchy能帮助快速找到所需功能,但是不能知道实现所需功能对象的继承关系,为此还需要了解CANoe Type Library。在CANoe软件安装目录下(默认为C:\Program Files\Vector CANoe 14)的Exec32\COMdev目录中包含了注册COM所用的类型库,如下图所示CANoe.h头文件: 在CANoe.h头文件中包含所有CANoe COM对象的接口定义,比如ITestConfiguration接口: 而如果想要设置TestConfigurationSettings对象,从COM Object Hierarchy得知需要从TestConfiguration对象访问: 但是在Type Library中Configuration对象有多个ITestConfiguration接口,比如: 可以看到,ITestConfiguration2继承自ITestConfiguration,在它的基础上又扩充了许多方法,比如获取TestConfigurationSettings对象的方法get_Settings就在其中。 也就是说,要通过实现了ITestConfiguration2接口的TestConfiguration对象的get_Settings方法,才能获得TestConfigurationSettings对象。 为此,通过win32com.client模块中的CastTo方法,能将TestConfiguration转换成基于ITestConfiguration2接口的对象。 COM Object COM Object Hierarchy 中有许多COM对象,短时间内掌握所有COM对象是不现实的,下面仅针对常用的、与自动化测试紧密相关的COM对象做介绍。 Application 使用Python控制CANoe,首先要获取关联整个CANoe进程的COM对象,也就是Application对象。通过Dispatch方法就可以获得关联到当前CANoe进程的COM对象,如果当前并没有CANoe进程,则会启动一个CANoe进程;而如果想要另外获得一个CANoe进程,则可以使用DispatchEx方法。 下面是获取Application对象的代码示例: 在以上示例中,CANoe各部分功能封装在CANoe类中,在CANoe类初始化时,把获得的Application对象保存在CANoe类的App成员中,这样在CANoe类的其他方法中,就可以通过使用App成员来访问Application对象。 有了Application对象,才能访问CANoe工程的各个功能模块,比如打开CANoe工程: 而在open_canoe_config方法中,使用Application对象的Open方法打开特定的CANoe工程,具体Application对象的接口定义( 这里仅展示IApplication的部分方法,其他方法以及后续扩展的方法并未展示 )如下: Measurement 要想控制CANoe启动测量,就需要获取Measurement对象,对于上面获得的Application对象,使用self.App.Measurement获得。 在Measurement对象的接口定义中,可以看到Start方法,使用Measurement.Start()就能启动CANoe测量。 下面是启动CANoe测量的代码示例: System Variables 系统变量作为CANoe中重要的部分,要想获取任意系统变量的值,就要获取对应系统变量的对象。 Variable顺序访问的。 其中Namespaces和Variables分别表示Namespace和Variable对象的集合,因此可以使用Namespace名称(Variable名称)作为索引,从Namespaces(Variables)中获得相应的Namespace(Variable)对象。 另外,在Variable对象的接口定义中,可以看到get_Value和put_Value方法,而Python将这两种方法转变成了Value属性,也就是说可以直接对Variable.Value取值或赋值。 下面是获得系统变量值的代码示例: 在以上示例中,添加了简单的异常处理可以暂且不看,仅考察if分支中的语句。首先,使用self.App.System.Namespaces获得Namespaces对象,将其保存在system_namespaces变量中;然后使用刚保存的变量,以ns_name作为索引获得Namespace对象并保存在sys_namespace变量中;再通过sysvar_name索引获得Variable对象sys_variable,最后返回sys_variable.Value属性值。 Test Configuration &Test Unit 与自动化测试( 这里仅介绍Test Configuration配置,即与vTESTstudio软件联合使用的自动化测试 TestUnit: 其中,TestConfigurations与TestUnits跟前文类似,表示TestConfiguration和TestUnit的集合,同样可以通过索引访问。除了可以使用相应TestConfiguration(TestUnit)名称作为索引以外,还能使用数字索引,但是切记索引起始为1。对于仅有一个TestConfiguration的情况,仅需要TestConfigurations(1)来获得唯一的TestConfiguration对象。 当CANoe工程中还没有TestConfiguration或者TestUnit时,就需要先添加。查看它们的接口定义: 可以看到Add方法能添加相应的对象,对于TestConfigurations.Add()不需要其他参数,即可添加并获得新的TestConfiguration对象;而TestUnits.Add()需要提供所要添加的TestUnit的绝对路径,同样可以获得对应的TestUnit对象。另外值得注意的是,TestUnits的Add方法是在ITestUnits2接口上扩展的,所以要通过前文所述的CastTo方法将TestUnits (默认为基于ITestUnits接口)转换成基于ITestUnits2的对象。 下面请看加载测试配置的代码示例: 在以上示例中,首先通过TestConfigurations.Add()方法新添加一个TestConfiguration对象,并把它保存为类成员self.test_config;之后使用CastTo方法将新添加的TestConfiguration中的TestUnits对象转换成基于ITestUnits2接口的TestUnits对象(默认为ITestUnits接口);最后使用转换后的TestUnits对象的Add方法,添加test_unit_path路径下的测试单元(.vtuexe文件)。 加载测试配置后,还需要启动测试执行,查看ITestConfiguration接口定义,可以发现Start方法: 下面是执行测试的代码示例(这里使用了之前保存的类成员self.test_config): 执行完测试后,需要获得测试结果,可以通过CANoe软件为Test Configuration创建的系统变量VerdictSummary查看: 下面是获得测试结果的代码示例: 这里get_test_result方法有一个带有默认值的参数test_config_name表示实际执行测试的TestConfiguration名称,它的默认值是Test_Configuration_1,如果没有修改过就不需要提供参数,否则需要提供;get_test_result返回保存在VerdictSummary中的测试结果,其数据类型是整型,需要在接口定义中查询具体数值对应的结果: Test demo 联合使用上述COM对象就能够实现自动化测试,下面展示完整的代码示例: 基于Canoe类,就可以通过实例化Canoe类,调用实例对象的方法来实现自动化测试,下面是简单的代码示例: 首先,实例化Canoe类,将实例化后的对象保存在canoe变量中;之后定义了canoePrj变量表示CANoe工程的绝对路径,然后使用open_canoe_config方法打开此工程;接着定义testPrj变量表示测试单元可执行文件的绝对路径,使用load_test_config方法加载测试单元;然后使用start_canoe方法启动CANoe测量,等待2s后,使用run_test_config方法执行测试,等待10s后测试停止;最后打印通过get_test_result方法获得的测试结果。 这里使用了Vector CANoe 14自带的PythonBasicEmpty.cfg demo工程作为测试工程,下面是关于此demo的介绍文档: 这个demo中有更丰富的COM对象的应用、更完善的信息提示,比如对测试启动、停止等事件的控制,对CANoe运行状态的打印,在此不再赘述。 最后,运行以上脚本后,可以获得自动化测试结果,对照前文的VerdictState,可以确定测试通过: 总结 本文介绍了使用Python访问CANoe COM以实现自动化测试的基本方法,通过几个常用的COM对象及方法,构建了简单的自动化测试示例工程。对于更复杂的工程,同样可以根据基本方法,灵活运用COM以满足测试需求。进一步,可以将CANoe COM封装成Python库,利用可复用性高效地完成针对不同需求的自动化测试。 CANoe 是德国Vector公司出的一款总线开发环境,是网络和ECU开发、测试和分析的专业工具,支持从需求分析到系统实现的整个系统开发过程;其丰富的功能和配置选项被OEM和供应商的网络设计工程师、开发工程师和测试工程师所广泛使用。 北汇信息作为Vector中国的合作伙伴,不仅提供相应的工具和技术支持服务及培训,还针对不同的应用提供相应的解决方案,助力中国客户的研发效率提升。 注: 本文部分图片来自Vector。
  • 热度 3
    2021-8-19 17:24
    1013 次阅读|
    2 个评论
    好程序员python大数据培训分享,为什么python大数据受欢迎?
    Python 是适合做大数据分析的计算机语言吗 ? 如今是一个大数据时代,通过数据分析,我们可以得到任何我们想知道的事情,充分挖掘数据的价值。之前有人说过 JAVA 语言是最适合做数据分析的计算机编程语言之一,在这里,我想说其实 Python 大数据也是大数据分析最受欢迎的编程语言。 Python 是一个强大的,灵活的,开放的,易于学习的源语言,使用方便,并具有强大的数据操作和分析库。其简单的语法使编程新手很容易学习和掌握,经历过 Matlab, , C / C++ , java ,或 Visual Basic , Python 提供了一个独特的组合,都能使用编程语言以及使用方便的分析和定量计算 在过去的十年中, Python 已经被用于科学计算、金融等高度量化的领域,石油和天然气,物理,和信号处理。它已被用于提高航天飞机的设计,从哈勃太空望远镜的图像处理,是实现物理实验导致发现了希格斯玻色子的工具 ( 所谓的“上帝粒子” ) 。 同时, Python 已经被用于构建大规模可扩展的 Web 应用程序,像 YouTube ,并推动谷歌内部基础设施。像迪士尼、索尼和梦工厂公司,卢卡斯 ILM 都依赖 Python 协调大规模的集群计算机图形服务器轰动的电影产生的意象。根据 TIOBE 指数, Python 是一个在世界上最流行的编程语言,排名高于 Perl , Ruby ,和 JavaScript 。 为什么说 Python 编程语言也是非常适合做大数据分析的语言之一呢 ? 下面就来为大家分析一下。 首先, Python 语言它很容易上手。它融合了 R 语言快速成熟的数据挖掘能力之外,还有更实际的产品构建能力。 Python 语言也正在迅速地获得主流人士的拥护。只要你用过 Python 语言,你会发现它是更直观,并且相比 R 语言更容易学习。它在计算机语言中的整体趋势也是上升的很快。使其在统计分析上的能力超越了之前的 R 语言。 Python 是行业人员正在转换发展的方向。 过去两年里,很明显存在由 R 向 Python 转化的趋势”在数据处理中,通常存在规模和技巧的权衡, Python 语言作为一个折中出现了。 从对数据分析工作的处理上看, IPython notebook 和 NumPy 可以用于轻量工作的处理, 而 Python 则是中级规模数据处理的有力工具。丰富的数据交流社区也是 Python 的优势,它提供了大量的 Python 工具包和特性。 据悉美国银行也是利用 Python 语言开发了新的产品以及基础设施接口。而且也用于处理金融数据。 因为 Python 用途宽广且灵活、易学,所以现在学习 python 语言的同学拥蜂而至。所有说, Python 大数据最受欢迎的编程语言之一 !
相关资源