python自动化测试学习笔记-8单元测试unittest模块

时间:2021-08-27 18:26:44

官方参考文档:http://docs.python.org/2.7/library/unittest.html

unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the bar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

unittest中的4个重要的概念:test fixture, test case, test suite, test runner

来看一个简单的例子:

import unittest
import random

class MyTest(unittest.TestCase):
def setUp(self):
self.num=range(10)
def testradom(self):
self.assertTrue(random.choice(self.num)in self.num )

def test1(self):
num1=random.choice(self.num)
num2=random.choice(self.num)
self.assertEqual(num1,num2)
def test2(self):
num1=random.choice(self.num)
self.assertTrue(num1<10)

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

执行查看结果:

aaarticlea/png;base64,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" alt="" />

MyTest类继承自unittest.TestCase,

setup用来初始化数据,只会运行一次;

每一个以test开头的方法,都会为其构建TestCase对象,使用unittest.main方法执行函数;所以再写测试用例的时候一定是以test开头

单元测试的加载方式有2种:一种是通过unittest.main()来启动单元测试的测试模块;一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是单元测试的用例

'FunctionTestCase':函数测试用例,即给一个函数作为参数,返回一个testcase实例,可选参数有set-up,tear-down方法
'TestCase':所有测试用例的基本类,给一个测试方法的名字,返回一个测试用例实例
'TestLoader':测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件
loadTestsFromModule(self, module)--根据给定的模块实例来获取测试用例套件
loadTestsFromName(self, name, module=None)
--根据给定的字符串来获取测试用例套件,字符串可以是模块名,测试类名,测试类中的测试方法名,或者一个可调用的是实例对象
这个实例对象返回一个测试用例或一个测试套件
loadTestsFromNames(self, names, module=None) --和上面功能相同,只不过接受的是字符串列表
loadTestsFromTestCase(self, testCaseClass)--根据给定的测试类,获取其中的所有测试方法,并返回一个测试套件
'TestProgram':命令行进行单元测试的调用方法,作用是执行一个测试用例。其实unittest.main()方法执行的就是这个命令,
而这个类实例时默认加载当前执行的作为测试对象,
原型为 __init__(self, module='__main__', defaultTest=None, argv=None, testRunner=xx, testLoader=xx)
其中module='__main__'就是默认加载自身
'TestResult':测试用例的结果保存实例,通常有测试框架调用
'TestSuite':组织测试用例的实例,支持测试用例的添加和删除,最终将传递给testRunner进行测试执行
'TextTestRunner':进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。显示测试名称,即完成的测试结果,其过同执行单元测试脚本时添加-v参数
'defaultTestLoader':其实就是TestLoader
'findTestCases', 'getTestCaseNames':这个2个就不用解释了
'main': 其实就是TestProgram
'makeSuite':通常是由单元测试框架调用的,用于生产testsuite对象的实例

使用测试套件的方法,完整测测试步骤分三步:

第一步testloader根据传入的参数获得相应的测试用例,即对应具体的测试方法,
然后makesuite在把所有的测试用例组装成testsuite,最后把testsiute传给testrunner进行执行。
而我们通常执行的unittest.main(),其实就是unittest.testprom方法,其执行的功能就是上面分析的三步,在第一步中其传入的参数是自身的模块__main__;
在第二步中把自身模块中的所有测试类中中的测试方法提取出来,并生成测试套件;最后再把测试套件传递给testrunner进行具体的测试。

最后给出一个完整的单元测试组织代码,把该代码放到单元测试用例文件的同一个目录后执行该脚本,即可执行所有的测试用例文件。

例子:

import unittest
import random class MyTest(unittest.TestCase):
def setUp(self):
self.num=range(10)
def testrandom(self):
self.assertTrue(random.choice(self.num)in self.num ) def test1(self):
num1=random.choice(self.num)
num2=random.choice(self.num)
self.assertEqual(num1,num2)
def test2(self):
num1=random.choice(self.num)
self.assertTrue(num1<10) if __name__ == '__main__':
#unittest.main()
#定义一个测试套件
suite=unittest.TestSuite()
#添加测试用例
#添加单个测试用例
suite.addTest(MyTest('test1'))
suite.addTest(MyTest('test2'))
suite.addTest(MyTest('testrandom'))
unittest.TextTestRunner(verbosity=2).run(suite)

unittest.suite(),创建一个测试套件,suite.addTest()添加单个用例到测试套件中,需要把每一个要执行的用例都添加一遍,unittest.TextTestRunner().run()执行测试测试套件的所有用例;

我们也可以用addTests()方法添加多个测试用例,用makesuite(),搜索所有测试用例添加到测试套件,如下:

import unittest
import random class MyTest(unittest.TestCase):
def setUp(self):
self.num=range(10)
def testrandom(self):
self.assertTrue(random.choice(self.num)in self.num ) def test1(self):
num1=random.choice(self.num)
num2=random.choice(self.num)
self.assertEqual(num1,num2)
def test2(self):
num1=random.choice(self.num)
self.assertTrue(num1<10) if __name__ == '__main__':
#unittest.main()
#定义一个测试套件
suite=unittest.TestSuite()
#添加测试用例
#添加单个测试用例
suite.addTests(unittest.makeSuite(MyTest))
unittest.TextTestRunner(verbosity=2).run(suite)

执行查看结果:

test1 (__main__.MyTest) ... ok
test2 (__main__.MyTest) ... ok
testrandom (__main__.MyTest) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

为了能方便的查看到执行的测试用例通过情况,我们可以引用HTMLTestRunner生成测试报告,如下:

import unittest
import random
import HTMLTestRunner class MyTest(unittest.TestCase):
def setUp(self):
self.num=range(10)
def testrandom(self):
self.assertTrue(random.choice(self.num)in self.num ) def test1(self):
num1=random.choice(self.num)
num2=random.choice(self.num)
self.assertEqual(num1,num2)
def test2(self):
num1=random.choice(self.num)
self.assertTrue(num1<10) if __name__ == '__main__':
#unittest.main()
#定义一个测试套件
suite=unittest.TestSuite()
#添加测试用例
#添加单个测试用例
# suite.addTest(MyTest('test1'))
# suite.addTest(MyTest('test2'))
# suite.addTest(MyTest('testrandom'))
suite.addTests(unittest.makeSuite(MyTest))
#unittest.TextTestRunner(verbosity=2).run(suite)
runner=HTMLTestRunner.HTMLTestRunner(stream=open('测试报告.html','wb'),title='unittest测试报告',description='示例')
runner.run(suite)

上述需要注意的是,生成文件的类型需要是html格式的文件,否则无法打开,执行查看结果:

aaarticlea/png;base64,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" alt="" width="753" height="172" />

为了是报告更加美化。我们可以使用BeautifulReport来运行测试用例,如下:

import unittest
import random
import HTMLTestRunner
from BeautifulReport import BeautifulReport
class MyTest(unittest.TestCase):
def setUp(self):
self.num=range(10)
def testrandom(self):
self.assertTrue(random.choice(self.num)in self.num ) def test1(self):
num1=random.choice(self.num)
num2=random.choice(self.num)
self.assertEqual(num1,num2)
def test2(self):
num1=random.choice(self.num)
self.assertTrue(num1<10) if __name__ == '__main__':
#unittest.main()
#定义一个测试套件
suite=unittest.TestSuite()
#添加测试用例
#添加单个测试用例
# suite.addTest(MyTest('test1'))
# suite.addTest(MyTest('test2'))
# suite.addTest(MyTest('testrandom'))
suite.addTests(unittest.makeSuite(MyTest))
#unittest.TextTestRunner(verbosity=2).run(suite)
# runner=HTMLTestRunner.HTMLTestRunner(stream=open('测试报告.html','wb'),title='unittest测试报告',description='示例')
# runner.run(suite)
result=BeautifulReport(suite)
result.report(description='测试案例',filename='漂亮的测试报告')

执行查看结果,生成了html文件:

aaarticlea/png;base64,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vvH+n7L/m5z63uV9/h7uI9EWqCjRFgCA+ETb3e540rYbYdN7bAft2OrG7mi7sDrTvQBhULTd9W61Vj7adu7b3Svv3hMHSzCNqXoaW9uNC7UnfnKt+/frc+dqU812kiRJ69Kzz/34vZ31uXOFLLv83ROPzl7t/unqD8ZPvLC86+1bs+Nn/ufb3aLabk4eH5RQW5fGahca9+Cj5t/zR888+5N3d1qz43tG2/aVl7/xyMv/0k6SJHl35luj3XC8/sPnnnn1vZ3WpbF8tO3/NBdGO//67suP1AdG2PW5cwOP8e7193CURFugokRbAADiE217+o/QDl5zaS1ZqWWZdWZidb54ZW036fbfaZtej5DG372ibTcNd+/M3R1tD/XU7YESTHbUtL+6ZlGyoz/atq/OPv71b37njfWtrd/+4/fGz/79T3f/r2svPV975icf9f7cmh2vTxbr7M6f3v/ptx8+ffGfdp13PfhHzdkn2m4tfvvk46922u+1nz3/d8+8WniTPaNte2vjne8/fvrxV9P3vfbT5x558tW+37Hzp/d//uzZh6ff2ir393DURFugokRbAADiE213S/Po3idtu0V1YXnALbSZ3dcjpBl3eeVAJ22PwgESzNZb06fOfPeddpLkzrF27Dr92h9tkyTZuvzy46dHa/XRU8/9dGPQLa273iT/WxpTnVtlxy8213fu5UfNf4I9o23r0tjx5xf3+X/3DYi2rdnx9DOffeaHlz8efC9t79rc89ON/P+svf4e7g/RFqgo0RYAgPhE210283fUJske0baz5ZWk70TtYvfFg+60XVhOa+wBTtoehbtNMO2rP3r81PnZ7ldi3XW0vdG8cPbhp+Yuf7zz8b/+5B9On3z0heVdp0f3jbadj7G18asfPHPizPRbe/8/we72o+Y/wR7Rtv32xTPfmHl3z1+Z7HPSNtn50/u/nPpW7fEf7Xl5QtLe2njnlafOnPpO3wnivf4ejppoC1SUaAsAQHyibb+0k3Yvn02SAXfaJr1QW7y7tvfje0bbZHPpWPeChaqftG1ffe2ps49efDv7kfW5c/13DuSurE12Rdv1uXMnLv6qd9j05i++XRu/tJ6dRa2PTjWTpDm563qE59/cfUL16iuPnrzwVpI0LnR+tpaV1gN81Jw9ou211544/uSPrw34gdyP7nunbXvp+dr5S/9333e4OvvI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LNqCdO5F1ulSy3fFxn+7tlpw3kJyX7JuIxyfeLt4cuncWp/v3rPnFwAAAADgoD28c+PKlStXrtyo0tuOWtp2FB6PkOyWjQvcsp22zXOdu5B1v+z+1srScvyA3dXkkNzObtzufc/atymz0xYAAAAACFe7sb1Ssbetp7RN78MtvRFZ/oZjnR24cS27nL23WOd4hNaFpcWTq+fW+u/zBQAAAAA4eNnGtlJvO1pp2+/Eg+SAgmZ3m21UvtM2Sn2wc1RCM4q6W2vTW2jbpW3y6VudI247/zalLQAAAAAQilRje+POw/wf+xmltF09t9LdWtvneIRU61q207a7JzepejuHHnQ34XZq2U5pm/SzTaUtAAAAABCowoq2Sm87Qmmb7UaLStvsKQrlNyLLPSD5yslXaMaVbvvbJS1t+xDbpuMRAAAAAIAwfXWrTznb7W1vfVX4mUOVtq3N5e5O2PbH+u207egcj9DVc6ZtUuB2j7jtPj6paPe3VpJatrmWPN5OWwAAAAAgXA/v3CjeTtv3L6IoGnanLQAAAAAAtVLaAgAAAAAERGkLAAAAABAQpS0AAAAAQECUtgAAAAAAAVHaAgAAAAAERGkLAAAAABAQpS0AAAAAQECUtgAAAAAAAVHaAgAAAAAERGkLAAAAABAQpS0AAAAAQECUtgAAAAAAAVHaAgAAAAAERGkLAAAAABAQpS0AAAAAQECO/Pn+NyIiIiIiIiIiIiISSOy0BQAAAAAIiNIWAAAAACAgSlsAAAAAgIAobQEAAAAAAqK0BQAAAAAIiNIWAAAAACAgSlsAAAAAgIAobQEAAAAAAqK0BQAAAAAIiNIWAAAAACAgSlsAAAAAgIAobQEAAAAAAqK0BQAAAAAIiNIWAAAAACAgSlsAAAAAgICMXtq++Lcf3/3Db/+nX28sNNZFREREREREREREZCIZvbR99w+/PfB/vYiIiIiIiIiIiMicZfTS9n/+v//rgf/rRUREREREREREROYso5e2B/5PFxEREREREREREZm/KG1FREREREREREREAorSVkRERERERERERCSgKG1FREREREREREREAorSVkRERERERERERCSgKG1FREREREREREREAorSVkRERERERERERCSgKG3XFxrrP/t/tvdu//PeP/xRRKad2//8769dOvBFwIIgEkTCWxBEREREws+/fP1nEZnd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B9/962//8csDXwQsCBCCABcEERERkfCjtIXZpbQdkH9/7dIXt/957x/+KCJTzhe3//l/2/u/DnwRsCCIhJAAFwQRERGR8PMvX/9ZRGY3/aa20lZEREREREREREQkoChtRURERERERERERAKK0lZEREREREREREQkoChtRURERERERERERAKK0lZEREREREREREQkoChtRURERERERERERAKK0lZEREREREREREQkoChtRURERERERERERAKK0lZEREREREREREQkoChtRURERERERERERAKK0lZEREREREREREQkoIxe2gIAAAAAMHFKWwAAAACAgChtAQAAAAACorQFAAAAAAiI0hYAAAAAICBKWwAAAACAgChtAQAAAAACorQFAAAAAAiI0hYAAAAAICBKWwAAAACAgIxe2v75z3/+H1CBoQI5JgUQMmsUBMWUhKCYklRkqDC+sUrbJ0++FxkYQ0UkF5NCREKONUokqJiSIkHFlJSKMVRk/ChtpfYYKiK5mBQiEnKsUSJBxZQUCSqmpFSMoSLjR2krtcdQEcnFpBCRkGONEgkqpqRIUDElpWIMFRk/SlupPYaKSC4mhYiEHGuUSFAxJUWCiikpFWOoyPhR2krtMVREcjEpRCTkWKNEgoopKRJUTEmpGENFxo/SVmqPoSKSi0khIiHHGiUSVExJkaBiSkrFGCoyfpS2UnsMFZFcTAoRCTnWKJGgYkqKBBVTUirGUJHxo7SV2mOoiORiUohIyLFGiQQVU1IkqJiSUjGGiowfpa3UHkNFJBeTQkRCjjVKJKiYkiJBxZSUijFUZPwobaX2GCoiuZgUIhJyrFEiQcWUFAkqpqRUjKEi40dpK7XHUBHJxaQQkZBjjRIJKqakSFAxJaViDBUZP0pbqT2GikguJoWIhBxrlEhQMSVFgoopKRVjqMj4qbG03fvw1InFs430B7fPnlg8eeKtj/YO+seWaeagl6obG2+dPLG6E/9x78NTJxa7f3zyxUdv5kapSP056EmRjZVZRLKZ9Bp1Y+Otk/lrwnS++OjN9CoUL0qd39RPdk4vdj49/d9J9j48lXpwO90vsnPaL3qZ8QyYkqNdzU7uGrixejI7Z9sTsPjr39h4y1WHzHYq/JbMPAPNfHDx5Ontg/8RZDoZNFR2Tg//LKyxevLE4qmNLzr/ffLND28c+E8q9aW+0jZZ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" alt="" width="1013" height="519" />