JMeter XML Schema的相对路径?

时间:2012-05-28 13:47:58

标签: xsd jmeter

我正在使用JMeter 2.6,并为我的测试设置了以下设置:

-
|-test.jmx
|-myschema.xsd

我已经设置了XML Schema Assertion,并在File Name字段中输入了"myschema.xsd"。不幸的是,这不起作用:

HTTP Request
Output schema : error: line=1 col=114 schema_reference.4:
Failed to read schema document 'myschema.xsd', because 
1) could not find the document; 
2) the document could not be read; 
3) the root element of the document is not <xsd:schema>.

我已尝试向path添加多项内容,包括${__P(user.dir)}(指向用户的home dir)和${__BeanShell(pwd())}(不返回任何内容) 。我通过给出绝对路径让它工作,但脚本应该被其他人使用,所以这没有用。

我可以使用命令行中定义的属性值,但出于同样的原因,我也想避免使用它。

如何在这些情况下正确地将断言指向架构?

3 个答案:

答案 0 :(得分:2)

看起来你必须处于这种情况

  • 手动验证xml对xsd:只需使用相应的java代码即可。 BeanShell AssertionBeanShell PostProcessor;
    这是一个非常好的解决方案:https://stackoverflow.com/a/16054/993246(你可以使用任何你想要的其他方法);
  • 深入了解jmeter的来源,修改XML Schema文件获取以支持路径中的变量(文件名字段) - 如CSV Data Set Config所做的那样;
    但以前的方式似乎要容易得多;
  • 从shell脚本或ant-task运行您的jmeter测试场景,它将在脚本执行之前首先将xsd复制到jmeter的/ bin目录 - 至少XML Schema Assertion可以“按原样”使用。

也许如果您能找到其他/更好的 - 请分享。
希望这会有所帮助。

答案 1 :(得分:2)

摘要:最后我使用 http://path.to.schema/myschema.xsd 作为断言中的文件名参数。

解释:根据Alies Belik的建议,我发现设置架构的代码如下所示:

DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
...
parserFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", xsdFileName);

其中xsdFileName是一个字符串(属性字符串实际上是一个常量,为了便于阅读,我将其内联)。

根据例如this page,该属性在形式为String时被解释为URI - 包括HTTP URL。由于我已经可以通过HTTP访问架构,因此我选择了此解决方案。

答案 2 :(得分:1)

将'myschema.xsd'添加到'ApacheJMeter.jar'旁边的apache-jmeter的\ bin目录将'XML Schema Assertion'中的'File Name'设置为从这个起点开始你的'myschema.xsd'。

<强> E.g。

JMeter: C:\Users\username\programs\apache-jmeter-2.13\bin\ApacheJMeter.jar

Schema: C:\Users\username\workspace\yourTest\schema\myschema.xsd

File Name: ..\\..\\..\workspace\yourTest\schema\myschema.xsd