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文件,用浏览器查看,如下图:

原文地址:https://www.cnblogs.com/xiaoyujade/p/13536544.html