问题:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果,给用例b使用。
unittest框架的每个用例都是独立的,测试数据共享的话,需设置全局变量,可以使用globals()函数来解决
globals()函数
globals() 函数会以字典类型返回当前位置的全部全局变量。
print(globals())
#用法
globals()['a'] = '用例a的返回结果'
#用例b引用
b = globals()['a']
print(b)
unittest框架用例
使globals()函数实现用例之间的数据共享,比如用例1返回的结果写到globals()["a"]中,用例2调用globals()["a"]的值
import unittest
# print(globals())
#
# #用法
# globals()['a'] = '用例a的返回结果'
#
# #用例b引用
# b = globals()['a']
# print(b)
class TestA(unittest.TestCase):
#
def setUp(self):
self.a = 1
self.b = 2
def test_add(self):
'''用例1'''
c = self.a + self.b#用例1返回的值
globals()['a'] = c#将用例1的返回值保存到全局变量中
print(globals()['a'])
self.assertEqual(c, 3)
def test_add2(self):
'''用例2'''
d = globals()['a']#引用用例1的返回值
e = d + 1
self.assertEqual(e, 4)
if __name__ == '__main__':
unittest.main()
运行结果:
G:\python3.5.0\python.exe "G:\pycharm\PyCharm Community Edition 2017.1.1\helpers\pycharm\_jb_unittest_runner.py" --path D:/学习/软件测试/python/python_script/tests/globals_test.py
Testing started at 20:17 ...
Launching unittests with arguments python -m unittest discover -s D:/学习/软件测试/python/python_script/tests -p globals_test.py -t D:\学习\软件测试\python\python_script\tests in D:\学习\软件测试\python\python_script\tests
3
Ran 2 tests in 0.002s
OK
Process finished with exit code 0
但是这样会有个隐患:用例b是用来用例a的,所以用例有先后顺序,用例a先执行,用例b后执行
globals()优化
当用例3的的请求参数依赖用例1和用例2时,使用太多的globals()会不太好关联,可以把globals()函数放到setUp前置里面,如下:
用例3需要依赖1的返回值result_1和用例2的返回值result_2
import unittest
# print(globals())
#
# #用法
# globals()['a'] = '用例a的返回结果'
#
# #用例b引用
# b = globals()['a']
# print(b)
class TestA(unittest.TestCase):
#
def setUp(self):
self.a = 1
self.b = 2
self.g = globals()
def test_add(self):
'''用例1'''
c = self.a + self.a#用例1返回的值
self.g['a'] = c#将用例1的返回值保存到全局变量中
print(self.g['a'])
self.assertEqual(c, 2)
def test_add2(self):
'''用例2'''
result_1 = self.b + self.b # 用例2返回的值
self.g['b'] = result_1 # 将用例2的返回值保存到全局变量中
print(self.g['b'])
self.assertEqual(result_1, 4)
def test_add3(self):
'''用例3'''
result_2 = self.g['a'] + self.g['b'] #引用用例1和用例2的返回结果
self.assertEqual(result_2, 6)
print(self.g['a'])
print(self.g['b'])
if __name__ == '__main__':
unittest.main()
运行结果:
G:\python3.5.0\python.exe "G:\pycharm\PyCharm Community Edition 2017.1.1\helpers\pycharm\_jb_unittest_runner.py" --path D:/学习/软件测试/python/python_script/tests/globals_test2.py
Testing started at 20:20 ...
Launching unittests with arguments python -m unittest discover -s D:/学习/软件测试/python/python_script/tests -p globals_test2.py -t D:\学习\软件测试\python\python_script\tests in D:\学习\软件测试\python\python_script\tests
2
4
2
4
Ran 3 tests in 0.002s
OK
Process finished with exit code 0