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

很多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验证所有字段是否拒绝无效输入。

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

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

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

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

oTree学习教程(八)Bots相关推荐

  1. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  2. oTree学习教程(七)Apps rounds

    应用 在oTree(和Django)中,app是一个包含Python和HTML代码的文件夹.当您创建oTree项目时,它会预先加载各种应用程序,例如 public_goods和dictator.会话基 ...

  3. oTree学习教程(一)概念性概述

    概念概述 Sessions 在oTree中,会话是指多个参与者参与一系列任务或游戏的事件.会话的一个例子是: "许多参与者将来到实验室并进行公共产品游戏,然后进行问卷调查.参与者获得的奖金为 ...

  4. oTree学习教程(六)Multiplayer games

    组 oTree的群组系统允许您将玩家分成小组并让玩家与同一组中的其他玩家互动.这通常用于多人游戏.(如果您只需要"治疗组"意义上的团体,其中玩家实际上并不相互交流,那么请参阅处理. ...

  5. oTree学习教程(二)Models

    Models models.py 是您定义应用程序数据模型的位置: Subsession Group Player Player是Group的一部分,这是Subsession的一部分.请参阅概念概述. ...

  6. oTree学习教程(四)Templates

    模板 您应用的templates/文件夹将包含显示给玩家的HTML模板. 模板语法 变量 您可以显示如下变量: 模板中提供以下变量: player:当前正在查看该页面的玩家 group:当前玩家所属的 ...

  7. oTree学习教程(五)Forms

    oTree中的每个页面都可以包含一个表单,玩家应通过单击"下一步"按钮填写并提交该表单.要创建表单,首先需要Player在models.py中的类中使用字段.然后,在您的Page类 ...

  8. oTree学习教程(三)Pages

    Pages 玩家看到的每个页面都是由一个Page类定义的pages.py. 您pages.py必须有一个page_sequence 给出页面顺序的变量.例如: 如果您的游戏有多轮,则会重复此顺序.有关 ...

  9. akka学习教程(十四) akka分布式实战

    akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka ...

最新文章

  1. Android 属性动画(Property Animation) ValueAnimator 的介绍
  2. 风洞试验计算机控制模块,计算机控制风洞
  3. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s
  4. 元件怎么反转_电气图纸怎么看?三分钟教你学会看懂,受用一生
  5. 转载金阳光测试:关于产品的三类文档
  6. 整数规划--指派问题
  7. 短视频从入门到秃头(二)——拍摄第一条短视频
  8. [Win10+Excel365]尽管已启用VBA宏,Excel还是无法运行宏
  9. 微信公众号开发中分享功能 分享微信朋友圈/微信好友
  10. Python使用逻辑回归提示FutureWarning: Default solver will be changed to ‘lbfgs‘ in 0.22. Specify a solver to
  11. 共享单车回收难ofo垃圾成山 共享单车该如何管理?
  12. Windows XP自动登录设置方法
  13. PPTV网络电视如何修复浏览器支持异常
  14. 自动驾驶定位技术-马尔科夫定位
  15. C# 项目如何修改项目名称
  16. excel两个表格数据对比_EXCEL表格中1列数据分别另外2列数据对比,在第四列输出第一列数据中不重复的数据?...
  17. 学习笔记(02):华为工程师,带你实战C++视频精讲-Day1王桂林老师原创视频-C++函数重载原理...
  18. DLNA设备、服务的注册及响应
  19. stm32毕业设计 智能门禁系统
  20. 我终于面进阿里了,阿里实习offer五面经验与总结

热门文章

  1. 2015.3.31 读毕《从你的全世界路过》
  2. Java中的IO流修改
  3. 小功率静电保护器与TVS管选型,看完醍醐灌顶
  4. O2O的盈利模式是怎么样的 零售O2O如何做?
  5. TF2.0深度学习实战(一):分类问题之手写数字识别
  6. kafka的使用场景
  7. 甜橙金融如何利用 Apache Pulsar 在日均上亿的交易中抵御金融诈骗
  8. 热议!放弃985大学副教授教职,北大博士后从政任区长!
  9. html5桌面系统,基于HTML5的IVI桌面系统及本地功能扩展研究实现
  10. 小程序对数组setData