Wednesday, 13 April 2016

[Python] Người ta test/CI thế nào?

Nhà người ta sau khi code xong, thì phải chạy test, kiểm tra chất lượng code và làm cho toàn bộ quá trình này trở nên tự động để chạy bằng 1 cái máy khác (CI server), chờ kết quả trả về.

Nhà mình cũng viết code, nhưng những phần còn lại thì hay bỏ qua. Nay kéo sang xem nhà người ta làm thế nào, copy mang về rồi nhận là của mình, vậy là vừa oai, vừa xịn, a hi hi.

1. Test
Viết code thì phải có test, nhà người ta làm thế.
Các file test đặt trong thư mục ``tests``. Nhà người ta dùng py.test để chạy test, nghe đồn nó là hàng xịn nhất trên đời rồi.

https://github.com/pallets/flask/blob/1aa8a54b175ef10a72d3c3d3f4ed112ddc6e2ea6/Makefile#L5

2. Gõ lệnh test
Gõ lệnh rất là mệt, càng dài càng mệt. Thế nên hiểu tại sao bên tây nó quá mệt mỏi nên sinh ra trò làm ngắn lại, mà thế giới gọi là dùng lệnh ``make``. Viết 1 cái Makefile, định nghĩa các câu lệnh ngắn để nó chạy các câu lệnh dài, thế là ta có 1 tập câu lệnh vừa ngắn, vừa yêu.

all: clean-pyc test

test:
 py.test tests examples

tox-test:
 tox

audit:
 python setup.py audit

release:
 python scripts/make-release.py

ext-test:
 python tests/flaskext_test.py --browse

clean-pyc:
 find . -name '*.pyc' -exec rm -f {} +
 find . -name '*.pyo' -exec rm -f {} +
 find . -name '*~' -exec rm -f {} +
 
Xem thêm ở đây 
 
3. Kiểm định chất lượng

Code viết ra phải đảm bảo chất lượng, phải pep8, phải đúng pylint, ...

Nhưng nhà người ta không thích theo luật, vậy nên chả có pep8 hay pylint nào được chạy cả.
Hai project nhiều người dùng bậc nhất trong giới Python là RequestsFlask đều không dùng chương trình pep8 hay pylint để kiểm duyệt chất lượng code.

Ai thích dùng pep8/flake8 thì vẫn có thể theo các chuyên gia OpenStack.
Ai thích dùng pylint thì vẫn có thể theo các chuyên gia SaltStack.

Chương trình pep8 mặc định giới hạn độ dài tối đa mỗi dòng là 79 ký tự, trong khi pep-0008 đã mở rộng nó và có thể cho phép độ chuẩn tới 99 ký tự. Ai đã từng sửa pep8 vì dòng dài sẽ hiểu điều này, không cần nói thêm. Hoàn toàn có thể cấu hình pep8 để tăng giới hạn lên 100 ký tự, xem thêm ở pep8 configuration.

Phần còn lại mà nhà người ta luôn quan trọng,  là code có pass test không (unittest, functional test...)

4. Hỗ trợ nhiều môi trường
Nhà mình thì chỉ có 2.7 thôi, nhà người ta thì đủ từ 2.6 2.7 3.3. 3.4. 3.5 pypy ..., vậy nên mỗi lần mà phải test trên các phiên bản này thì không được ngồi khóc. Vậy là người ta sinh ra "tox" - một chương trình tự động sinh virtualenv tương ứng rồi test trên tất cả các phiên bản.

5. Chạy nhiều câu lệnh khi kiểm tra chất lượng
Vậy là nhà người ta đã có cách làm ngắn, cách chạy trên nhiều version, khi cần chạy nhiều câu lệnh để kiểm tra nhiều khía cạnh của phần mềm thì người ta nhét nó vào file tox.ini, để tox tự chạy lần lượt từng câu một. Nhà người ta ghét dùng bash, nhà người ta không viết file bash nếu không bắt buộc.

6. Chạy quá trình kiểm tra/ tích hợp trên một server
Sau tất cả, mọi thứ đều đã nhét vào tox rồi thì người ta chỉ cần chạy mỗi lệnh tox là test hết sạch sành sanh rồi. Người ta làm 1 file cấu hình cho TravisCI, rồi bảo thằng Vít nó gọi lệnh, mình ngồi chờ nó làm, thế là xong. Người ta không phải xây dựng những công nghệ khủng khiếp nào khác nữa, người ta mệt lắm rồi...

Hết.
HVN @ familug.org