在 PyCharm 里执行测试
在实际工作学习中,在我们编写代码,经过调试与运行,完成预设的功能后,许多时候我们还需要编写测试代码去测试刚刚完成的功能。
测试代码的编写与执行一般都基于一些成熟的测试框架,在框架内调用待测代码方法,进行断言判断来验证待测代码是否完成期望功能。
本节主要讲述在 PyCharm 内创建测试与执行测试的步骤,以及其中提供的一些主要功能。
1. PyCharm 支持的测试框架
测试框架可以组织、管理和执行那些独立的自动化测试用例,测试完成后统计测试结果。PyCharm 支持主流的测试框架,如图所示:
前三种框架用的比较多,特别是 Pytest 近几年是比较流行的,经常与 request + Allure 搭档用于接口的自动化测试。另外,在基于业务驱动软件公司, BDD 测试框架应用也越来越广泛。大家可以根据自己的实际环境与需求所择合适的测试框架,有关安装及其它更详细信息,请参阅对应的框架文档。
Tips:在开始使用您选择的测试框架之前,请确保在计算机上安装了所需的框架。
2. 在 PyCharm 里执行测试的步骤
2.1 配置测试框架
主菜单: PyCharm/File -> Preference/Settings -> Tools -> Python Integrated Tools
, 点击 Default Test Runner 选择 runner。 默认值是 Unittests,下面的过程也会以 Unittests 为例。
2.2 创建测试
准备一个简单的待测试类,创建新文件 rectangle.py
,添加下面的代码到文件
import math
class Rectangle:
def __init__(self, length, width, size=(40, 20)):
self.length = length
self.width = width
self._size = size
def area(self):
area = self.length * self.width
return area
def perimeter(self):
perimeter = (self.length + self.width) * 2
return perimeter
def diff(self):
diff = math.fabs(self.length - self.width)
return diff
def resize(self, width, height):
if width <= 0 or height <= 0:
raise ValueError("illegal size")
self._size = (width, height)
def get_length(self):
return self.length
def get_width(self):
return self. width
在编辑器中,将光标放在类声明或方法中的位置。
- 从主菜单中,选择
Navigate -> Test
; - 编辑器内,右键上下文菜单中选择
Go to -> Test (⌘⇧T: Ctrl + Shift + T)
;
PyCharm 显示可用测试的列表。如果所需的测试尚不存在,请单击"创建新测试"。在打开 Create test 对话框中进行设置, 点击 OK 会自动生成测试文件与测试类。
当你创建了测试后,在测试文件可以通过上下文菜单跳到源程序 Go To -> Test Subject
,完成测试文件到源文件切换,反之也可以的通过 Go To -> Test
跳回到测试程序。下面的过程演示了创建测试以及测试文件与源文件的切换过程。
2.3 为测试文件配置 运行/调试 配置
前面的创建测试只是帮助我们创建了测试文件结构,具体的测试代码还是需要自己编写的。在进行配置之前,我们需要根据选择测试框架的规范编写测试代码。python unittest 文档参考, 修改上面自动生成的 test_rectangle.py 文件。
from unittest import TestCase
from rectangle import Rectangle
class TestRectangle(TestCase):
def setUp(self):
self.rectangle = Rectangle(30, 15)
def test_area(self):
area = self.rectangle.area()
print(area)
self.assertEqual(area, 450)
def test_perimeter(self):
perimeter = self.rectangle.perimeter()
self.assertEqual(perimeter, 90)
def test_diff(self):
diff = self.rectangle.diff()
self.assertEqual(diff, 15)
def test_resize(self):
self.assertRaises(ValueError, self.rectangle.resize, 15, 0)
def tearDown(self):
self.rectangle = None
创建 运行/调试配置,有多种方式:
- 直接点击 运行/配置 配置列表框打开对话框,类型选择 Unittests;
- Project 窗口选择文件, 右键上下文菜单选择 Create Name;
- 在编辑器内,右键上下文菜单选择 Create Name。
在配置过程中,可以指定测试范围,是模块、类甚至单个测试方法。
2.4 执行测试
通常,PyCharm 通过运行已创建的运行/调试配置,以与其他应用程序相同的方式运行和调试测试。在许多情况下,也可以从上下文菜单启动测试会话,如果运行的测试没有永久运行/调试配置,则创建临时配置。然后,如果以后要重用,可以使用"运行/调试配置"对话框保存此类配置。
1. 下面演示了不同运行路径,可运行整个模块,也可以运行单个方法。在 Run 工具 窗口内可以看到运行结果。工具窗口与通用的 Run 窗口基本一致,但会多一些为测试所加的工具按钮。
2. 可以通过 Run 工具栏中 Rerun 与 Rerun Failed Tests 重新运行用例:
3. PyCharm 可以设置自动重新运行测试的运行/调试配置(如果源代码已更改)。点击 Run 工具栏中的 Toggle auto-test 按钮该功能生效。
下面只单独运行 test_area 这个方法,按下 Toggle auto-test,然后简单修改这个方法,会看到测试被自动执行了。
2.5 查看结果
1. 运行后,会在 Run 工具栏中显示运行结果,具体显示的信息分析如下:
2. 在 Run 工具栏顶部工具栏提供更多丰富的功能,帮助查看结果。还可以随时查看以前的历史测试记录,也能把测试结果导入导出。
4. 点击最后的设置齿轮按钮,可以进行更多的设置。
- 监视当前测试的执行;
- 内联显示统计信息,显示用例执行时间;
- 导航到堆栈跟踪;
- 在异常发生的情况下打开相应的源代码;
- 设置自动测试延迟的时间;
- 在完成测试后,自动选择第一个失败的测试。
5. 如果单元测试包含断言条件失败,右键单击失败的测试,然后选择 View assertEquals Difference 专用的比较器对话框被显示。
3. 小结
本小节主要讲解了如何在 PyCharm 里运行测试的基本步骤,以及在测试过程中提供的相关功能。
相关的功能都不复杂,很容易上手。难点在于创建测试以后,如何根据选择的测试框架写测试用例代码,这需要对选择的测试框架、单元测试的理论知识都比较了解;另外,需要对待测代码要足够熟悉,才能写出有效的测试用例。