自动化Microsoft bot测试

时间:2018-09-06 18:34:59

标签: botframework

我正在尝试提出一种使用bot框架自动化对机器人的测试的方法。我使用了很棒的仿真器,但是我想稍微自动化一下。从我的研究中,我发现肉毒杆菌似乎是一个很好的工具,但是当浏览文档时,我却迷失了。我也听说过使用Directline API。再次,尽管如此,我仍然缺乏理解。有人知道是否有使用REST连接到机器人的方法吗?例如,我的理想情况是使用一个csv文件来为机器人提供输入和预期输出。我想循环浏览文件,将输入传递给bot并检查响应是否与期望的输出匹配。我正在考虑在Powershell中进行此操作,因为我在那里有一些经验,但是我不确定如何开始。任何指导将不胜感激。

2 个答案:

答案 0 :(得分:1)

  

有人知道是否可以使用REST连接到机器人吗?

您可以使用the Direct Line API向机器人发送活动或从机器人接收活动。

  

我的理想情况是使用一个csv文件来为机器人输入和预期输出。我想循环浏览文件,将输入传递给bot并检查响应是否与期望的输出匹配。我正在考虑在Powershell中进行此操作,因为我在那里有一些经验,但不确定如何开始。

根据您的要求,我编写了以下脚本来实现它,您可以参考它。

$directline_secert = "your_directline_secret"
$conversation_Id = ""
$filepath = "d:\testmes.csv"
$botId = "You_bot_id"


function StartConversation([string]$directlinesecert){
    $uri = "https://directline.botframework.com/v3/directline/conversations"

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Bearer " + $directlineSecert)

    $response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers
    $global:conversation_Id = $response.conversationId

    Write-Host ("Conversation Id: " + $response.conversationId)
}

function SendActivity([string]$directlineSecert, [string]$conversationId, [string]$mes){
    $uri = "https://directline.botframework.com/v3/directline/conversations/" + $conversationId + "/activities"

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Bearer " + $directlineSecert)
    $headers.Add("Content-Type", "application/json")

    $Body = @{
    "type" = "message"
    "from" = @{"id" ="user1"}
    "text" = $mes
    } | ConvertTo-Json

    $response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $Body -ContentType 'application/json'


    Write-Host ("Id: " + $Response.id)
}

function ReceiveActivities([string]$directlineSecert, [string]$conversationId){
    $uri = "https://directline.botframework.com/v3/directline/conversations/" + $conversationId + "/activities"

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Bearer " + $directlineSecert)


    $response = Invoke-RestMethod -Uri $uri -Method GET -Headers $headers


    #Write-Host ("Activities number: " + $Response.activities.Count)

    Foreach($activity in $Response.activities){
      if($activity.type -eq "message" -and $activity.from.id -eq $botId){

        #your code logic to compare received activities with expected result
        Write-Host ("Activities Mes: " + $activity.text)
      }     
    }
}

StartConversation -directlineSecert $directline_secert



#SendActivity -directlineSecert $directline_secert -conversationId '5e5JeKRtG5vBnGIhdip1Hv' -mes 'hi bot' 


Import-CSV $filepath -Header Mes | Foreach-Object{
   #Write-Host $_.Mes

   SendActivity -directlineSecert $directline_secert -conversationId $conversation_Id -mes $_.Mes 
}

ReceiveActivities -directlineSecert $directline_secert -conversationId $conversation_Id

测试结果:

enter image description here

答案 1 :(得分:0)

要使用Botium测试Bot Framework机器人,可以使用Directline连接器。您可以使用

进行安装
npm install botium-connector-directline3

或者您可以下载Botium CLI,则无需安装任何其他软件包。

botium.json文件应如下所示-您可以在Azure帐户中找到Directline密钥。

{
  "botium": {
    "Capabilities": {
      "PROJECTNAME": "Directline3 Plugin Sample",
      "CONTAINERMODE": "directline3",
      "DIRECTLINE3_SECRET": "my-directline-secret",
      "DIRECTLINE3_WEBSOCKET": true,
      "DIRECTLINE3_POLLINGINTERVAL": 1000
    }
  }
}

剩下的就是Botium的标准过程,该过程是编写对话文件并在聊天机器人上运行它。

botium-cli run --config path/to/botium.json --convos path/to/convo_files