Python:程序执行顺序不正确

Python:程序执行顺序不正确,python,python-unittest,Python,Python Unittest,我有以下代码 import unittest import requests import time import json from selenium import webdriver from selenium.webdriver.common.keys import Keys token = '' headers = {'Content-Type': 'application/json', 'Token': token} class ChromeSearch(unitte

我有以下代码

import unittest
import requests
import time
import json
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

token = ''
headers = {'Content-Type': 'application/json',
        'Token': token}
class ChromeSearch(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        driver = cls.driver
        base_url = 'http://127.0.0.1:8080/'
        driver.get(base_url)
        print("Generating Token")
        usernameStr = 'user1a'
        passwordStr = 'user'
        response = requests.get('http://127.0.0.1:8080/api/auth/token', auth=(usernameStr, passwordStr))
        print(response)
        data = response.json()
        print(data)
        if response.status_code == 200 and data["status"] == "SUCCESS":
            token = data["token"]
        else:
            token = None
            print("The request was not successful.")
        print(token)

    def test_update_user_infp(self):
        print("Planning to update user's info")

        datap = {'firstname': 'Newfirstname',
        'lastname': 'Newname',
        'phone': '111000111'}

        r = requests.put('http://127.0.0.1:8080/api/users/user1a', data=json.dumps(datap), headers=headers)
        print(r.text)

    def test_get_users(self):
        print("Planning to get users")

        r = requests.get('http://127.0.0.1:8080/api/users', headers=headers)
        print"Get request for api Users"
        print(r.text)

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()

if __name__ == "__main__":
    unittest.main()
日志如下所示,如果您在日志中看到它说
生成令牌
计划获取用户
,但给出了一个。和
。计划更新用户信息
需要身份验证,为什么?如果我不使用class和def,它就可以正常工作

DevTools listening on ws://127.0.0.1:55429/devtools/browser/cc53d84c-3847-40a3-b3fb-159892c71ac9
Generating Token
<Response [200]>
{u'status': u'SUCCESS', u'token': u'MjU5NzMzMDY1NTU1NzYxMTE4NjQ4NDgxMTc0OTkyMjI4NTg0NTE5'}
MjU5NzMzMDY1NTU1NzYxMTE4NjQ4NDgxMTc0OTkyMjI4NTg0NTE5
Planning to get users
Get request for api Users
{"payload":["user1a"],"status":"SUCCESS"}

.Planning to update user's info
{"message":"Token authentication required","status":"FAILURE"}

.
----------------------------------------------------------------------
Ran 2 tests in 5.938s

OK
DevTools在ws://127.0.0.1:55429/DevTools/browser/cc53d84c-3847-40a3-b3fb-159892c71ac9上侦听
生成令牌
{u'status':u'SUCCESS',u'token':u'MjU5NzMzMDY1NTU1NzYxMTE4NjQ4NDgxMTc0OTkyMjI4NTg0NTE5'}
MjU5NzMzMDY1NTU1NzYxMTE4NjQ4NDgxMTc0OTkyMjI4NTg0NTE5
计划获得用户
获取api用户的请求
{“payload”:[“user1a”],“status”:“SUCCESS”}
.计划更新用户信息
{“消息”:“需要令牌身份验证”,“状态”:“失败”}
.
----------------------------------------------------------------------
在5.938s中运行了2个测试
好啊

评论部分的后续内容:

下面是一个关于如何在一个方法中声明和初始化令牌以及如何在另一个方法中访问令牌的示例答案

导入单元测试
类示例(unittest.TestCase):
@类方法
def设置等级(cls):
打印(“只打印我一次”)
cls.token=100#在此处使用身份验证路由初始化您的令牌
def测试1(自我):
印刷品(1)
print('Token=',self.Token)#Prints Token=100
def test2(我自己):#尽管自我是首选
印刷品(2)
print('Token=',imf.Token)#Prints Token=100
unittest.main()

我认为您可能需要将身份验证令牌与您的
PUT
请求一起作为
授权头传递给服务器。否则,服务器如何知道传入的请求来自经过身份验证的用户?@AjayDabas set中定义的令牌是否可以用于其他函数?您可以使用类的属性来执行此操作。在
setUpClass
类中声明token属性,如下所示
self.token=…
,然后可以在
test\u update\u user\u infp
方法中访问该属性,同样是这样
self.token
@AjayDabas self-token或cls.token?更新:我的错了,是的,应该是
cls.token
,因为您将其命名为
cls
。但通常的做法是
self