多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

python unittest自动化测试框架总结

更新时间:2022-07-26 09:21:52 作者:多测师 浏览:42

  一、unittest工作原理

  unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

  TestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。

  TestSuite:测试用例集合,可以通过addTest()方法手动增加Test Case,也可以通过TestLoader自动添加Test Case,TestLoader在添加用例时,会没有顺序。

  TestRunner:运行测试用例的驱动类,可以执行TestCase,也可以执行TestSuite,执行后TestCase和TestSuite会自动管理TESTResult。

  TestFixture:简单来说就是做一些测试过程中需要准备的东西,比如创建临时的数据库,文件和目录等,其中setUp()和setDown()是最常用的方法

  整个的流程就是首先要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TestTestRunner来运行TestSuite,运行的结果保存在TextTestReusult中,整个过程集成在unittest.main模块中。

python unittest自动化测试框架总结

  二、例子如下:

  创建一个函数集mathfunc.pyc

  def add(a,b):

  return a+b

  def minus(a, b):

  return a-b

  def multi(a, b):

  return a*b

  def divide(a, b):

  return a/b

  接下来是为这些方法写的一个测试:

  test_mathfunc.py

  # -*- coding: utf-8 -*-

  import unittest

  from mathfunc import *

  class TestMathFunc(unittest.TestCase):

  def setUp(self):

  print "do something befor test.prepare environment"

  def tearDown(self):

  print "do something after test.Clean up"

  def test_add(self):

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

  self.assertNotEqual(3,add(2,2))

  @unittest.skip("i don't want to run this case")

  def test_minus(self):

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

  def test_multi(self):

  self.assertEqual(6,multi(2,3))

  def test_divide(self):

  self.assertEqual(2,divide(6,3))

  self.assertEqual(2.5,divide(5,2))

  if __name__ == '__main__':

  unittest.main()

  组织TestSuite

  上面的代码演示了如何编写一个简单的测试,下面说一下怎么控制用例执行的顺序。我们就要用到TestCase,添加到TestCaseDE中的case是会按照添加的顺序执行的。

  来个例子:

  在文件夹中再新建一个文件。test_suite.py

  # -*- coding: utf-8 -*-

  import unittest

  from test_mathfunc import TestMathFunc

  if __name__ == '__main__':

  suite = unittest.TestSuite()

  tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]

  suite.addTests(tests)

  runner = unittest.TextTestRunner(verbosity=2)

  runner.run(suite)

  执行情况跟我们预料的一样,执行了三个case,并且顺序是按照我们添加进去suite的顺序执行的。

  将结果输出到文件中

  修改test_suite.py

  # -*- coding: UTF-8 -*-

  import unittest

  from test_mathfunc import TestMathFunc

  from HTMLTestRunner import HTMLTestRunner

  if __name__ == '__main__':

  suite = unittest.TestSuite()

  #使用这种方法可以对测试用例排序

  #tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]

  #suite.addTests(tests)

  #使用TestLoader的方法传入TestCase

  suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestMathFunc))

  #在同目录下生成txt格式的测试报告

  #with open('UnittestTextReport.txt', 'a') as f:

  #runner = unittest.TextTestRunner(stream=f, verbosity=2)

  #runner.run(suite)

  with open('HTMLReport.html','w') as f:

  runner = HTMLTestRunner(stream = f,

  title = u'测试报告',

  description = u'测试用例的执行情况',

  verbosity = 2

  )

  runner.run(suite)

  执行此文件,可以看到,在同目录下生成了一个TXT文件;也可以把测试结果以html的格式输出到页面上。

  小结:

  1、unittest是python自带的单元测试框架,可以用来作为我们自动化测试框架的用例组织执行框架

  2、unittest流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。

  3、一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。

  4、verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。

  5、可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。

  6、用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境

  7、我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。

  8、参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。

  以上内容为大家介绍了python unittest自动化测试框架总结,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部