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中有方法又可以读取到这种合并的数据,并全部都执行掉



浙公网安备 33010602011771号