Skip to content

Latest commit

 

History

History
128 lines (85 loc) · 6.96 KB

File metadata and controls

128 lines (85 loc) · 6.96 KB

三、单元测试——单元测试框架简介

测试项目是软件开发的重要部分。在本章中,我们将学习 Python 中的单元测试。Python 有一个名为unittest的模块,这是一个单元测试框架。我们将在本章中学习unittestis 框架。

在本章中,您将了解以下主题:

  • 单元测试框架简介
  • 创建单元测试任务

什么是单元测试?

unittest是 Python 中的单元测试框架。它支持多项任务,如测试夹具、编写测试用例、将测试用例聚合到测试套件中以及运行测试。

unittest支持以下四个主要概念:

  • test fixture:这包括执行一个或多个测试的准备和清理活动
  • test case:这包括您的单个单元测试。通过使用unittestTestCase基类,我们可以创建新的测试用例
  • test suite:这包括测试用例、测试套件或两者的集合。这是为了一起执行测试用例
  • test runner:这包括安排测试执行并向用户提供输出

Python 有一个unittest模块,我们将在脚本中导入该模块。unittest模块有TestCase类用于创建测试用例。

单个测试用例可以创建为方法。这些方法名称以单词test开头。所以,测试运行人员将知道哪些方法表示测试用例。

创建单元测试

在本节中,我们将创建单元测试。为此,我们将创建两个脚本。一个是您的普通脚本,另一个包含测试代码。

首先,创建一个名为arithmetic.py的脚本,并在其中编写以下代码:

# In this script, we are going to create a 4 functions: add_numbers, sub_numbers, mul_numbers, div_numbers. def add_numbers(x, y):
 return x + y def sub_numbers(x, y):
 return x - y def mul_numbers(x, y):
 return x * y def div_numbers(x, y):
 return (x / y)

在前面的脚本中,我们创建了四个函数:add_numberssub_numbersmul_numbersdiv_numbers。现在,我们将为这些函数编写测试用例。首先,我们将学习如何为add_numbers函数编写测试用例。创建一个test_addition.py脚本,并在其中编写以下代码:

import arithmetic import unittest # Testing add_numbers function from arithmetic. class Test_addition(unittest.TestCase): # Testing Integers def test_add_numbers_int(self): sum = arithmetic.add_numbers(50, 50) self.assertEqual(sum, 100) # Testing Floats def test_add_numbers_float(self): sum = arithmetic.add_numbers(50.55, 78) self.assertEqual(sum, 128.55) # Testing Strings def test_add_numbers_strings(self): sum = arithmetic.add_numbers('hello','python') self.assertEqual(sum, 'hellopython')  if __name__ == '__main__': unittest.main()

在前面的脚本中,我们为add_numbers函数编写了三个测试用例。第一个用于测试整数,第二个用于测试浮点数,第三个用于测试字符串。在字符串中,相加意味着连接两个字符串。类似地,您可以编写减法、乘法和除法的测试用例。

现在,我们将运行我们的test_addition.py测试脚本,我们将看到运行此脚本后得到的结果。

按如下方式运行脚本,您将获得以下输出:

student@ubuntu:~$ python3 test_addition.py ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s
OK

在这里,我们得到了OK,这意味着我们的测试是成功的。

无论何时运行测试脚本,都有三种可能的测试结果:

| 结果 | 说明 | | OK | 成功的 | | FAIL | 测试失败–引发AssertionError异常 | | ERROR | 引发除AssertionError之外的异常 |

单元测试中使用的方法

每当我们使用unittest时,我们都会在脚本中使用一些方法。这些方法如下:

  • assertEqual()assertNotEqual():检查预期结果
  • assertTrue()assertFalse():这验证了一个条件
  • assertRaises():验证是否引发特定异常
  • setUp()tearDown():这定义了在每个测试方法之前和之后执行的指令

您也可以从命令行使用unittest模块。因此,您可以按如下方式运行前面的测试脚本:

student@ubuntu:~$ python3 -m unittest test_addition.py ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s
OK

现在,我们将看到另一个例子。我们将创建两个脚本:if_example.pytest_if.pyif_example.py将是我们的正常脚本,test_if.py将包含测试用例。在本测试中,我们检查输入的数字是否等于100。如果它等于100,那么我们的测试将是successful。如果没有,则必须显示FAILED结果

创建一个if_example.py脚本,并在其中编写以下代码:

def check_if():
 a = int(input("Enter a number \n")) if (a == 100): print("a is equal to 100") else: print("a is not equal to 100") return a

现在,创建一个test_if.py测试脚本,并在其中编写以下代码:

import if_example import unittest  class Test_if(unittest.TestCase): def test_if(self): result = if_example.check_if() self.assertEqual(result, 100) if __name__ == '__main__':
 unittest.main()

按如下方式运行测试脚本:

student@ubuntu:~/Desktop$ python3 -m unittest test_if.py Enter a number 100 a is equal to 100 . ---------------------------------------------------------------------- Ran 1 test in 1.912s OK 

我们运行脚本以获得成功的测试结果。现在,我们将输入除100之外的一些值,我们必须得到一个FAILED结果。按如下方式运行脚本:

student@ubuntu:~/Desktop$ python3 -m unittest test_if.py Enter a number 50 a is not equal to 100 F ====================================================================== FAIL: test_if (test_if.Test_if) ---------------------------------------------------------------------- Traceback (most recent call last):
 File "/home/student/Desktop/test_if.py", line 7, in test_if self.assertEqual(result, 100) AssertionError: 50 != 100
---------------------------------------------------------------------- Ran 1 test in 1.521s
FAILED (failures=1)

总结

在本章中,我们了解了unittest,这是 Python 的单元测试框架。我们还学习了如何创建单元测试中使用的测试用例和方法。

在下一章中,我们将学习如何自动化系统管理员的常规管理活动。您将了解如何接受输入、处理密码、执行外部命令、读取配置文件、向脚本添加警告代码、设置 CPU 限制、启动 web 浏览器、使用os模块以及进行备份。

问题

  1. 什么是单元测试、自动化测试和手动测试?
  2. 除了unittest之外,还有哪些替代模块可用?
  3. 编写测试用例有什么用?
  4. 什么是 PEP8 标准?

进一步阅读