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