1

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

-
|-test.jmx
|-myschema.xsd

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

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())}(不返回任何内容)。我通过给出绝对路径让它工作,但脚本应该被其他人使用,所以这不好。

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

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

4

3 回答 3

2

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

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

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

于 2012-05-28T16:10:07.090 回答
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,该属性在以字符串形式出现时,被解释为一个URI——它包括HTTP URL。由于我已经拥有可通过 HTTP 访问的架构,因此我选择了此解决方案。

于 2012-05-29T09:12:19.947 回答
1

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

例如

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
于 2016-04-14T15:28:08.663 回答