文章目录

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

python unittest TestCase间共享数据(全局变量的使用)的更多相关文章

  1. python 进程间共享数据 (二)

    Python中进程间共享数据,除了基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...

  2. Python multiprocessing.Manager介绍和实例(进程间共享数据)

    Python中进程间共享数据,处理基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...

  3. python 进程间共享数据 (一)

    def worker(num, mystr, arr): num.value *= 2 mystr.value = "ok" for i in range(len(arr)): a ...

  4. 详解 Qt 线程间共享数据(用信号槽方式)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  5. Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)

    Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...

  6. 进程间共享数据Manager

    一.前言 进程间的通信Queue()和Pipe(),可以实现进程间的数据传递.但是要使python进程间共享数据,我们就要使用multiprocessing.Manager. Manager()返回的 ...

  7. 【C++】DLL内共享数据区在进程间共享数据(重要)

    因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...

  8. windows核心编程之进程间共享数据

    有时候我们会遇到window进程间共享数据的需求,例如说我想知道系统当前有多少某个进程的实例. 我们能够在程序中定义一个全局变量.初始化为0.每当程序启动后就加1.当然我们我们能够借助第三方介质来储存 ...

  9. 详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

随机推荐

  1. 解决报错:JPA-style positional param was not an integral ordinal;

    org.hibernate.QueryException: JPA-style positional param was not an integral ordinal; nested excepti ...

  2. ASP.NET母版页

    ASP.NET母版页:主要是设置一致界面的页面,在固定的页中进行更新. 如图1-1所示 页头 页中(页内容) 页尾 图1-1  母版页 一般网页是固定页头和页尾,只更新页内容,来实现网页的跳转或内容的 ...

  3. OAuth-授权机制

    一.应用场景 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片. 问 ...

  4. 报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境

    最近出现过一个问题,值得记录 类似于这样的报错的问题: Warning: require_once(/www/app/somecomponent.php): failed to open stream ...

  5. linux--配置开发环境 --Apache篇

    现在我的的linux服务器上一般都是使用:Apache 和  Nginx 这两种配置. 你现在安装好了,启动了,也无法通过你服务器绑定的网址访问你的网站. 这是你可以通过这个命令查看一下你的80端口: ...

  6. thinkphp5.1生成缩略图很模糊

    缩略图一定要从大分辨率往小生成 $image->thumb(400,400,\think\Image::THUMB_CENTER)->save(Env::get('root_path'). ...

  7. (第四篇)Linux命令初识之常用系统管理命令

    1.hostname [命令作用]用于显示和设置系统的主机名称(但是不会永久保存,重启后会恢复) [命令语法]hostname(选项)(参数) [常用选项] -a:显示主机别名(alias name) ...

  8. 2019-2020-1 20199329 第二周测试(环境:ubuntu64位)

    2019-2020-1 20199329 第二周测试(环境:ubuntu64位) 实验一 0.每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 1.用Vi输入图中代码,并用gcc编译通过 ...

  9. Android | 教你如何使用HwCameraKit接入相机人像模式

    目录 介绍 简介 关于本次CodeLab 你将建立什么 你会学到什么 你需要什么 申请Camera相关权限 集成HwCameraKit开放能力 步骤1 模式创建:获取CameraKit实例,创建人像模 ...

  10. CF1092 --- Tree with Maximum Cost

    CF1324 --- Maximum White Subtree 题干 You are given a tree consisting exactly of \(n\) vertices. Tree ...