簡體   English   中英

Robot Framework:使用以下命令在POST請求正文中發送二進制數據

[英]Robot Framework: send binary data in POST request body with

使用Robot Framework和robotframework-requests運行測試時出現問題。 我需要在正文中發送POST請求和二進制數據。 我已經看過這個問題了,但是還沒有真正回答。 這是我的測試用例的樣子:

Upload ${filename} file
    Create Session  mysession     http://${ADDRESS}
    ${data} =   Get Binary File     ${filename}
    &{headers} =    Create Dictionary   Content-Type=application/octet-stream   Accept=application/octet-stream
    ${resp} =   Post Request    mysession     ${CGIPath}  data=${data}    headers=&{headers}
    [Return]    ${resp.status_code}     ${resp.text}

問題是我的二進制數據約為250MB。 當使用“ Get Binary File讀取數據時,我看到內存消耗高達2.x GB。 幾秒鍾后,觸發“ Post RequestPost Request我的測試被OOM殺死。 我已經看過files參數,但是似乎它使用了分段編碼上傳,這不是我所需要的。

我的其他想法是關於將打開文件處理程序直接傳遞到基礎請求庫,但是我想那將需要修改robotframework-request。 另一個想法是僅針對此測試退縮。

我在考試中遺漏了什么嗎? 解決這個問題的更好方法是什么?

我進行了修改robotframework-request的想法,並添加了此方法

def post_request_binary(                                                                                          
        self,                                                                                                     
        alias,
        uri,
        path=None,
        params=None,
        headers=None,
        allow_redirects=None,                                                                                     
        timeout=None):      

    session = self._cache.switch(alias)                                                                           
    redir = True if allow_redirects is None else allow_redirects                                                  
    self._capture_output()  

    method_name = "post"    
    method = getattr(session, method_name)                                                                        

    with open(path, 'rb') as f:                                                                                   
        resp = method(self._get_url(session, uri),                                                                
                      data=f,                                                                                     
                      params=self._utf8_urlencode(params),                                                        
                      headers=headers,                                                                            
                      allow_redirects=allow_redirects,                                                            
                      timeout=self._get_timeout(timeout),                                                         
                      cookies=self.cookies,                                                                       
                      verify=self.verify)                                                                         

    self._print_debug()                                                                                           

    # Store the last session object                                                                               
    session.last_resp = resp

    self.builtin.log(method_name + ' response: ' + resp.text, 'DEBUG')                                            

    return resp

我想我可以改善它並創建請求請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM