关于Unittest单元测试框架,最怕的是会用却不知为什么

发表于:2020-12-30 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:蜀山客    来源:知乎

  1、Unittest介绍
  为什么要学习单元测试框架?
  测试用例的组织与运行需要单元测试框架的参与,从而满足不同测试场景的需要,单元测试框架提供了丰富的比较方法:实际结果与预期结果的对比==测试结果
  单元测试框架提供了丰富的日志:给出测试用例失败与通过的数目及执行失败的原因。
  常见的单元测试框架有哪些?
  Doctest、unittest、pytest、nose等等
  Java--》junit(testng)、C++--》 googleTest、c#--》nunit
  2、Unittest核心组件
  3、Unittest工作原理
  Testcase:一个 testcase 就是一个测试用例。Setup(测试环境的准备)、run(测试执行)、teardown(测试环境的还原)。
  Testsuite(集合或套件):多个测试用例的集合就是 suite,一个suite可以包含多个测试用例,也可以嵌套 suite。
  TestLoader:用来加载 testcase到testsuite 中的。
  TestTestRunner:用例执行测试用例(run 方法),测试结果会保存在 TestTestresult 中。
  fixture:一个测试用例环境的搭建和销毁。
  4、Unittest单元测试用例的组织
  构建单元测试用例。
  场景:以字符串替换举例
  5、构建测试套件(优化测试用例)
  单元测试用例的增多,在各个测试代码中会有很多相似的操作,考虑setUp(测试环境的准备)、tearDown(测试环境的还原)。
  6、组织多个测试用例(深度优化测试用例)
  测试用例的继续优化:所有的测试用例不需要都用单独的类进行存放,该方式比较耗时,通过test开头的函数来存放测试用例。
  7、构建测试套件
  多个测试用例的集合就是suite,一个suite可以包含多个测试用例,也可以嵌套suite。
  8、测试套件优化
  执行部分测试用例。
  执行某测试类下的全部测试用例,unittest模块中提供一个makesuite。
  9、多个测试类的控制
  10、执行测试
  首先将StringReplaceTestCase放在单独的一个py文件中StringReplace.py
  将注释放在方法内,作为方法的说明。
  执行部分测试用例,创建一个test_suite.py,用户控制措施用例的执行。
  运行全部测试用例。
  11、测试用例的跳过
  修改StringReplace文件,理解skip、skipif、skipunless
  12、Unittest框架总结
  unittest.TestCase:TestCase类,所有测试用例类继承的基本类。class Test(unittest.TestCase):
  unittest.main():使用可以方便的将一个单元测试模块变为可直接运 行的测试脚本。
  unittest.TestSuite():unittest框架的TestSuite()类是用来创建 测试套件的。
  unittest.TextTestRunner():unittest框架的TextTestRunner()类, 通过该类下面的run()方法来运行suite所组装的测试用例,入参为 suite测试套件。
  unittest.skip():装饰器,当运行用例时,有些用例可能不想执行,可用装饰器 暂时屏蔽该条测试用例。常见的用法如想调试某一测试用例,可先屏蔽其他用例。
  @unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说 明跳过测试的原因。 
  @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时, 跳过装饰的测试,并说明跳过测试的原因。
  @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件 为假时,跳过装饰的测试,并说明跳过测试的原因。
  setUp()方法用于测试用例执行前的初始化工作。如测试用 例中需要访问浏览器,可以在setUp中实例化浏览器驱动。 
  tearDown():tearDown()方法用于测试用例执行之后的善后工作、关 闭浏览器。
  断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通 过判断测试得到的实际结果和预期结果是否相等决定的。
  assertEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,相等则测试用例通 过。
  assertNotEqual(a,b,[msg='测试失败时打印的信息']):断言a和b是否相等,不相等则测试 用例通过。
  assertTrue(x,[msg='测试失败时打印的信息']):断言x是否True,是True则测试用例通过。
  addTest(): 方法是将测试用例添加到测试套件中。
  run(): 方法是运行测试套件的测试用例,入参为suite测试套件。
  13、HTML报告介绍
  HTMLTestRunner是Python的标准库unittest单元测试框架的一个扩 展,用于生成HTML测试报告。
  下载地址: http://tungwaiyip.info/software/HTMLTestRunner.html
  14、HTML测试结果
  HTMLTestRunner.py下载地址http://tungwaiyip.info/software/HTMLTestRunner.html
  HTMLTestRunner.py的存放路径,是放在C:\Users\Administrator\AppData\Local\Programs\Python37\Lib
  HTMLTestRunner.py是基于python2*开发的,要想能够在python3上使用,需要修改该文件。
  修改汇总: 
  第94行,将import StringIO修改成import io
  第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
  第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
  第766行,将uo = o.decode('latin-1')修改成uo = e
  第772行,将ue = e.decode('latin-1')修改成ue = e
  第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
  基于test_suite文件进行HTML报告生成,存放到D盘名为result.html

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号