ช่วงนี้ก็เริ่มจะเขียน python บ่อยขึ้น เว็บแอพก็ง่ายนะ framework เบาๆ มีให้ใช้หลายตัวอยู่เหมือนกัน ส่วนตัวแล้วก็ชอบใช้ Flask แล้วก็มี bottle อยู่นิดหน่อย สิ่งที่หนีไม่พ้นในการเขียนเว็บแอพคือ มันต้องมีการใช้งานคุ๊กกี้กันบ้างล่ะ จริงไหม ^^ ในบทความนี้จะเกี่ยวกับการเขียนเทสข้อมูลในคุ๊กกี้ด้วย
ใน Flask framework จะมีฟังก์ชัน test_client() ที่จะสร้าง instance ของคลาส werkzeug.test.Client ขึ้นมาเพื่อใช้เทสเว็บแอพของเรา ก่อนอื่นก็ติดตั้ง package ที่เราต้องการก่อนนั่นก็คือ Flask
pip install flask
เริ่มด้วยการสร้างไฟล์ hello_test.py เพื่อเขียนเทสเรียกไปที่ /hello/{name} สิ่งที่เราอยากเห็นเมื่อเข้าไปที่ลิงค์นี้คือ Hello, {name}
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 ไว้ตามเทสที่เราเขียนไว้ครับ
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 ก็ทำได้ดังนี้ครับ
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 เลยครับ
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