首页 > 编程语言 > 详细

python + unittest接口自动化测试

时间:2021-07-22 11:24:40      阅读:29      评论:0      收藏:0      [点我收藏+]

1.unittest库

unittest库是python的内置库,用来对程序进行测试。

组成部分

名称

用途

1>.TestCase

测试用例,执行测试时依次调用setUp(),测试用例内部方法,tearDown()

2>.TestSuite

测试用例的集合,可以通过addTest()来添加,顺序执行内部各个测试用例

3>.TestRunner

运行测试,可以执行TestCase和TestSuite

4>.TestFixture

测试过程前的环境准备和后的清理,最常用的是setUp()和tearDown()

2.使用方法

1>.首先要导入unittest模块,再新建一个继承unittest.TestCase的测试类,测试用例用类方法的形式编写,注意命名必须以test开头。

例:

import unittest
?
class TestXXX(unittest.TestCase):
?
   def test_xxx(self):
?
       pass

 

2>.测试环境准备

需要准备和清理测试环境时,要用到setUp()和tearDown(),还有setUpClass()和tearDownClass()。

例:

import unittest
class TestXXX(unittest.TestCase):
   def setUpClass(self):
       pass # prepare environment for all tests  
   def tearDownClass(self):
       pass # clear environment for all tests
   def setUp(self):
       pass # prepare environment for each test
   def tearDown(self):
       pass # clear environment for the test
   def test_xxx(self):

setUp()和tearDown()会在每个测试用例执行前后各执行一遍而setUpClass()和tearDownClass()只会执行一次,分别在整个测试流程开始和结束时。

 

3>.执行测试

if __name__ == ‘__main__‘:
?
   unittest.main()

这是最简单的执行测试的方法,会执行所有的测试用例

 

TestSuite的使用

在测试类中我们可能定义多个测试用例,但是执行时他们不会按照定义时的顺序执行,而是按照方法名的顺序,可能不是我们想要的情况。这时就要用到TestSuite来限制执行的顺序它还能用来选择执行哪些测试用例

if __name__ == ‘__main__‘:
?
   suite = unittest.TestSuite()
?
   tests = [
?
       TestXXX(‘test_xxx‘),
?
       TestXXX(‘test_yyy‘),
?
       TestXXX(‘test_zzz‘)
?
  ]
?
   suite.addTests(tests)
?
   runner = unittest.TextTestRunner(verbosity=2)
?
   runner.run(suite)

 

这样我们就可以限定执行哪些测试,以什么顺序执行。还可以用addTest()添加测试用例。这里还用到了TestRunner,其中的verbosity参数表示展示测试结果的详细程度,0最简略,2最详细。

4>.跳过某些测试用例

如果我们希望在特定条件下跳过或执行某个测试用例,unittest提供了一些跳过测试用例的方法。

方法:
@unittest.skip(reason)
强制跳过,reason是跳过原因
@unittest.skipIf(condition, reason)
condition为True的时候跳过
@unittest.skipUnless(condition, reason)
condition为False的时候跳过
@unittest.expectedFailure
如果test失败了,这个test不计入失败的case数目
用法:
import unittest
class TestXXX(unittest.TestCase):
   @classmethod
   def setUpClass(self):
       pass
   @classmethod
   def tearDownClass(self):
       pass
   def setUp(self):
       pass
   def tearDown(self):
       pass
   def test_xxx(self):
       pass
   @unittest.skip(‘Skip this test case.‘)
   def test_yyy(self):
       pass # 这个测试用例不会被执行
   def test_zzz(self):
       pass

 

5.>判定方法

unittest提供了很多断言,来判断测试是否成功。

?
断言:self.assertEqual(a,b)
含义:a==b
?
断言:self.assertNotEqual(a,b)
含义:a!=b
?
断言:self.assertTrue(x)
含义:x is True
?
断言:self.assertFalse(x)
含义:x is False
?
断言:self.assertIn(a,b)
含义:a in b
?
断言:self.assertNotIn(a,b)
含义:a not in b
   
也可以直接assert接布尔表达式来判断,例如assert a==1

3.生成测试报告

import HTMLTestRunnerNew
fp = open(‘123.html‘, ‘wb‘) 创测试报告html文件,此时还是个空文件
HTMLTestRunnerNew.HTMLTestRunner(
   stream=fp,
   title=‘接口测试报告‘,
   description=‘测试报告结果如下‘
).run(sui)
# stream = fp 引用文件流
# title 测试报告标题
# description 报告说明与描述
fp.close()   # 关闭文件流,将HTML内容写进测试报告文件

 

python

python + unittest接口自动化测试

原文:https://www.cnblogs.com/PythonDaniu/p/15042713.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!