2009-09-07 40 views
46

Chúng tôi có một luồng kiểm tra hiệu suất đơn giản trong một ứng dụng.Quản lý phiên/cookie trong Apache JMeter

  1. Chúng tôi đăng nhập
  2. tìm kiếm dựa trên một số tiêu chí
  3. lặp lại tìm kiếm các thông số khác nhau.

Chúng tôi đang sử dụng Jmeter để thực hiện kiểm tra hiệu suất. Chúng tôi cần phải có nhiều luồng chạy để kiểm tra điều này theo cách có thể mở rộng.

Cách chúng tôi hiện có sắp xếp này là:

-Test Plan 
    - Thread Group 
     - Cookie Manager 
     - Login To application 
     - Search on param 1 
     - Search on param 2 
    - results summary table 
    - Summary report 

Vì vậy, về cơ bản chúng tôi có bảng tóm tắt lại và báo cáo có mặt trên mức kế hoạch trong khi quản lý cookie có mặt trên cấp độ nhóm chủ đề.

Khi tôi chạy cho một chủ đề, nó chạy tốt và hoàn thành tốt. Khi tôi chia tỷ lệ thành nhiều chuỗi, ngay khi chuỗi tiếp theo bắt đầu, phiên cho chuỗi cuối cùng bị vô hiệu. Điều này gây ra lỗi cho tất cả các chủ đề đã chạy do chủ đề mới sinh ra.

tôi đạt kết quả này với sự quan sát:
1. Nếu tôi chạy nhiều chủ đề, chỉ có chủ đề cuối cùng đã có phản ứng hợp lệ trong kết quả cây tóm tắt
2. Nếu tôi chạy với 2 chủ đề với đoạn đường nối lên thời gian 10 giây, có nghĩa là mỗi luồng sẽ có thời gian để hoàn thành chính nó, sau đó cả hai luồng đều chạy thành công.

Theo hiểu biết của mỗi đăng nhập luồng vào ứng dụng và vì trình quản lý cookie ở cấp chuỗi, các giá trị sẽ được duy trì cho id phiên cho mỗi chuỗi tương ứng? Nhưng điều gì gây ra việc ghi đè giá trị id phiên giữa các luồng?

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

46

sao chép từ tài liệu jmeter:

Yếu tố cuối cùng là một cookie Manager. Trình quản lý cookie phải được thêm vào tất cả các bài kiểm tra web - nếu không JMeter sẽ bỏ qua cookie. Bằng cách thêm vào cấp độ Nhóm chủ đề, chúng tôi đảm bảo rằng tất cả các yêu cầu HTTP sẽ chia sẻ cùng một cookie.

Từ chương "4.2.2 Bộ điều khiển logic" trong http://jmeter.apache.org/usermanual/test_plan.html.

EDIT: Tôi đoán bạn nên sử dụng http://jmeter.apache.org/usermanual/component_reference.html#Simple_Controller để nhóm các yêu cầu của bạn cùng với Trình quản lý cookie.

1

Cố gắng tăng thời gian tăng thêm. Tôi chạy vào cùng một vấn đề mà đoạn đường nối lên thời gian là khoảng 1 giây sau đó tôi tăng nó đến 3 giây cho mỗi chủ đề và nó chạy tốt.

6

Tôi nghĩ câu trả lời của Andrey không thể giúp được gì.Anh ta trích dẫn rằng mỗi yêu cầu sẽ sử dụng cùng một cookie BUT theo hướng dẫn sử dụng jmeter:

Mỗi chuỗi JMeter có "vùng lưu trữ cookie" riêng của mình.

Theo như tôi hiểu được câu hỏi, bạn muốn mỗi chuỗi chia sẻ cùng một cookie ID phiên. Vì vậy, có vẻ như với tôi bạn cần phải có hai nhóm chủ đề và thực hiện chúng liên tục. Nhóm chủ đề đầu tiên (với một chuỗi chỉ thực thi một lần) nên đăng nhập và lưu giá trị cookie phiên vào một tham số toàn cầu (có lẽ bạn cần sử dụng các khả năng viết kịch bản của jmeter). Sau đó, đặt cookie đó trong trình quản lý cookie của nhóm chuỗi thứ hai.

Hy vọng điều đó sẽ hữu ích.

+2

+1 này. * Có thể "truyền bá" cookie thông qua các Nhóm chủ đề khác nhau của cùng một Gói thử nghiệm không? Không. Chủ đề JMeter nhằm mục đích đại diện cho người dùng độc lập, vì vậy cookie và biến là cục bộ cho một chủ đề. * Theo [this] (http://jmeter.512774.n5.nabble.com/HTTP-cookie-manager -td544523.html). –

0

Hãy thử điều này:

Mở user.properties hiện diện trong thư mục bin của JMeter

Chỉnh sửa nó và thêm dòng sau:

CookieManager.check.cookies=false 

Lưu nó và chạy kịch bản. Tôi hy vọng nó sẽ giải quyết vấn đề của bạn.

0

Đầu tiên thay đổi mã của bạn để:

jmeter.properties 
CookieManager.save.cookies=true 
CookieManager.name.prefix=mycookie_ 

Tiếp theo, thêm một người quản lý HTTP cookie trong nhóm chủ đề tương tự như sampler java của bạn.

Sau đó, trong sampler java của bạn thêm:

JMeterVariables jmv = JMeterContextService.getContext().getVariables(); 
Iterator<Map.Entry<String,Object>> it = jmv.getIterator(); 
while(it.hasNext()){ 
    Map.Entry<String,Object> v = it.next(); 
    System.out.println("name: " + v.getKey() + " value: " + v.getValue()); 
}