python unittest库的入门学习

  1. unittest的基本概念

  2. 创建测试用例类
  3. unittest的使用示例

一、基本概念

Testcase是所有测试用例的基类

TestSuite是创建一个测试“容器”,可以往里面加case

TextTestRunner是运行测试用例

二、如何创建测试用例类

所有的用例类都需要继承TestCase

测试用例中setUp和tearDown是每一个case开始和结束的时候都回执行的

测试用例必须以test开头

还可以在用例类中定义类方法,setUpClass和tearDownClass,在每一个用例类的开始和结尾处都执行一遍。

import unittest
#测试类必须要继承unittest.TestCase
class TestMethod(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('类执行之前')
    @classmethod
    def tearDownClass(cls):
        print('类结束之后')
    #每一个测试方法开始要执行的方法
    def setUp(self):
        print("测试方法开始啦")
    #每一个测试方法结束后执行的方法
    def tearDown(self):
        print("测试方法结束啦")
    #测试方法必须要以test开头!!!
    def test01(self):
        print("这个是测试方法01")

    def test02(self):
        print("这个是测试方法02")
if __name__=="__main__":

 

三、使用示例:

import unittest
import json
from demo import RunMain

class TestMethod(unittest.TestCase):

	def setUp(self):
		self.run = RunMain()


	def test_01(self):
		data = {
			'username':'nick',
			'password':'123',
			'errorCode':'1000'
		}

		url = "http://localhost:8000/login/"
		res = self.run.run_main(url, 'POST', data)

		#self.assertEqual(res['errorCode'],'1000',"测试成功")
		print(res)

		# 打印全局变量
		#print(userid)


	#@unittest.skip('test_02')
	def test_02(self):

		# 全局变量
		#globlas()['userid'] = '10000'

		data = {
			'username':'nick',
			'password':'123',
			'errorCode':1001
		}

		url = "http://localhost:8000/login/"
		res = self.run.run_main(url, 'POST', data)
		
		#self.assertEqual(res['errorCode'],'1001',"测试失败")
		
		print(res)

if __name__ == '__main__':
	#unittest.main()

	suite = unittest.TestSuite()
	suite.addTest(TestMethod('test_02'))
	suite.addTest(TestMethod('test_01'))
	unittest.TextTestRunner().run(suite)

    globlas()['userid'] = '10000'是全局变量。比如第一个test的执行需要依赖第二个test,这时候就需要一个global,让第二个test也可以访问第一个test方法中的变量或者返回值

       assertEqual是断言

      @unittest.skip这个装饰器是用于过滤不需要执行的test

      main方法中的unittest.main()是执行这个类中的所有代码,如果只想只想部分test,可以先创建一个“容器”suite,再往里面addtest,最后执行容器

  unittest.TextTestRunner().run(suite)
示例三:
import HTMLTestRunner        
        import unittest
        class MyTest(unittest.TestCase):#继承unittest.TestCase
            def tearDown(self):
                #每个测试用例执行之后做操作
                print('111')
            def setUp(self):
                #每个测试用例执行之前做操作
                print(22222)
            def test_run(self):
                # self.assertEqual(1,1)
                self.assertIs(1,1)
                #测试用例
            def test_run2(self):
                # self.assertEqual(1,1)
                self.assertIs(1,1)
                #测试用例
            def test_run3(self):
                # self.assertEqual(1,1)
                self.assertIs(1,1)
                #测试用例
            def test_run1(self):
                # self.assertEqual(1,1)
                self.assertIs(1,1)
                #测试用例
        if __name__ == '__main__':
            test_suite = unittest.TestSuite()#创建一个测试集合
            test_suite.addTest(MyTest('test_run1'))#测试套件中添加测试用例
            #test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法
            fp = open('res.html','wb')#打开一个保存结果的html文件
            runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='api测试报告',description='测试情况')
            #生成执行用例的对象
            runner.run(test_suite)
            #执行测试套件

  如果执行了之后无法生成测试报告,那就直接在命令行中执行这个py文件就行了,这个是pycharm的毛病。。。

可以参考:https://blog.csdn.net/xie_0723/article/details/50825310

更多uinttest的资料https://www.cnblogs.com/feng0815/p/8045850.html

posted @ 2018-06-10 21:10  水如如  阅读(2271)  评论(0编辑  收藏  举报