首页 > 编程知识 正文

Otree,otr工作方法

时间:2023-05-03 13:34:59 阅读:277907 作者:2248

您可以编写模拟参与者播放应用程序的“机器人”,以便您可以测试它是否正常运行。

很多oTree用户都跳过写机器人,因为他们认为这很复杂,或者因为他们太忙于为他们的应用程序编写代码。但是机器人可能是oTree最容易的部分。对于许多应用程序,编写机器人只需几分钟; 你只需要为yield应用程序中的每个页面写一个语句,如下所示:

然后,每次更改应用程序时,都可以自动运行机器人,而不是重复点击。这将比你最初编写机器人节省更多的时间。

此外,您可以同时运行数十个机器人,以测试您的游戏即使在交通繁忙和用户输入不同的情况下也能正常运行,从而避免在研究当天出现任何意外情况。

运行测试

假设您要在settings.py中测试名为ultimatum的会话配置。 要进行测试,请打开终端并从项目的根文件夹中运行以下命令:

此命令将测试会话,并在settings.py中的num_demo_participants中指定参与者的数量。

导出数据

使用--export标志将机器人生成的数据导出到CSV文件:

这会将CSV放在名称为autogenerated的文件夹中。要指定文件夹名称,请执行:

写测试

提交页面

测试包含在您应用的tests.py中。 填写PlayerBot的play_round()方法。 它应该模拟每个页面提交。 例如:

在这里,我们首先提交“开始”页面,该页面不包含表单。 下一页是Offer,其中包含一个表单,其字段名为offer_amount,我们将其设置为50。

我们使用yield,因为在Python中,yield意味着生成或生成一个值。 您可以将机器人视为产生(即生成)提交的机器。

如果页面包含多个字段,请使用包含多个项目的字典:

yield (pages.Offer, {'first_offer_amount': 50, 'second_offer_amount': 150, 'third_offer_amount': 150})

如果机器人提交页面的无效输入,或者它以错误的顺序提交页面,测试系统将引发错误。

您可以使用if语句编写一个可以播放任何游戏变体的机器人,而不是编写许多单独的机器人。 例如,以下是如何制作可以作为玩家1或玩家2玩的机器人。

你的if语句可以依赖于self.player,self.group,self.subsession等。

在编写机器人时应忽略等待页面。 只需为每个提交的页面写一个yield。 在执行每个yield语句之后,机器人将暂停直到任何等待页面被清除,然后它将执行到(并包括)下一个yield,依此类推。

Asserts

您可以使用assert语句来确保代码正常运行。

例如:

在Python中,assert语句用于检查应该为true的语句。 如果断言条件错误(例如,最初的self.player.money_left为11),则会引发错误。

在上面的示例中,我们预计最初self.player.money_left应为10,但在用户提交其贡献后,money_left将更新为9。

断言语句在提交以下页面之前立即执行。 例如,让我们假设上面例子中游戏的page_sequence是[Contribute,ResultsWaitPage,Results]。 bot提交pages.Contribute,被重定向到等待页面,然后被重定向到Results页面。 此时,将显示“结果”页面,然后执行行断言self.player.money_left == c(9)。 如果断言通过,则用户将提交“结果”页面。

测试表单验证

如果您使用表单验证,则应使用SubmissionMustFail()测试您的应用是否正确拒绝来自用户的无效输入。

例如,假设您有此页面:

您可以使用执行此操作的机器人测试它是否正常工作:

机器人将提交MyPage 3次。 如果前两个提交中的一个通过(即接受输入),则会引发错误,因为它们被标记为包含无效输入。 只有第三yield必须成功。

error_fields

在具有多个字段的表单上使用SubmissionMustFail时,可以使用error_fields验证所有字段是否拒绝无效输入。

例如,假设我们提交的是有效年龄,但体重和身高无效:

现在缺少的是恰好机器人系统并没有告诉我们为什么 提交失败。它是无效的weight,height或两者兼而有之?要确保两个字段都拒绝无效输入,请添加error_fields:

这将验证重量和高度是否包含错误,但年龄没有。

如果error_message返回错误,则error_fields将为['__all__']。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。