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