【问题标题】:How to generate random xml file that is semantically valid?如何生成语义上有效的随机 xml 文件?
【发布时间】:2012-11-28 19:27:45
【问题描述】:

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

随机生成器不会对生成的值应用语义限制。例如,我有一个元素“parameters”,它具有多个元素“parameter”,例如 p1 和 p2,另一方面,我有另一个元素“constraint”,它将使用“parameter”。我的意思是如果我有 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),正如您在上面的示例中看到的那样,而不是生成一些其他随机参数,因为所有生成的 xml 都是无效的,我想要一个有效的。

无效 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>

谢谢

【问题讨论】:

  • 您是否需要一些预先存在的工具?或者写下要求让某人写一个?
  • 我要测试的工具已经存在。随机生成器也可用(OXYGEN),但我不知道如何生成有效的 xml,如上所述,随机生成器将生成语法正确但语义不正确的 xml 文件!不知道上面的例子是否清楚?

标签: xml xsd random-testing oxygenxml


【解决方案1】:

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

您可能更幸运地编写一个过滤器来区分遵守您所考虑的约束的示例和不遵守的示例(因此您可以生成 100 个示例并运行过滤器以找到可用于您的目的的示例),或转换为任意示例并对其进行更改以满足您的约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2018-02-16
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多