自动化测试之单元测试Unittest框架

1、什么是单元测试unittest

简介:讲解什么是单元测试,使用场景和unittest介绍

1、单元测试:
是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,
如C语言中单元指一个函数,

function add(int a, int b){

	return a + b
}

Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。
总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试

2、unittest 框架是 python的单元测试框架, java -> junit
	官网:https://docs.python.org/2/library/unittest.html

3、unnitest = TestCase + TestResult  执行用例 + 结果

2、单元测试框架unittest入门

简介:讲解单元测试框架 unittest的使用
1、用import语句引入unittest模块

2、测试的类都继承于TestCase类

3、setUp() 测试前的初始化工作;tearDown()测试后的清除工作  (在每个测试方法运行时被调用)

注意:
	1、所有类中方法的入参为self,定义方法的变量也要“self.变量
	2、定义测试用例,以“test”开头命名的方法,方法的入参为self
	3、unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们
	4、自己写的py文件不能,用 unittest.py 命名,不然会找不到TestCase

	成功是输出 . 失败是 F

py开发工具 pycharm
# -*- coding: UTF-8 -*-
import unittest

class UserTestCase(unittest.TestCase):
 
    def tearDown(self):
       print("==tearDown==")
      
    def setUp(self):
    	print("==setUp==")
    	self.name="小D课堂"
    	self.age=28

    def test_name(self):        
        print("调用test_name")
        #断言是否相同
        self.assertEqual(self.name, "小D课堂", msg="名字不对")

    def test_isupper(self):
    	print("调用test_isupper")
    	#断言是否为 true, msg是断言错误的提示信息
    	self.assertFalse("xdclass".isupper(), msg="不是大写")

    def test_age(self):
    	print("调用test_age")
    	self.assertEqual(self.age,28)
      
if __name__ == '__main__':
    unittest.main()

3、测试套件TestSuite介绍

简介:讲解测试套件TestSuite的基本介绍和使用场景

需求: 
	1、利用unnitest执行流程测试而非单元测试
	2、控制unnitest的执行顺序

1、unittest.TestSuite() 类来表示一个测试用例集
	1)用来确定测试用例的顺序,哪个先执行哪个后执行

	2)如果一个class中有四个test开头的方法,则加载到suite中时则有四个测试用例
	
	3)由TestLoder加载TestCase到TestSuite

	4)verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告
		默认1 会在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”

2、TextTestRunner()  文本测试用例运行器

3、run()方法是运行测试套件的测试用例,入参为suite测试套件
# -*- coding: UTF-8 -*-
import unittest

class XdclassTestCase(unittest.TestCase):
    def setUp(self):
        self.age = 32
        self.name = "小D课堂"
        print(" setUp method=======")

    def tearDown(self):
        print(" tearDown method=======")
        #断言是否相同
        self.assertEqual('foo'.upper(), 'FOO')

    def test_one(self):        
        print(" test_one 二当家小D 来了")
        #断言是否相同
        self.assertEqual(self.name, "小D课堂",msg="名字不对")

    def test_two(self):
        print(" test_two 前端 来了")
        #断言是否为 true, msg是断言错误的提示信息
        self.assertFalse('XD'.isupper(), msg="不是大写")
        
    def test_three(self):
        print(" test_three 后端 来了")
        self.assertEqual(self.age,32)

    def test_four(self):
        print(" test_four 小D课堂官网上线啦 https://www.xdclass.net")
        self.assertEqual(self.age,32)

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(XdclassTestCase("test_two"))
    suite.addTest(XdclassTestCase("test_one"))
    
    suite.addTest(XdclassTestCase("test_three"))
    suite.addTest(XdclassTestCase("test_four"))

    #verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告(默认)、2 是详细报告
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

4、高级实战系列之测试套件TestSuite生成测试报告

简介:HTMLTestRunner介绍

1、HTMLTestRunner介绍
HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告,无法通过pip安装。 
首先要下 HTMLTestRunner.py 文件,将下载的文件放入…\python\Lib目录下 (或者同个路径)

注意点:
	python2和python3,语法不一样,导致HTMLTestRunner在python3不兼容
	解决办法:导入课程资料里面修改好的HTMLTestRunner.py (该版本是网上的小伙伴修改好的)

4.1 初版测试报告

# -*- coding: UTF-8 -*-
import unittest
import HTMLTestRunner
import time

class XdclassTestCase(unittest.TestCase):
    def setUp(self):
        self.age = 32
        self.name = "小D课堂"
        print(" setUp method=======")


    def tearDown(self):
        print(" tearDown method=======")
        #断言是否相同
        self.assertEqual('foo'.upper(), 'FOO')


    def test_one(self):        
        print(" test_one 二当家小D 来了")
        #断言是否相同
        self.assertEqual(self.name, "小D课堂",msg="名字不对")


    def test_two(self):
        print(" test_two 前端 来了")
        #断言是否为 true, msg是断言错误的提示信息
        self.assertTrue('XD'.isupper(), msg="不是大写")
        


    def test_three(self):
        print(" test_three 后端 来了")
        self.assertEqual(self.age,32)



    def test_four(self):
        print(" test_four 小D课堂官网上线啦 https://www.xdclass.net")
        self.assertEqual(self.age,32)




if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(XdclassTestCase("test_two"))
    suite.addTest(XdclassTestCase("test_one"))
    
    suite.addTest(XdclassTestCase("test_three"))
    suite.addTest(XdclassTestCase("test_four"))

    #verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告(默认)、2 是详细报告
    #runner = unittest.TextTestRunner(verbosity=2)
    #runner.run(suite)
    #文件名中加了当前时间,为了每次生成不同的测试报告
    file_prefix = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    print(file_prefix)
    #创建测试报告,此时这个文件还是空文件
    # wb 以二进制格式打开一个文件,只用于写入,如果文件存在则覆盖,不存在则创建
    fp = open("./"+file_prefix+"_result.html","wb")
    # stream定义一个测试报告写入的文件,title就是标题,description就是描述
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"小D课堂 测试报告",description=u"测试用例执行情况")
    
    runner.run(suite)
    fp.close()

4.2 测试报告优化

# -*- coding: UTF-8 -*-
import unittest
import HTMLTestRunner
import time

class XdclassTestCase(unittest.TestCase):
    def setUp(self):
        self.age = 32
        self.name = "小D课堂"
        print(" setUp method=======")


    def tearDown(self):
        print(" tearDown method=======")
        #断言是否相同
        self.assertEqual('foo'.upper(), 'FOO')


    def test_one(self):
        u"test_one方法"
        print(" test_one 二当家小D 来了")
        #断言是否相同
        self.assertEqual(self.name, "小D课堂",msg="名字不对")


    def test_two(self):
        u"test_TWO方法说明"
        print(" test_two 前端 来了")
        #断言是否为 true, msg是断言错误的提示信息
        self.assertTrue('XD'.isupper(), msg="不是大写")
        


    def test_three(self):
        u"这是首页登录测试用例"
        print(" test_three 后端 来了")
        self.assertEqual(self.age,32)



    def test_four(self):
        print(" test_four 小D课堂官网上线啦 https://www.xdclass.net")
        self.assertEqual(self.age,32)




if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(XdclassTestCase("test_two"))
    suite.addTest(XdclassTestCase("test_one"))
    
    suite.addTest(XdclassTestCase("test_three"))
    suite.addTest(XdclassTestCase("test_four"))

    #verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告(默认)、2 是详细报告
    #runner = unittest.TextTestRunner(verbosity=2)
    #runner.run(suite)
    #文件名中加了当前时间,为了每次生成不同的测试报告
    file_prefix = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    print(file_prefix)
    #创建测试报告,此时这个文件还是空文件
    # wb 以二进制格式打开一个文件,只用于写入,如果文件存在则覆盖,不存在则创建
    fp = open("./"+file_prefix+"_result.html","wb")
    # stream定义一个测试报告写入的文件,title就是标题,description就是描述
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"小D课堂 测试报告",description=u"测试用例执行情况")
    
    runner.run(suite)
    fp.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值