Python:从另一个函数调用函数
我正在用python编写我的第一个单元测试,我已经用类和函数编写了一个通过的测试,但是现在我想编写单元测试,它失败了,如下所示Python:从另一个函数调用函数,python,automated-tests,python-unittest,Python,Automated Tests,Python Unittest,我正在用python编写我的第一个单元测试,我已经用类和函数编写了一个通过的测试,但是现在我想编写单元测试,它失败了,如下所示 import unittest import requests import time import json from selenium import webdriver from selenium.webdriver.common.keys import Keys class ChromeSearch(unittest.TestCase): def se
import unittest
import requests
import time
import json
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class ChromeSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
driver = self.driver
base_url = 'http://127.0.0.1:8080/'
driver.get(base_url)
def test_get_users(self):
print("Planning to get users")
token = test_generate_token()
headers = {'Content-Type': 'application/json',
'Token': token}
r = requests.get('http://127.0.0.1:8080/api/users', headers=headers)
print"Get request for api Users"
print(r.text)
def test_generate_token():
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)
return token
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
因此,我正在做的是从test\u get\u users(self)
调用test\u generate\u token()
来获取令牌,然后使用令牌来获取用户,但它失败了,出现以下错误
Generating Token
<Response [200]>
{u'status': u'SUCCESS', u'token': u'OTEzMjQ0NjY1OTQ3NzM5OTYyMTczNTM0NzA4MjM0OTQ2NTQ5NDA='}
OTEzMjQ0NjY1OTQ3NzM5OTYyMTczNTM0NzA4MjM0OTQ2NTQ5NDA=
.
DevTools listening on ws://127.0.0.1:50610/devtools/browser/eb427541-898f-4c1d-938d-064462f50a68
Planning to get users
E
======================================================================
ERROR: test_get_users (__main__.ChromeSearch)
----------------------------------------------------------------------
Traceback (most recent call last):
File ".\test_demo_app.py", line 18, in test_get_users
token = test_generate_token()
NameError: global name 'test_generate_token' is not defined
由于
test\u generate\u token
是一个成员函数,因此需要将其作为成员函数调用
token=self.test\u generate\u token()
由于test\u generate\u token
是一个成员函数,因此需要将其作为成员函数调用
token=self.test\u generate\u token()
谢谢你,它奏效了,还有一个问题,我的方法怎么样?我从另一个函数调用了一个函数来生成令牌,然后用于获取用户?因为现在我需要相同的令牌来更新用户信息,所以我应该如何在其他方法中使用相同的令牌,还是应该为每个测试生成一个新的令牌?这种方法很好,您可以从test\u generate\u Token
中删除test\uprefix,这样它就不会作为测试套件的一部分调用。此外,由于它不依赖于实例变量,因此可以将其置于类之外。您可以在setUp()
函数中生成令牌,然后在testsuite中的其他测试中重用令牌。好的,我已经将令牌生成部分放入安装程序并删除def令牌生成,但是当调用test_get_用户时,它说令牌没有定义,而这个令牌现在在安装部分,我是做错了什么,还是你的意思是其他什么?您可以在上面看到我的新代码,好吧,它工作了,所以,我已经在类外定义了令牌,然后它就可以访问了,我不确定这是否是一个好方法。谢谢,它工作了,还有一个问题,我的方法怎么样?我从另一个函数调用了一个函数来生成令牌,然后用于获取用户?因为现在我需要相同的令牌来更新用户信息,所以我应该如何在其他方法中使用相同的令牌,还是应该为每个测试生成一个新的令牌?这种方法很好,您可以从test\u generate\u Token
中删除test\uprefix,这样它就不会作为测试套件的一部分调用。此外,由于它不依赖于实例变量,因此可以将其置于类之外。您可以在setUp()
函数中生成令牌,然后在testsuite中的其他测试中重用令牌。好的,我已经将令牌生成部分放入安装程序并删除def令牌生成,但是当调用test_get_用户时,它说令牌没有定义,而这个令牌现在在安装部分,我是做错了什么,还是你的意思是其他什么?您可以在上面看到我的新代码,它工作正常,所以,我已经在类外定义了令牌,然后它就可以访问了,我不确定这是否是一个好方法
import unittest
import requests
import time
import json
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class ChromeSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
driver = self.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_get_users(self):
print("Planning to get users")
headers = {'Content-Type': 'application/json',
'Token': token}
r = requests.get('http://127.0.0.1:8080/api/users', headers=headers)
print"Get request for api Users"
print(r.text)
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()