zoukankan      html  css  js  c++  java
  • unittest介绍和应用

    unittest应用于自动化接口测试,ddt数据驱动

    1.unitetest核心概率

    1-1Unitetest核心要素

    [ Unitetest介绍 ] (http://www.manongjc.com/article/62710.html)

    1. TestCase
    2. TestSuite
    3. TextTestRunner
    4. Fixture
    • 测试用例-- TestCASE

      1. 测试用例必须在类中

      2. 测试用例所在的类,必须继承TestCase

      3. 测试用例的方法名称必须以test开头

      4. 测试用例的执行顺序,按照Ascill码顺序(0~9,A~Z,a~z)

      5. 利用父类TestCase的assertXXXX方法来断言

      6. 用@unittest.skip(reason)装饰来跳过测试用例

    • 测试固件--testfixture

      1.主要工作是【初始化和善后】

      2.测试固件分为两种,一种是类级别的,一种是方法级别的

      3.类级别的测试固件,所有测试用例执行之前与之后运行一次

      4.方法级别的测试固件,每个测试用例执行之前与之后都运行一次

    • 测试套件--testsuit

      用来组织测试用例的。

      方法一:用例逐个添加到suite

        suite = unittest.TestSuite()
      suite.addTest(MyTest200("test_203"))
      suite.addTest(MyTest200("test_201"))

      方法二:用例放入列表中,再添加到suite

        suite = unittest.TestSuite()
      list=[类名1("方法名1"),类名2("方法名2")]
      suite.addTests(list)

      方法三:通过TestLoader类的discover 方法来

        unittest.defaultTestLoader.discover('用例所在的模块', pattern="*通配*.py")

      discover(start_dir,pattern='test*.py',top_level_dir=None)

      -start_dir:这个是待执行用例的目录。

      -pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的所有脚本。

      -top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。

    • 执行器--testrunner

      • 是用来执行测试用例的

          runner=unittest.TextTestRunner() #实例化TestRunner类
        runner.run(suite)#执行用例

       

     

     

    2.unitetest应用代码

    2.1 testcase的类(运用ddt数据驱动)

    import unittest
    from  ddt import ddt,data
    from lib.excelManagerLib import readExcel
    from lib.sendCourseReqLib import sendCourseReq
    from lib.loginLib import login
    from lib.courseLib import list,delete
    import json,time
    from config import testCasePath #excel测试用例存放目录
    ​
    path=testCasePath
    testCase=readExcel(path,0) #读取excel的测试用例,返回值为list
    ​
    @ddt
    class ddtTest(unittest.TestCase):
    ​
       #每个testcase运行前,运行此方法
       # def setUp(self):
       #  print('setup运行了')
       #
       # def tearDown(self):
       #  print('teardown运行了')
    #运行开始和结束时分别运行一次
       @classmethod
       def setUpClass(self):
          print('setup运行了,----类级别')
    ​
       @classmethod
       def tearDownClass(self):
          print('teardown运行了,----类级别')
    ​
       def test_001(self):
          sessionID = login('auto', 'sdfsdfsdf')
          cookie = {'sessionid': sessionID}
    ​
       @data(*testCase) #ddt数据驱动
       def test_002(self,row):
          ret = sendCourseReq(row)
          # print(ret)
          time.sleep(0.001)
          colus7 = json.loads(row[6])  # 第7列的值
          # print(colus7)
          # 1-3 断言
          if 'reason' in ret.keys():
             self.assertEqual(ret['retcode'] , colus7['code'])
             # self.assert
          else:
             self.assertEqual(ret['retcode'], colus7['code'],ret['reason'])
    ​
       @unittest.skip('不想运行的原因')
       def test_003(self):
          print('运行算test003')

    2.2 生成测试报告py文件

    import unittest
    from demo.other.demo_ddt import ddtTest
    from ClassicHTMLTestRunner import HTMLTestRunner
    from config import reportpath #测试报告存放路径
    ​
    suite=unittest.defaultTestLoader.discover('demo.other',pattern='demo_ddt.py')
    ​
    path=reportpath
    reportFile=open(path,'wb')
    #第三方插件HTMLTestRunner 可以返回一个runner对象
    runner=HTMLTestRunner(stream=reportFile,verbosity=2,description='用例执行明细',
                          title='xxx项目的测试报告',tester='JINYU')
    runner.run(suite)

     

    生成报告为HTML文件,用浏览器查看,如下图:

  • 相关阅读:
    612.1.004 ALGS4 | Elementary Sorts
    612.1.003 ALGS4 | Stacks and Queues
    612.1.002 ALGS4 | Analysis of Algorithms
    132.1.001 Union-Find | 并查集
    如何优雅使用Coursera ? —— Coursera 视频缓冲 & 字幕遮挡
    Jupyter notebook 使用多个Conda 环境
    如何从 GitHub 上下载单个文件夹
    在jupyter notebook中同时安装python2和python3
    修改ps工具栏字体大小
    python之集合
  • 原文地址:https://www.cnblogs.com/xiaoyujade/p/13536544.html
Copyright © 2011-2022 走看看