ช่วงนี้ก็เริ่มจะเขียน python บ่อยขึ้น เว็บแอพก็ง่ายนะ framework เบาๆ มีให้ใช้หลายตัวอยู่เหมือนกัน ส่วนตัวแล้วก็ชอบใช้ Flask แล้วก็มี bottle อยู่นิดหน่อย สิ่งที่หนีไม่พ้นในการเขียนเว็บแอพคือ มันต้องมีการใช้งานคุ๊กกี้กันบ้างล่ะ จริงไหม ^^ ในบทความนี้จะเกี่ยวกับการเขียนเทสข้อมูลในคุ๊กกี้ด้วย
ใน Flask framework จะมีฟังก์ชัน test_client() ที่จะสร้าง instance ของคลาส werkzeug.test.Client ขึ้นมาเพื่อใช้เทสเว็บแอพของเรา ก่อนอื่นก็ติดตั้ง package ที่เราต้องการก่อนนั่นก็คือ Flask
1 | pip install flask |
เริ่มด้วยการสร้างไฟล์ hello_test.py เพื่อเขียนเทสเรียกไปที่ /hello/{name} สิ่งที่เราอยากเห็นเมื่อเข้าไปที่ลิงค์นี้คือ Hello, {name}
1 2 3 4 5 6 7 8 9 10 | import unittest import hello class HelloTest(unittest.TestCase): def setUp( self ): self .app = hello.app.test_client() def test_hello_name( self ): response = self .app.get( '/hello/Flask' ) self .assertEqual( 'Hello, Flask' , response.data) |
จากนั้นก็ลองรัน unittest ครับ แน่นอนว่าตั้ง fail แน่เพราะยังไม่ได้สร้างอะไรเลย ^^
เราก็ไปสร้างไฟล์ชื่อ hello.py และสร้าง Flask app ไว้ตามเทสที่เราเขียนไว้ครับ
1 2 3 4 5 6 7 8 9 | import flask app = flask.Flask(__name__) @app .route( '/hello/<name>' ) def hello(name): return "Hello, %s" % name if __name__ = = '__main__' : app.run() |
จากนั้นก็ลองรัน unitttest อีกทีครับ คราวนี้น่าจะผ่านแล้วนะ ^^
พอ Hello, Name เสร็จแล้ว เกิดอยากเพิ่มลูกเล่นขึ้นมาอีกนิด เอาเป็นว่าถ้าใครที่เคยเข้ามาที่ลิงค์ /hello/{name} แล้ว พอกลับเข้ามาอีกครั้งให้เปลี่ยนจากคำว่า Hello, เป็นครับว่า Welcome back, แทน วิธีที่ผมเลือกใช้ก็คือสร้างคุ๊กกี้ไว้ที่เบราว์เซอร์ของผู้ใช้ตอนเข้ามาครั้งแรก จากนั้น ก่อนที่จะส่งข้อความทักทายออกไปก็ให้ตรวจสอบดูก่อนว่ามีคุ๊กกี้อยู่รีป่าว ถ้ามีก็ให้ใช้คำว่า Welcome back แทนคำว่า Hello ครับ
วิธีการเซตค่าคุ๊กกี้ให้กับ Test Client นั้นสามารถทำได้ง่ายด้วยฟังก์ชั่น set_cookie ครับ ตัวอย่างนี้ผมจะสร้างคุ๊กกี้ชื่อ visited ให้มีค่าเป็น 1 ก็ทำได้ดังนี้ครับ
1 2 3 4 | def test_revisit_say_welcome_back( self ): self .app.set_cookie( 'localhost' , 'visited' , '1' ) response = self .app.get( '/hello/Revisit' ) self .assertEqual( 'Welcome back, Revisit' , response.data) |
ส่วนวิธีเช็คว่ามีการสร้างคุ๊กกี้ให้กับผู้ใช้ตอนเข้ามาที่ลิงค์ /hello/{name} รึป่าวนั้น ก็ใช้วิธีเช็คจาก Headers ที่ทางแอพส่งกลับไปให้กับ client เลยครับ
1 2 3 | def test_create_cookie_visited( self ): response = self .app.get( '/hello/Cookie' ) self .assertTrue( 'visited=1' in response.headers[ 'Set-cookie' ]) |
สามารถเข้าไปดูโค้ดเต็มๆ ได้ที่ github.com/gigkokman/helloflask