CherryPy - Thử nghiệm
Kiểm tra là một quá trình trong đó ứng dụng được tiến hành từ các khía cạnh khác nhau để -
- Tìm danh sách các vấn đề
- Tìm sự khác biệt giữa kết quả mong đợi và thực tế, sản lượng, trạng thái, v.v.
- Hiểu rõ về giai đoạn thực hiện.
- Tìm ứng dụng hữu ích cho các mục đích thực tế.
Mục tiêu của thử nghiệm không phải là để lỗi nhà phát triển mà là cung cấp các công cụ và cải thiện chất lượng để ước tính tình trạng của ứng dụng tại một thời điểm nhất định.
Việc kiểm tra cần được lên kế hoạch trước. Điều này đòi hỏi phải xác định mục đích của thử nghiệm, hiểu phạm vi của các trường hợp thử nghiệm, lập danh sách các yêu cầu nghiệp vụ và nhận thức được rủi ro liên quan đến các giai đoạn khác nhau của dự án.
Kiểm tra được định nghĩa là một loạt các khía cạnh được xác nhận trên một hệ thống hoặc ứng dụng. Sau đây là danh sách cáccommon test approaches -
Unit testing- Việc này thường do các nhà phát triển tự thực hiện. Điều này nhằm mục đích kiểm tra xem một đơn vị mã có hoạt động như mong đợi hay không.
Usability testing- Các nhà phát triển thường có thể quên rằng họ đang viết một ứng dụng cho người dùng cuối, những người không có kiến thức về hệ thống. Kiểm tra khả năng sử dụng xác minh ưu và nhược điểm của sản phẩm.
Functional/Acceptance testing - Trong khi kiểm tra khả năng sử dụng kiểm tra xem một ứng dụng hoặc hệ thống có thể sử dụng được hay không, kiểm tra chức năng đảm bảo rằng mọi chức năng được chỉ định đều được triển khai.
Load and performance testing- Điều này được thực hiện để hiểu liệu hệ thống có thể điều chỉnh để kiểm tra tải và hiệu suất được tiến hành hay không. Điều này có thể dẫn đến những thay đổi trong phần cứng, tối ưu hóa các truy vấn SQL, v.v.
Regression testing - Nó xác minh rằng các bản phát hành liên tiếp của một sản phẩm không phá vỡ bất kỳ chức năng nào trước đó.
Reliability and resilience testing - Kiểm tra độ tin cậy giúp xác nhận ứng dụng hệ thống với sự cố của một hoặc một số thành phần.
Kiểm tra đơn vị
Các ứng dụng Photoblog liên tục sử dụng các bài kiểm tra đơn vị để kiểm tra những điều sau:
- Các chức năng mới hoạt động chính xác và như mong đợi.
- Các chức năng hiện có không bị phá vỡ bởi bản phát hành mã mới.
- Các khiếm khuyết được sửa chữa và vẫn được cố định.
Python đi kèm với một mô-đun chuẩn nhất cung cấp một cách tiếp cận khác để kiểm tra đơn vị.
Thống nhất
unittest được bắt nguồn từ JUnit, một gói kiểm tra đơn vị Java do Kent Beck và Erich Gamma phát triển. Các bài kiểm tra đơn vị chỉ trả về dữ liệu đã xác định Đối tượng giả có thể được xác định. Các đối tượng này cho phép thử nghiệm dựa trên giao diện thiết kế của chúng tôi mà không cần phải dựa vào ứng dụng tổng thể. Họ cũng cung cấp một cách để chạy các bài kiểm tra ở chế độ cách ly với các bài kiểm tra khác được bao gồm.
Hãy xác định một lớp giả theo cách sau:
import unittest
class DummyTest(unittest.TestCase):
def test_01_forward(self):
dummy = Dummy(right_boundary=3)
self.assertEqual(dummy.forward(), 1)
self.assertEqual(dummy.forward(), 2)
self.assertEqual(dummy.forward(), 3)
self.assertRaises(ValueError, dummy.forward)
def test_02_backward(self):
dummy = Dummy(left_boundary=-3, allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
self.assertRaises(ValueError, dummy.backward)
def test_03_boundaries(self):
dummy = Dummy(right_boundary=3, left_boundary=-3,allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.forward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
Giải thích cho mã như sau:
mô-đun đơn nhất nên được nhập để cung cấp khả năng kiểm tra đơn vị cho lớp nhất định.
Một lớp nên được tạo bằng cách phân lớp con đơn nhất.
Mọi phương thức trong đoạn mã trên đều bắt đầu bằng một bài kiểm tra từ. Tất cả các phương thức này được gọi bởi trình xử lý đơn nhất.
Các phương thức khẳng định / thất bại được trường hợp kiểm thử gọi để quản lý các ngoại lệ.
Hãy coi đây là một ví dụ để chạy một trường hợp thử nghiệm -
if __name__ == '__main__':
unittest.main()
Kết quả (đầu ra) để chạy test case sẽ như sau:
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Thử nghiệm chức năng
Khi các chức năng của ứng dụng bắt đầu hình thành theo các yêu cầu, một tập hợp các thử nghiệm chức năng có thể xác nhận tính đúng đắn của ứng dụng về đặc điểm kỹ thuật. Tuy nhiên, kiểm tra nên được tự động hóa để đạt hiệu suất tốt hơn, điều này sẽ yêu cầu sử dụng các sản phẩm của bên thứ ba như Selenium.
CherryPy cung cấp lớp trợ giúp như các hàm tích hợp để dễ dàng viết các bài kiểm tra chức năng.
Kiểm tra tải
Tùy thuộc vào ứng dụng bạn đang viết và kỳ vọng của bạn về khối lượng, bạn có thể cần chạy kiểm tra tải và hiệu suất để phát hiện các nút thắt tiềm ẩn trong ứng dụng đang ngăn ứng dụng đạt đến một mức hiệu suất nhất định.
Phần này sẽ không trình bày chi tiết cách tiến hành kiểm tra hiệu suất hoặc tải vì nó nằm ngoài gói FunkLoad.
Ví dụ cơ bản về FunkLoad như sau:
from funkload.FunkLoadTestCase
import FunkLoadTestCase
class LoadHomePage(FunkLoadTestCase):
def test_homepage(self):
server_url = self.conf_get('main', 'url')
nb_time = self.conf_getInt('test_homepage', 'nb_time')
home_page = "%s/" % server_url
for i in range(nb_time):
self.logd('Try %i' % i)
self.get(home_page, description='Get gome page')
if __name__ in ('main', '__main__'):
import unittest
unittest.main()
Đây là giải thích chi tiết về đoạn mã trên -
Trường hợp thử nghiệm phải kế thừa từ lớp FunkLoadTestCase để FunkLoad có thể thực hiện công việc nội bộ của nó là theo dõi những gì xảy ra trong quá trình thử nghiệm.
Tên lớp rất quan trọng vì FunkLoad sẽ tìm kiếm tệp dựa trên tên lớp.
Các trường hợp thử nghiệm được thiết kế có quyền truy cập trực tiếp vào các tệp cấu hình. Phương thức get () và post () được gọi đơn giản với máy chủ để nhận phản hồi.