2012-03-20 40 views
24

Tôi đang sử dụng JMeter như một công cụ kiểm tra đơn vị, trong các cuộc gọi tham số mà tôi mong đợi một số phản hồi là 500 lỗi máy chủ nội bộ. Tôi đang sử dụng BeanShell Assertions để kiểm tra câu trả lời.JMeter làm thế nào để không thất bại 500 lỗi máy chủ nội bộ

Tôi muốn một số 500 lỗi máy chủ nội bộ KHÔNG được đánh dấu là lỗi nếu phản hồi có chứa văn bản được chỉ định. Tất cả 500 lỗi máy chủ được đánh dấu là lỗi. Có thể thay đổi hành vi không?

Dưới đây là trích xuất từ ​​Xác nhận BeanShell.

if (ResponseCode.equals("500")) { 
    Failure = false; 
    String respData = new String(ResponseData); 

    if (! respData.contains("specific Text")) { 
     Failure = true; 
     FailureMessage = "500 Internal Server Error: Unexpected Response. " + 
      "Response Message: " + respData; 
    } 
} 

Cảm ơn bạn và chúc mừng

Trả lời

31

giải pháp đơn giản Hầu hết dưới đây:

nếu bạn muốn làm những việc khác trong mã sau đó: truy cập và sửa đổi SampleResult - để thay đổi trạng thái từ "FAIL" thành "PASS" nếu mã là 500 - từ BeanShell Assert của bạn Việc xác nhận ion/BSF hoặc sử dụng BeanShell PostProcessor/BSF PostProcessor thay thế - tất cả đều có quyền truy cập vào đối tượng SampleResult.

1. BeanShell Assertion

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK(); 

    /* the same is 
    SampleResult.setSuccessful(true); 
    SampleResult.setResponseCodeOK(); 
    SampleResult.setResponseMessageOK(); 
    */ 
} 

2. BeanShell PostProcessor
Sử dụng prev thay - để truy cập đối tượng SampleResult của sampler mà một hậu xử lý được kèm theo:

if (prev.getResponseCode().equals("500") == true) { 
    prev.setResponseOK(); 

    /* the same is 
    prev.setSuccessful(true); 
    prev.setResponseCodeOK(); 
    prev.setResponseMessageOK(); 
    */ 
} 
+0

Cảm ơn bạn. Thêm SampleResult.setResponseOK(); làm việc hoàn hảo cho những gì tôi cần. –

+0

@Gazen Ganados, rất vui lòng chấp nhận câu trả lời trong trường hợp này. –

+2

Điều này sẽ thay đổi mã phản hồi. câu trả lời khác của bạn là một giải pháp tốt hơn nhiều imo – MishaP

37

Một giải pháp khác có thể là sử dụng Response Assertion với chọn "Bỏ qua S tatus" cờ thêm vào sampler của bạn:

Bỏ qua tình trạng
chỉ thị JMeter để thiết lập trạng thái cho sự thành công ban đầu.

Thành công chung của mẫu được xác định bằng cách kết hợp kết quả của xác nhận với trạng thái Response hiện tại. Khi hộp kiểm Bỏ qua trạng thái được chọn, trạng thái Trả lời buộc phải thành công trước khi đánh giá Xác nhận.

Phản hồi HTTP có trạng thái trong phạm vi 4xx và 5xx thường được coi là không thành công. Hộp kiểm "Trạng thái bỏ qua" có thể được sử dụng để đặt trạng thái thành công trước khi thực hiện kiểm tra thêm. Lưu ý rằng điều này sẽ có tác dụng thanh toán bù trừ bất kỳ lỗi xác nhận trước đó, do đó, hãy đảm bảo rằng điều này chỉ được đặt trên xác nhận đầu tiên.

+1

Đây chính xác là những gì tôi cần. Tôi không muốn thay đổi phản hồi thành OK như được đề xuất trong câu trả lời khác của bạn ... Tôi muốn khẳng định rằng phản hồi là lỗi chính xác (trong trường hợp của tôi là 404 Not Found). Vì vậy, cảm ơn! –

+0

Hoàn hảo. Tôi cần kiểm tra 401. Cảm ơn bạn! – asokan

+1

Đây phải là câu trả lời đúng – Ruben

-2

Sử dụng một sự khẳng định BeanShell, buộc các HTTP Sampler để vượt qua và sau đó vượt qua/thất bại trên một tuyên bố khẳng định Beanshell thường xuyên thay vì:

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK(); 

    /* the same is 
    SampleResult.setSuccessful(true); 
    SampleResult.setResponseCodeOK(); 
    SampleResult.setResponseMessageOK(); 
    */ 
} 
String path = SampleResult.getURL().getPath(); 
if (!path.contains("anerror")) { 
    Failure = true; 
    FailureMessage = "URL Path: didn't contain \"anerror\"" + 
     System.getProperty("line.separator") + "URL Path detected: " + path; 
} 
-1

Thêm một "đáp ứng Assertion" sau khi yêu cầu bạn muốn vượt qua và chọn hộp kiểm "Bỏ qua trạng thái".

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