Kiểm thử phần mềm là quá trình triển khai một chương trình hoặc ứng dụng để phát hiện lỗi phần mềm. Nó cho phép nhà phát triển xác thực và kiểm tra chương trình phần mềm.
Odoo hỗ trợ test các module với thư viện UnitTest trong Python. Test case trong Odoo rất dễ để có thể viết và sử dụng. Đây là một tính năng khác tuyệt vời nếu bạn đang viết nhiều phần custom code của Odoo Core và bạn muốn có một cái nhìn tổng quan về các chức năng mà mình đang phát triển cũng như các tính năng mà core Odoo đang có.
Viết test case và debug theo mình nghĩ là 2 trong những công việc quan trọng mà 1 dev phải có. Có một số lý do khác mà bạn phải viết test case là :
- Chắc chắn rằng code của bạn sẽ không hoạt động trong tương lai với những trường hợp đặc biệt về phía thao tác người dùng cũng như dữ liệu
- Đưa ví dụ về các trường hợp
- Giúp bạn hình dung ra việc của bạn cần làm trước khi bắt tay vào code
Trong bài viết lần này mình sẽ viết một test case trên Odoo 15
Chạy test case như thế nào?
Trước khi viết một test case chúng ta hãy cùng xem chạy chúng như thế nào? Chúng ta sẽ thêm tham số –test-enable -c {config path file}
Ví dụ: ./odoo-bin -i automated_test_demo –test-enable -c /odoo.conf
Viết một test case
Để viết test case, bạn cần xác định module cần test, module test cần phải có tên bắt đầu bằng test_
file init.py bao gồm:
from . import test_function1, test_function2
Khi code test case trong Odoo, chúng ta cần lưu ý những điều sau:
- Tất cả các model test phải được kế từa từ Odoo action class
- Tất cả các model test phải được viết trong file init.py
- Tất cả các file model test phải được bắt đầu bằng test_name.py
- Tất cả các hàm, phương thức nên được đặt tên như def test_name(self):
- Module test phải được đặt ở trong module bạn cần test
Tạo class test case
Để viết test case, Odoo có một số lớp thử nghiệm được xác định trước. Nếu bạn cần sử dụng và mở rộng chúng
odoo.tests.common.TransactionCase
Đây là class được sử dụng nhiều nhất, thường được dùng trong việc quản lý từng transaction
odoo.tests.common.SingleTransactionCase
Chạy tất cả các class test trong
odoo.tests.common.HttpCase
odoo.tests.common.SavepointCase
Dưới đây là một class:
from odoo.tests import common
class TestModuleDemo(common.TransactionCase):
def setUp(self):
super(TestModuleDemo, self).setUp()
# Add test setUp code here
def test_some_action(self):
# Add test code here
Phương thức setup() tạo dữ liệu và biến mà chúng ta muốn sử dụng, phương thức này là phương thức trong thư viện unittest.
Sau đây mình sẽ viết một đoạn code cho hàm test như sau:
def test_some_action(self):
# add a record in a model.
record = self.env['model.a'].create({'field': 'value'})
record.some_action()
# Check if the field and match the expected result
self.assertEqual(record.field, 'expected_field_value')
print('Your test was successful!')
Trong odoo thì có 3 loại test chính
- Python unit tests
- JS unit tests
- Tour: phần này đảm bảo việc code python(backend) và code js(front end) giao tiếp đúng với nhau
Mình sẽ sửa đoạn code phần unit test lại như sau:
from odoo.tests import common
from addons_custom.module_test.models import string
class TestModuleDemo(common.TransactionCase):
def setUp(self):
super(TestModuleDemo, self).setUp()
self.test_some_action()
# Add test setUp code here
def test_some_action(self):
record = self.env['module_test.module_test'].create({'name': 'value'})
self.test_string_should_do_nothing_when_less_than()
self.test_string_should_do_nothing_when_same_size()
self.test_string_should_truncate_when_greater()
print('Your test was successful!')
def test_string_should_truncate_when_greater(self):
self.assertEqual(len(string.limit('A short string...', size=5)), 5)
def test_string_should_do_nothing_when_same_size(self):
sample_str = 'This is my sample string.'
sample_str_len = len(sample_str)
self.assertEqual(len(string.limit(sample_str, sample_str_len)), sample_str_len)
def test_string_should_do_nothing_when_less_than(self):
sample_str = 'Another cool sample string!'
sample_str_len = len(sample_str)
self.assertEqual(len(string.limit(sample_str, sample_str_len)), sample_str_len)
Và đây là kết quả
Như để có được kết quả trên mình đã chạy câu lệnh như sau:
odoo-bin -c /home/zyn1030z/PycharmProjects/erpviet-main/odoo.conf -d erpviet --test-enable -i module_test
Bạn cũng có thể tùy chọn –stop-after-init
Bài viết lần này dừng lại ở đây, ở bài viết tới chúng ta cùng tìm hiểu về cách viết unit test trong JS của Odoo nhé!😄