莱芜举报网站国际网站建设公司
2026/6/9 18:45:52 网站建设 项目流程
莱芜举报网站,国际网站建设公司,中天建设哪里的,路由 拦截 网站开发unittest 是python 的单元测试框架#xff0c;unittest 单元测试提供了创建测试用例#xff0c;测试套件以及批量执行的方案#xff0c; unittest 在安装pyhton 以后就直接自带了#xff0c;直接import unittest 就可以使用#xff0c;测试人员用UnitTest来做自动化测试unittest 单元测试提供了创建测试用例测试套件以及批量执行的方案 unittest 在安装pyhton 以后就直接自带了直接import unittest 就可以使用测试人员用UnitTest来做自动化测试即管理和执行用例。一、UnitTest基本组成测试人员使用此框架的原因能够组织多个用例去执行、提供丰富的断言方法、能够生成测试报告。1、测试发现从多个py文件中收集并加载测试用例2、测试执行将测试用例按照一定的顺序和条件去执行并生成结果3、测试判断通过断言去判断结果是否正确4、测试报告统计测试进度通过率生成报告UnitTest的组成部分1、TestCase用来写测试用例2、TestSuite:测试套件用来组装测试用例即打包TestCase3、TestRunner测试执行用来执行TestSuite4、TestLoader:测试加载对TestSuite功能的补充用来组装TestCase5、Fixture:测试夹具是一种代码结构前置方法和后置方法TestCase测试用例步骤1导包 unittest2定义测试类只需要继承unittest.TestCase类就是测试类3书写测试方法方法名必须以test开头4执行代码# 1导包 unittest import unittest # 2定义测试类,只需要继承unittest.TestCase类就是测试类 class TestDemo(unittest.TestCase): # 3书写测试方法,方法名必须以test开头 def test_method1(self): print(测试方法一) def test_method2(self): print(测试方法二) # 4执行代码 # 4.1在类名或者方法名后面右键运行。类名后面运行执行类中所有的测试方法在方法名后面只执行当前的测试方法 # 4.2 在主程序中使用unittest.main()来执行 if __name__ __main__: unittest.main()TestSuite和TestRunnerTestSuite测试套件用来组装测试用例将多个测试用例脚本集合在一起。使用步骤实例化测试套件suite unittest.TestSuite()添加用例suite.addTest(ClassName(MethodName))ClassName为类名MethodName为方法名添加扩展suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(ClassName))添加扩展suite.addTest(unittest.makeSuite(测试类名))把指定ClassName类中的测试用例全部添加到测试套件中案例两个用例文件testcase1.py和testcase2.pytestcase1.py文件中的代码为import unittest class TestDemo1(unittest.TestCase): def test_method1(self): print(测试方法1-1) def test_method2(self): print(测试方法1-2)testcase2.py文件中的代码为# 1、导包 import unittest # 2、定义测试类继承unittest.TestCase就是测试类 class TestDemo2(unittest.TestCase): # 3、写测试方法方法中的代码是真正的测试用例代码方法名必须以test开头 def test_method1(self): print(测试方法2-1) def test_method2(self): print(测试方法2-2)测试套件和执行testsuite_testrunner.py文件中代码为(第一种添加测试套件的方法)# 1、导包 import unittest from testcase1 import TestDemo1 # 2、实例化套件对象unittest.TestSuite() from testcase2 import TestDemo2 suite unittest.TestSuite() # 3、添加用例方法 # 3.1 套件对象.addTest(测试类名(测试方法名)) suite.addTest(TestDemo1(test_method1)) suite.addTest(TestDemo1(test_method2)) suite.addTest(TestDemo2(test_method1)) suite.addTest(TestDemo2(test_method2)) # 4、实例化、执行对象unittest.TextTestRunner() runner unittest.TextTestRunner() # 5、执行 执行对象 runner.run(suite)执行结果附加测试套件和执行testsuite_testrunner.py文件中代码为(第二种添加测试套件的方法)# 1、导包 import unittest from testcase1 import TestDemo1 # 2、实例化套件对象unittest.TestSuite() from testcase2 import TestDemo2 suite unittest.TestSuite() # 3、添加用例方法 # 3.2 添加整个测试类套件对象.addTest(unittest.makeSuite(测试类名)) suite.addTest(unittest.makeSuite(TestDemo1)) suite.addTest(unittest.makeSuite(TestDemo2)) # 4、实例化、执行对象unittest.TextTestRunner() runner unittest.TextTestRunner()去执行 () # 5、执行 执行对象 runner.run(suite)TestLoader 测试加载用来加载TestCase到TestSuite中即加载满足条件的测试用例并把测试用例封装成测试套件suite unittest.TestLoader().discover(test_dir, patterntest*.py)自动搜索指定目录下指定开头的.py文件并将查找到的测试用例组装到测试套件test_dir: 为指定的测试用例的目录pattern为查找的.py文件的格式默认为test*.pyimport unittest suite unittest.TestLoader().discover(E:\pythonProject\pythonUnitTest, testcase*.py) runner unittest.TextTestRunner() runner.run(suite)Fixture测试夹具测试夹具是一种代码结构。Fixture控制级别方法级别、类级别、模块级别了解即可。方法级别在每个测试用例执行前后都会自动调用方法名是固定的使用方式初始化(前置处理):def setUp(self)-- 开始自动执行销毁(后置处理):def tearDown(self)-- 最后自动执行类级别在类中所有的测试方法执行前后会自动执行一次方法名是固定的使用方式初始化(前置处理):classmethod def setUpClass(cls):销毁(后置处理):classmethod def tearDownClass(cls):方法名固定的本质是继承unittest的方法并且进行覆盖是重写模块级别 [了解]运行于整个模块的始末即整个模块只会运行一次setUpModule和tearDownModule使用方式初始化(前置处理):def setUpModule()销毁(后置处理):def tearDownModule()案例分析登录功能的测试用例1打开浏览器--1次2打开网页点击登录--每次3输入用户名密码验证码1点击登录--每次测试方法14关闭网页--每次..................................................................................2打开网页点击登录--每次3输入用户名密码验证码2点击登录--每次测试方法24关闭网页--每次..................................................................................2打开网页点击登录--每次3输入用户名密码验证码3点击登录--每次测试方法34关闭网页--每次以上案例分析有很多重复的代码我们可以使用测试夹具优化代码import unittest class TestLogin(unittest.TestCase): def setUp(self) - None: print(2、打开网页点击登录--每次--前置) def tearDown(self) - None: print(4、关闭网页--每次--后置) classmethod def setUpClass(cls) - None: print(1、打开浏览器--类前置) classmethod def tearDownClass(cls) - None: print(5、关闭浏览器--类后置) def test_1(self): print(3、输入用户名密码验证码1点击登录--每次测试方法1) def test_2(self): print(3、输入用户名密码验证码1点击登录--每次测试方法2) def test_3(self): print(3、输入用户名密码验证码1点击登录--每次测试方法3)二、断言断言让程序代替人为判断测试程序执行结果是否符合预期结果的过程常用的UnitTest断言方法对于自动化测试人员来说重点掌握1assertEqual(预期结果,实际结果)判断预期结果和实际结果是否相等如果相等用例通过如果不相等抛出异常用例不通过2assertIn(预期结果,实际结果)判断预期结果是否包含在实际结果中如果存在用例通过如果不存在抛出异常用例不通过import unittest class TestAssert(unittest.TestCase): def test_equal_1(self): self.assertEqual(10, 10) # 用例通过 def test_assert_2(self): self.assertEqual(10, 20) # 用例不通过 def test_in01(self): self.assertIn(admin, 欢迎admin登录系统) # 包含...用例通过 def test_in02(self): self.assertIn(addddmin, 欢迎登录系统) # 不包含...用例不通过案例 工具类中有一个求和的测试方法def add(a, b): sum ab return sum使用断言测试该求和方法是正确import unittest from tools import add class TestAdd(unittest.TestCase): def test_1(self): self.assertEqual(3, add(1, 2)) def test_1(self): self.assertEqual(5, add(3, 2)) def test_1(self): self.assertEqual(7, add(4, 3)) def test_1(self): self.assertEqual(13, add(8, 5))三、参数化通过参数的方式来传递数据从而实现数据和脚本分离。并且可以实现用例的重复执行。unittest测试框架本身不支持参数化但是可以通过安装unittest扩展插件parameterized来实现。安装parameterizedpip install parameterized参数化实现导包from parameterized import parameterized使用parameterized.expand装饰器可以为测试函数的参数进行参数化我们继续对以上的求和方法使用参数化的方式进行测试代码运行的时候可以使用多种方式运行比如直接右键运行、main方法运行、suite运行等import unittest from tools import add from parameterized import parameterized data [(1, 1, 2), (2, 3, 5), (3, 4, 7), (10, 11, 21)] class TestAdd(unittest.TestCase): parameterized.expand(data) def test_1(self, a, b, expect): self.assertEqual(expect, add(a, b)) if __name__ __main__: unittest.main()扩展我们将参数化的测试数据保存在json文件中如下[ [1, 1, 2], [2, 3, 5], [3, 4, 7], [10, 11, 21] ]读取json文件中的数据import json def build_add_data(): with open(add_data.json,encodingutf-8)as f: data json.load(f) return data将读取的json文件中的数据当作参数传到测试用例中import unittest from read_json import build_add_data from tools import add from parameterized import parameterized class TestAdd(unittest.TestCase): parameterized.expand(build_add_data) def test_1(self, a, b, expect): self.assertEqual(expect, add(a, b)) if __name__ __main__: unittest.main()以上就是将数据保存在json文件中实现参数化json文件中的数据复杂的时候我们可以使用如下方式定义并且推荐此方法此时读取json文件的方法需要修改为def build_add_data(): with open(add_data.json, encodingutf-8)as f: data_list json.load(f) new_list [] for data in data_list: a data.get(a) b data.get(b) expect data.get(expect) new_list.append((a, b, expect)) return new_list四、生成HTML测试报告安装pip install HTMLTestReport测试报告生成步骤1导包2封装测试套件3实例化HTMLTestReport对象report HTMLTestReport(file_path, [title], [description])参数说明file_path测试报告文件路径title可选参数为报告标题如XXX测试报告description可选参数为报告描述信息4执行测试套件report.run(suite)继续使用上述示例针对求和的方法进行测试报告的生成import unittest from htmltestreport import HTMLTestReport from testadd_paramterized import TestAdd # 测试套件 suite unittest.TestSuite() suite.addTest(unittest.makeSuite(TestAdd)) # 运行对象 runner HTMLTestReport(test_add_report.html, 求和运算测试报告, 这是报告的描述) runner.run(suite)运行之后将生成的html报告文件使用浏览器打开查看生成的报告报告中执行失败的用例是故意写错用来查看执行失败的情况使用绝对路径保存测试报告在实际项目中往往会出现文件找不到的情况此时需要使用绝对路径。步骤1在项目的根目录中创建一个配置文件app.py或者config.py2在这个文件中获取项目的目录在其他代码中拼接起来完成绝对路径获取当前文件的绝对路径abspath os.path.abspath(__file__)获取文件路径的目录名称dirname os.path.dirname(filepath)案例app.py中的代码内容import os # 获取当前文件的绝对路径 path1 os.path.abspath(__file__) print(path1) # 获取文件路径的目录名称 path2 os.path.dirname(path1) print(path2) # 实际中直接合起来写就行 BASE_DIR os.path.dirname(os.path.abspath(__file__)) if __name__ __main__: print(BASE_DIR)运行结果代码中的使用# 测试套件 suite unittest.TestSuite() suite.addTest(unittest.makeSuite(TestAdd)) # 运行对象 report_path app.BASE_DIR test_add_report.html # 报告的路径 runner HTMLTestReport(report_path, 求和运算测试报告, 这是报告的描述) runner.run(suite)五、测试用例跳过直接将测试函数标记成跳过unittest.skip(代码未完成)根据条件判断测试函数是否跳过unittest.skipIf(condition, reason)示例import unittest ver 10 class TestSkip(unittest.TestCase): unittest.skip(此用例跳过这是跳过的原因) def test_1(self): print(测试方法一) unittest.skipIf(ver 10, 迭代版本大于等于10此用例跳过) def test_2(self): print(测试方法二) def test_3(self): print(测试方法三) if __name__ __main__: unittest.main()最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈这些资料希望能给你前进的路上带来帮助。​视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询