Python单元测试框架之unittest+requests+ddt+excel接口自动化测试

阅读: 评论:0

Python单元测试框架之unittest+requests+ddt+excel接⼝⾃动
化测试
unitetest是python⾥单元测试框架,是基于 java 的 junit 测试框架 相当于是⼀个 python 版的 junit,除了 unittest,还有⼀个 pytest 框架
unittest.TestCase:TestCase类,所有测试⽤例类继承的基本类
⼀个TestCase的实例就是⼀个测试⽤例。⼀个测试⽤例要包括测试前准备环境的搭建(setUp),执⾏测试代码(run),以及测试后环境的还原(tearDown)。⼀个测试⽤例是⼀个完整的测试单元,通过运⾏这个测试单元,可以对某⼀个功能进⾏验证
unittest.main():使⽤她可以⽅便的将⼀个单元测试模块变为可直接运⾏的测试脚本,main()⽅法使⽤TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试⽅法,并⾃动执⾏他们。执⾏⽅法的默认顺序是:根据ASCII码的顺序加载测试⽤例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试⽤例⽅法会优先执⾏,以a开头会后执⾏
⼀、setUp()和tearDown()函数
setUp()函数是在众多函数或说是在⼀个类⾥最先被调⽤的函数,每执⾏完⼀个函数都要从setUp()调⽤开始后再执⾏下⼀个函数,有⼏个函数⼏次,与位置⽆关,随便放在那⾥都是他先被调⽤。
tearDown()函数是在众多函数执⾏完后他才被执⾏,不管这个类⾥⾯有多少函数,他总是最后⼀个被执⾏,与位置⽆关,放在那⾥都⾏,最后不管测试函数是否执⾏成功都执⾏tearDown()⽅法;如果setUp()⽅法失败,则认为这个测试项⽬失败,不会执⾏测试函数也不执⾏tearDown()⽅法。
1、setUp()和tearDown()⽅法都是⾮必要条件,如果没有也可以写pass
2、setUp()和tearDown()⽅法每个测试⽤例都会执⾏,先执⾏前置setUp,然后执⾏的⽤例(test*),最后执⾏的后置tearDown
3、setUp():setUp()⽅法⽤于测试⽤例执⾏前初始化⼯作。如测试⽤例中需要访问数据库,可以在setUp中建⽴数据库连接并进⾏初始化。如测试⽤例需要登录web,可以先实例化浏览器
4、tearDown():tearDown()⽅法⽤于测试⽤例执⾏之后的善后⼯作。如关闭数据库连接、关闭浏览器
5、未加装饰器,先执⾏前置setUp,再执⾏test开头的test01,最后执⾏后置tearDown,继续循环所有⽤例;加了装饰器
@classmethod,先执⾏setUp,再执⾏test开头的所有⽤例,最后执⾏tearDown
#未加装饰器,先执⾏前置setUp,再执⾏test开头的测试⽤例,最后执⾏后置tearDown,继续循环所有⽤例
import unittest
led支架
class Test(unittest.TestCase): #继承unittest.TestCase这个类
def setUp(self):  #测试⽤例执⾏前运⾏
print('setUp__')
def tearDown(self):  #测试⽤例结束后运⾏
print('tearDown')
def testMinus(self):    #测试⽤例名称以test开头
'''这⾥是减法'''
print('这⾥是减法')
result=6-5
hope=1
self.assertEqual(result,hope)
def testDivide(self):
'''这⾥是除法'''
print('这⾥是除法')
result=7/2
hope=3.5
self.assertEqual(result,hope)
if __name__ == '__main__':
unittest.main()
C:\Users\wangli\PycharmProjects\AutoMation\venv\ C:/Users/wangli/PycharmProjects/AutoMation/case/test.py setUp__
这⾥是除法
tearDown
setUp__
这⾥是减法
tearDown
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
#加了装饰器@classmethod,先执⾏setUp,再执⾏test开头的所有⽤例,最后执⾏tearDown
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('setUp__')
@classmethod
def tearDownClass(cls):
print('tearDown')
def test_003(self):
''这⾥是test_003'''
print('这⾥是减法')
result=6-5
hope=1
self.assertEqual(result,hope)
def test_004(self):
''这⾥是test_004'''
print('这⾥是除法')
result=7/2ap劫
hope=3.5
self.assertEqual(result,hope)
if __name__ == '__main__':
unittest.main()
C:\Users\wangli\PycharmProjects\AutoMation\venv\ C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
setUp__
..
这⾥是减法立式烤箱
这⾥是除法
tearDown
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
Process finished with exit code 0
⼆、unittest.defaultTestLoader(): defaultTestLoader()类
通过该类下discover()⽅法将测试⽬录匹配查测试⽤例⽂件(test*.py),将查的测试⽤例组装到测试套件TestSuite,再返回⼀个
TestSuite实例,因此可以直接通过run()⽅法执⾏discover
discover⽅法来加载⽤例,discover加载到的⽤例是⼀个list集合,需要重新写⼊到⼀个list对象testcase⾥,⽤TextTestRunner这⾥类的
run⽅法去执⾏,discover⽅法⾥⾯有三个参数:
case_dir:这个是待执⾏⽤例的⽬录
pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本。
top_level_dir:这个是顶层⽬录的名称,⼀般默认等于None就⾏了
# 测试⽤例路径(当前⽂件⽬录)
case_path = os.path.dirname(alpath(__file__))
#加载test.py⽂件,TestCase到TestSuite集合中,返回⼀个TestSuite实例
discover = unittest.defaultTestLoader.discover(case_path, pattern="test.py", top_level_dir=None)
print(discover)
<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test.Test testMethod=test01>, <test.Test testMethod=test02>]>]>]>
print('数据准备阶段')
def tearDown(self):
print('数据清理结束')
def test01(self):
print('输出test01')
def test02(self):
print('输出test02')
if __name__=='__main__':
# 测试⽤例路径
case_path = os.path.dirname(alpath(__file__))
#加载test.py⽂件,TestCase到TestSuite集合中,返回⼀个TestSuite实例
discover = unittest.defaultTestLoader.discover(case_path, pattern="test.py", top_level_dir=None)
print(discover)
#实例化runner
runner=unittest.TextTestRunner()
#调⽤实例run⽅法
runner.run(discover)
C:\Users\wangli\PycharmProjects\AutoMation\venv\ C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
..
<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test.Test testMethod=test01>, <test.Test testMethod=test02>]>]>]> ----------------------------------------------------------------------
数据准备阶段
Ran 2 tests in 0.001s
输出test01
数据清理结束
OK
数据准备阶段
输出test02
数据清理结束
Process finished with exit code 0
三、unittest.TestSuite():unittest框架的TestSuite()类
⽤来创建测试套件,多个测试⽤例test case集合就是TestSuite,TestSuite可以嵌套TestSuite
对于某⼀个功能模块的验证可能需要多个测试⽤例,多个测试⽤例集合在⼀起执⾏验证某⼀个功能,这样就是⼀个TestSuite。通过
addTest()⽅法将 TestCase 加载到 TestSuite()中,最终将传递给testRunner进⾏测试执⾏
四、unittest.TextTestRunner():unittest框架的TextTestRunner()类
通过该类下⾯的run()⽅法来运⾏suite所组装的测试⽤例,⼊参为suite测试套件
runner=unittest.TextTestRunner()
runner.run(all_case())
print('数据准备阶段')
def tearDown(self):
print('数据清理结束')
def test01(self):
print('输出test01')
def test02(self):
print('输出test02')
if __name__=='__main__':
# 测试⽤例路径
case_path = os.path.dirname(alpath(__file__))
#加载test.py⽂件,TestCase到TestSuite集合中,返回⼀个TestSuite实例
discover = unittest.defaultTestLoader.discover(case_path, pattern="test.py", top_level_dir=None)
print(discover)
#实例化runner
runner=unittest.TextTestRunner()
#调⽤实例run⽅法
空洞检测runner.run(discover)
C:\Users\wangli\PycharmProjects\AutoMation\venv\ C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
..
<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test.Test testMethod=test01>, <test.Test testMethod=test02>]>]>]> ----------------------------------------------------------------------
数据准备阶段
Ran 2 tests in 0.001s铠装铂热电阻
输出test01
数据清理结束
OK
数据准备阶段
输出test02
数据清理结束
Process finished with exit code 0
五、⽣成html报告,report_path是存放测试报告的地址
stream:测试报告写⼊⽂件的存储区域
title:测试报告的主题
木醋description:测试报告的描述

本文发布于:2023-05-18 14:59:02,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/104558.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   测试报告   准备   数据   需要   数据库   名称
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图