三步学会用 python+unittest 搭建简易的接口测试框架(二)

三步学会用 python+unittest 搭建简易的接口测试框架续集来咯

目录:

一、discover模式运行

二、例子

三、组织测试用例

四、跳过测试

五、数据驱动 DDT

在这里插入图片描述

一、discover模式运行

支持的命令行参数:
● -v, --verbose
更详细地输出结果。
● -s, --start-directory directory
开始进行搜索的目录(默认值为当前目录 . )。
● -p, --pattern pattern
用于匹配测试文件的模式(默认为 test*.py )。
● -t, --top-level-directory directory
指定项目的最上层目录(通常为开始时所在目录)。
在这里插入图片描述

二、例子

在这里插入图片描述
这个是文件目录结构
1、运行testcases 中所有用例
python -m unittest discover -s testcases -v
2、匹配模式运行
只运行 testcases 目录下以 test_ 开头文件
python -m unittest discover -v -s testcases -p test_*.py
在这里插入图片描述

三、组织测试用例

1、加载单个测试用例
from testcases.test_003 import TestDemo
from testcases.test004 import Demo4
import unittest

“”"
添加单个测试用例
“”"

def suite():
“”"
定义测试套件
:return:
“”"
s = unittest.TestSuite() # 管理测试套件的类
s.addTest(TestDemo(‘test_01’)) # 添加单个测试用例 TestDemo class名 传入 ‘test_01’ test_01 方法名
s.addTest(Demo4(‘test_02_update_topic’)) # 添加单个测试用例( 共享测试资料,可加我QQ:1844835571)
return s

if name == ‘main’:
runner = unittest.TextTestRunner(verbosity=2) # 创建执行器 设置执行的日志级别为详细日志
# 获取测试套件
s = suite()
# 运行测试套件
runner.run(s)
2、 从类中加载多个cases
def suites():
s = unittest.TestSuite() # 实例化测试套件类对象
loader = unittest.TestLoader() # 定义加载器
cases1 = loader.loadTestsFromTestCase(TestDemo) # 加载器加载 TestCase 类中的所有的测试方法
cases2 = loader.loadTestsFromTestCase(Demo4)

s.addTests(cases1)  # 所有的测试方法添加到测试套件中
s.addTests(cases2)
return s

if name == ‘main’:
runner = unittest.TextTestRunner(verbosity=2)# 创建执行器 设置执行的日志级别为详细日志
# 获取测试套件
# s = suite()
s = suites()
# 运行测试套件
runner.run(s)
3、 从module文件中加载
def moduleSuite():
s = unittest.TestSuite()
loader = unittest.TestLoader()
cases = loader.loadTestsFromName(‘testcases.test_00
5’) # 文件路径, 从module中加载所有的TestCase
s.addTests(cases)
return s

if name == ‘main’:
runner = unittest.TextTestRunner(verbosity=2) # 创建执行器 设置执行的日志级别为详细日志
# 获取测试套件
# s = suite()
s = moduleSuite()
# 运行测试套件
runner.run(s)
在这里插入图片描述

四、跳过测试

● skip 直接跳过。
● skipIf 加上跳过条件。
● skipUnless 跳过条件,与if相反。

“”"
test fixture 测试脚手架
“”"
import unittest

class Demo5_1(unittest.TestCase):
“”"
每个测试用例执行之前和之后的操作

扫描二维码关注公众号,回复: 11292970 查看本文章
测试用例级别:
setUp 定义每个用例运行之前的操作
tearDown 定义每个用例运行之后的操作

整个class 级别

setUpClass 运行class 之前
tearDownClass 运行class 之后

"""

def setUp(self) -> None:
    print('运行方法之前')

def tearDown(self) -> None:
    print("运行方法之后执行")


@classmethod
def setUpClass(cls) -> None:
    print('运行类里面所有的case 之前')


@classmethod
def tearDownClass(cls) -> None:
    print('运行类里面所有的case 之后')


def test_run1(self):
    print("现在开始运行run1")

def test_run2(self):
    print("现在开始运行run2")

class Demo5_2(unittest.TestCase):
def testcase1(self):
assert True

@unittest.skip('跳过此用例')
def testcase2(self):
    assert True

@unittest.skipIf(True, 'skipIf')
def testcase3(self):
    assert True

@unittest.skipUnless(False,'skipUnless')
def testcase4(self):
    assert True

if name == ‘main’:
unittest.main(verbosity=2)

五、数据驱动 DDT

需要安装ddt 库
https://ddt.readthedocs.io/en/latest/example.html
在这里插入图片描述
1、快速入门
@data 将会传入数据
“”"
基本使用方式

“”"
import unittest
from ddt import ddt,data

#在定义类名上面
@ddt 引入ddt 库@ddt
class TestDDT1(unittest.TestCase):

@data(1,2,3,4,5,6)
def test_01(self,val):  # val 会去取@data中传过来的值
    print('hello world',val)

if name == ‘main’:
unittest.main(verbosity=2)
在这里插入图片描述
2、读取数据文件
https://github.com/datadriventests/ddt/blob/master/test/data/test_data_dict.json

data/data.json

{
“unsorted_list”: [ 10, 12, 15 ],
“sorted_list”: [ 15, 12, 50 ],
“tuple_data”: [1,2,3]
}
“”"
基本使用方式

“”"
import unittest
from ddt import ddt,file_data

#在定义类名上面
@ddt 引入ddt 库@ddt
class TestDDT1(unittest.TestCase):

   @file_data('data/data.json')
    def test_02(self,value):
    print(value)
    assert True

if name == ‘main’:
unittest.main(verbosity=2)
data/data2.json
{
“positive_integer_range”: {
“start”: 0,
“end”: 2,
“value”: 1
},
“negative_integer_range”: {
“start”: -2,
“end”: 0,
“value”: -1
},
“positive_real_range”: {
“start”: 0.0,
“end”: 1.0,
“value”: 0.5
},
“negative_real_range”: {
“start”: -1.0,
“end”: 0.0,
“value”: -0.5
}
}

import unittest
from ddt import ddt,file_data

@ddt
class TestDDT2(unittest.TestCase):

@file_data('data/data2.json')
def test_file_data(self,start,end,value):   # start,end,value 与数据文件保持一致
    print(start,end,value)
    assert True

if name == ‘main’:
unittest.main(verbosity=2)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48048408/article/details/106691392