python unittest TestCase間共享數據(全局變量的使用)


文章目錄

1.setupclass里設置self.xxx變量,不同用例之間無法實時共享參數變動

2.setupclass里設置globals().["xxx"]變量,不同用例之間可以實時共享參數變動

3.setupclass里設置 ClassName.XXX變量,不同用例之間可以實時共享參數變動

4.setupclass之前設置 XXX變量

1.setupclass里設置self.xxx變量,不同用例之間無法實時共享參數變動

from settings import *
import requests,json
import unittest


class Login(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        api_token = '/v1/api/common/getToken'
        self.real_token_url = API_TEST_BASE_URL + api_token
        self.token = None

    def test_get_token(self):
        r = requests.post(url=self.real_token_url)
        self.token = json.loads(r.text)['model']['token']
        print("第一個case獲得的token:",self.token)
        return self.token

    def test_get_u(self):
        print("第二個case獲得token值:",self.token)


if __name__ == '__main__':
    unittest.main()

執行結果:

第一個case獲得的token: 48579630472b45a0b0b553bc85a335f8
第二個case獲得token值: None
  • 說明在unttest框架中,testcase中間不共享變量的值,但是都可以從setupclass里面讀取統一的變量值
  • 可以setup時候設置全局變量,不同的case之間就可以共享這個變量了

2.setupclass里設置globals().[“xxx”]變量,不同用例之間可以實時共享參數變動

from settings import *
import requests,json
import unittest


class Login(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        api_token = '/v1/api/common/getToken'
        self.real_token_url = API_TEST_BASE_URL + api_token
        globals()["token"] = None

    def test_get_token(self):
        r = requests.post(url=self.real_token_url)
        globals()["token"] = json.loads(r.text)['model']['token']
        print("第一個case獲得的token:",globals()["token"])
        return globals()["token"]

    def test_get_u(self):
        print("第二個case獲得token值:",globals()["token"])

if __name__ == '__main__':
    unittest.main()

執行結果:

第一個case獲得的token: 44c5fcccca6c4e64a1c5d314b7ee22fc
第二個case獲得token值: 44c5fcccca6c4e64a1c5d314b7ee22fc

3.setupclass里設置 ClassName.XXX變量,不同用例之間可以實時共享參數變動

import unittest

class Mydemo(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        Mydemo.a = "88"

    def test1(self):
        print("test1-----{}".format(Mydemo.a))
        Mydemo.a = "99"

    def test2(self):
        print("test2-----{}".format(self.a))
        print("test2_2---{}".format(Mydemo.a))


if __name__ == '__main__':
    unittest.main()

執行結果:

test1-----88
test2-----99
test2_2---99

我們運行test1的時候,給Mydemo.a可以獲取全局變量的a,打印完之后又設置了新的值
test2運行的時候,通過2中方式,都能獲取到了全局變量的值。

4.setupclass之前設置 XXX變量

class AlienTest(unittest.TestCase):
    status = 200

    @classmethod
    def setUpClass(cls):
        cls.url = "http://www.baidu.com"
        globals()['status'] = 300

    def test_1_alien(self):
        print("test_1_status:", self.status)

    def test_2_alien(self):
        self.status = 404
        print("test_2_status", self.status)

    def test_4_alien(self):
        print("test_4_global_status", globals()['status'])
        print("test_4_status", self.status)


if __name__ == '__main__':
    unittest.main()
test_1_status: 200
test_2_status 404
test_4_global_status 300
test_4_status 200

我自己在寫接口自動化中遇到這樣的問題,testcase中有一個變量的值是我想要的,這個值是shopid(我這個接口是新增店鋪,新增成功之后會返回一個shopid)

,那么在

tearDownClass里面我就想要去刪除他,所有需要獲取到testcase中的shopid

 

db =  config.db
class Login(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.db  =  config.db
        cls.cursor = db.cursor(cursor = cursors.DictCursor)
        print("連接數據庫成功!\n")


    @classmethod
    def tearDownClass(cls):
        print("cls.shop_id:"+str(Login.shop_id))
        deleteRecord(cls.db,cls.cursor,"t_shop_info","id",int(Login.shop_id))
        cls.cursor.close()
        cls.db.close()
        print("關閉數據庫成功!\n")


    @parameterized.expand(ReadParameterized(path,"shop",api_name+".json").read_params())
    def test_shop_login(self,case_number):
        try:
            param = PostParameter().post_param(path,"shop",api_name+".json",case_number)

            r = Api_AddShop().add_shop(param["url"],param["headers"],param["common_param"],param["data"],param["expect_results"])

            self.assertEqual(param["expect_results"]["code"],r["code"])
            self.assertEqual(param["expect_results"]["msg"], r["msg"])
            # 定義全局變量 shop_id
            Login.shop_id = str(r["data"]["shop_id"])
        except Exception as e:
            print("this except is "+str(e))
            # raise e

if __name__ == '__main__':
    unittest.main()

 

 

引用文章來源:
https://blog.csdn.net/happyteafriends/article/details/22728749
https://www.cnblogs.com/hhudaqiang/p/6596043.html

文章轉自:https://blog.csdn.net/chenmozhe22/article/details/81302780?utm_source=blogxgwz6


免責聲明!

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



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