![2b68768473d897ba7bc75a97c4aaa086.png](https://img-blog.csdnimg.cn/img_convert/2b68768473d897ba7bc75a97c4aaa086.png)
使用 Python 脚本迈进先进的测试自动化技术
传统上,测试自动化工程师都是使用 shell 脚本和自主开发的工具进行自动测试。现在,测试团队可以使用 Python 更轻松、更稳健地完成他们的测试方案。本文探讨了对三种编程语言进行集成话题,旨在帮助您踏入自动化测试世界的第一步。
- 理解 Python 的优势
- Python 编程挑战
- 使用 Python 进行测试
Python 简介
开发一套成功的测试方案的关键,在于为项目确定恰当的自动化工具。这些工具对于电子产品开发的时间和效率极为关键。
测试自动化可在三个方面提升效率。首先,自动化替代了手动的人工重复,减少了出错机会。其次,通过对一系列测试进行自动切换,可以加速定序测试。其效率远远高于手动测试。第三,自动捕获数据和连续执行有利于提高精度。
强大的 Python 工具和程序库:
• Pytest:一个极为通用的 Python 测试框架 • NumPy:一个提供多维阵列和高层数学函数的程序库 • SciPy:一个利用大量算法来扩展 NumPy 功能的程序库 • Mathplotlib:一个在数字绘图和数据分析工具中使用的程序库 • Pythonnet:在Python 与 .NET CLR 之间进行集成的套件
什么是Python?
Python 是一款用于编写脚本的强大工具,可以用于自动化测试。Python 是一种运行时语言,易于学习;但是针对全面的自动化测试,它在所需要的强大的图形用户界面(GUI)和开发驱动程序方面略显不足。将 Python 与其他编程语言相结合,例如 C#和 .NET,测试自动化工程师可以得到两全其美的结果。
Python 的优势
测试工程师在为自动化选择一种编程语言之前,需要评测这种语言的优势。他们必须考虑这种语言在一个生态系统中的可扩展性、易开发性和受欢迎程度,这些都会影响到第三方可用资源和程序库的多样性。
Python 拥有全部这些属性,并且具有免费和开源优势。任何人都可以下载 Python, 并开始快速开发和发布 Python 代码。相比之下,企业的开发人员可能需要花费数天或数周时间为企业的开发环境(如 Visual Studio)收集编译器和程序库。
Python 开源社区提供了广泛的程序库,以帮助测试工程师开始执行自动化测试。这些便于访问的社区资源有助于工程师们解决常见的难题。Python 是一种运行时语言,不需要编译器,因此属于一种脚本语言。它能在安装了 Python 解释器的所有设备上运行。由于在开源社区得到了广泛使用,因此 Python 拥有杰出的跨平台支持能力。
与更复杂的语言相比,Python 非常便于快速学习。Python 的语法很少,具有良好的可读性,因此工程师们即使没有丰富的编码经验,也能快速学会。图 1 所示的是一个典型的入门程序‘Hello World’,使用了 C# 和 Python 来编码。
Python 的极简风格对于测试自动化具有诸多优势。测试步骤在本质上是呈线性的,一次执行一个,按顺序执行。这种简单、易读的 Python 环境非常适合开发线性测试脚本。熟悉脚本的资深测试工程师可以快速学会 Python 的语法。对于刚步入职场的大学生而言,他们更容易熟悉 Python 代码,而不是 C++ 或 C#。对 Python 代码的需求正在增加。据 http://indeed.com 统计,2018 年,对有经验的 Python 编程人员的需求量为46,000 人,而 C++ 和 C# 编程人员的人才缺口分别为 31,000 人和 27,000 人。
Python 在测试工程中的优势 1. 免费、开源 2. 易于学习 3. 强大的程序库 4. 与其他语言集成良好
![913d7893dee1053a3d14a1eca630d558.png](https://img-blog.csdnimg.cn/img_convert/913d7893dee1053a3d14a1eca630d558.png)
如图 2 所示, Python在 2012年还是最不常用的语言,到 2017年已经超越JavaScript,成为了最流行的语言。Stack Overflow 已将 Python 列为“全球发展最快的重要编程语言。”
![246ca16ded2e12c042848706dcf61d79.png](https://img-blog.csdnimg.cn/img_convert/246ca16ded2e12c042848706dcf61d79.png)
图 2. Python 增长路线图,源自 Stack Overflow
让计算变得简单
尽管看上去非常简单,但是 Python 的功能却非常强大。它拥有专为创建测试而设计的丰富套件。例如,Pytest 便是一个适用于各种测试框架的通用测试工具。这些套件可以节省测试工程师的时间,减少错误,简化必须要为一系列测试所开发的计算代码。
熟悉 MATLAB 的工程师们将会非常欣赏 Python 的数值分析特性。与 MATLAB 不同,Python 是开源、免费的,并且可以作为编程语言来使用。工程师们熟悉的所有MATLAB 特性均可在 Python 中执行,因此他们可以获得丰富的计算工具和算法。
Python 可以轻松与 NumPy 和 SciPy 等计算程序库相结合,并能存储和解释结果, 这对更高级的运算非常必要。NumPy 添加了对科学计算工具的支持,包括多维阵列对象。SciPy 程序库包含了高效的数值例程,包括进行数值集成和优化的例程。程序库和程序套件是帮助工程师们开发 Python 的最强大的工具。Python 编程挑战
Python 是开发脚本的绝佳工具,但测试工程师们也需要了解它的局限性。Python 的最大缺点是其整体性能。作为一种解释性语言,Python 将始终比一些编译语言(如C#)要慢。在一些速度特别重要的关键任务中,这可能是一个问题。这种解释性代码的另一个缺点是编译器并不检查破损代码。在将其引入开发环境之前,开发人员必须投入更多精力,使用单元、系统和集成测试的方法对 Python 代码执行测试。
Python 数据对象可以动态输入和解释,这种特性非常有利于建立小型项目。不过针对大型项目,这种优势很难继续保持。最后,虽然 Python 拥有设计 GUI 的程库库, 但 C# 和 .NET 仍然是最好的 GUI 设计工具,尤其是在 Windows 环境下执行开发任务时。
Python 在测试工程中的挑战 1. 在一些性能关 键的领域,速度较低 2. 缺少编译器 3. 运行时错误 4. 太基础
与其他语言相集成,从而克服自身的挑战
Python 的缺点可以通过与其他语言相集成来解决。这样可以把 Python 的脚本编写优势与其他语言的优势和速度融合起来。测试团队可以使用 Python 来开发自动测试脚本,同时对于那些性能关键型和特定设备的驱动程序代码,则仍然使用其他语言,比如 C#。这可以通过 Pythonnet 之类的工具来实现,它是一个将 Python 集成到 .NET 代码中的工具套件。
这个 .NET 框架运行时环境被称为 CLR(通用语言运行时),它负责执行 .NET 程序。Pythonnet 可让编程人员将 Python 代码添加到 .NET 应用程序中,实现与 .NET CLR 环境的无缝交互。IronPython 提供了与 .NET 更紧密的、解释性的集成,但与 Pythonnet 相比牺牲了速度优势。图 3 示出了 IronPython 如何通过 Python 对 Windows 表格和按钮进行编程。在这里,使用预期的参考表把 CLR 导入到了项目中。
![cd28c119e57f1077685ad78ede3d778f.png](https://img-blog.csdnimg.cn/img_convert/cd28c119e57f1077685ad78ede3d778f.png)
图 3. 利用 IronPython,可以通过 Python 对 Windows 表格进行编程3
“Python for .NET 套件使 Python 编程人员几乎可以与 .NET 通用语言运行时 (CLR)无缝集成, 为 .NET 开发人员提供了功能强大的应用程序编程工具。它还允许 Python 代码与 CLR 进行交互,也可以把Python 嵌入到 .NET 应用程序中。”
- Pythonnet 主页
另外,了解集成并不仅限于 Python 和 .NET,这一点也很重要。大多数流行的编程语言都支持 Python 集成。由于 Python 具有跨平台支持,拥有大量的中间件产品,并且采用了面向对象的风格,支持动态输入/绑定功能,因此它是与 windows 编程语言相结合的一个良好选择。另一个集成工具 Jython,也可以与 Java 平台实现类似集成。对于开发人员来说,必须选择一种最适合自身需求的语言,并了解该语言的集成能力。
使用 Python 执行测试
在这个真实示例中,我们来看看测试工程师如何使用 Python 与现有的测试程序相结合,以便建立一个新的集成的自动化测试。在无线通信中,随着多模设备的增多也增加了对多
模测试的需求,此时,需要同时测试 Wi-Fi 环境和蜂窝环境。现在,越来越多的多模设备都在同时使用 Wi-Fi 和蜂窝通信。以前的无线网络设备都是在 Wi-Fi 或蜂窝环境中单独进行测试的。
集成多个测试
测试工程师结合两个独立的设计程序创建了一个集成的蜂窝和 Wi-Fi 仿真系统,并且用一个自动化测试工作流程进行管理。虽然这两个系统的设计初衷并不是一定要集成到一个测试环境中,但通过使用脚本,测试工程师成功地将这两个系统融为了一体。
该解决方案的组合步骤如下:
- 首先,两个产品完全使用 C# 进行编码。
- 在第二个产品中使用 Python 编写自动脚本。
- 在测试环境中使用 Pythonnet 套件,将第二个产品的 python 代码集成到 C# 代码库。
通过上述配置,最终的测试工具得以在真实统一的测试环境中验证多模设备的特性。
图 4 展示了对该测试设备进行自动配置的一小部分代码,包括设置 IP、Wi-Fi 时隙、AP 信道等。这段代码是该解决方案中集成的众多 Python 文件之一。测试平台常常会定义一些预置的基类(base classes),用以在一个共享框架中创建定制的测试步骤。
如图 4 所示,所定义的“CompanyChassisConfiguration”类别会采用或继承 “TestStep”。一旦测试平台定义了一个基类,开发人员在创建自动化测试程序时,就无需再担心代码架构的问题。继承使工程师在测试平台中可以重用代码,无需为每个测试重新编写代码,从而减少了为新测试开发代码所需的时间。
在定义完类别后,“运行(Run)”函数将会接管。它会调用设置代码,然后执行目标测试序列。完成各个测试步骤后,如果测试出现故障,测试脚本会向测试工程师发出警告信息。
Python 文件自身很短,但通过使用由 C# 编程的引擎来执行,能够胜任繁重的任务。不过,它是一个附加脚本,还需要与 Python 和 C# 的集成相结合,进而构成一个面向 Wifi 和蜂窝环境的统一的测试平台。这种集成缩短了测试时间,提供了一个更真实、更健康的环境,提高了测试工程师的生产率和测试质量。
![285f4b22f4a8427105ec863fc9352f95.png](https://img-blog.csdnimg.cn/img_convert/285f4b22f4a8427105ec863fc9352f95.png)
图 4. 一个集成的无线测试平台 — 基于 Python 代码与 C# 引擎的结合
结论
自动化测试有助于缩短产品开发周期,帮助公司保持竞争力。测试团队和工程师们必须要知道如何编写代码,以及当前有哪些最佳的自动化测试开发工具可以选择。
很多公司正在转向 Python 等语言,以便简化脚本编写。Python 带来了大量优势。它易于学习、开源,并有强大的程序库作为支持。其缺点可通过与能够更快地执行运行时环境、拥有更强大的驱动程序开发环境的编译器(如 C#)相集成来克服。
要想拥抱自动化的潮流,测试工程师必须要学习一门编程语言。测试团队应该寻找一个能够集成多种编程语言的、统一的测试平台,以便最大限度地提高他们在设计和制造周期中实现自动和加速测试的能力。
如欲了解更多信息,请访问: www.keysight.com.cn
是德科技主页www.keysight.com.cn![149afae8d5013ca36e656dfa86a9f1d0.png](https://img-blog.csdnimg.cn/img_convert/149afae8d5013ca36e656dfa86a9f1d0.png)
![9f26fef32f84a750f630427354ee3aaa.png](https://img-blog.csdnimg.cn/img_convert/9f26fef32f84a750f630427354ee3aaa.png)
在本地 Python 中构建和运行 TAP 插件
编程实例
Python Reference Application for the N8844A Data Analytics Web Service's Programmatic Interfacewww.keysight.comThis example program is for the N8844A Data Analytics Web Service's programmatic interface using the Python language.
![2194895fb5c2c353bee53957170fa778.png](https://img-blog.csdnimg.cn/img_convert/2194895fb5c2c353bee53957170fa778.png)
ZIP 5.01 KB
Python: Basic VISA Functionalitywww.keysight.com...with the name visa.pyd that implements an extension module for the Python programming language to provide some basic I/O capabilities via the VISA...