2012-05-28 36 views
1

我使用JMeter的2.6,并有我的测试以下设置:JMeter XML Schema的相对路径?

- 
|-test.jmx 
|-myschema.xsd 

我已经成立了一个XML Schema声明,并在文件名称字段中键入"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())}(不返回任何东西)。我通过给予绝对路径来实现它,但脚本应该被其他人使用,所以这不是好事。

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

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

回答

2

摘要:在我使用http://path.to.schema/myschema.xsd如声明中的文件名参数结束。

说明:以下Alies别利克的建议,我发现,用于设置模式的代码看起来是这样的:

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

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

根据例如this page,当以字符串的形式时,该属性被解释为URI--其包括HTTP URL。由于我已经可以通过HTTP访问模式,因此我选择了此解决方案。

+1

所以,显然SO中的“正确”序列是:接受自己的答案,然后再提出另一个答案。叹... –

2

看起来你必须在这种情况下

  • 手动验证对XSD的xml:简单地使用来自例如对应的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模式声明。

也许如果你会发现任何其他/更好的 - 请分享它。
希望这会有所帮助。

+3

嗯,我确实找到了另一种解决方案,接受你的建议并寻找消息来源。是否更好 - 这取决于你的要求:)。我会立即发帖,并感谢您的灵感! –

1

添加“myschema.xsd”你Apache的JMeter的旁边的\ bin目录中的“ApacheJMeter.jar” 从XML架构断言'设置“文件名”你“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