如何解决如何通过文件上传创建龙卷风单元测试?
我正在尝试创建一个需要上传CSV文件的单元测试。这是我要尝试的一个片段,
from tornado.testing import AsyncHTTPTestCase
import json
class TestCSV(AsyncHTTPTestCase):
def test_post_with_duplicates_csv_returns_400(self,*args,**kwargs):
dup_file = open("test.csv",'r')
body = {'upload': dup_file.read()}
request_config = {
'method': 'POST','headers': {
'Content-Type': 'application/json','Origin': 'localhost'
},'body': json.dumps(payload)
}
response = self.fetch('http://localhost/file_upload',**request_config)
self.assertEqual(response.code,400)
,实际代码会像这样查找上传的文件,
...
file = self.request.files['upload'][0]
...
这将返回500状态代码并显示以下消息,
HTTPServerRequest(protocol='http',host='127.0.0.1:46243',method='POST',uri='/v2/files/merchants/MWBVGS/product_stock_behaviors',version='HTTP/1.1',remote_ip='127.0.0.1')
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/tornado/web.py",line 1699,in _execute
result = await result
File "/usr/local/lib/python3.6/site-packages/tornado/gen.py",line 191,in wrapper
result = func(*args,**kwargs)
File "/usr/app/src/handlers/merchants.py",line 463,in post
file = self.request.files['upload'][0]
KeyError: 'upload'
有人可以帮助我解释为什么未检测到文件吗?
环境:Python 3.6,龙卷风
解决方法
您正在将文件编码为JSON,但是request.files
字段用于HTML分段上传。您需要确定要使用的格式(除了这些格式之外,您通常可以直接将文件作为HTTP PUT主体直接上传),并在代码和测试中使用相同的格式。
Tornado目前不提供任何用于生成分段上传的工具,但是python标准库的email.mime
包可以提供。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。