2010-05-27 32 views
5

Tôi mới dùng SoapUI và vừa cấu hình một MockService rất đơn giản. Có thể điều khiển phản ứng sao cho một yêu cầu cụ thể mà các phần tử của phản hồi được tạo động không?Cách trả về phản hồi động trong SoapUI MockService

Kịch bản 1:

Yêu cầu:

<record> 
    <identifier>ID1</identifier> 
</record> 

đáp ứng:

<response> 
    <child1>child 1</child1> 
</response> 

Kịch bản 2:

Yêu cầu:

<record> 
    <identifier>ID2</identifier> 
</record> 

đáp ứng:

<response> 
    <child2>child 2</child2> 
</response> 

Đó là một thử nghiệm đơn giản và tôi không cần nó để làm nhiều hơn bất kỳ ở trên. Tôi hiện đang làm những điều sau đây mà mang lại kết quả tôi muốn nhưng vì tôi hoàn toàn mới này tôi chắc chắn có những lựa chọn thay thế tốt hơn:

đáp ứng:

<response> 
    ${dynElement} 
</response> 

kịch bản Groovy:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent) 
def reqRef = String.valueOf(holder.getNodeValue("//identifier")) 

def child1Text = "<child1>child 1</child1>" 
def child2Text = "<child2>child 2</child2>" 

if (reqRef == "ID1") { 
    context.setProperty("dynElement", child1Text) 
} else if (reqRef == "ID2") { 
    context.setProperty("dynElement", child2Text) 
} 
+0

Tôi nghĩ bạn không có ý định đặt dấu ngoặc kép xung quanh child2Text ở dòng cuối cùng của ví dụ. Nếu không, biến child2Text sẽ không bao giờ được đọc. – 0x89

+0

vâng xin lỗi, một sai lầm. Tôi sẽ sửa – Ross

Trả lời

2

Tôi làm điều đó với các câu trả lời "câu trả lời soạn trước" và các truy vấn xpath. Để thực hiện điều này, bạn sẽ thiết lập một loạt các trình xử lý công văn trong dịch vụ mockservice để khớp lại các đáp ứng với các mặt nạ. Giả sử bạn có Request1, Request2, Response1, Response2. Sử dụng phương thức "Query Match" để khớp với biểu thức XPATH. Trên trận đấu đó, trả về câu trả lời mong muốn. tức là nếu bạn tìm thấy ID1 trong xpath, hãy trả lại câu trả lời soạn trước1.

Ngoài ra, phiên bản PRO thực hiện một công việc tuyệt vời với XPATH, vì vậy bạn không phải tự viết mã cho nó. tức là nó có thể xem xét một phản hồi nhấn vào thứ mà bạn muốn kích hoạt (trong trường hợp của bạn, ID1) và nó xây dựng biểu thức XPATH cho bạn. Tôi đã yêu cầu một giấy phép PRO, chỉ dựa trên đó. Hiện đang chờ ngân sách ...

IMO, dễ dàng hơn nhiều để bắt đầu hơn là tìm hiểu về cơ hội hấp dẫn.

Chris

+0

Cảm ơn Chris, đó là những gì tôi đang tìm kiếm. Tôi thích cách tiếp cận của việc thiết lập 'câu trả lời soạn trước' và các công cụ XPath có vẻ phù hợp với tôi. Tôi rất ấn tượng với công cụ này cho đến nay. – Ross

3

Thay vì xpath, bạn cũng có thể sử dụng XmlSlurper.

def req = new XmlSlurper().parseText(mockRequest.requestContent) 
def reqRef = req.record.identifier 

Không biết bị xé toạc từ this question's câu trả lời, vui lòng không làm tổn thương tôi.

Các vấn đề liên quan