Botframework 自动化microsoft bot测试

Botframework 自动化microsoft bot测试,botframework,Botframework,我正试图想出一种方法,用bot框架自动测试im制作的bot。我已经使用了模拟器,这是伟大的,但我想自动化的事情有点。从我的研究中,我发现botium似乎是一个很棒的工具,但当我翻阅文档时,我感到非常迷茫。我还听说过使用DirectLineAPI。尽管如此,我的理解力不足还是阻碍了我。有人知道是否有一种方法可以使用REST连接到机器人吗?例如,我的理想场景是使用csv文件为bot提供输入和预期输出。我想循环浏览该文件,将输入传递给bot,并检查响应是否与预期输出匹配。我正在考虑在powershel

我正试图想出一种方法,用bot框架自动测试im制作的bot。我已经使用了模拟器,这是伟大的,但我想自动化的事情有点。从我的研究中,我发现botium似乎是一个很棒的工具,但当我翻阅文档时,我感到非常迷茫。我还听说过使用DirectLineAPI。尽管如此,我的理解力不足还是阻碍了我。有人知道是否有一种方法可以使用REST连接到机器人吗?例如,我的理想场景是使用csv文件为bot提供输入和预期输出。我想循环浏览该文件,将输入传递给bot,并检查响应是否与预期输出匹配。我正在考虑在powershell中这样做,因为我在那里有一些经验,但我不知道如何开始。任何指导都将不胜感激

有人知道是否有一种方法可以使用REST连接到机器人吗

您可以使用向bot发送/接收活动

我的理想方案是使用csv文件为bot提供输入和预期输出。我想循环浏览该文件,将输入传递给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
测试结果:


要使用Botium测试Bot框架Bot,可以使用Directline连接器。您可以使用安装

npm install botium-connector-directline3
或者您可以下载Botium CLI,这样您就不需要安装任何其他软件包了

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

非常感谢你!我正在努力建立我的直达电话,并将报告结果。我感谢你的帮助!谢天谢地,这似乎很有效。我想知道你是否能帮我做更多?我现在也在尝试对这些卡进行测试,你知道有没有办法接收卡返回的json进行验证?上面的答案很好,但别忘了测试你的Microsoft LUIS在训练数据方面的表现。有许多技术可以描述,Benoitbotmonkey.io是一个选项,但它们不支持某些高级有效负载