python自动化测试框架:unittest测试用例编写及执行

本文将介绍 unittest 自动化测试用例编写及执行的相关内容,包括测试用例编写、测试用例执行、测试报告等内容。

官方文档:

https://docs.python.org/zh-cn/3/library/unittest.mock.html

1. 测试用例编写

在 unittest 中,一个测试用例通常由三个组件组成:setup、test 和 teardown。其中,setup 和 teardown 分别用于测试用例的准备和清理工作,test 是实际执行测试的部分。

例如,测试一个函数 add 的功能;

代码实例:

#add函数

def add(a, b):

   return a + b

#测试用例

import unittest

class TestAdd(unittest.TestCase):

   def setUp(self):

       print("setup")

   def test_add(self):

       print("test_add")

       self.assertEqual(add(1, 2), 3)

   def tearDown(self):

       print("teardown")

上面的代码中定义了一个名为 TestAdd 的测试类,其继承 unittest.TestCase 类。在测试类中定义了三个方法:setUp、test_add 和 tearDown。

在 setUp 方法中,编写测试用例的准备工作。在 test_add 方法中,我们编写了实际的测试代码。在本例中,使用了 assertEqual 方法来判断 add 函数的返回值是否等于预期值。

注意:

在编写测试用例时,通常要测试多种情况,需要编写多个测试方法。

前面的文章中也反复强调过unittest 中,测试方法的命名必须以 test_ 开头,以便被 unittest 框架自动识别为测试方法。

2. 测试用例执行

1)指定测试方法执行顺序

默认情况下,unittest 框架会按照测试方法的名称的字典序执行测试用例。若要控制测试用例执行的顺序,可以使用 TestSuite 类。

例如,将上面的测试用例放到一个名为 suite 的测试套件中,并按照 test_add、setUp、test_add、tearDown 的顺序执行:

if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestAdd('test_add'))
suite.addTest(TestAdd('setUp'))
suite.addTest(TestAdd('test_add'))
suite.addTest(TestAdd('tearDown'))
runner = unittest.TextTestRunner()

runner.run(suite)

注意:

测试用例执行的顺序并不是固定的,测试用例之间存在依赖关系,有时候会出现执行顺序不符合预期的情况。因此,在编写测试用例时,需要注意不要产生测试用例之间的耦合或者尽量降低耦合度。

2) 指定测试方法运行

有时我们只想运行一个或几个测试方法,而不是运行整个测试用例,这时候可以使用 unittest 框架提供的参数化运行方式,来实现运行指定测试方法。

例如,仅运行上面的 TestAdd 测试类中的 test_add 测试方法:

if __name__ == '__main__':

unittest.main(argv=['', 'TestAdd.test_add'])

在上述代码示例中,使用 unittest 框架提供的 argv 参数,来指定要运行的测试方法。其中,TestAdd 是测试类的名称,test_add 是测试方法的名称。多个测试方法之间可以使用空格分隔。

注意:

使用 argv 参数运行测试方法时,测试方法名称必须是完整的名称,包括测试类名称。否则,unittest 框架无法识别要运行的测试方法。

3)跳过测试方法执行

有时候,我们需要跳过某个测试方法,例如当测试环境不满足某些条件时,无法进行该测试方法。这时候可以使用 @unittest.skip 装饰器来跳过测试方法。

例如,跳过上面的 TestAdd 测试类中的 test_add 测试方法:

import unittest
class TestAdd(unittest.TestCase):
@unittest.skip("skip test_add")
def test_add(self):

self.assertEqual(add(1, 2), 3)

在上述代码示例中,使用 @unittest.skip 装饰器对 test_add 测试方法进行跳过操作。在 skip 方法中可以指定跳过的原因。

注意:

测试方法中使用了 @unittest.skip 装饰器,那么该测试方法就不会被执行。如果想要恢复执行该测试方法,可以将装饰器注释掉或者删除。

3. 测试用例报告

自动化测试完成后需要生成测试报告,便于测试结果进行分析和统计。unittest 框架提供了多种方式来生成测试用例报告,例如使用 unittest.TextTestRunner 类生成文本报告、使用 HTMLTestRunner 第三方库生成HTML报告等。

例如,使用 unittest.TextTestRunner 类生成文本报告:

if __name__ == '__main__':
suite = unittest.TestLoader().

loadTestsFromTestCase(TestAdd)
with open('test_report.txt', 'w') as f:
runner = unittest.TextTestRunner

(stream=f, verbosity=2)

runner.run(suite)

在上面的示例中,我们使用 unittest.TestLoader 类从测试类 TestAdd 中加载测试用例,并使用 unittest.TextTestRunner 类生成文本报告。使用 stream 参数可以将报告输出到指定文件中。

注意:

生成测试用例报告时,可以设置不同的输出格式、输出位置和输出等级,以满足不同的需求。同时,还可以使用第三方库 HTMLTestRunner 来生成漂亮的HTML报告,以便进行更加直观的分析和展示。


如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

猜你喜欢

转载自blog.csdn.net/IT_LanTian/article/details/131186469
今日推荐