unittest用例参数化paramunittest及遇到的问题与处理

一、unittest参数化介绍

unittest参数化是对unittest中的一个测试方式引入多组测试数据进行测试

 

二、安装及应用

2.1 安装

pip install paramunittest

 

 2.2 基础语法一

# 参数化数据两组
@paramunittest.parametrized(
    ('8','5'),
    ('6','2')
)

class TestDemo(paramunittest.ParametrizedTestCase):
    def setParameters(self, numa, numb):  # 必备的要写的方法,把参数化传递到测试类中
        self.numa = numa
        self.numb = numb

    def test_case(self):
        print('a=%s,b=%s'%(self.numa,self.numb))
        self.assertGreater(self.numa, self.numb)

if __name__ == "__main__":
    unittest.main()
  • 上述代码中,不像往常一样继承unittest.TestCase,而是为了实施参数化,测试类继承paramunittest.ParametrizedTestCase这个类
  • setParameters方法把参数化数据进行引入到测试类

2.3 基础语法二

import unittest
import paramunittest

@paramunittest.parametrized(
      {'numa': 8, 'numb': 6},
      {'numb': 4, 'numa': 5}
)

class TestDemo(unittest.TestCase):
    def setParameters(self, numa, numb):
        self.numa = numa
        self.numb = numb

    def test_case(self):
        print('a=%s,b=%s'%(self.numa,self.numb))
        self.assertGreater(self.numa, self.numb)

if __name__ == "__main__":
    unittest.main()
  • 上述代码中,和往常一样继承unittest.TestCase也可以实现参数化,两者也没有区别;
  • 参数化数据中的{'numa': 8, 'numb': 6},有关键字的时候,就和setParameters()方法中的关键字对应,如果没有,则按默认顺序。

2.4 基础语法三

case_datas = [{'numa': 8, 'numb': 6},{'numb': 4, 'numa': 5}]

@paramunittest.parametrized(
    *case_datas
)

三、实际运行中遇到的坑

3.1 参数化执行每条用例时,发现unittest的运行原理是:每条用例都是独立的,且无序的;

     这样会导致串联的接口会获取不到上个接口的返回值,从而执行串联接口用例时报错

 

 

 

 

 

 

 

3.2 解决办法

将有关联的接口写到同一条用例中,如下标记的三条用例是相关联的,合并单元格后unnittest会把起当成一条用例,但是我封装的requests中有方法又可以读取到这种合并的数据,并全部都执行掉

 

 

posted @ 2022-01-12 16:50  杰个就斯爱情o  阅读(370)  评论(0)    收藏  举报