zoukankan      html  css  js  c++  java
  • python之unittest,global()函数的用法

    在做接口测试中,可谓是踩坑不断,如果遇到一类问题,如B接口的请求参数需要A接口的返回值这种情况也是时常发生。

    如果不知道global()这个函数时,我们可以这样做,如下:

    import unittest
    data = {}
    class Test(unittest.TestCase):
        def test_a(self):
            global data
            ## 假设这个是这个接口的返回值
            return_value = {'code':1}
            print(f'这个接口返回为{return_value}')
            data = return_value
        def test_b(self):
            ## 假设这个接口要用这个data
            print(f'这里是需要用到的test_a的返回值的函数:%s'%data)
    
        def test_c(self):
            ## 假设这个接口也要用这个data
            print(f'这里是需要用到的test_a的返回值的函数:%s'%data)
    
    if __name__ == '__main__':
        unittest.main()

    结果如下:

    由上可见,如果一个接口要用另一个接口的返回值,可以定义一个全局的变量,使用global来配合使用,这个只是其中的一个方式。不过这样比较难管理,而且还易受执行顺序,变量影响等因素影响。下面推荐unittest中的globals()这个方法

    1、简单的一个使用例子

    import unittest
    class Test(unittest.TestCase):
        def test_a(self):
            ## 假设这个是这个接口的返回值
            return_value = {'code':1}
            print(f'这个接口返回为{return_value}')
    
            ## 这里使用globals()
            globals()['a'] = return_value
        def test_b(self):
            ## 假设这个接口要用这个data
            print(f'这里是需要用到的test_a的返回值的函数:%s'%globals()['a'])
    
        def test_c(self):
            ## 假设这个接口也要用这个data
            print(f'这里是需要用到的test_a的返回值的函数:%s'%globals()['a'])
    
    if __name__ == '__main__':
        unittest.main()

    结果如下:

    由上可见,globals()的一个简单的用法。很方便的管理了这种问题

    2、那么问题又来了,如果我需要用A接口的返回值作为B接口的参数,而B接口的返回值要作为C接口的参数,这样子可不可以用globals()实现呢。

    当c的请求参数依赖a和b时,使用太多的globals()会不太好关联,可以把globals()函数放到setUp前置里面,如下:
    import unittest
    class Test(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.g = globals()
    
        def test_a(self):
            ## 假设这个是这个接口的返回值
            return_valueA = {'code':1}
            print(f'这个接口返回为{return_valueA}')
    
            ## 这里使用globals()
            ## A接口的返回值
            self.g['a'] = return_valueA
        def test_b(self):
            ## 假设这个接口要用这个data
            ## B接口需要用到A接口的返回值
            print(f'这里是需要用到的test_b的返回值的函数:%s'%self.g['a'])
            ## 假设他是b接口的返回值
            return_valueB = {'messge':"ok"}
            ## 直接用globals()赋值就ok了
            self.g['b'] = return_valueB
    
        def test_c(self):
            ## 假设这个是C接口,需要用到B接口的返回值
    
            print(f'这里是需要用到的test_b的返回值的函数:%s'%self.g['b'])
    
    if __name__ == '__main__':
        unittest.main()

    结果如下:

    由上可见,这个使用globals()很简单的就解决了。

    那么又有问题来了,如果我先执行的B接口,又执行了AC接口,这个不就乱套了吗?答案是确实会乱套,可以先查一下unittest的用例执行顺序,这里不做多解释了

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/dflblog/p/11364131.html
Copyright © 2011-2022 走看看