unittest框架如何将上个接口的返回结果给下个接口使用(面试必问)【多接口自动化应用】

前言

面试必问:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果【response】,给用例b使用【body】。

unittest框架的每个用例都是独立的,测试数据共享的话,需设置全局变量,可以使用 globals() 函数来解决。

globals()函数

 globals() 函数会以字典类型返回当前位置的全部全局变量。【同个模块所有的全局变量字典】

print(globals())

# 用法
globals()["a"] = "用例a的返回结果"

# 用例b引用
b = globals()["a"]
print(b)

unittest框架用例

使 globals() 函数实现用例之间的数据共享,比如用例a返回的结果写到globals()["a"]中,用例b调用globals()["a"]的值。

复制代码
import unittest
import requests


class TestA(unittest.TestCase):
    def setUp(self):
        self.s = requests.session()

    def test_a(self):
        '''用例a'''
        result_a = "aaaaaa"    # 用例a的返回值

        # 返回值先给全部办理,存到字典对应key
        globals()["a"] = result_a
        self.assertEqual(result_a, "aaaaaa")

    def test_b(self):
        '''用例b'''
        b = globals()["a"]  # 引用用例a的返回值
        print("用例b引用用例a的返回值:%s"%b)
        result_b = b+"111"
        self.assertEqual(result_b, "aaaaaa111")

if __name__ == '__main__':
    unittest.main()
复制代码

运行结果:

E:\python36\python.exe D:/jiekou9/debug/yilai.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
用例b引用用例a的返回值:aaaaaa

但是这样会有个隐患:用例b是用来用例a的,所以用例有先后顺序,用例a先执行,用例b后执行。【接口业务场景用例:上个接口的响应报文作为下一个接口的请求报文入参】

globals()优化

当用例c的的请求参数依赖用例a和用例b时,使用太多的globals()会不太好关联,可以把globals()函数放到setUp前置里面,如下:
用例c需要依赖a的返回值result_a和用例b的返回值result_b。

复制代码
import unittest
import requests

class TestA(unittest.TestCase): def setUp(self): self.s = requests.session() self.g = globals() def test_a(self): '''用例a''' result_a = "aaaaaa" # 用例a的返回值 # 返回值先给全部办理,存到字典对应key self.g["a"] = result_a self.assertEqual(result_a, "aaaaaa") def test_b(self): '''用例b''' b = self.g["a"] # 引用用例a的返回值 print("用例b引用用例a的返回值:%s"%b) result_b = b+"111" self.g["b"] = result_b self.assertEqual(result_b, "aaaaaa111") def test_c(self): '''用例c''' print("用例c依赖用例a和用例b") c_a = self.g["a"] c_b = self.g["b"] print("用例c的请求入参:%s" % c_a) print("用例c的请求入参:%s" % c_b) if __name__ == '__main__': unittest.main()
复制代码

运行结果:

复制代码
.用例b引用用例a的返回值:aaaaaa
.用例c依赖用例a和用例b
用例c的请求入参:aaaaaa
用例c的请求入参:aaaaaa111
.
----------------------------------------------------------------------
Ran 3 tests in 5.001s

OK
复制代码

注意:

由于我们的测试套件中一般包含了很多的测试用例,当一个测试套件集成跑多个测试模块时,每个模块中使用的全局变量 globals() 会导致测试用例的数据紊乱(因为很多痛快会接连跑, globals() 字典会添加了很多同名的键,导致全局字典中的数据出错);所以 globals() 函数并不适用于集成了很多测试用例的测试套件中。而是适用于单独模块执行测试用例。

posted @   习久性成  阅读(648)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示