如何生成语义上有效的随机xml文件?

时间:2012-11-28 19:27:46

标签: xml xsd random-testing oxygenxml

我想使用随机xml生成器工具,以便通过从xsd生成随机xml文件来执行随机测试。 (我正在使用氧气工具)

随机生成器不会对生成的值应用语义限制。例如,我有一个元素“参数”,它有多个元素“参数”,例如p1和p2,另一方面,我有另一个元素“约束”,它将使用“参数”。我的意思是如果我有P1,P2,它应该使用p1和p2的子集。我想强制随机生成器工具使用它们(p1和p2),而不是为约束再次随机生成一些其他参数。我使用“key”,“keyref”和..但它仍然无法正常工作。 它只是在没有任何限制的情况下随处产生随机字符串,我不得不提到我选择了“元素和属性的值:随机(应用限制)”选项所以它应该在生成随机值时考虑限制,但事实并非如此!请帮忙..

有效XML的示例:

 <system>
         <parameters>
             <parameter id="1" name="p1" >
                  <value id="1" name="value1"/>
                  <value id="2" name="value2"/>
              </parameter>
              <parameter id="2" name="p2" >
                  <value id="1" name="value1"/>
                  <value id="2" name="value2"/>
              </parameter>
          </parameters>
          <constraint text="p1=p2">
               <parameter name="p1"/>
               <parameter name="p2"/> 
          </constraint>
       </system>

所以我想要使用已经生成的参数子集(p1和p2),正如你在上面的例子中看到的,而不是生成一些其他随机参数,因为那时所有生成的xmls都是无效的,我想要一个有效的参数。 / p>

无效XML的示例:

   <system>
         <parameters>
             <parameter id="1" name="p1" >
                  <value id="1" name="value1"/>
                  <value id="2" name="value2"/>
              </parameter>
              <parameter id="2" name="p2" >
                  <value id="1" name="value1"/>
                  <value id="2" name="value2"/>
              </parameter>
          </parameters>
          <constraint text="**p3**=**p5**">
               <parameter name="**p8**"/>
               <parameter name="**p9**"/> 
          </constraint>
       </system>

由于

1 个答案:

答案 0 :(得分:0)

通常,检查身份约束会使文档生成任务变得更加复杂。 (我相信我曾经看过一个声明,它使NP完整,但我可能会误解。)所以我怀疑你会有很多运气告诉Oxygen的示例文档生成器遵守你想到的约束;大多数生成器满足于生成数据,满足内容模型。

你可以更好地编写一个过滤器,以区分遵循你所考虑的约束的例子和那些没有的例子(这样你就可以生成100个例子并运行过滤器来找到可用于你的目的的过滤器),或转换以采取任意示例并更改它以满足您的约束。