加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我可以在Perl中编写DSL吗?

发布时间:2020-12-15 21:22:45 所属栏目:大数据 来源:网络整理
导读:我们使用Perl进行GUI测试自动化.这是非常成功的.我们已经编写了一种非常轻量级的DSL语言来进行GUI测试. DSL非常类似于对象模型. 例如,我们在根目录下有一个Application对象.应用程序中的每个属性表都是一个View对象.页面下的每个页面都被称为页面对象本身.
我们使用Perl进行GUI测试自动化.这是非常成功的.我们已经编写了一种非常轻量级的DSL语言来进行GUI测试. DSL非常类似于对象模型.

例如,我们在根目录下有一个Application对象.应用程序中的每个属性表都是一个View对象.页面下的每个页面都被称为页面对象本身.
从Perl,我们发送命令到GUI应用程序,GUI解释命令并很好地响应命令.要发送命令,我们执行以下操作:

socket_object->send_command("App.View2.Page2.Activate()")
socket_object->send_command("App.View1.Page3.OKBtn.Click()")

这不是很可读.相反,我想为App,View和Page写一个Perl DSL.
Perl提供某种DSL结构,我可以在以下几个方面做

App.View2.Page2.Activate();
App.View1.Page2.Click();

应用程序应该是应用程序类的一个实例.我必须在运行时获取View2的对象.

如何使用这样的东西?

解决方法

你几乎可以在Perl中做任何事情.但是你必须做一些奇怪的事情来让Perl执行一些只是不是Perl的语法.

>为了正确处理你在那里的事情,你必须有很多先进的技巧,根据定义,这不是可维护的.你必须:

> overload连接运算符”. (需要有福的参考)
关闭strictures或创建一个AUTOLOAD子站点,以允许那些裸露的单词 – 当然,您可以为所有想要使用的单词(或使用barewords模块)编写子站点.
>可能,创建多个包,多个AUTOLOAD

>另一种方式是source filters,我可以拿起一个downvote,只是为了提到这个能力.所以我不会为那些要求帮助的人推荐这种方法.但它在那里.来源过滤器(和我已经完成了我的分享)只是其中一个可以认为你太聪明的领域.

不过,如果您对Perl作为DSL“主机”语言感兴趣,那么source filters不是完全不受限制的.然而,将这个限制在你想要做的事情上,Perl6::Attributes可能会大部分时间完成你所需要的工作.这将需要并将它们翻译成“ – >” Perl会明白.但是您仍然可以查看源过滤器来了解幕后发生的情况.

我也不想离开这个话题,而不是建议您使用Damian Conway的Filter::Simple来缓解您生成自己的源代码过滤器(我建议不要做)的很多挫败感.
最简单的就是放弃”.运算符,而只是期望Perl的代码.

App->View2->Page2->Activate(); 
App->View1->Page2->Click();

应用程序将是一个包或一个子.在当前包中定义的或导入的,它将一个带有View2子(可能是一个AUTOLOAD子)的一个对象保存到一个包中,该对象返回一个包或名称被引用到包中的名称,它可以理解Page2,然后最终从那里返回会了解Activate或Click. (见OO tutorial,如果需要的话)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读