python unittest TestCase间共享数据(全局变量的使用)

在使用unittest过程中,发现有时候如果想在测试用例之间共享变量,无法直接实现。查询之后发现解决方式如下:

文章目录

      • 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

1.在setup之前设置的变量status,也是全局变量,无法在测试用例里面修改这个全局变量的值。
2.即使通过globals().[‘status’]设置全局变量的值,但是globals().[‘status’]与单独设置的status的值,不是一个变量
3.测试用例读取顺序,先读取局部变量里面的值,再去读取全局变量的值。

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

你可能感兴趣的:(Python自动化测试,Python基础,unittest,共享数据,测试用例数据共享)