我正在使用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())}
(不返回任何内容) 。我通过给出绝对路径让它工作,但脚本应该被其他人使用,所以这没有用。
我可以使用命令行中定义的属性值,但出于同样的原因,我也想避免使用它。
如何在这些情况下正确地将断言指向架构?
答案 0 :(得分:2)
看起来你必须处于这种情况
也许如果您能找到其他/更好的 - 请分享。
希望这会有所帮助。
答案 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