不是从一开始
您知道许多测试工具可以:
- 直接从用户提示中获取使用Gherkin语言的步骤?
- 您是否要自动创建带有黑色Jack和Elena字幕的视频说明?)
- 在说罗马尼亚语的用户中,在罗马尼亚语界面中以英文创建* .feature文件?
本文提供了这个功能,并且很明显(带有图片),请不要切换...
参赛作品
本文是在OpenSource的肠道中创建的1C应用程序测试工具的概述,该工具称为vanessa-automation 。 该项目是vanessa-behavior项目的直接延续,该项目在狭窄的圈子中广为人知(分支创建于1.1.131版)。 顺便说一句,还有其他的叉子 。
语境
认为这篇有关habr的文章的每个读者都知道1C并不是所有的事情,作弊不是一种选择。 因此,在不形成读者对1C平台及其在Vanessa自动化中使用的功能(以下简称va或Vanessa )的理解之前,我不会冒险继续。
因此,安装1C平台后,您需要在企业模式或配置器模式下运行它。

配置是在配置器中开发的,用户在企业中使用以下配置进行工作:他们创建,编辑和保存各种此类目录和文档,从而填充数据库,然后再次生成报告:循环创建,编辑和保存...等等。 但是,开发人员在外部使用平台的通常情况与用户没有太大不同:
他们以配置器模式启动必要的配置 ,然后在循环中→开发或修改某些东西→(重新)从企业模式的1C配置器开始,并亲手检查是否已开发或完成。
这种情况可以通过称为“ 自动测试 ”的平台的功能来保存,从而可以记录,复制和验证用户的操作。 此功能如何改变平台开发人员的使用场景,我们将首先考虑一个示例,但首先要了解外部处理 。
应用的配置对象(又称为元数据 ,又称为“配置对象” , 她是Ella Katznelbogen,是Valentina Paniyad )
描述主题领域,这些对象的名称说明一切。

“单据”反映商务交易,例如收货。 例如,需要“目录”来输入交易对手的名称1次,然后选择它,而不是每次都不再输入。 数据存储在“寄存器”中,并在其上构建虚拟表以执行复杂的计算并生成“报告” 。 因此,我们进入了处理 ,在他们的帮助下对数据库信息进行了处理(例如,一个月的会计结帐或信息数据库之间的各种交换),但是我们对将其上传到外部处理的可能性感兴趣。

支持1C提供的配置(无法更改它们以免丢失自动更新),并且外部处理可以在不删除支持的情况下执行各种数据操作,并且当然可以进行测试!
扩展名在平台版本8.3.10发行之后,出于测试目的,除了外部处理之外,还可以使用扩展 (它们是补丁)。
通过某种程度的简化,可以说从技术上讲1C外部处理是一个带有epf扩展名的文件,您可以在配置器中打开它,可以创建许多表单→在表单上放置控件并在这些表单的模块中编写一些功能。 外部处理也有一个“通用”模块(又名“对象模块” )和布局,但这是一个完全不同的故事,我们返回测试。
要使用自动测试功能,您需要运行1C企业的两个实例,第一个带有测试管理器密钥(/ TESTMANAGER),第二个带有测试客户端密钥(/ TESTCLIENT),并在测试管理器和客户端之间建立连接。 因此,平台开发人员的使用场景变为:

在配置器中,使用测试管理器的密钥以企业模式启动1C→在企业中,打开va并使用它启动另一个实例
企业模式下的1C,带有测试客户端密钥。 测试客户端启动后,将自动在管理器和测试客户端之间建立va连接。 测试客户端可以是瘦客户端或Web客户端。
总计: 1C编写了Selenium,它已内置到1C:Enterprise平台中。 而且这种来自1C的硒具有优势。 例如,表单上的任何控件(又名控件)始终具有唯一的名称,在99.99%的情况下,该名称是事先已知的。 因此,定位器没有问题,要找到控件,只需编写:
= .(,,);
用示例修复材料
有必要开发一种配置以考虑发票打印的商品销售。
细心的观众可以注意到设计
<>
而且您没有记错,是的-Vanessa使用她的小黄瓜方言,它具有条件和周期。 我认为为小黄瓜增加条件和周期的想法是这样产生的:
OpenSource社区的一些成员批评了这一决定,但是如果令人不安 ,他们同意以下内容-功能的“人类可读性”不会损害此功能,并且每个人都决定是否使用它。
关于涡轮小黄瓜计划在另一篇文章中,请继续关注。
“ BDD on 1C”和一些历史
正如我们现在所看到的, va的创造者对它的看法有所不同。 只有在他们测试了最明显,最便宜的选择之后,才决定在1C下做相同的黄瓜+硒。 在某个时候,很明显,如果您使用黄瓜和硒,那么这些工具将必须最终确定,以便获得测试1C应用程序业务解决方案所需的功能。 在开源和1C世界现实的框架内,这种协调使及时发展的项目变得复杂和扩展。 结果,决定只使用1C:企业平台。
例如,在商品销售中,我们看到了va的工作原理,现在让我们看看它是如何实现的。
步骤检查
视频“测试”显示va ,特征文件(以下称为Feature )已经加载到其中,并且形成了步骤树。 通过点击“运行脚本”按钮,开始每个步骤的处理,即 调用步骤验证程序。 关于此过程的位置,我将通过示例进行解释。
假设有一个带有脚本的功能:
: "" 10 "" 300 "" 3000
要实现此业务情景步骤的验证,您需要获取与功能相对应的外部处理。 在va中,这是通过相应按钮自动完成的。

结果,将在与功能相同的目录中创建step_definitions
目录,并在其中创建与功能相同名称的外部处理。
..\.feature ..\step_definitions\.epf
步骤验证程序将位于处理表单模块中。

此外,在加载功能时, va将搜索并序列化外部流程,以找出检查其中的哪些步骤(外部流程)已实现的过程。 以下过程对此负责:

验证步骤的搜索顺序如下:
1. , feature 2. , , 3. ,

在添加/删除/更改脚本的情况下,可以通过相同的按钮“创建和更新处理模板”来补充相应功能的外部处理。
一旦执行了步骤检查,它就可以用于其他功能( 步骤的重用 )。 实际上,在此过程中,在外部处理表单模块中,我们分三个步骤看到了两个脚本验证过程。
空中和所见即所得的台阶
关于功能的一些知识1C平台的自动化测试 。 让我提醒您, 自动化测试允许您记录,播放和验证复制的用户操作。 实际上, 测试客户端和测试 经理都是相同的,只是在客户端上启用了用户的操作日志记录。

结果,我们有了一个描述用户操作的xml文件:
<?xml version="1.0" encoding="UTF-8"?> <uilog xmlns:d1p1="http://v8.1c.ru/8.3/uilog"> <ClientApplicationWindow isMain="true"> <CommandInterface> <CommandInterfaceGroup title=" "> <CommandInterfaceButton title=" "> <click/> </CommandInterfaceButton> </CommandInterfaceGroup> </CommandInterface> </ClientApplicationWindow> <ClientApplicationWindow caption=" "> <Form title=" "> <FormGroup name="" title=" "> <FormButton name="" title=""> <click/> </FormButton> </FormGroup> </Form> </ClientApplicationWindow> <ClientApplicationWindow caption=" ()"> <Form title=" ()"> <FormTable name="" title=""> <FormGroup name="" title=" "> <FormButton name="" title=""> <click/> </FormButton> </FormGroup> <FormField name="" title=""> <closeDropList/> <executeChoiceFromDropList presentation=""/> </FormField> </FormTable> </Form> </ClientApplicationWindow> <ClientApplicationWindow caption=""> <Form title=""> <FormTable name="" title=""> <gotoRow direction="down"> <Field title="" cellText="000000001"/> <Field title="" cellText=""/> </gotoRow> <choose/> </FormTable> </Form> </ClientApplicationWindow> <ClientApplicationWindow caption=" () *"> <Form title=" () *"> <FormTable name="" title=""> <endEditRow cancel="false"/> </FormTable> <FormGroup name="" title=" "> <FormButton name="" title=" "> <click/> </FormButton> </FormGroup> </Form> </ClientApplicationWindow> </uilog>
很难说创建将用户的操作记录转换为脚本步骤的功能的想法是否浮出水面,但是首先想到并实现这一想法的是Leonid Pautov( pr-mex )。 可以通过库的内容和大小来估算完成的工作量,因为除了将用户的操作日志转换为小黄瓜之外,还必须执行执行过程和检查步骤的过程。
因此,为了“随时随地”获得现成的脚本,足以在测试管理器中记录用户动作。

在测试客户端中,重现用户操作,例如,需要改进的功能或需要修复的错误。 好了,完成对用户操作的记录。 这实现了“所见即所得”测试开发方法(单击即获得)。

例如,可以从库中添加检查脚本中用户操作结果的步骤。

详细说明步骤和导出方案
不幸的是,实际上,该脚本由许多步骤组成,而不是下面的屏幕截图。

至少有两种选择可以促进对这种情况的感知。
首先,在列表的帮助下,“移动”需要分组的步骤并为其赋予一个助记符标题。

其次,使脚本简洁而通用。 我想我无法在视频“使用树形标签和空中步伐”和“将参数传递到脚本”上对Elena进行更好的描述。
视频数据( 1,2 )也是根据Gherkin上的脚本创建的,并且使用“ AutoVideoInstructions”引擎可以一键将其转换为mp4格式。
是的, Vanessa可以创建有关Vanessa工作方式的视频)
自动影片
自动视频指示是另一篇文章的主题( 在这里 ),我只能讲一点背景知识。
准备信息库,重现用户操作并验证这些操作的时刻,即 脚本执行
如果您放慢了操作步骤,将获得非常清晰的说明。

保存用户以观看脚本执行(此警察幽默来自何处?)不是一种选择,但作者并没有停止实施带有步骤和相应屏幕截图的html文件创建功能。 回放用户操作时不会显示鼠标光标并且无法选择表单上的任意区域的事实并没有阻止他,因此他编写了相应的实用程序 。 此外,应用户的要求,添加了声音表演( Elena ),这是对带有字幕和原始音乐背景的视频的基础工作,虽然工作量可观,但其中有自动视频指示。 目前,在视频上的声音动作和动作同步方面,自动视频指令得到了显着优化。
一些无聊的统计
va支持:
- 1C版本:从8.3.6和更高版本开始的企业平台(建议使用8.3.10和更高版本的平台)。
- 托管形式和“正常”形式(测试的配置可能处于兼容模式8.2或更高版本)。
- 异步呼叫模式。
为了在这样的“动物园”中正常工作, VA必须学会自我测试。 自检报告如下所示:


用于“自我”测试的脚本位于同一存储库中 。
步骤库
va软件包包括标准步骤的Gherkin库,该库允许您解决自动测试的日常任务,例如使用应用程序界面(按钮,字段,表等),使用文件,操作系统等。 目前,它已超过400步。
本地化
va界面已本地化为20种语言:
RU, am, az, bg, et, fr, ka, de, en, hu, it, lv, lt, mn, pl, ro, sl, es, sv, tr, vi.
本地化va可以分为3个部分:
- 接口(使用1C同义词的标准机制:使用Enterprise平台)。
- 给用户的消息(代替使用带有消息翻译的()布局调用)。
- VA标准库中的Gherkin步骤翻译。 即 而不是使用每种语言执行步骤“并且我单击按钮'NameKnopki'”,而是在相应的Gherkin步骤中再次使用了“映射”,该步骤已经以俄语实现。
用英语,此步骤将是
And I click 'ButtonName' button
因此,现在说英语的用户可以在va上用英语编写脚本。 标准库中的所有步骤均由人工翻译。 结果可能看起来像这样 。
逻辑上,为了支持这种本地化,我们必须实现其他工具来处理用于插入/删除值,对行进行排序等的布局(布局类似于excel表)。 直接在源文件中(xml文件)。
“ 1D中的TDD”,过程和功能测试(单元测试)
使用va,您可以测试过程和功能的“行为” 。 编写类似的脚本就足够了:

如果读者有兴趣,则可以在以后的文章中更详细地介绍此主题。
送货方式
最初,该项目仅以一组epf文件的形式交付,可以从github上的源代码汇编或下载一个现成的发行版 。 从1.2.009版本开始, va也作为一个epf文件提供,其中包括所有库,插件,本地化软件包,视频汇编模块等。 可以这么说-合而为一。
该框架的版本称为vanessa-automation-single 。 它非常适合那些不打算修改va ,但只会使用它的用户。 另外,此交付选项非常适合包含在其他配置或扩展中(FreeBSD项目许可证的好处是允许这样做)。
从上到下和从下到上
尽管实际上该工具最初是为实现BDD方法而构思的(即,当脚本是从上到下编写的,即基于客户的最高要求),但使用实践表明也可以从下到上编写脚本。 典型的情况是,已经有现成的配置,而您只需要用测试覆盖它,而不必担心方法。
品德
我希望读者已经开发了va作为一种严肃的测试工具的概念(关键字“ formed”)。 以我的拙见,从一开始看外国类似物,现在va已超越它们。 与小黄瓜一起工作的功能的扩展,使得(有可能,但在涡轮小黄瓜之前没有实现)使分析人员以及开发人员和测试人员都参与开发过程成为可能。 我将解释说,分析师编写了一个跨领域的顶级脚本→开发人员也使用导出脚本详细说明了该脚本,他几乎只写了代码(除了所有必需的UI步骤,都已在库中)→测试人员添加了脚本以从“不同角度”进行检查功能和所有这些- 在一个功能文件中 ,同志们欢呼!

聚苯乙烯
关于这一点,让我总结这篇评论文章。
用友好的话语/赞/批评来支持项目 (Gitter中的项目聊天在这里 ),作者总是很高兴。
感谢您的关注!
参考文献