...
Là một sysadmin, anh Chuối rất tự hào mình có khả năng viết Python giỏi như viết bash.
Hễ khi cần viết script ngắn ngắn, anh lại bật ngay vim lên và viết từng dòng thơ bằng ngôn ngữ bash, sau đó dành nửa ngày còn lại để debug tại sao nó lại không chạy. Câu chuyện cũng vậy mỗi lần anh Chuối viết script để tự động quá trình test, build phần mềm, cụ thể ở đây là một Python module.
Các bước phải làm:
- đầu tiên là tạo virtualenv
- rồi source virtualenv
- chạy pip install -r requirements.txt
- chạy flake8 kiểm tra lỗi pep-0008
- chạy pylint kiểm tra lỗi lint
- install module (python setup.py install) rồi chạy test
- chạy test bằng py.test tests/ hoặc một cách nào đó khác
- public package nếu test thành công (python setup.py sdist)
- dọn dẹp, rửa ráy sau khi xong xuôi.
Vậy một ngày anh Chuối sang tây, thấy mấy anh Chuối tây vì làm việc này nhiều quá, nên sinh chán nản, và đẻ ra một cái tool có tên là "tox".
tox giúp tự động và chuẩn hoá tất cả các quy trình nói trên, mà không cần dùng đến một dòng bash nào. Mọi yêu cầu được viết vào một file tox.ini thân thiện với mọi người. Không chỉ vậy, tox còn có khả năng test chương trình với nhiều phiên bản python, nhiều môi trường, config khác nhau.
Về mặt bản chất, tox là công cụ để quản lý các virtualenv, nó tự sinh tự diệt virtualenv, tự chạy test trong từng môi trường và cũng là một commandline tool để chạy test.
Thấy hay, anh Chuối liền ăn trộm mang về, Việt hoá cái tên thành "Tốc", rồi mang đi khoe công nghệ hàng đầu thế giới. Từ đây, mỗi lần cần viết quá trình test python tự động, anh Chuối lại viết file tox.ini, rồi cứ thế ngồi hô thần chú: tốc tốc tốc ...vậy là xong.
Thế nhưng thấy hay, trộm về dùng, nào đâu những người xung quanh đã tin. Vậy là lại phải ngồi hì hụi liệt kê ra có những ai hàng đầu, mà dùng "tox":
- Flask
- Ansible
- Bottle
- Youtube-dl
- Scrapy
- httpie
- the fuck
- letsencrypt
...
Thế là cũng đã đủ dài và đủ để dùng rồi. Vậy thì dùng luôn:
Cài đặt tox
# pip install toxTự sinh file cấu hình tox.ini
$ tox-quickstart
Sửa file cấu hình tox.ini cho phù hợp. Ví dụ:
[tox]Rồi chạy:
envlist = py27, py35
[flake8]
max-line-length = 100
[testenv]
commands =
flake8 'pho' 'setup.py'
pylint pho *.py -f parseable -E
py.test tests/ --junitxml=results.xml
deps =
-rrequirements.txt
$ toxĐể tạo lại virtualenv (khi có thay đổi trong file requirements.txt), gõ
...
$ tox -r
Xem thêm các ví dụ trên để tham khảo.
Tốc tốc tốc hết lên cho tôi :v
Hết.
HVN @ familug.org
No comments:
Post a Comment