{"id":283613,"date":"2017-03-20T20:40:02","date_gmt":"2017-03-20T17:40:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=283613"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=283613","title":{"rendered":"\u041e\u0431\u0437\u043e\u0440 uniset2-testsuite \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c26\/80f\/447\/c2680f4472e943a3ad61d5a82678e4d3.png\"\/><br \/>  \u0412 <a href=\"https:\/\/habrahabr.ru\/post\/323290\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0431\u044b\u043b \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0410 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u2026<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0415\u0441\u043b\u0438 \u0447\u0442\u043e, \u0432\u043e\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <a href=\"https:\/\/habrahabr.ru\/post\/323290\/\">\u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/p>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 uniset2-testsuite \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:  <\/p>\n<ul>\n<li>uniset<\/li>\n<li>modbus<\/li>\n<li>snmp<\/li>\n<\/ul>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 type=\u00abuniset\u00bb<\/h2>\n<p>  \u041a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0432\u0435\u0441\u044c <a href=\"https:\/\/github.com\/Etersoft\/uniset2-testsuite\">uniset2-testsuite<\/a> \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 <a href=\"https:\/\/habrahabr.ru\/post\/278535\/\">libuniset<\/a>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <i>type=\u00abuniset\u00bb<\/i> \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d. \u0412 uniset-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u00ab\u0434\u0430\u0442\u0447\u0438\u043a\u0438\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0438\u043c\u0435\u043d\u0430) \u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0432\u0441\u0451 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u044d\u0442\u0438\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/habrahabr.ru\/post\/278607\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.  <\/p>\n<pre><code class=\"xml\">&lt;?xml version = '1.0' encoding = 'utf-8'?&gt; &lt;TestScenario&gt; &lt;TestList type=&quot;uniset&quot;&gt;  &lt;test name=&quot;Processing&quot; comment=&quot;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430&quot;&gt;      &lt;action set=&quot;OnControl_S=1&quot; comment=&quot;\u041f\u043e\u0434\u0430\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 '\u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443'&quot;\/&gt;      &lt;check test=&quot;CmdLoad_C=1&quot; comment=&quot;\u041f\u043e\u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435'&quot;\/&gt;      &lt;check test=&quot;CmdUnload_C=0&quot; comment=&quot;\u0421\u043d\u044f\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u0435'&quot;\/&gt;      &lt;check test=&quot;Level_AS&gt;=90&quot; comment=&quot;\u0426\u0438\u0441\u0442\u0435\u0440\u043d\u0430 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f..&quot; timeout=&quot;15000&quot;\/&gt;      &lt;check test=&quot;CmdLoad_C=0&quot; comment=&quot;\u0421\u043d\u044f\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435'&quot;\/&gt;      &lt;check test=&quot;CmdUnload_C=1&quot; comment=&quot;\u041f\u043e\u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u0435'&quot;\/&gt;      &lt;check test=&quot;Level_AS&lt;=10&quot; comment=&quot;\u0426\u0438\u0441\u0442\u0435\u0440\u043d\u0430 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f..&quot; timeout=&quot;15000&quot;\/&gt;   &lt;\/test&gt;   &lt;test name=&quot;Stopped&quot; comment=&quot;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430&quot;&gt;      &lt;action set=&quot;OnControl_S=0&quot; comment=&quot;\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 '\u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443'&quot;\/&gt;      &lt;check test=&quot;CmdLoad_C=0&quot; comment=&quot;\u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c' \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f&quot; holdtime=&quot;3000&quot;\/&gt;      &lt;check test=&quot;CmdUnload_C=0&quot; comment=&quot;\u043a\u043e\u043c\u0430\u043d\u0434\u0430 '\u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0438\u0442\u044c' \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f&quot; holdtime=&quot;3000&quot;\/&gt;      &lt;check test=&quot;Level_AS&lt;=80&quot; comment=&quot;\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f&quot; holdtime=&quot;10000&quot;\/&gt;   &lt;\/test&gt; &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 type=\u00abmodbus\u00bb<\/h2>\n<p>  \u042d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0434\u043b\u044f \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Modbus\">Modbus TCP<\/a>. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"xml\">&lt;?xml version = '1.0' encoding = 'utf-8'?&gt; &lt;TestScenario type=&quot;modbus&quot;&gt;     &lt;Config&gt;         &lt;aliases&gt;             &lt;item type=&quot;modbus&quot; alias=&quot;mb1&quot; mbslave=&quot;localhost:2048&quot; default=&quot;1&quot;\/&gt;             &lt;item type=&quot;modbus&quot; alias=&quot;mb2&quot; mbslave=&quot;localhost:2049&quot;\/&gt;         &lt;\/aliases&gt;     &lt;\/Config&gt;     &lt;TestList &gt;         &lt;test name=&quot;Test simple read&quot;&gt;             &lt;check test=&quot;0x10!=0&quot;\/&gt;             &lt;check test=&quot;0x24:0x04!=0&quot;\/&gt;             &lt;check test=&quot;0x24!=0&quot;\/&gt;             &lt;check test=&quot;0x1@0x02:0x02!=0&quot; config=&quot;mb2&quot;\/&gt;             &lt;check test=&quot;0x24:0x06!=0&quot;\/&gt;         &lt;\/test&gt;         &lt;test name=&quot;Test simple write&quot;&gt;             &lt;action set=&quot;0x25=10&quot;\/&gt;             &lt;action set=&quot;0x25:0x10=10&quot;\/&gt;             &lt;action set=&quot;0x25@0x02=10&quot; config=&quot;mb2&quot;\/&gt;             &lt;action set=&quot;0x25@0x02:0x05=10&quot; config=&quot;mb2&quot;\/&gt;         &lt;\/test&gt;         &lt;test name=&quot;Test other 'check'&quot;&gt;             &lt;check test=&quot;0x20=0x20&quot; timeout=&quot;1000&quot; check_pause=&quot;100&quot;\/&gt;             &lt;check test=&quot;0x20=0x20&quot;\/&gt;         &lt;\/test&gt;         &lt;test name=&quot;Test 'great'&quot;&gt;             &lt;action set=&quot;109=10&quot;\/&gt;             &lt;check test=&quot;109&gt;=5&quot;\/&gt;             &lt;check test=&quot;109&gt;=10&quot;\/&gt;         &lt;\/test&gt;         &lt;test name=&quot;Test 'less'&quot;&gt;             &lt;action set=&quot;109=10&quot;\/&gt;             &lt;check test=&quot;109&lt;=11&quot;\/&gt;             &lt;check test=&quot;109&lt;=10&quot;\/&gt;         &lt;\/test&gt;         &lt;test name=&quot;Test other 'action'&quot;&gt;             &lt;action set=&quot;20@2=1,21@0x02:5=1,103@2:0x10=12&quot; config=&quot;mb2&quot;\/&gt;         &lt;\/test&gt;     &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <b>Config<\/b> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0432\u0443\u0445 \u0443\u0437\u043b\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430. \u0423\u0441\u043b\u043e\u0432\u043d\u043e \u0438\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u044b \u0438\u043c\u0435\u043d\u0430 <b>mb1<\/b> \u0438 <b>mb2<\/b>. \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u043c\u043e\u043b\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 <b>default=\u00ab1\u00bb<\/b>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0435\u0437\u0434\u0435 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>config=&quot;..&quot;<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0437\u0435\u043b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<br \/>  \u0421\u0430\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<br \/>  <code>&quot;mbreg@mbaddr:mbfunc:nbit:vtype&quot;<\/code><br \/>  \u0413\u0434\u0435:  <\/p>\n<ul>\n<li><b>mbaddr<\/b> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 0x01<\/li>\n<li><b>mbfunc<\/b> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f mbfunc=0x04, \u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 mbfunc=0x06<\/li>\n<li><b>nbit<\/b> \u2014 \u043d\u043e\u043c\u0435\u0440 \u0431\u0438\u0442\u0430 [0&#8230;15]. \u0414\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u0435\u0441\u043b\u0438 \u043e\u043f\u0440\u043e\u0441 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u00ab\u0441\u043b\u043e\u0432\u0430\u00bb, \u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0431\u0438\u0442\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e nbit=-1 \u2014 \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/li>\n<li><b>vtype<\/b> \u2014 \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u00absigned\u00bb.<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 vtype<\/b><\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li><b>F2<\/b> \u2014 \u0434\u0432\u043e\u0439\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e float(4 \u0431\u0430\u0439\u0442\u0430)<\/li>\n<li><b>F4<\/b> \u2014 8-\u0445 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e (double)<\/li>\n<li><b>byte<\/b> \u2014 \u0431\u0430\u0439\u0442<\/li>\n<li><b>unsigned<\/b> \u2014 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 (2 \u0431\u0430\u0439\u0442\u0430)<\/li>\n<li><b>signed<\/b> \u2014 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 (2 \u0431\u0430\u0439\u0442\u0430)<\/li>\n<li><b>I2<\/b> \u2014 \u0446\u0435\u043b\u043e\u0435 (4 \u0431\u0430\u0439\u0442\u0430)<\/li>\n<li><b>U2<\/b> \u2014 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 (4 \u0431\u0430\u0439\u0442\u0430)<\/li>\n<\/ul>\n<p>  <b>\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415: <\/b>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0446\u0435\u043b\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 &#8216;float&#8217;-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u0446\u0435\u043b\u044b\u0445.  <\/div>\n<\/div>\n<p>  <\/li>\n<\/ul>\n<p> \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u043b\u044f <i>mbadrr<\/i>, <i>mbfunc<\/i>, <i>nbit<\/i> \u0438 <i>vtype<\/i> \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. <br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u044d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0412\u0430\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u0432\u043e\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0430\u043a\u0446\u0438\u044e. \u0412\u0441\u0451 \u044d\u0442\u043e \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 Modbus TCP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u0410\u0421\u0423 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e).<\/p>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 type=\u00absnmp\u00bb<\/h2>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 snmp.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\u0423 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 python-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 pysnmp, netsnmp. \u041d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u043c\u0435\u043d\u044f \u043a<br \/>  \u0431\u043e\u043b\u0435\u0435 \u00ab\u0434\u0443\u0431\u043e\u0432\u043e\u043c\u0443\u00bb \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 <i>net-snmp-clients<\/i> \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 popen. \u041a\u0430\u043a \u043d\u0438 \u043f\u0430\u0440\u0430\u0434\u043e\u043a\u0441\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0437\u0432\u0443\u0447\u0438\u0442, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u00ab\u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u00bb, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0438\u0441\u0442\u044b\u0445 \u043f\u0438\u0442\u043e\u043d-\u043c\u043e\u0434\u0443\u043b\u0435\u0439.  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c snmp \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043d\u0438\u0436\u0435:  <\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;TestScenario type=&quot;snmp&quot;&gt; &lt;Config&gt;      &lt;aliases&gt;        &lt;item type=&quot;snmp&quot;  alias=&quot;snmp1&quot; snmp=&quot;conf\/snmp.xml&quot; default=&quot;1&quot;\/&gt;        &lt;item type=&quot;snmp&quot; alias=&quot;snmp2&quot; snmp=&quot;conf\/snmp2.xml&quot;\/&gt;      &lt;\/aliases&gt; &lt;\/Config&gt; &lt;TestList&gt;   &lt;test name=&quot;SNMP read tests&quot; comm=&quot;\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e snmp&quot;&gt;        &lt;check test=&quot;uptime@node1&gt;1&quot; comment=&quot;Uptime&quot;\/&gt; \t&lt;check test=&quot;uptimeName@node2&gt;=1&quot; comment=&quot;\u0421\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0442\u0430\u0440\u0435\u0438&quot; config=&quot;snmp2&quot;\/&gt;   &lt;\/test&gt;   &lt;test name=&quot;SNMP: FAIL READ&quot; ignore_failed=&quot;1&quot;&gt; \t&lt;check test=&quot;sysServ2@node2&gt;=1&quot; comment=&quot;fail read test&quot; config=&quot;snmp2&quot;\/&gt;   &lt;\/test&gt;   &lt;test name=&quot;SNMP write tests&quot; comm=&quot;\u0417\u0430\u043f\u0438\u0441\u044c \u043f\u043e snmp&quot;&gt; \t&lt;action set=&quot;sysName@ups3=10&quot; comment=&quot;save sysName&quot;\/&gt; \t&lt;action set=&quot;sysServ2@ups3=10&quot; comment=&quot;save sysServ&quot;\/&gt;    &lt;\/test&gt;    &lt;test name=&quot;SNMP: FAIL WRITE&quot; ignore_failed=&quot;1&quot;&gt; \t&lt;action set=&quot;sysServ2@node1=10&quot; comment=&quot;FAIL SAVE TEST&quot;\/&gt;    &lt;\/test&gt; &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0449\u0451 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <b>Config<\/b> (<i>snmp=&quot;..&quot;<\/i>).  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b snmp.xml \u0434\u043b\u044f snmp \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version='1.0' encoding='utf-8'?&gt; &lt;SNMP&gt;   &lt;Nodes defaultProtocolVersion=&quot;2c&quot; defaultTimeout='1' defaultRetries='2' defaultPort='161'&gt;     &lt;item name=&quot;node1&quot; ip=&quot;192.94.214.205&quot; comment=&quot;UPS1&quot; protocolVersion=&quot;2&quot; timeout='1' retries='2'\/&gt;     &lt;item name=&quot;node2&quot; ip=&quot;test.net-snmp.org&quot; comment=&quot;UPS2&quot;\/&gt;     &lt;item name=&quot;node3&quot; ip=&quot;10.16.11.3&quot; comment=&quot;UPS3&quot;\/&gt;   &lt;\/Nodes&gt;   &lt;MIBdirs&gt;       &lt;dir path=&quot;conf\/&quot; mask=&quot;*.mib&quot;\/&gt;       &lt;dir path=&quot;conf2\/&quot; mask=&quot;*.mib&quot;\/&gt;   &lt;\/MIBdirs&gt;   &lt;Parameters defaultReadCommunity=&quot;demopublic&quot; defaultWriteCommunity=&quot;demoprovate&quot;&gt;     &lt;item name=&quot;uptime&quot; OID=&quot;1.3.6.1.2.1.1.3.0&quot; r_community=&quot;demopublic&quot;\/&gt;     &lt;item name=&quot;uptimeName&quot; ObjectName=&quot;sysUpTime.0&quot;\/&gt;     &lt;item name=&quot;bstatus&quot; OID=&quot;1.3.6.1.2.1.33.1.2.1.0&quot; ObjectName=&quot;BatteryStatus&quot;\/&gt;     &lt;item name=&quot;btime&quot; OID=&quot;.1.3.6.1.2.1.33.1.2.2.0&quot; ObjectName=&quot;TimeOnBattery&quot;\/&gt;     &lt;item name=&quot;bcharge&quot; OID=&quot;.1.3.6.1.2.1.33.1.2.4.0&quot; ObjectName=&quot;BatteryCharge&quot;\/&gt;     &lt;item name=&quot;sysName&quot; ObjectName=&quot;sysName.0&quot; w_community=&quot;demoprivate&quot; r_community=&quot;demopublic&quot;\/&gt;   &lt;\/Parameters&gt; &lt;\/SNMP&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>   \u0421\u0435\u043a\u0446\u0438\u044f <b>Nodes<\/b> \u0437\u0430\u0434\u0430\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0437\u043b\u043e\u0432 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432) \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u043c\u0435\u043d. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:  <\/p>\n<ul>\n<li><b>name<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0442\u0435\u0441\u0442\u0435<\/li>\n<li><b>ip<\/b> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (ip \u0438\u043b\u0438 hostname)<\/li>\n<li><b>timeout<\/b> \u2014 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441\u0432\u044f\u0437\u0438, \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 1 \u0441\u0435\u043a.<\/li>\n<li><b>retries<\/b> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 2.<\/li>\n<li><b>port<\/b> \u2014 \u041f\u043e\u0440\u0442 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 161.<\/li>\n<li><b>comment<\/b> \u2014 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/li>\n<\/ul>\n<p>\u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <b>Nodes<\/b> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432.  <\/p>\n<ul>\n<li>defaultProtocolVersion<\/li>\n<li>defaultTimeout<\/li>\n<li>defaultRetries<\/li>\n<li>defaultPort<\/li>\n<\/ul>\n<p>  \u0412 \u0441\u0435\u043a\u0446\u0438\u0438 <b>MIBdirs<\/b> \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0441 mib-\u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 OID  <\/p>\n<ul>\n<li><b>path<\/b> \u2014 \u043f\u0443\u0442\u044c \u0434\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430<\/li>\n<li><b>mask<\/b> \u2014 \u043c\u0430\u0441\u043a\u0430 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430<\/li>\n<\/ul>\n<p>  \u0421\u0435\u043a\u0446\u0438\u044f <b>Parameters<\/b> \u0437\u0430\u0434\u0430\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u0441\u0442\u0430\u0445:   <\/p>\n<ul>\n<li><b>name<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0442\u0435\u0441\u0442\u0435<\/li>\n<li><b>r_community<\/b> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 &#8216;community string&#8217; \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 (\u0441\u043c. snmp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b).<\/li>\n<li><b>w_community<\/b> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 &#8216;community string&#8217; \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 (\u0441\u043c. snmp \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b).<\/li>\n<li><b>OID<\/b> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c SNMP.<\/li>\n<li><b>ObjectName<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c SNMP. \u041d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/li>\n<li><b>ignoreCheckMIB<\/b> \u2014 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e mib-\u0444\u0430\u0439\u043b\u0443 (\u0432 \u0440\u0435\u0436\u0438\u043c\u0435 &#8212;check-scenario)<\/li>\n<\/ul>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <i>OID<\/i> \u0438 <i>ObjectName<\/i> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u043e\u0431\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f OID. \u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <b>Parameters<\/b> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432.  <\/p>\n<ul>\n<li>defaultReadCommunity<\/li>\n<li>defaultWriteCommunity<\/li>\n<\/ul>\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438<\/h2>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;TestScenario&gt; &lt;Config&gt;   &lt;aliases&gt;     &lt;item type=&quot;uniset&quot; alias=&quot;u&quot; confile=&quot;configure.xml&quot; default=&quot;1&quot;\/&gt;     &lt;item type=&quot;modbus&quot; alias=&quot;mb&quot; mbslave=&quot;localhost:2048&quot;\/&gt;     &lt;item type=&quot;snmp&quot; alias=&quot;snmp&quot; snmp=&quot;conf\/snmp.xml&quot;\/&gt;   &lt;\/aliases&gt; &lt;\/Config&gt; &lt;RunList after_run_pause=&quot;5000&quot;&gt; ... &lt;\/RunList&gt; &lt;TestList&gt;    &lt;test name=&quot;check: Equal test&quot;&gt;      &lt;action set=&quot;111=10&quot;\/&gt;      &lt;check test=&quot;111=10&quot;\/&gt;      &lt;check test=&quot;uptime@node1&gt;1&quot; config=&quot;snmp&quot;\/&gt;      &lt;check test=&quot;0x10!=0&quot; config=&quot;mb&quot;\/&gt;     &lt;\/test&gt; &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<p>  \u0422.\u0435. \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0437\u0430\u0434\u0430\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>config<\/b>=\u00abaliasname\u00bb<\/p>\n<h2>\u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h2>\n<p>  <\/p>\n<h4>\u0412\u0432\u043e\u0434\u043d\u0430\u044f<\/h4>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0438\u0434\u0435\u043d\u0438\u0435 \u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c API \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0432 uniset2-testsuite. \u0418 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (<s>\u043d\u0443 \u043f\u043e\u0447\u0442\u0438<\/s>)  <\/p>\n<pre><code class=\"python\">    def get_value(self, name, context):         ...     def set_value(self, name, value, context):         ...<\/code><\/pre>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0436\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438\u0434\u0435\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 check \u0438\u043b\u0438 action \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 <br \/>  <code>\u0441heck=&quot;[NAME]=[VALUE]&quot;<\/code>. <br \/>  \u0412\u043c\u0435\u0441\u0442\u043e <i>&#8216;=&#8217;<\/i> \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e [=,&gt;,&gt;=,&lt;,&lt;=,!=]. <br \/>  \u0422.\u0435. \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0438\u0439 <b>[NAME]<\/b> \u043a\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c. \u0418 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c. \u0418 \u0435\u0441\u0442\u044c <b>[VALUE]<\/b> \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c. \u0412 \u0438\u0442\u043e\u0433\u0435 uniset2-testsuite \u0431\u0435\u0440\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0443 \u0442\u0435\u0441\u0442\u0430 \u043d\u0430 NAME \u0438 VALUE \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>get_value<\/b> \u0438\u043b\u0438 <b>set_value<\/b> \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0430\u043c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u043a\u0430\u043a \u0443 \u043d\u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u0435 [NAME] <i>\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d<\/i> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<ul>\n<li>\u0432 \u00abuniset\u00bb \u0444\u043e\u0440\u043c\u0430\u0442 <i>NAME<\/i>: <code>id@node<\/code><\/li>\n<li>\u0432 \u00abmodbus\u00bb \u0444\u043e\u0440\u043c\u0430\u0442 <i>NAME<\/i>: <code>&quot;mbreg@mbaddr:mbfunc:nbit:vtype&quot;<\/code><\/li>\n<li>\u0432 \u00absnmp\u00bb \u0444\u043e\u0440\u043c\u0430\u0442 <i>NAME<\/i>: <code>&quot;varname@node&quot;<\/code><\/li>\n<\/ul>\n<p>  \u0422.\u0435. \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u0430\u043c \u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f <i>NAME<\/i> \u0435\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u0442\u044c.<br \/>  <b>\u0412\u0430\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443<\/b>, \u0447\u0442\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u043a\u0430\u043a <i>timeout<\/i>, <i>check_time<\/i>, <i>holdtime<\/i> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 uniset2-testsuite. \u0418 \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0442\u0435\u0441\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <code>&lt;check test=&quot;varname=34&quot; timeout=&quot;15000&quot; check_time=&quot;3000&quot;\/&gt;<\/code>, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0435 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f get_value(varname), \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u0442\u0435\u0447\u0451\u0442 timeout \u0438\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 34. <br \/>  <b>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435<\/b> \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f [VALUE] \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u043e. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u00ab\u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430\u00bb (<s>\u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438<\/s>) \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 VALUE \u043d\u0435 \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 <i>compare<\/i>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0441 \u0447\u0438\u0441\u043b\u043e\u043c, \u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430.<\/p>\n<h4>\u041a\u043e\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0412 uniset2-testsuite \u0434\u043b\u044f \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044f <b>Config<\/b>\/<b>aliases<\/b>, \u0433\u0434\u0435 \u0432 \u0432\u0438\u0434\u0435 xml-\u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e. \u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u0442\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 snmp-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0443\u0437\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433-\u0444\u0430\u0439\u043b (snmp.xml), \u0430 \u0443\u0436\u0435 \u0442\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 modbus, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c ip \u0438 port \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0438 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <i>Config<\/i>.<\/p>\n<h4>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432)<\/h4>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435. \u0415\u0441\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 &#8216;<b>plugins.d<\/b>&#8216; \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0442\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b. \u0415\u0441\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u00ab\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439\u00bb, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438\u0449\u0443\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <b>plugins.d<\/b> \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435, \u0433\u0434\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0441\u0442. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0442\u0430\u043c \u0436\u0435, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u0441\u0442 \u0438 \u043e\u043d\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044f\u0442\u0441\u044f.<br \/>  \u041a\u0430\u0436\u0434\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e python-\u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 <b>\u043e\u0431\u044f\u0437\u0430\u043d<\/b> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>uts_plugin_name()<\/b>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 snmp \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a  <\/p>\n<pre><code class=\"python\">def uts_plugin_name():     return &quot;snmp&quot; <\/code><\/pre>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0441\u0430\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435:  <\/p>\n<pre><code class=\"xml\">.. &lt;Config&gt;   &lt;aliases&gt;     &lt;item type=&quot;uniset&quot; alias=&quot;u&quot; confile=&quot;configure.xml&quot; default=&quot;1&quot;\/&gt;     &lt;item type=&quot;modbus&quot; alias=&quot;mb&quot; mbslave=&quot;localhost:2048&quot;\/&gt;     &lt;item type=&quot;snmp&quot; alias=&quot;snmp&quot; snmp=&quot;conf\/snmp.xml&quot;\/&gt;   &lt;\/aliases&gt; &lt;\/Config&gt; ... <\/code><\/pre>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, uniset2-testsuite \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043f\u043e \u0438\u043c\u0435\u043d\u0430\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0438\u0445 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 <i>plugins.d<\/i>. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 <br \/>  \u043f\u043e \u0441\u0435\u043a\u0446\u0438\u0438 <b>Config<\/b> \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0441\u044f type=\u00abxxxx\u00bb \u0438 \u0438\u0449\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441,<br \/>  \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <br \/>  <code>uts_create_from_xml(xmlConfNode)<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f xml-\u0443\u0437\u0435\u043b<br \/>  \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0414\u0430\u043b\u0435\u0435 \u0443\u0436\u0435 \u0432 \u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0435\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. <br \/>  \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e:  <\/p>\n<pre><code class=\"python\">uts_plugin_name() - \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 type=&quot;...&quot; uts_create_from_xml(xmlConfNode) - \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c <\/code><\/pre>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/h4>\n<p>  \u0412\u044b\u0448\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>set_value()<\/b> \u0438 <b>get_value()<\/b>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0435:  <\/p>\n<pre><code class=\"python\"> def validate_parameter(self, name):    ...  def validate_configuration(self):    ... <\/code><\/pre>\n<p>  \u041e\u043d\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 &#8212;check-scenario, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0442\u0435\u0441\u0442\u0430, \u0431\u0435\u0437 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. <b>validate_parameter<\/b> \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>name<\/i>. \u0418 \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0435. \u0410 <b>validate_configuration<\/b> \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 snmp-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0432 \u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438 OID \u0438 ObjectName \u043f\u043e mib-\u0444\u0430\u0439\u043b\u0430\u043c (\u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0433\u0434\u0435 \u0438\u0445 \u043d\u0430\u0439\u0442\u0438).<\/p>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0420\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u044f \u043d\u0430\u0434 \u0442\u0435\u043c \u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u044e &#187;\u0441\u0430\u043c\u044b\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439&#187; \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u2014 \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b. \u041d\u0430\u0437\u043e\u0432\u0443 \u0435\u0433\u043e <b>\u00abscripts\u00bb<\/b>. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434 \u0441\u043b\u043e\u0432\u043e\u043c \u00ab\u0441\u043a\u0440\u0438\u043f\u0442\u00bb \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e bash, \u0430 \u0432\u0441\u0451 \u0447\u0442\u043e \u00ab\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u00bb. \u0422.\u043a. \u043c\u044b \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <i>\u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443<\/i> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443.<\/p>\n<p>  \u0418\u0442\u0430\u043a. <br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f NAME (\u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0432\u0438\u0434\u0443 \u0441\u043c. \u0432\u044b\u0448\u0435). \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0432,<s> \u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0442\u043e \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0432<\/s>, \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443:  <\/p>\n<pre><code class=\"xml\"> &lt;test name=&quot;check scripts&quot;&gt;    &lt;check test=&quot;scriptname.sh &gt;= VALUE&quot; params=&quot;param1 param2 param3&quot; ..\/&gt;    &lt;check test=&quot;..\/myscritps\/scriptname.sh &gt;= VALUE&quot; params=&quot;param1 param2 param3&quot; ..\/&gt;    ..  &lt;\/test&gt; <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e \u043f\u043e\u0438\u0441\u043a\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043f\u0435\u0440\u0432\u0430 \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442, \u0430-\u043b\u044f GET-\u0437\u0430\u043f\u0440\u043e\u0441: <code>scriptname?param1&amp;param2&amp;param3.<\/code><br \/>  \u041d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 xml. \u0410 \u0432 \u043d\u0451\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#8216;<b>&#038;<\/b>&#8216;. \u0422\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 <b>&#8216;&#038;&#8217;amp;<\/b>. \u0427\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e \u0443\u0436\u0435 \u0441\u0432\u043e\u0434\u0438\u0442 \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043d\u0430 \u043d\u0435\u0442.  <\/div>\n<\/div>\n<p>  \u0422.\u0435. \u0432 <b>test=&quot;..&quot;<\/b> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u043c\u043e\u0436\u043d\u043e \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0442\u0438). \u0422.\u043a. \u043d\u0430\u043c \u0432\u0435\u0434\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0443, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0451\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435) <b>params=&quot;&#8230;&quot;<\/b>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u043c <b>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b>. \u0422.\u043a. \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 0 \u2014 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0438 \u00ab\u043d\u0435 \u043d\u043e\u043b\u044c\u00bb \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0430, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u0435 \u043b\u0443\u0447\u0448\u0430\u044f \u0438\u0434\u0435\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0431\u0443\u0434\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u0430 \u0432 stdout \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0440 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c. \u0422.\u0435. \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u044b \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u0432\u043e\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u043d\u0435\u0451 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041c\u0430\u0440\u043a\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0438\u0434\u0430: <code>TEST_SCRIPT_RESULT: VALUE<\/code><\/p>\n<p>  \u0422.\u0435. \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u043b\u043e\u0432\u0438\u043c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043c\u0430\u0440\u043a\u0435\u0440, \u0432\u044b\u0440\u0435\u0437\u0430\u044f \u043e\u0442\u0442\u0443\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. <s>\u041d\u0443 \u0432\u043e\u0442 \u0434\u0430, \u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u044f \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b.<\/s><\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u044d\u0442\u043e <b>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/b>. \u0422\u0443\u0442 \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e. \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 != 0, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0432 stderr.<\/p>\n<p>  <b>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/b> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: \u043d\u0443 \u043f\u043e\u043a\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u0425\u043e\u0442\u044f \u043f\u043e\u0442\u043e\u043c \u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043e\u0434\u0438\u043d \u0441\u0434\u0435\u043b\u0430\u043b.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. \u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c<\/p>\n<ul>\n<li><i><b>\u0424\u041e\u0420\u041c\u0410\u0422 \u0422\u0415\u0421\u0422\u0410:<\/b><\/i> <code>&lt;check test=&quot;testscript=VALUE&quot; params=&quot;param1 param2 param3..&quot;...\/&gt;<\/code><\/li>\n<li><i><b>\u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422:<\/b><\/i> \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d (stdout) \u0441\u0442\u0440\u043e\u043a\u0443 <code>TEST_SCRIPT_RESULT: VALUE<\/code><\/li>\n<li><i><b>\u041e\u0428\u0418\u0411\u041a\u0418:<\/b><\/i> \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 !=0 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430! \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 0.<\/li>\n<li><i><b>\u041a\u041e\u041d\u0424\u0418\u0413\u0423\u0420\u0418\u0420\u041e\u0412\u0410\u041d\u0418\u0415:<\/b> <\/i>\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442<\/li>\n<\/ul>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u2026<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0433 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0451\u043c \u0434\u0432\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>uts_create_from_xml(..)<\/b> \u0438 <b>uts_plugin_name()<\/b>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">def uts_create_from_xml(xmlConfNode):     &quot;&quot;&quot;     \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430     :param xmlConfNode: xml-\u0443\u0437\u0435\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438     :return: \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a UTestInterface     &quot;&quot;&quot;     return UTestInterfaceScripts(xmlConfNode=xmlConfNode)   def uts_plugin_name():     return &quot;scripts&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 UTestInterface \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043b\u0430\u0441\u0441 UTestInterface.py  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">UTestInterface.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python # -*- coding: utf-8 -*-  from TestSuiteGlobal import *   class UTestInterface():     &quot;&quot;&quot;\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&quot;&quot;&quot;      def __init__(self, itype, **kwargs):         self.itype = itype         self.ignore_nodes = False      def set_ignore_nodes(self, state):         &quot;&quot;&quot;         set ignore 'node' for tests (id@node)         :param state: TRUE or FALSE         &quot;&quot;&quot;         self.ignore_nodes = state      def get_interface_type(self):         return self.itype      def get_conf_filename(self):         return ''      def validate_parameter(self, name):         &quot;&quot;&quot;         Validate test parameter (id@node)         :param name: parameter from &lt;check&gt; or &lt;action&gt;         :return: [ RESULT, ERROR ]         &quot;&quot;&quot;         return [False, &quot;(validateParam): Unknown interface..&quot;]      def validate_configuration(self):         &quot;&quot;&quot;         Validate configuration parameters  (check-scenario-mode)         :return: [ RESULT, ERROR ]         &quot;&quot;&quot;         return [False, &quot;(validateConfiguration): Unknown interface..&quot;]      def get_value(self, name):         raise TestSuiteException(&quot;(getValue): Unknown interface..&quot;)      def set_value(self, name, value, supplier_id):         raise TestSuiteException(&quot;(setValue): Unknown interface...&quot;) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>get_value(self, name, context)<\/code>.<br \/>  \u041d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f <b>name<\/b> \u2014 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<br \/>  \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432\u0432\u0435\u043b\u0438 \u0435\u0449\u0451 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 params, \u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0435\u0433\u043e.<br \/>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043a\u0430\u043a <b>context<\/b>. \u0427\u0442\u043e \u0432 \u043d\u0451\u043c \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <a href=\"https:\/\/wiki.etersoft.ru\/UniSet2\/testsuite\/index.html#uts_Context\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>, \u043c\u044b \u0436\u0435 \u0432\u044b\u0442\u0430\u0449\u0438\u043c xml-\u0443\u0437\u0435\u043b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c (\u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u043a\u0438\u043d\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435).  <\/p>\n<pre><code class=\"python\">def get_value(self, name, context):     xmlnode = None    if 'xmlnode' in context:        xmlnode = context['xmlnode']     if not xmlnode:       raise TestSuiteException(&quot;(scripts:get_value): Unknown xmlnode for '%s'&quot; % name)     ... <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u043c\u0430\u043b\u043e \u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0442\u043e\u043c) \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 name \u0438 context, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <i>scriptname<\/i> \u0438 <i>parameters<\/i>.<\/p>\n<p>  \u0412\u043e\u0442 \u043e\u043d\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">parse_name()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">  @staticmethod     def parse_name(name, context):         &quot;&quot;&quot;         \u0420\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430: &lt;check test=&quot;scriptname=XXX&quot; params=&quot;param1 param2 param3&quot; ...\/&gt;         :param name: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 (\u043f\u043e \u0441\u0443\u0442\u0438 \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448 scriptname)         :param context:         :return: [scriptname, parameters]         &quot;&quot;&quot;          if 'xmlnode' in context:             xmlnode = context['xmlnode']             return [name, uglobal.to_str(xmlnode.prop(&quot;params&quot;))]          return [name, &quot;&quot;] <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0448 get_value() \u0434\u043e\u043b\u0436\u0435\u043d   <\/p>\n<ul>\n<li>\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442<\/li>\n<li>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438<\/li>\n<li>\u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/li>\n<\/ul>\n<p>  \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u043e\u043b\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">get_value()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">def get_value(self, name, context):        xmlnode = None       if 'xmlnode' in context:           xmlnode = context['xmlnode']        if not xmlnode:          raise TestSuiteException(&quot;(scripts:get_value): Unknown xmlnode for '%s'&quot; % name)        scriptname, params = self.parse_name(name, context)        if len(scriptname) == 0:          raise TestSuiteException(&quot;(scripts:get_value): Unknown script name for '%s'&quot; % name)        test_env = None       if 'environment' in context:           test_env = context['environment']        s_out = ''       s_err = ''       cmd = scriptname + &quot; &quot; + params        try:           p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=test_env, close_fds=True, shell=True)            s_out = p.stdout.read(self.max_read)           s_err = p.stderr.read(self.max_read)           retcode = p.wait()           if retcode != 0:              emessage = &quot;SCRIPT RETCODE(%d) != 0. stderr: %s&quot; % (retcode, s_err.replace(&quot;\\n&quot;, &quot; &quot;))              raise TestSuiteException(&quot;(scripts:get_value): %s&quot; % emessage)        except subprocess.CalledProcessError, e:           raise TestSuiteException(&quot;(scripts:get_value): %s for %s&quot; % (e.message, name))        if xmlnode.prop(&quot;show_output&quot;):          print s_out        ret = self.re_result.findall(s_out)       if not ret or len(ret) == 0:          return None        lst = ret[0]       if not lst or len(lst) &lt; 1:          return None        return uglobal.to_int(lst) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f. <\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u044b \u0435\u0449\u0451 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"http:\/\/wiki.etersoft.ru\/UniSet2\/testsuite\/index.html#uts_Actions_SCRIPT\">\u043f\u0440\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/a><br \/>  \u0421\u043b\u043e\u0432\u0430\u0440\u0438\u043a \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0451\u043c \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: <code>test_env = context['environment']<\/code><\/p>\n<p>  \u042f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u0435\u0431\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u0432\u0435\u0441\u0442\u0438 \u0434\u0432\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <b>show_output=\u00ab1\u00bb<\/b> \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0440\u043e\u0432\u043d\u044f <b>check<\/b>. \u0412\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0435\u0433\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u0442\u0430\u043c \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432 stdout. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c. \u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0432\u0432\u0451\u043b, \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <b>max_read<\/b> \u2014 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e (\u043f\u0435\u0440\u0432\u044b\u0445) \u0431\u0430\u0439\u0442 \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0410 \u0432\u043e \u0432\u0442\u043e\u0440\u044b\u0445, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u0435\u043f\u043b\u043e\u0445\u0430\u044f \u0438\u0434\u0435\u044f. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u0434\u0430\u043d &lt;=0, \u0442\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0451.<br \/>  \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c stderr (\u0434\u0435\u043b\u0430\u044f \u0435\u0433\u043e \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443).<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0436\u0434\u0451\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0422.\u0435. \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b \u0438 <br \/>  \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0435\u0441\u044f. \u0412\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u00ab\u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434\u00bb. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e timeout-\u0443.  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>plugins.d<\/i> \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0442\u0443\u0434\u0430 \u043d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c. \u0410 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0435\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;TestScenario&gt;   &lt;Config&gt;     &lt;environment&gt;       &lt;item name=&quot;MyTEST_VAR1&quot; value=&quot;MyTEST_VALUE1&quot;\/&gt;       &lt;item name=&quot;MyTEST_VAR2&quot; value=&quot;MyTEST_VALUE2&quot;\/&gt;       &lt;item name=&quot;MyTEST_VAR3&quot; value=&quot;MyTEST_VALUE3&quot;\/&gt;     &lt;\/environment&gt;     &lt;aliases&gt;       &lt;item type=&quot;scripts&quot; alias=&quot;s&quot; default=&quot;1&quot;\/&gt;     &lt;\/aliases&gt;   &lt;\/Config&gt;   &lt;TestList type=&quot;scripts&quot;&gt;     &lt;test name=&quot;Test run script&quot; ignore_failed=&quot;1&quot;&gt;       &lt;check test=&quot;.\/test-script.sh != 10&quot; params=&quot;--param1 3 --param2 4&quot; timeout=&quot;2000&quot;\/&gt;       &lt;check test=&quot;.\/test-script.sh = 100&quot; params=&quot;param1=3,param2=4&quot;\/&gt;       &lt;check test=&quot;.\/test-script-negative-number.sh = -20&quot;  show_output=&quot;1&quot;\/&gt;       &lt;check test=&quot;.\/test-script-longtime.sh = 100&quot; timeout=&quot;3000&quot;\/&gt;       &lt;check test=&quot;.\/test-script-error.sh &gt; 10&quot;\/&gt;     &lt;\/test&gt;   &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <i>Config<\/i>, \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 default-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 type=\u00abscripts\u00bb. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0442\u0435\u0433\u0435 <i>TestList<\/i> \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<br \/>  \u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 bash-\u0441\u043a\u0440\u0438\u043f\u0442\u0438\u043a\u0438, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u0435:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">test-script.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/sh echo &quot;TEST SCRIPT: $*&quot; echo &quot;SHOW OUTOUT...&quot; echo &quot;TEST_SCRIPT_RESULT: 100&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0430\u043e\u0434\u043d\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0438\u0445  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">test-script-negative-number.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/sh echo &quot;TEST SCRIPT: $*&quot;  echo  &quot;SHOW ENV VARIABLES: ..&quot; env | grep MyTEST env | grep UNISET_TESTSUITE  echo &quot;TEST_SCRIPT_RESULT: -20&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0442\u0443 \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <i>show_output=\u00ab1\u00bb<\/i> \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c ignore_failed=\u00ab1\u00bb \u0443 \u0442\u0435\u0441\u0442\u0430):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">uniset2-testsuite-xmlplayer --testfile tests-scripts-interface.xml --log-show-actions --log-show-tests <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7d7\/82f\/06f\/7d782f06f6074a10b053308c0ba7acbf.png\"\/><\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u043a\u0430-\u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>get_value(...)<\/code>. \u0423 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. <\/p>\n<p>  \u0410 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u00ab\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439\u00bb(action)? \u0422.\u0435. \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>set_value()<\/b>\u2026<br \/>  \u042f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 <\/p>\n<pre><code class=\"xml\">&lt;action set=&quot;...&quot;\/&gt;<\/code><\/pre>\n<p> \u043f\u043e\u0442\u043e\u043c\u0443-\u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <\/p>\n<pre><code class=\"xml\">&lt;action script=&quot;..&quot;\/&gt;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">set_value(..)<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">   def set_value(self, name, value, context):         raise TestSuiteException(&quot;(scripts:set_value): Function 'set' is not supported. Use &lt;action script='..'&gt; for %s&quot; % name) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u0435\u0435\u2026<br \/>  \u0423 testsuite \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0435\u0436\u0438\u043c &#8212;check-scenario \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0431\u0435\u0437 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>validate_parameter<\/b> \u0438 <b>validate_configuration<\/b>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435\u0442, \u043a\u0440\u043e\u043c\u0435 <b>max_output_read<\/b>, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u043c \u043e\u0441\u043e\u0431\u043e \u0438 \u043d\u0435\u0447\u0435\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>validate_configuration<\/b> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u0410 \u0432\u043e\u0442 <b>validate_parameter<\/b> \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c (\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0435\u0433\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438), \u044d\u0442\u043e:  <\/p>\n<ul>\n<li>\u0437\u0430\u0434\u0430\u043d \u043b\u0438 \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435<\/li>\n<li>\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 validate_parameter() \u0438 validate_configuration()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">    def validate_configuration(self, context):         return [True, &quot;&quot;]      def validate_parameter(self, name, context):         &quot;&quot;&quot;         :param name:  scriptname         :param context: ...         :return: [Result, errors]         &quot;&quot;&quot;         err = []          xmlnode = None         if 'xmlnode' in context:             xmlnode = context['xmlnode']          scriptname, params = self.parse_name(name, context)          if not scriptname:             err.append(&quot;(scripts:validate): ERROR: Unknown scriptname for %s&quot; % str(xmlnode))          if not is_executable(scriptname):             err.append(&quot;(scripts:validate): ERROR: '%s' not exist&quot; % scriptname)          if len(err) &gt; 0:             return [False, ', '.join(err)]          return [True, &quot;&quot;] <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0438, \u044f \u0432\u0441\u0442\u0430\u0432\u0438\u043b \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u00ab\u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e\u00bb \u0441\u043a\u0440\u0438\u043f\u0442\u0430.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;TestScenario&gt;   &lt;Config&gt;     &lt;environment&gt;       &lt;item name=&quot;MyTEST_VAR1&quot; value=&quot;MyTEST_VALUE1&quot;\/&gt;       &lt;item name=&quot;MyTEST_VAR2&quot; value=&quot;MyTEST_VALUE2&quot;\/&gt;       &lt;item name=&quot;MyTEST_VAR3&quot; value=&quot;MyTEST_VALUE3&quot;\/&gt;     &lt;\/environment&gt;     &lt;aliases&gt;       &lt;item type=&quot;scripts&quot; alias=&quot;s&quot; default=&quot;1&quot;\/&gt;     &lt;\/aliases&gt;   &lt;\/Config&gt;   &lt;TestList type=&quot;scripts&quot;&gt;     &lt;test name=&quot;Test run script&quot; ignore_failed=&quot;1&quot;&gt;       &lt;check test=&quot;.\/test-script.sh != 10&quot; params=&quot;--param1 3 --param2&quot;\/&gt;       &lt;check test=&quot;.\/test-script.sh = 100&quot; params=&quot;param1=3,param2=4&quot;\/&gt;       &lt;check test=&quot;.\/test-script-negative-number.sh = -20&quot;  show_output=&quot;1&quot;\/&gt;       &lt;check test=&quot;.\/test-script-longtime.sh = 100&quot; timeout=&quot;3000&quot;\/&gt;       &lt;check test=&quot;.\/test-script-error.sh &gt; 10&quot;\/&gt;       &lt;check test=&quot;.\/non-existent-script.sh &gt; 10&quot;\/&gt;     &lt;\/test&gt;   &lt;\/TestList&gt; &lt;\/TestScenario&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418 \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">uniset2-testsuite-xmlplayer --testfile tests-scripts-interface.xml --log-show-actions --log-show-tests --check-scenario<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f57\/3c9\/ceb\/f573c9ceb018409db2022ccefb974910.png\"\/><\/p>\n<p>  \u041d\u0443 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">UTestInterfaceScripts.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python # -*- coding: utf-8 -*-  import os import sys import re import subprocess from UTestInterface import * import uniset2.UGlobal as uglobal   class UTestInterfaceScripts(UTestInterface):     &quot;&quot;&quot;     \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.      \u0424\u041e\u0420\u041c\u0410\u0422 \u0422\u0415\u0421\u0422\u0410: &lt;check test=&quot;testscript=VALUE&quot; params=&quot;param1 param2 param3..&quot; show_output=&quot;1&quot;...\/&gt;     \u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422: \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d (stdout) \u0441\u0442\u0440\u043e\u043a\u0443 TEST_SCRIPT_RESULT: VALUE     \u041e\u0428\u0418\u0411\u041a\u0418: \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 !=0 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430! \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 0.      \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:         show_output=1 - \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d stdout..      \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u0441\u0435\u043a\u0446\u0438\u044f &lt;Config&gt;):       max_output_read=&quot;value&quot; - \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.       \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 1000     &quot;&quot;&quot;      def __init__(self, **kwargs):         &quot;&quot;&quot;         :param kwargs: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b         &quot;&quot;&quot;         UTestInterface.__init__(self, 'scripts', **kwargs)          self.max_read = 1000          if 'xmlConfNode' in kwargs:             xmlConfNode = kwargs['xmlConfNode']             if not xmlConfNode:                 raise TestSuiteValidateError(&quot;(scripts:init): Unknown confnode&quot;)              m_read = uglobal.to_int(xmlConfNode.prop(&quot;max_output_read&quot;))             if m_read &gt; 0:                 self.max_read = m_read          self.re_result = re.compile(r'TEST_SCRIPT_RESULT: ([-]{0,}\\d{1,})')      @staticmethod     def parse_name(name, context):         &quot;&quot;&quot;         \u0420\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430: &lt;check test=&quot;scriptname=XXX&quot; params=&quot;param1 param2 param3&quot; ...\/&gt;         :param name: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 (\u043f\u043e \u0441\u0443\u0442\u0438 \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448 scriptname)         :param context:         :return: [scriptname, parameters]         &quot;&quot;&quot;          if 'xmlnode' in context:             xmlnode = context['xmlnode']             return [name, uglobal.to_str(xmlnode.prop(&quot;params&quot;))]          return [name, &quot;&quot;]      def validate_configuration(self, context):         return [True, &quot;&quot;]      def validate_parameter(self, name, context):         &quot;&quot;&quot;          :param name:  scriptname         :param context: ...         :return: [Result, errors]         &quot;&quot;&quot;         err = []          xmlnode = None         if 'xmlnode' in context:             xmlnode = context['xmlnode']          scriptname, params = self.parse_name(name, context)          if not scriptname:             err.append(&quot;(scripts:validate): ERROR: Unknown scriptname for %s&quot; % str(xmlnode))          if not is_executable(scriptname):             err.append(&quot;(scripts:validate): ERROR: '%s' not exist&quot; % scriptname)          if len(err) &gt; 0:             return [False, ', '.join(err)]          return [True, &quot;&quot;]      def get_value(self, name, context):          xmlnode = None         if 'xmlnode' in context:             xmlnode = context['xmlnode']          if not xmlnode:             raise TestSuiteException(&quot;(scripts:get_value): Unknown xmlnode for '%s'&quot; % name)          scriptname, params = self.parse_name(name, context)          if len(scriptname) == 0:             raise TestSuiteException(&quot;(scripts:get_value): Unknown script name for '%s'&quot; % name)          test_env = None         if 'environment' in context:             test_env = context['environment']          s_out = ''         s_err = ''          cmd = scriptname + &quot; &quot; + params          try:             p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=test_env, close_fds=True,                                  shell=True)              s_out = p.stdout.read(self.max_read)             s_err = p.stderr.read(self.max_read)              retcode = p.wait()              if retcode != 0:                 emessage = &quot;SCRIPT RETCODE(%d) != 0. stderr: %s&quot; % (retcode, s_err.replace(&quot;\\n&quot;, &quot; &quot;))                 raise TestSuiteException(&quot;(scripts:get_value): %s&quot; % emessage)          except subprocess.CalledProcessError, e:             raise TestSuiteException(&quot;(scripts:get_value): %s for %s&quot; % (e.message, name))          if xmlnode.prop(&quot;show_output&quot;):             print s_out          ret = self.re_result.findall(s_out)         if not ret or len(ret) == 0:             return None          lst = ret[0]         if not lst or len(lst) &lt; 1:             return None          return uglobal.to_int(lst)      def set_value(self, name, value, context):         raise TestSuiteException(             &quot;(scripts:set_value): Function 'set' is not supported. Use &lt;action script='..'&gt; for %s&quot; % name)   def uts_create_from_args(**kwargs):     &quot;&quot;&quot;     \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430     :param kwargs: \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b     :return: \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a UTestInterface     &quot;&quot;&quot;     return UTestInterfaceScripts(**kwargs)   def uts_create_from_xml(xmlConfNode):     &quot;&quot;&quot;     \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430     :param xmlConfNode: xml-\u0443\u0437\u0435\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438     :return: \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a UTestInterface     &quot;&quot;&quot;     return UTestInterfaceScripts(xmlConfNode=xmlConfNode)   def uts_plugin_name():     return &quot;scripts&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h2>\u0418\u0442\u043e\u0433<\/h2>\n<p>  uniset2-testsuite \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0445\u0435\u043c\u0443 \u00ab<i>\u043f\u043e\u0434\u0430\u043b\u0438 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u044e<\/i>\u00bb. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442:  <\/p>\n<ul>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0435\u0441\u0442\u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 (\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 (\u0431\u0443\u0434\u044c \u0442\u043e REST API \u0438\u043b\u0438 RS485). \u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u043e\u043e\u0431\u0449\u0435-\u0442\u043e python \u044d\u0442\u043e \u043d\u0435 \u043c\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044f\u0437\u044b\u043a. \u0421\u0430\u043c \u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0430 C++. \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u043e \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e python \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0435\u0449\u0438 <i>\u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0435\u0435<\/i>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c.  <\/div>\n<\/div>\n<p>  <b>\u0421\u0441\u044b\u043b\u043a\u0438 \u043f\u043e \u0442\u0435\u043c\u0435:<\/b>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/323290\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/li>\n<li><a href=\"http:\/\/wiki.etersoft.ru\/UniSet2\/testsuite\/\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e uniset2-testsuite<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Etersoft\/uniset2-testsuite\">github uniset2-testsuite<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/278535\/\">\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e libuniset2<\/a><\/li>\n<\/ul>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/323444\/\"> https:\/\/habrahabr.ru\/post\/323444\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c26\/80f\/447\/c2680f4472e943a3ad61d5a82678e4d3.png\"\/><br \/>  \u0412 <a href=\"https:\/\/habrahabr.ru\/post\/323290\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0431\u044b\u043b \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0410 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u2026  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-283613","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/283613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=283613"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/283613\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=283613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=283613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=283613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}