汽车软件开发自动化测试攻略

随着软件开发在造车行业中占有越来越重要的地位,敏捷开发的思想在造车领域中也逐渐地被重视起来,随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验,简单介绍一下实施自动化测试可能需要具备的技能及具体实践流程。

自动化测试城门-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[]方便地获取。而如果你需要编写更复杂更友好的命令行接口,你需要使用Python的另外一个标准库argparse来实现。

城门队长-re库

正则表达式是编写测试脚本的必备技能,因为有时我们会遇到复杂的文本处理,如在工程文件中查找需要修改的配置,并将其修改为我们所需要的内容。此时一般的查找替换函数就很难实现这个功能,我们只能借助强大的re库(正则表达式)来解决这个棘手的问题。re库提供的函数有:

  • re.compile():编译正则表达式,生成一个 Pattern 对象;
  • re.findall():搜索所有满足条件的字符串;
  • re.match():从第一个字符开始匹配模式;
  • re.search():搜索第一个满足条件的字符串,查找到第一个停止;
  • re.sub():替换满足条件的字符串。

在使用re模块时,我们一般先用re.compile()将正则表达式编译生成为一个Pattern对象,然后再基于这个对象进行findall、match等操作,这样既可以提高代码的可读性,也可以提高代码的运行效率。

使用正则表达式进行查找替换是很方便的,但是在很多时候我们需要在匹配的字符串前后添加内容,并且保留匹配的内容,这时普通的查找替换是难以实现的。

如:希望将hour: minute格式后添加:00,形成hour: minute: seconds这种格式。此时可以采用如下方式来实现:
查找的正则表达式:

替换为:

这里,我们在替换的字符中使用1,来引用正则表达式中第一个分组匹配到的内容,如果正则表达式中有多个分组,可以依次使用23等进行引用,可以使用 来引用整个正则表达式的内容。

小结

在掌握了Python基础语法和这三个标准库后,自动化测试的大门就为我们敞开了。但是想要编写一个可以驱动测试工具进行测试的脚本,我们还需要了解测试工具在headless模式 下的接口情况,如果工具提供的接口丰富,可以实现在headless模式下对测试工程进行配置和执行等操作,那么我们的测试脚本开发工作将会顺利地进行。

但是如果工具提供的headless模式接口有限,无法满足测试脚本的需求,那么进入自动化测试大门后,等待我们的就是另一个棘手的问题:如何对工程文件进行解析与修改。考虑到大部分的工程文件都是XML格式的,因此后续我们就简单介绍一下如何通过Python解析和修改XML文件。

自动化测试瓮城——XML文件

瓮城守备——XML解析

在Python的标准库中,有专门处理XML文件的库,无需安装第三方库就可以使用Python进行XML文件的解析,但是要想准确地从XML文件中解析出想要的信息,我们首先需要简单了解一下XML的文件结构。如下是一个简单的XML文档。

其中Harry Potter元素的结构如下图所示:

汽车软件开发自动化测试攻略

默认情况下,Jenkins会将给定的代码库中的文件检出到Jenkins Job的Workspace中。如果你需要将代码库检出到指定的目录中,你可以在Local module directory中输入你想要的目录名或相对Workspace的路径。

如果你需要从多个SVN版本库中获取文件,可以点击“Add module …”按钮,来添加别的版本库。

总兵的连招2——构建触发器

常用的构建触发器有周期性构建和SCM轮询构建,两者都是使用相同corn风格语法进行设置,如下图所示。

汽车软件开发自动化测试攻略

在上图中,有两行命令:

  • 第一行的作用是将目录由初始的Workspace目录切换到Workspace下的Script目录;
  • 第二行的作用是运行Script目录中的测试脚本Script.py,并为该脚本传递一个参数,该参数为Jenkins的环境变量JOB_NAME,即当前Jenkins Job的名称。

这样就完成了对测试脚本的调用。

总兵的连招4——邮件通知

自动化测试的一个重要环节,就是将测试结果通知到相关人员,如开发测试人员,或项目管理人员等。Jenkins对电子邮件提供了开箱即用的支持,我们可以在构建后处理中勾选E-mail Notification,如下图所示。然后输入需要通知的人员邮箱,即可使Jenkins在构建完成后,向指定的人员发送一封友好的电子邮件。

汽车软件开发自动化测试攻略

因此我们在熟悉了表单类型的 Freestyle Job后,可以尝试将其转换为Pipeline的Job,当然目前并非所有的Jenkins插件都支持Pipeline,有些老旧的插件还无法支持Pipeline,我们需要根据实际的工作情况进行Jenkins工程类型的选择。

攻城总结

古人云:知所不豫,行且通焉。虽然通过本文,我们全面地了解了自动化测试的流程,但是只有在自动化测试的实践中不断探索,我们才能真正窥得自动化测试的全貌。北汇信息作为专业的自动化测试服务供应商,也可以为客户提供优质全面的自动化测试服务。

注: 这里的headless模式是指在不使用工具GUI的情况下,以纯命令行的方式进行工具使用的模式。
作者:北汇信息-舟子无舟

汽车软件开发自动化测试攻略 北汇信息官方网站 汽车软件开发自动化测试攻略 官网 汽车软件开发自动化测试攻略 专注汽车电子领域:为整车厂和零部件企业提供完整的研发、测试解决方案。

来源:Polelink北汇信息

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月4日
下一篇 2022年3月4日

相关推荐