Casperjs / PhantomJs เทียบกับ Selenium


150

เราใช้ซีลีเนียมเพื่อUIทำการทดสอบอัตโนมัติ เมื่อเร็ว ๆ นี้เราได้เห็นผู้ใช้ส่วนใหญ่ของเราใช้ Chrome เราอยากรู้ - ข้อดีข้อเสียของการใช้ PhantomJS กับ Selenium:

  • มีข้อได้เปรียบที่แท้จริงในแง่ของประสิทธิภาพเช่นเวลาในการดำเนินการกรณีทดสอบหรือไม่
  • เมื่อใดที่ควรหนึ่งชอบ PhantomJS มากกว่า Selenium

คำตอบ:


183

พวกเขากำลังโจมตีปัญหาที่แตกต่างกัน เนื่องจาก PhantomJS ทำงานอย่างสมบูรณ์แบบบนบรรทัดคำสั่งจึงเหมาะสำหรับการทดสอบควันชั้นแรกไม่ว่าจะเป็นส่วนหนึ่งของเวิร์กโฟลว์การพัฒนาและ / หรือในเซิร์ฟเวอร์การรวมอย่างต่อเนื่อง ซีลีเนียมมีเป้าหมายเป็นเบราว์เซอร์หลายตัวดังนั้นจึงมีประโยชน์มากในการสร้างความมั่นใจในความสอดคล้องกันของเบราว์เซอร์และทำการทดสอบอย่างครอบคลุมในระบบปฏิบัติการที่แตกต่างกัน

หากแอปพลิเคชันเว็บของคุณต้องทำงานกับเว็บเบราว์เซอร์ที่หลากหลายการรันการทดสอบ UI กับ PhantomJS เท่านั้นจะไม่ครอบคลุมการทดสอบมากที่สุด อย่างไรก็ตามมันเป็นเรื่องที่สมบูรณ์แบบที่จะเปิดตัว PhantomJS และฝึกการตรวจสติพื้นฐานก่อนที่จะทำการทดสอบในเชิงลึก ลองนึกภาพความบ้าคลั่งของการทดสอบแอปพลิเคชั่นทางการเงินที่หน้าจอเข้าระบบไม่ได้ตั้งใจและไม่สามารถใช้งานได้!

โปรดทราบว่าเส้นแบ่งระหว่างทั้งสองจะเบลอเล็กน้อยกับการรองรับ WebDriver ล่าสุดใน PhantomJS ล่าสุด ตอนนี้เป็นไปได้ที่จะรันการทดสอบอย่างรวดเร็วก่อนโดยใช้ PhantomJS จากนั้น (สมมติว่าไม่มีข้อผิดพลาดร้ายแรงเกิดขึ้น) ดำเนินการทดสอบเดียวกันอย่างทั่วถึงในการตั้งค่าซีลีเนียม


ขอบคุณสำหรับคำตอบลิงก์ใด ๆ ที่สามารถช่วยให้ฉันเข้าใจว่าผู้คนใช้ phantomjs เพื่อรวบรวมสถิติที่เกี่ยวข้องกับประสิทธิภาพในแอปผลิตจริงหรือไม่
spirit3189

34
Ariya Hidayat ดูเหมือนจะเป็นผู้สร้าง PhantomJs
Sebastian Patten

ดูเหมือนว่าขั้นตอนการอธิบายการเริ่มต้นการเขียนการทดสอบกับ PhantomJS ของคุณแล้วใช้ Selenium ถือว่าเป็นการทดสอบทั้งหมดที่เขียนใหม่ ... คุณสามารถใช้สคริปต์ PhantomJS โดยตรงกับ Selenium ได้ไหม
lajarre

1
ขอบคุณสำหรับ PhantomJS ที่ยอดเยี่ยม @AriyaHidayat! :)
rinogo

49

ด้วยการรวม WebDriver ล่าสุด (ดังที่ Ariya จดไว้แล้ว) ตอนนี้คุณสามารถใช้ Selenium เพื่อขับ PhantomJS ได้

มันมีพลังมหาศาล

คุณสามารถเรียกใช้ชุดการทดสอบซีลีเนียมอัตโนมัติอย่างเต็มรูปแบบ (ใช้ PhantomJS เป็นการติดตั้ง WebDriver) ผ่าน CI ของคุณบนเซิร์ฟเวอร์ Unix ที่ไม่มีหัวในทุกการเช็คอิน จากนั้นหากคุณต้องการทดสอบความเข้ากันได้ของเบราว์เซอร์คุณสามารถเรียกใช้การทดสอบในพื้นที่โดยเปลี่ยนการใช้ WebDriver เป็น Chrome, Firefox เป็นต้น


41

ฉันกำลังเขียนกรอบการแยกเว็บ ฉันมี 524 การทดสอบที่รับข้อมูลจาก 250 เว็บไซต์โดยใช้ XPath เริ่มแรกเฟรมเวิร์กใช้ตัวแยกวิเคราะห์ HTML HTMLCleaner แต่ตอนนี้ฉันกำลังตรวจสอบการใช้Seleniumเพราะฉันต้องการการสนับสนุน Javascript ผมได้ทำการทดสอบกับ HtmlUnit ที่ Chrome, Firefox และไดรเวอร์ PhantomJS นี่คือการเปรียบเทียบเวลาและจำนวนของความล้มเหลวสำหรับแต่ละวิธี:

                    Failures    Time (secs) 
HtmlCleaner         0           82  
HtmlUnit            169         102 
Google Chrome       38          562 
Firefox             46          1159    
PhantomJS           40          575

ความคิดเห็นบางส่วน:

  • ในบางกรณี "ความล้มเหลว" อาจไม่ล้มเหลวเลยก็อาจเป็นได้ว่าตัวแยกข้อมูลล้มเหลวเนื่องจาก Javascript กำลังเขียน DOM ใหม่ ฉันอยู่ในกระบวนการวิเคราะห์ความล้มเหลวในการค้นหาสาเหตุ

  • ที่กล่าวว่า HtmlUnit เป็นตัวขับซีลีเนียมที่เร็วที่สุด แต่ก็ไม่น่าเชื่อถือเช่นกัน ความไม่น่าเชื่อถือนี้ไม่เพียง แต่เกี่ยวข้องกับ Javascript เท่านั้น แต่ยังมีปัญหาในการประมวลผล HTML "ยุ่งสกปรกโลกแห่งความจริง" เนื่องจากมีบางสิ่งที่ดูเหมือนว่าจะเสียในอัลกอริธึมการแท็กบาลานซ์ คู่ของปัญหาที่ได้รับการยกขึ้นเกี่ยวกับเรื่องนี้ แต่พวกเขายังไม่ได้รับการแก้ไข - ดูHTML-UNIT 1423และHTML-UNIT 1046

  • Firefox เป็นไดร์เวอร์ซีลีเนียมที่ช้าที่สุดแม้ว่าฉันจะปิดการโหลดรูปภาพและสไตล์ชีท นี่เป็นเพราะการโหลดและเริ่มต้นช้าที่สุดทำให้ช้ากว่า Chrome มากและทุกครั้งที่การแยกไฟล์ล้มเหลวฉันต้องโหลดไดรเวอร์อีกครั้ง (ในการทดสอบฉันสร้างกลุ่มไดรเวอร์ 5 ตัวเพื่อลดความล่าช้าในการดึง URL สำหรับทุกคน ไดรเวอร์เว็บซีลีเนียม)

  • PhantomJS ให้ความแม่นยำที่ดีกว่า Firefox ต่ำกว่า Chrome เล็กน้อย แต่ใช้เวลาประมาณครึ่งหนึ่งของ Firefox ยิ่งไปกว่านั้นฉันสามารถเรียกใช้มันในกล่อง dev ของฉันมันไม่ "เข้ายึดเครื่อง" โดยเปิดเบราว์เซอร์หลายตัวเพื่อให้ฉันสามารถทำงานต่อไปได้

ฉันจะแนะนำ PhantomJS อย่างมาก


1
ใช้เวลา 9 นาทีในการรันชุดทดสอบของคุณด้วย phantomJS? ที่จะต้องรู้สึกเหมือนไปตลอดกาล ...
เควิน

@ เควินใช่ :) - แต่ HTMLCleaner เป็นการทดสอบมาตรฐานฉันทำเครื่องหมายใช้หมวดหมู่ JUnitเพื่อทำเครื่องหมายการทดสอบอื่น ๆ เป็นทางเลือกเพื่อให้พวกเขาไม่ได้เป็นส่วนหนึ่งของการทดสอบหน่วยมาตรฐาน
Mark Butler

ขอบคุณ ใช่ฉันทำงานเกี่ยวกับการทดสอบแบบเต็มและพวกมันช่างเยือกแข็งมากเช่น 15-20 วินาทีสำหรับการทดสอบสองสามหน้า บางทีมาตราส่วน 'glacial' ของฉันอาจต้องมีการปรับแม้ว่า hehe :) แปลก แต่ถ้าฉันทำด้วยตนเองมันใช้เวลาเพียง 5 วินาทีในการคลิกผ่านแบบฟอร์ม
เควิน

1
@lucaswxp ใช่! และโครงการอื่น ๆ มากมายในระหว่างนั้น ตามที่อธิบายข้างต้นไม่มีทางเลือกที่สมบูรณ์แบบ ในเวลานั้นฉันใช้ HtmlCleaner แต่ได้เพิ่มตัวเลือกในการใช้ PhantomJS หากหน้าเว็บที่ต้องการแตกออกมานั้นจำเป็นต้องใช้
Mark Butler

1
@iconoclast No - น่าเสียดายที่นายจ้างคนก่อนหน้ามี IP
Mark Butler

2

การใช้ประโยชน์จากพลังของทั้งซีลีเนียมและ PhantomJS PhantomJS นั้นมีความสามารถในเบราว์เซอร์ที่ไม่มีส่วนหัวดังนั้นจึงควรใช้เป็นเบราว์เซอร์ที่มีซีลีเนียม (นอกเหนือจากเบราว์เซอร์ดั้งเดิมเช่น IE, Chrome ฯลฯ ) ข้อดีของวิธีการนี้:

  1. สามารถใช้สำหรับทำ Sanity สำหรับเว็บแอปพลิเคชันใน CI (แม้ว่าเครื่องตัวแทนจะไม่มี IE หรือโครม) การทดสอบจะทำงานได้อย่างมีประสิทธิภาพ
  2. ทีมพัฒนาบางทีมใช้วิธีนี้เพื่อให้ได้ผลลัพธ์ที่รวดเร็วและใช้เวลาและทรัพยากรน้อยลง
  3. ฟีเจอร์ที่ยิ่งใหญ่ที่สุดของ phantom JS คือการจับภาพหน้าจอโดยใช้การทดสอบแบบขนานโดยใช้มัลติเธรดซึ่งจะช่วยลดเวลาในการประมวลผลของคุณได้อย่างมาก

1

ความท้าทายที่ฉันเผชิญขณะใช้ PhantomJS:

แอปพลิเคชันของฉันคือราคาเว็บแอปพลิเคชัน:

  1. ในบางจุดที่ทำงานได้ดีบนเบราว์เซอร์ chrome จะไม่ทำงานบน phantomJS
  2. บางครั้งในขณะที่ทำการดับเบิลคลิกหรือคลิกบริบทโดยซีลีเนียมฉันต้องตรวจสอบเพิ่มเติมเพื่อตรวจสอบ coz การดำเนินงานในสถานที่แรกมันไม่ได้คลิก
  3. ความคงอยู่ของแคชและคุกกี้ หลังจากออกจากระบบแล้วเข้าสู่ระบบข้อมูลยังคงอยู่ในแคช | ดังนั้นเราจึงทำการทดสอบกับโครเมี่ยม
  4. หนึ่งในปัญหาที่สำคัญที่สุดที่ฉันพบ "ปัญหาการอัปโหลดไฟล์" เราไม่สามารถอัปโหลดไฟล์ในเบราว์เซอร์ phantomJ ในแอปพลิเคชันของเรา เราลอง javascriptexcutor, jqueries หลายอย่าง แต่ก็ไม่ได้ผลเลย ดังนั้นเราจึงทำการทดสอบนี้กับ Chrome หมายเหตุ: เราใช้ฟังก์ชั่นจาวาสคริปต์อย่างกว้างขวางในกรอบการทำงานของเราเพื่อโต้ตอบกับองค์ประกอบของเว็บสำหรับ PhantomJS มีสิ่งหนึ่งที่แน่นอนว่าเวลาดำเนินการใน PhantomJS น้อยมาก ดังนั้นมันขึ้นอยู่กับความสำคัญของลูกค้าว่าเขาต้องการฟังก์ชั่น / ประสิทธิภาพแล้วไปกับมัน หากคุณต้องการทดสอบสถานการณ์แบบ end-to-end แล้วไปหา chrome
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.