python flask unittest无法为获取请求设置标头

问题描述 投票:2回答:2

我试图在我的标题请求中设置一个令牌进行单元测试

def setUp(self):
    #app = Flask(__name__)
    self.app = main.application.test_client()

def login(self):
    payload = {"user": "*******", "password": "******"}
    url ='/user/auth'
    headers = {'Content-Type': 'application/json'}
    response = self.app.post(url, data=json.dumps(payload), headers=headers) 
    result = json.loads(response.data)
    token = str(result["data"]["Token"])
    headers={'Content-Type': 'application/json','Token':token}
    return headers


def GetTool(self):
    headers= self.login()
    return self.app.get('/tool/all',headers=headers,follow_redirects=True)

但标题没有设置...我知道,因为我正在打印。见下文

@toolAPI.route('/tool/all/', methods=['GET'])
#@authService.authorized
def getAllTools():
   print '*request headers'
   print request.headers
   try:
      ......

这就是我在日志中得到的:

8:27:07 [MainThread  ] [INFO ]  ######HTTP MODE######
18:27:07 [MainThread  ] [INFO ]  *request headers
18:27:07 [MainThread  ] [INFO ]  Host: localhost
18:27:07 [MainThread  ] [INFO ]  Content-Length: 0
18:27:07 [MainThread  ] [INFO ]  Content-Type

任何建议是什么问题?

python flask python-unittest werkzeug
2个回答
2
投票

在您的测试文件中。

class TestYourthing(unittest.TestCase):
    def setUp(self):
        self.client = main.app.test_client()
        # get your token from somewhere
        self.headers = {'Content-Type': 'application/json', 'Token': token}

    def test_forbidden_get(self):
        """GET is forbidden for this route."""
        rv = self.client.get('/somewhere', headers=self.headers)
        self.assertEqual(rv.status_code, 404)

    # if you need to update locally the headers for a test

    def test_post_working(self):
        """testing POST for blah"""
        # Adding another header here
        self.headers.update({'X-Blah': 'ping'})
        rv = self.client.post('/somewhere', headers=self.headers)
        self.assertEqual(rv.status_code, 200)

0
投票

我发现我可以像这样设置HTTP头:

 client.environ_base['HTTP_ACCEPT'] = 'application/xml'
 response = client.get("/", follow_redirects=True)

客户端似乎在执行请求之前剥离了“HTTP_”前缀。

© www.soinside.com 2019 - 2024. All rights reserved.