接口测试 python 接口测试,封装了获取 token 值。测试用例 A.py、B.py、C.py 都需要传入这个 token 值,但是在测试的时候每个测试用例都会获取到新的 token 值,请问如何设置全局变量获取 token 值?

皆非 · 2017年11月06日 · 最后由 Karaser 回复于 2017年11月08日 · 4561 次阅读

RT


'''获取token'''
def get_token():
    '''请求接口获取token值'''
    return token
'''测试用例A.py'''
class Test(unittest.TestCase):
    token = token.get_token()  #这个设置了全局变量,但只适用于A.py

    def setUp(self):
        endpoint = '/user/authorize/login'
        self.url = base.get_url(endpoint)
'''测试用例B.py'''
class Test(unittest.TestCase):
    token = token.get_token()  #这个设置了全局变量,但是token值重新获取了,请问如何修改,能使多个测试用例.py获取的token值一致

    def setUp(self):
        endpoint = '/user/authorize/login'
        self.url = base.get_url(endpoint)

困扰了好久,大牛帮帮忙啊。小白入坑

共收到 12 条回复 时间 点赞

第一次执行 get_token 方法后 把他赋给一个变量 temp_token,其他的用例全都用 temp_token 入参不就可以了么

我去催饭 回复

感谢你的回复。

'''获取token'''
def get_token():
    '''请求接口获取token值'''
    return token
temp_token = get_token()
'''测试A'''
class A():
    token = temp_token 
    def case1():
          token1 
'''测试B'''
class B():
    token = temp_token 
    def case1():
           token2

这两个测试用例获取的 token1 和 token2 还是不一样。是我调用有问题吗?
请问我哪里写的有问题吗?感谢。

chen 回复

setUp() and tearDown()

港真 token = token.get_token() 你这样写真会没问题么……

token.py

token = None
def getToken():
    if token is None:
        # 获取token
    return token

a.py

user_token = token.getToken()
chen 回复
import unittest

#整个文件的开始和结束执行
def setUpModule():
    print("test module start >>>>>>>>>>>>>>")

def tearDownModule():
    print("test module end >>>>>>>>>>>>>>")

class Test(unittest.TestCase):

    #整个Test类的开始和结束执行
    @classmethod
    def setUpClass(cls):
        print("test class start =======>")

    @classmethod
    def tearDownClass(cls):
        print("test class end =======>")

    #每个用例的开始和结束执行
    def setUp(self):
        print("test case start -->")

    def tearDown(self):
        print("test case end -->")

    def test_case(self):
        print("test case1")

    def test_case2(self):
        print("test case2")

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

请问,这样看来 setupclass-and-teardownclass 仅准备当前 Test 类下面所有的测试用例适用。但如果针对多个.py 文件多个类测试,这种还适用吗?

皆非 回复

跨模块这种方式肯定不行。一定要跨模块的话,可以自定义一个 unittest 类并加入 class 变量 “token” 之后的测试类都去继承这个自定义类;还有看看 pytest 这个框架中 fixtures 功能 官方说明文档 其中@pytest.fixture(scope="session")应该符合你的需要,不过要完全发挥 fixtures 功能需要弃用 unittest。

皆非 #11 · 2017年11月08日 Author
chen 回复

学习了,感谢!

单例模式呀

class getToken(object):
    __instance = None
    def __new__(cls,*args,**kwd):
        if getToken.__instance is None:
            getToken.__instance = object.__new__(cls,*args,**kwd)
        return getToken.__instance
皆非 关闭了讨论 11月11日 23:22
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册