SoapUI POST to REST с прикрепленным файлом в Groovy - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь отправить в службу REST Sharepoint прикрепленный файл с помощью SoapUI Pro. Я пробовал примеры по адресу: https://support.smartbear.com/readyapi/docs/requests/attachment/rest.html, но безуспешно. Он должен работать с POST с байтовым массивом в качестве тела. Но как мне это сделать в SoapUI и Groovy? В инструменте Insomnia он работает с «двоичным файлом».

Я добавляю эти заголовки:

Accept: application / json; odata = verbose Content-Type: application / octet-stream

Тип носителя = multipart / mixed и Post QueryString

enter image description here

Но файл не будет загружен в SharePoint.

Код PowerShell, который работает:

$headers = @{
    'X-RequestDigest' = 'xxxxxxxxxxxxxxxxxxxxxxx'
    'Accept' = 'application/json;odata=verbose'
}
$document = [System.IO.File]::ReadAllBytes('C:\temp\myFile.docx')
Invoke-RestMethod -Method Post -UseDefaultCredentials -Uri "https://xxxx.xxx/add(url='myFile.docx',%20overwrite=true)" -Headers $headers -Body $document  

1 Ответ

0 голосов
/ 26 мая 2020

Я пытался пройти через это go, а go, но мне показалось, что для этого проще использовать HTTP.

Вы можете попробовать проверить, соответствует ли он вашим требованиям

Мой groovy скрипт для вложения:

// upload source file before import
// get uploading request
def source_file = context.expand( '${#TestCase#source_file_path}' )

log.info "upload $source_file"

def aPIToolsTestSuite = context.expand( '${#Project#APIToolsTestSuite}' ) // the test suite that contains the test case with the HTTP request
tc_name = "import - upload resource files"

request = testRunner.testCase.testSuite.project.testSuites[aPIToolsTestSuite].testCases[tc_name].getTestStepByName("Request 1").testRequest

// clear request from any existing attachment
for (a in request.attachments)
{
    request.removeAttachment(a)
}

// attach file to upload
def file = new File(source_file)

if (file == null)
{
    log.error "bad file name : $source_file"
}
else
{
    // attach file and set properties
    try{
        def attachment = request.attachFile (file, true)
        attachment.contentType = "application/octet-stream"
        attachment.setPart("upload file '$source_file'")
    }
    catch (Exception e){
        log.error "file ${file.name} : exception $e"
    }
}

// now upload file - launch the request
def jsonSlurper = new groovy.json.JsonSlurper()
def TC;
def async = false


TC = testRunner.testCase.testSuite.project.getTestSuiteByName(aPIToolsTestSuite).getTestCaseByName(tc_name)
result = TC.run (context.getProperties(), async) 

if (String.valueOf( result.status ) != "PASS")
{
    msg = "unexpected failure during $tc_name when uploading $source_file"
    testRunner.fail(msg)
    log.error msg
}
else
{
    // this part is for further processing
    // file uploaded, go through the import and properties backup process
    resource_to_import = TC.getPropertyValue("testResponse").split('\"')[1]

    // file uploaded, go through the import and properties backup process
    testRunner.testCase.setPropertyValue("resource_id", resource_to_import)
}

И HTTP-запрос, содержащийся в тестовом примере APIToolsTestSuite / import - загрузить файлы ресурсов

первый шаг: получить конечную точку

def env = testRunner.testCase.testSuite.project.activeEnvironment

rest = env.getRestServiceAt(0)
config = rest.getEndpoint().config
endpoint = new XmlSlurper().parseText(config.toString())

testRunner.testCase.setPropertyValue("endpoint", endpoint.toString())

второй шаг, HTTP-запрос:

POST

с параметрами вкладки Request:

name : metadata
value : {"storageType":"FILESYSTEM","itemName":"my_source_file"}
type : QUERY

тип носителя: multipart / form-data Post QueryString

Заголовки: application / json

Удачи :)

...