Tuần tự các bước để mô hình hóa tải công việc của ứng dụng:
Bƣớc 1: Dựa vào yêu cầu về hiệu năng để xây dựng mô hình tải công việc
Chúng ta dựa vào yêu cầu hiệu năng để mô hình hóa tải công việc cho hệ thống cần kiểm thử. Với các yêu cầu hiệu năng khác nhau thì mô hình tải công việc để xác định trước khi kiểm thử cũng khác nhau. Ví dụ, nếu chúng ta xác định tải công việc của máy chủ để xác nhận hệ thống có thể xử lý giao dịch tăng 10% vào cuối năm, khi đó tải công việc cần được tiến hành đánh giá số lượng khách hàng, số giao dịch xử lý trong 1 giây, tình trạng sử dụng CPU và IO, tỷ lệ yêu cầu gửi đến và thời gian nghĩ (think time) của người sử dụng. Nếu mục tiêu của kiểm thử hiệu năng là ước tính thời
gian phản hồi (response time) cho dự báo kinh doanh tăng 20% người sử dụng, khi đo tải công việc được thiết lập dựa vào các thông số của kiểm thử trước đây. Một số chỉnh sửa trong các thông số trước đây được thực hiện trước khi thực hiện kiểm thử.
Bƣớc 2: Phân tích tải công việc và xác định mô hình yêu cầu
Nếu chúng ta không hiểu khối lượng công việc của ứng dụng thì mô hình tải công việc không thể được xây dựng. Các luồng chức năng, kiểu khách hàng truy cập, mục đích của người sử dụng cuối, tổng số người sử dụng ứng dụng phải được kiểm thử viên tìm hiểu rõ. Ngoài ra kiểm thử viên phải tìm các tình huống ảnh hưởng lớn đến tải công việc của hệ thống. Đặt mình vào ví trí người sử dụng cuối của ứng dụng để đưa ra các thông tin như các chức năng hay được sử dụng, thời gian phản hồi mong muốn của người dùng, số giao dịch trong giờ cao điểm và giờ nghỉ, v.v…Phân tích hệ thống trong nhiều tình huống và theo mục đích sử dụng khác nhau sẽ giúp chúng ta hiểu rõ hơn về tải công việc hệ thống. Nếu ứng dụng đã được triển khai sử dụng trong thực tế thì tập tin log trên máy chủ chứa nhiều thông hữu ích để phân tích tải, mô hình yêu cầu nhận được trên máy chủ [5].
Bƣớc 3: Xác định phân bố thống kê cơ sở cho mô hình yêu cầu
Kiểm thử viên cần xác định phân bố thống kê cho mô hình yêu cầu của người sử dụng ứng dụng. Từ phân bố này giúp chúng ta tính toán được tải công việc lớn nhất trên máy chủ. Ví dụ, hai ứng dụng A1, A2 có cùng tải mục tiêu là 1000 người sử dụng nhưng chúng có phân bố thống kê khác nhau: A1- Possion, A2- Self similar. Khi đó tải lớn nhất cần kiểm thử cho hai ứng dụng A1 và A2 là khác nhau. Như vậy phân tích mô hình phân bố thống kê cho tải của hệ thống sẽ cho ta biết tải lớn nhất của hệ thống cần thực hiện kiểm thử.
Bƣớc 4: Thu thập số liệu về sự tiêu thụ tài nguyên phần cứng
Theo tập tin log trên máy chủ chúng ta biết được các giao dịch diễn ra giữa máy khách và máy chủ của hệ thống. Đặt hệ thống trong điều kiện tải thấp và thực hiện các giao dịch từ đó xác định được số liệu về việc sử dụng CPU và I/O của hệ thống.
Bƣớc 5: Xây dựng mô hình tải
Chúng ta đã xác định được các giao dịch trên máy chủ và yêu cầu về sử dụng tài nguyên phần cứng. Phụ thuộc và mức độ trừu tượng và độ chính xác chúng ta sẽ xây dựng mô hình tải mong muốn. Nếu cần độ chính xác cao, chúng ta sẽ phân vùng dữ liệu thành nhiều lớp dựa vào tài nguyên sử dụng, sự phân bố địa lý hoặc hiệu năng sử dụng.
Bảng 2.1: Ví dụ về mô hình tải sau khi xây dựng [5]
Giao dịch Tần suất Thời gian CPU (giây) Thời gian I/O (giây)
Nhẹ (Light) 10% 6 120
Trung bình (medium) 70% 28 260
Nặng (Heavy) 20% 350 900
2.2 Cài đặt môi trƣờng kiểm thử hiệu năng
2.2.1 Môi trường kiểm thử
Kiểm thử viên phải tìm hiểu môi trường sản phẩm hay là môi trường triển khai hệ thống trong thực tế. Ngoài ra kiểm thử viên nên biết kiến trúc triển khai ứng dụng trọng môi trường sản phẩm và yêu cầu đội phát triển cài đặt môi trường kiểm thử giống với sản phẩm để thực hiện kiểm thử hiệu năng [5].
Nếu môi trường sản phẩm và môi trường kiểm thử có sự khác nhau về phần cứng triển khai ứng dụng thì sẽ mang lại rủi ro cao là hiệu năng sau khi kiểm thử không phải là hiệu năng thực tế của hệ thống trong thực tế. Vì vậy môi trường kiểm thử nên được cài đặt giống với môi trường sản phẩm.
Ví dụ nếu một ứng dụng ba tầng triển khai trong môi trường kiểm thử lại được triển khai hai tầng trong môi trường sản phẩm thì hiệu năng của hệ thống trong thực tế sẽ khác rất nhiều hiệu năng đã được kiểm thử.
Hầu hết kiểm thử hiệu năng được xậy dựng trong môi trường có cấu hình thấp hơn cấu hình máy chủ trong thực tế do vấn đề về tài chính. Mặc dù vậy chúng ta nên xây dựng kiểm thử hiệu năng trong môi trường giống như cấu hình máy chủ của sản phẩm. Nếu môi trường sản phẩm và môi trường kiểm thử có sự khác nhau về phần cứng triển ứng dụng thì sẽ mang lại rủi ro cao là hiệu năng sau khi kiểm thử không phải là hiệu năng thực tế của hệ thống trong thực tế. Kỹ sư kiểm thử hiệu năng cần phải tìm hiểu môi trường, kiến trúc triển khai ứng dụng và đảm bảo đúng phiên bản phần mềm (phiên bản ứng dụng, phiên bản máy chủ, hệ điều hành, thư viện nếu có…) được sử dụng triển khai trong môi trường kiểm thử giống như môi trường sản phẩm. Phần mềm (máy chủ web, máy chủ ứng dụng hoặc phiên bản phần mềm máy chủ cơ sở dữ liệu, điều kiện bản quyền, mức độ log, những quy trình khác…), phần cứng (CPU, bộ nhớ và cấu hình đĩa), mạng (lưu lượng và chi tiết băng thông mạng) khác nhau trong hai môi trường kiểm thử và sản phẩm cần được xác định và lưu lại để tra cứu trong tương lai.
2.2.2 Cô lập môi trường kiểm thử
Kiểm thử hiệu năng nên được xây dựng trong môi trường riêng biệt tránh tải không cần thiết để đánh giá chính xác và những vấn đề ảnh hưởng đến hiệu năng. Ngoài ra nếu kiểm thử trong cùng môi trường nó sẽ làm ảnh hưởng đến những hoạt động khác trong quá trình phát triển dự án nếu trong quá trình kiểm thử tải máy chủ bị lỗi.
Nếu mục tiêu của kiểm thủ là xác định yêu cầu về băng thông hỗ trợ người dụng thì cần kiểm thử hiệu năng trong một mạng riêng biệt. Nếu mạng trong quá trình kiểm thử có giao dịch khác thì tổng dữ liệu được gửi qua lại giữa máy chủ và máy khách không đảm bảo độ chính xác cao. Trong trường hợp này cách tốt nhất là xây dựng một mạng LAN riêng biệt và chỉ có máy chủ và máy kiểm thử đặt trong mạng LAN đó.
2.2.3 Tạo tải (Load Generators )
Để tạo tải nhiều người sử dụng hệ thống như trong thực tế chúng ta sử dụng phần mềm kiểm thử hiệu năng. Hầu hết các phần mềm kiểm thử hiệu năng đều có chức năng tạo tải được gọi là Load Generator. Khi chúng ta cài đặt mô phỏng 10 người sử dụng hệ thống thì phần mềm kiểm thử tạo 10 luồng hoặc tiến trình gửi yêu cầu từ máy khách đến máy chủ theo thời gian nghĩ (think time) đã được cài đặt trong kịch bản kiểm thử. Chúng ta có thể sử dụng nhiều tiện ích khác của các phần mềm như cài đặt tăng dần số người sử dụng hệ thống theo một khoảng thời gian, thời gian thực hiện kiểm thử, v.v…
Ví dụ cần kiểm thử hiệu năng của một hệ thống với 1000 người sử dụng đồng thời. Chúng ta sẽ sử dụng một phần mềm kiểm thử hiệu năng, cài đặt trên 5 máy khác nhau và cấu hình 200 người dùng ảo trên mỗi máy. Khi đó chúng ta sẽ cấu hình chạy kịch bản theo lịch đặt trước. Việc lên lịch kiểm thử giúp chúng ta có thể điều khiển tải theo thời gian, vùng địa lý khác nhau, v.v… Theo thời gian đã cài đặt thì phần mềm tự động tạo người sử dụng ảo sử dụng hệ thống theo kịch bản kiểm thử. Như vậy các phần mềm kiểm thử hiệu năng giúp ta tạo và cài đặt tải cho hệ thống theo đúng kịch bản kiểm thử.
2.2.4 Tạo dữ liệu kiểm thử (Test data generator)
Trong kiểm thử hiệu năng, hầu hết thời gian kiểm thử diễn ra trên máy cá nhân do đó số bản ghi dữ liệu trong kiểm thử sẽ ít hơn dữ liệu của hệ thống trong thực tế. Số lượng bản ghi của hệ thống trong thực tế phải được nghiên cứu đưa ra một con số cụ thể và chính xác. Khi đó chúng ta có thể tạo được số bản ghi dữ liệu giống như trong thực tế để thực hiện kiểm thử.
Thực hiện kiểm thử hiệu năng với dữ liệu như trong thực tế giúp ta đánh giá đúng hiệu năng của hệ thống và tìm được những vấn đề tìm ẩn trong truy vấn dữ liệu (nếu có). Thật vậy chúng ta có thể thấy thời gian truy vấn dữ liệu có thể không đáng kể với
1000 bản ghi nhưng khi dữ liệu có 10 000 bản ghi thì thời gian truy vấn sẽ ảnh hưởng nhiều phụ thuộc vào các sắp xếp bản ghi, các chỉ mục hoặc câu truy vấn dữ liệu.
2.3 Xây dựng kịch bản kiểm thử hiệu năng
2.3.1 Chọn kịch bản kiểm thử hiệu năng
Kiểm thử chức năng là kiểm thử tính đúng, sai của tất cả các luồng chức năng trong hệ thống. Không giống như kiểm thử chức năng, kiểm thử hiệu năng chỉ kiểm thử hiệu năng của hệ thống trên một vài kịch bản mà được sử dụng nhiều nhất. Việc chọn kịch bản kiểm thử hiệu năng ảnh hưởng tích cực đến việc đánh giá hiệu năng hệ thống [2, 5].
Lựa chọn kịch bản trong kiểm thử hiệu năng cần được phân tích và nó chỉ chiếm 20% trong tổng số kịch bản. Đó là những kịch bản mà người dùng sử dụng thường xuyên khi sử dụng hệ thống. Thực hiện kiểm thử hiệu năng cho 80% kịch bản còn lại sẽ làm tốn thời gian, công sức mà không mang lại kết quả mong đợi [5,7].
2.3.2 Viết kịch bản kiểm thử hiệu năng
Kịch bản kiểm thử được tạo ra bằng cách sử dụng phần mềm kiểm thử hiệu năng để ghi lại hành động của người dùng như trong thực tế. Tuy nhiên do hạn chế của phần mềm mà thời gian nghĩ (think time) và một số tham số khác không được ghi lại trong kịch bản. Vì vậy mà mà kiểm thử viên phải tự cài đặt lại thời gian nghĩ và tham số khác để đảm bảo kịch bản chạy đúng như trong thực tế. Kiểm thử viên nên lưu ý một số chú ý sau để tạo hoặc chỉnh sửa kịch bản [5]:
Kịch bản nên có tên để tiện cho việc thu thập và lưu lại thông tin về thời gian phản hồi, thông lượng (throughput). Cần đặt tên theo quy ước để dễ dàng tham chiếu đến giao dịch cụ thể.
Cung cấp quy ước đặt tên phù hợp cho mỗi hành động của người sử dụng để xác định thời gian phản hồi cho tất cả các giao dịch.
Cài đặt thời gian nghĩ (think time) hoặc thời gian đợi (waiting time) giữa các hành động cửa người sử dụng để mô phỏng đúng hành vi của người sử dụng cuối trong thế giới thực.
Cung cấp các biến trong kịch bản để phục vụ cho những liên kết động của dữ liệu và cho những người dùng khác nhau.
Kiểm soát giá trị động được tạo bởi máy chủ như giá trị phiên làm việc (secssion) để tạo kịch bản đủ lớn cho việc mô phỏng nhiều người sử dụng.
Có thể sửa đổi logic kịch bản để kiểm soát hành vi người sử dụng mà vẫn đảm bảo mô phỏng đúng hành vi của người dùng.
Cài đặt thời gian đợi (think time) giữa mỗi giao dịch rất quan trọng để tạo ra tải trên máy chủ như trong thực tế. Chúng ta có thể xác định thời gian nghĩ bằng các thảo luận hoặc khảo sát với nhà phân tích kinh doanh, người sử dụng cuối hoặc từ việc phân tích tập tin log trên máy chủ (nếu hệ thống đã được dưa vào sử dụng trong thực tế) . Thời gian đợi có thể đặt ngẫu nhiên khoảng 20%- 25% để phù hợp với người dùng nhanh và chậm [5].
Ví dụ giả sử rằng bạn có 2 giao dịch trong kịch bản, giao dịch đăng nhập (login) với thời gian đợi 10 giây, sau đó là giao dịch thoát (logout). Nếu thời gian nghĩ (think time) được thay là 5 giây thì yêu cầu đăng nhập và thoát được gửi tới máy chủ tăng, thì tải trên máy chủ sẽ cao. Nếu thời gian nghĩ là 20 giây tải trên máy chủ giảm. Cung cấp thời gian nghĩ lớn (think time) giảm tải máy chủ, giảm thời gian nghĩ (think time) tăng tải máy chủ. Như vậy đặt thời gian đợi khi xây dựng kịch bản là rất quan trọng. Nếu thời gian đợi (think time) được đặt không đúng thì là tải trên máy chủ trong khi thực hiện kiểm thử sẽ sai mặc dù kiểm thử được tạo.
Từ máy chủ có thể có một vài dữ liệu động được tạo ra cho mỗi người dùng và có thể là duy nhất cho mỗi người dùng. Ví dụ session id của mỗi người dùng là duy nhất. Nếu máy chủ cung cấp sesion id của người sử dụng trong khi phản hồi lại yêu cầu từ máy khách. Khi đó kịch bản không thể chạy đúng nếu chạy với id của người dùng khác. Giá trị động có thể được kiểm soát trong kịch bản bằng các cách khác nhau phụ thuộc vào công cụ kiểm thử.
2.4 Thực hiện kiểm thử hiệu năng (Performance test execution)
2.4.1 Những chuẩn bị trước khi kiểm thử hiệu năng
Bƣớc 1: Hiểu mô hình người sử dụng (workload model) của hệ thống thông qua việc phân tích mô hình người sử dụng hoặc từ tập tin log trên máy chủ.
Bƣớc 2: Thiết kế ca kiểm thử cùng với các tham số như chiến lược tăng (ramp up), thời gian kiểm thử, cài đặt thời gian đợi (think time), kịch bản kiểm thử được thực hiện, các điều kiện tải, các loại kiểm thử được tiến hành cùng với chuẩn qua/lỗi. Dựa vào ca kiểm thử và sử dụng nó để lên kế hoạch cho những phần còn lại của hoạt động kiểm thử.
Bƣớc 3: Xác định phần mềm kiểm thử hiệu năng và chuẩn bị dữ liệu kiểm thử. Tìm kiếm một phần mềm trên thị trường (có bản quyền hoặc mà nguồn mở) dựa vào ngân sách và các chức năng của phần mềm. Sử dụng phần mềm đã lựa chọn và phát triển kịch bản kiểm thử mô phỏng người sử dụng truy cập thực tế. Tạo đủ dữ liệu kiểm thử trong kịch bản để giả lập nhiều người dùng khác nhau sử dụng dữ liệu khác nhau.
Bƣớc 4: Đảm bảo môi trường kiểm thử đã sẵn sàng, không có người sử dụng truy cập ứng dụng trong khi thực hiện kiểm thử và máy chủ được cách ly với bất kỳ sử dụng khác.
2.4.2 Phương pháp thực hiện kiểm thử hiệu năng
Sử dụng phần mềm kiểm thử và kịch bản đã tạo sẵn chúng ta thực hiện kiểm thử hiệu năng cho hệ thống. Trong thời gian thực hiện kiểm thử hiệu năng, đặt máy chủ trong một tải ổn định khoảng 15- 30 phút phụ thuộc vào mô hình sử dụng. Kiểm tra hiệu năng của hệ thống với nhiều tình huống trong các điều kiện tải khác nhau và sau đó đưa ra số liệu hiệu năng về thời gian phản hồi, thông lượng và sử dụng tài nguyên của máy chủ. Kịch bản kiểm thử nên được cài đặt có đủ thời gian cho việc tăng số người sử dụng trước khi đặt hệ thống trong tải mong đợi trong một khoảng thời gian. Tất cả các đánh giá về hiệu năng máy chủ chỉ được thực hiện trong khoảng thời gian tải ổn định [5].
Ví dụ: Đánh giá hiệu năng của ứng dụng với 100 người dùng thực hiện 3 kịch bản: (1) Kịch bản giao dịch A – 60% tải mục tiêu
(2) Kịch bản giao dịch B – 30% tải mục tiêu (3) Kịch bản giao dịch C – 10 % tải mục tiêu
Theo phân tích kịch bản A được thực hiện 6 lần trong 1 giờ, kịch bản B thực hiện 2 lần trong 1 giờ và kịch bản C được thực hiện 1 lần trong 1 giờ. Biết rằng tải cao điểm trên máy chủ là 200 yêu cầu/1 giây trong giờ cao điểm. Chúng ta có một chiến lược