2012-05-28 37 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