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

zhangjg · November 06, 2017 · Last by Karaser replied at November 08, 2017 · 6421 hits

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文件多个类测试,这种还适用吗?

zhangjg 回复

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

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
zhangjg 关闭了讨论 11 Nov 23:22
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up