python unittest TestCase间共享数据(全局变量的使用)
阅读原文时间:2023年07月10日阅读:1

文章目录

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 = ""

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

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器