软件测试

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

2020-06-11  本文已影响0人  梵音11

三步学会用 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):

“”"

每个测试用例执行之前和之后的操作

测试用例级别:

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)

上一篇 下一篇

猜你喜欢

热点阅读