• python笔记39-unittest框架如何将上个接口的返回结果给下个接口适用(面试必问)


    前言

    面试必问:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果,给用例b使用。
    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
    # 上海-悠悠 QQ交流群:717225969
    
    
    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:python36python.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
    # 上海-悠悠 QQ交流群:717225969
    
    
    class TestA(unittest.TestCase):
        '''上海悠悠:QQ群:779429633'''
        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
    
    

    python交流QQ群:779429633

  • 相关阅读:
    设置标题自适应宽度,动态调整大小
    终止延迟函数
    iOS 关于音频开发
    阻止iOS设备锁屏
    苹果开发——设置iTunes Connect中的Contracts, Tax, and Banking
    【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
    uibutton 设置title 居左显示
    通过view 获取viewController
    tableview 自动滑动到某一行
    uibutton 设置圆角边框
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11241473.html
Copyright © 2020-2023  润新知