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:\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
# 上海-悠悠 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM