ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร


26

ฉันจะทดสอบเว็บไซต์ฟอร์มเว็บไซต์ได้อย่างไร สำหรับฉันแล้วดูเหมือนว่ามันมากขึ้นอยู่กับสถานะและการป้อนข้อมูลของผู้ใช้มันจะไม่เป็นไปได้

หากไม่เป็นไปได้มีทางเลือกอัตโนมัติที่ถูกต้องหรือไม่


2
หากคุณต้องการทดสอบส่วนต่อประสานผู้ใช้แบบอัตโนมัติคุณจะต้องมีซีลีเนียม แต่ถ้าคุณต้องการทดสอบหน่วยอัตโนมัติคุณไม่จำเป็นต้องใช้ซีลีเนียม คุณเพียงต้องการรูปแบบที่เหมาะสมในสถานที่ ดูคำตอบของฉัน
Matthew Rodatus

คำตอบ:


22

ใช่คุณสามารถ. คุณเพียงแค่ต้องระมัดระวังในการแยกข้อกังวลออกจากกัน ในระยะสั้นคุณจะต้องลบตรรกะทั้งหมดของคุณออกจาก behind รหัสและใส่ลงในชั้นเรียนอื่น ๆ

มีสองวิธีทั่วไปในการทำเช่นนี้

วิธีง่าย ๆ คือการพิจารณาตัวจัดการเหตุการณ์ทั้งหมดของคุณใหม่อีกครั้งว่า "ระบบให้ข้อมูลอะไรบ้างให้ฉันฉันต้องเติมข้อมูลอะไรลงในหน้า" และจากนั้นให้บริการระดับซึ่งจะแปลงที่

ในกรณีนี้เลเยอร์บริการควรรู้เพียงเล็กน้อยเกี่ยวกับลักษณะของเลเยอร์การนำเสนอของคุณ คุณยังต้องใช้ข้อมูลที่ส่งคืนจากบริการและเติมส่วนประกอบที่ถูกต้องของ WebForm ในโค้ด - หลังของคุณและสิ่งนี้ยังไม่ได้ทดสอบ (อย่างน้อยโดยการทดสอบหน่วยคุณยังสามารถใช้การทดสอบการรวม) แต่นี่ไม่ค่อยเป็นสิ่งที่รหัสผิดพลาดมันมีแนวโน้มที่จะล้มเหลวในตรรกะ

ซับซ้อนมากขึ้น แต่มีประสิทธิภาพมากขึ้นวิธีคือการใช้รูปแบบการดูรุ่นพรีเซนเตอร์ เมื่อเราลองสิ่งนั้นเราพบว่าผู้นำเสนอกลายมาเป็นคู่กับกรอบอย่างรวดเร็วและยิ่งเราพัฒนา MVP ยิ่งชัดเจนยิ่งขึ้นว่า MVP ต้องการเป็น MVC แต่ไม่สามารถทำได้

ที่กล่าวว่าคนอื่นทำสิ่งนี้สำเร็จเป็นอย่างดี - มีแม้แต่เฟรมเวิร์คเว็บ SMVเพื่อกำจัดการยกที่หนัก - ดังนั้นระยะของคุณอาจแตกต่างกันไป


1
@jmoreno: จับได้ดี! ฉันลืม WebForms และ MVP มานานกว่า 5 ปีแล้ว
สาธารณรัฐประชาธิปไตยประชาชนลาว

16

ค่อนข้างชัดเจนหน้าเว็บฟอร์มทั้งหมดไม่ใช่หน่วยและทำให้ไม่สามารถทดสอบหน่วยได้ อย่างไรก็ตามมีบางสิ่งที่คุณสามารถทำได้สำหรับการทดสอบอัตโนมัติ:

  • หน่วยทดสอบแต่ละองค์ประกอบของหน้า (วิธีการใด ๆ ที่ดำเนินการตรรกะจริง)
  • ส่วนประกอบการทดสอบหน่วยที่ใช้โดยหน้า (ตัวควบคุมแบบกำหนดเอง, ตรรกะทางธุรกิจเป็นต้น)
  • การทดสอบฟังก์ชั่นอัตโนมัติ (โดยการควบคุมเบราว์เซอร์จากระยะไกลหรือส่งคำขอ HTTP ผ่านบางสิ่งเช่น cURL)
  • การทดสอบการเจาะอัตโนมัติ (มีเครื่องมือที่จะพยายามค้นหาจุดฉีดที่เป็นไปได้และเรียกใช้การโจมตีการฉีดที่ไม่เป็นอันตรายและตรวจพบโดยอัตโนมัติบนหน้าของคุณ)
  • การทดสอบโหลด
  • การตรวจสอบเลย์เอาต์กับรายการของการใช้งานและสัญลักษณ์แสดงหัวข้อย่อยแบบบ้าน (แม้ว่ามันจะยากมากที่จะทำให้เป็นอัตโนมัติ; มันมักจะเป็นไปได้มากขึ้นที่จะทำมันด้วยตนเองทุกครั้งแล้ว)

-1 ขออภัย แต่การทดสอบการโหลดการทดสอบการเจาะและการตรวจสอบโครงร่างไม่มีอะไรเกี่ยวข้องกับการทดสอบหน่วย
Tom Squires

2
@ TomSquires: แน่นอนพวกเขาไม่ได้และถ้าคุณอ่านคำตอบของฉันอย่างระมัดระวังคุณจะสังเกตเห็นว่าฉันไม่เคยบอกว่าพวกเขาเป็น แต่คำถามดูเหมือนจะสร้างความสับสนให้กับแนวคิดของการทดสอบหน่วยและการทดสอบอัตโนมัติโดยทั่วไปซึ่งเป็นเหตุผลที่ฉันแสดงรายการการทดสอบอัตโนมัติที่มีความหมายต่าง ๆ ที่คุณสามารถแสดงในแบบฟอร์มบนเว็บ
tdammers

เห็นด้วยการทดสอบหน้าเว็บที่มีแนวโน้มที่จะเป็นรูปแบบของการบูรณาการการทดสอบแล้วทดสอบหน่วยโดยคำจำกัดความที่เข้มงวดแม้ว่าจะยังคงดีโดยอัตโนมัติสิ่งที่คุณสามารถ
JK

6
@ TomSquires: downvote ไม่ยุติธรรมโดยสิ้นเชิง คำถามของคุณเริ่มต้นด้วยการทดสอบทั้งไซต์ซึ่งไม่เกี่ยวข้องกับการทดสอบหน่วย Tdammers ระบุวิธีต่างๆในการทดสอบทั้งหมดและชิ้นส่วนและระบุว่าการทดสอบหน่วยเหมาะกับระบบ +1
azheglov

3
ยุติธรรมพอสมควร ฉันนำมันกลับมา
ทอมสไควร์ส

9

ฉันขอโทษที่ไม่มีส่วน "หน่วย" ของคำถาม ...

SeleniumHQเป็นเพื่อนของคุณสำหรับการทดสอบจากส่วนหน้า มันไม่ใช่การทดสอบหน่วยเหมือนการทดสอบกล่องดำ คุณยังต้องนึกถึงกรณีทดสอบที่ถูกต้อง ...


1
+1 คำตอบของคุณเกิดขึ้นเมื่อฉันกด "โพสต์คำตอบของคุณ" เพื่อพูดอย่างเดียวกัน
yannis

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

+1 เพราะฉันตั้งใจจะใช้มัน แต่ไม่เคยปัดเลย มีใครบ้างที่ใช้มันเป็นสิ่งที่ดีและคุ้มค่าที่จะใช้หรือไม่
NimChimpsky

6
ซีลีเนียมเป็นเครื่องมือที่ยอดเยี่ยม แต่ไม่มีอะไรเกี่ยวข้องกับการทดสอบหน่วย
pdr

จริงดูเหมือนว่าฉันข้ามข้อมูลนี้ในคำถาม: /
WarrenFaith

6

การพูดจากประสบการณ์: เฉพาะในกรณีที่มันถูกต้อง โดย "ถูกต้อง" ฉันหมายถึงการใช้โค้ดน้อยที่สุดและบางอย่างเช่น Model-View-Presenter ดังกล่าวข้างต้นเพื่อทำให้เว็บฟอร์ม "โง่" สิ่งนี้มักจะพิสูจน์ได้ว่าเป็นเรื่องยากมากกับแอปพลิเคชั่นบราวน์ฟิลด์เพราะพวกเขาไม่ได้ออกแบบมาโดยคำนึงถึงสิ่งนี้และมันเป็นความพยายามอย่างใกล้ชิดของเฮอร์คิวลินในการปรับโครงสร้าง / เขียนหน้าใหม่เพื่อใช้งาน


1

watin

ฉันพบว่าการทดสอบเว็บหน่วยมีประโยชน์อย่างยิ่งแม้ว่าจะเป็นเพียงการให้แนวคิดทั่วไปเกี่ยวกับข้อบกพร่องการถดถอยหรือสำหรับโครงการใหม่

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

http://watin.org/เป็นเครื่องมือทดสอบทางเว็บอีกอันหนึ่ง แต่สำหรับ C # /. NET คุณเขียนการทดสอบเป็นการทดสอบหน่วย:

[Test] 
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

ปัจจุบันใช้ IE แต่มีการสนับสนุนการทดลองสำหรับ Firefox และ Chrome คุณสามารถทำสิ่งต่างๆโดยอัตโนมัติในการทดสอบด้วยตนเองรวมถึงการใช้จาวาสคริปต์


ยอมรับว่าเป็นปี 2559 การเยี่ยมชมเว็บไซต์ WatiN ในวันนี้บ่งบอกว่าบางที WatiN อาจตายไปแล้ว เอกสารกระจัดกระจายไม่ทันสมัยและวิดีโอไม่เล่น ฉันไม่ได้บ่น - ฉันมีความซาบซึ้งอย่างมากสำหรับเครื่องมืออาสาสมัครโอเพนซอร์ซ - ความคิดเห็นนี้คือการช่วยเหลือคนที่มาเร็ว ๆ นี้อย่างฉัน คำตอบนั้นดีเพียงแค่ชี้ให้เห็นว่าการเริ่มต้นอาจจำเป็นต้องเรียนรู้ด้วยตนเองด้วยตนเอง
qxotk

1
ความช่วยเหลือเพิ่มเติมสำหรับผู้ที่กำลังคิดเกี่ยวกับวิธี WatiN ยืนยันว่านิ่ง + สถานที่ที่จะดูในปัจจุบันที่นี่: stackoverflow.com/questions/118531/…
qxotk

0

คุณไม่สามารถทดสอบเว็บไซต์ได้เพราะหน่วยคำขอผ่านเว็บเกิดขึ้นบนสาย (หรือผ่านสแต็ก TCP) ดังนั้นการทดสอบไม่เหมาะกับคำจำกัดความของ "การทดสอบหน่วย" พวกเขาน่าจะเป็นการทดสอบแบบครบวงจร

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

ที่น่าสนใจกว่านั้นคือมันทำให้ฉันกังวลเล็กน้อยว่าทำไมคุณต้องทดสอบเว็บฟอร์มเลย คุณไม่ได้วางตรรกะในโค้ดไว้มากเกินไปและมีเหตุผลทางธุรกิจเกี่ยวกับโลหิตจางโดยบังเอิญหรือไม่?


-1

ดอกมะลิ

ตลอดระยะเวลา 5 ปีที่ผ่านมาจัสมีได้กลายเป็นเครื่องมือสำคัญสำหรับการทดสอบส่วนหน้า มันมักจะรวมอยู่ในการสร้างการทดสอบอัตโนมัติด้วยโหนดและ npm

ต่อhttps://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :

จัสมินเป็นกรอบการทดสอบโอเพนซอร์ซสำหรับจาวาสคริปต์ [2] มันมีจุดมุ่งหมายที่จะทำงานบนแพลตฟอร์มที่เปิดใช้งาน JavaScript ใด ๆ เพื่อไม่ก้าวก่ายแอปพลิเคชันหรือ IDE และมีไวยากรณ์ที่อ่านง่าย มันได้รับอิทธิพลอย่างมากจากกรอบการทดสอบหน่วยอื่น ๆ เช่น ScrewUnit, JSSpec, JSpec และ RSpec [3]

แม้จะมีการกล่าวถึงจาวาสคริปต์ทั้งหมด แต่ก็ยังสามารถใช้สำหรับการทดสอบหน่วยของเว็บฟอร์มธรรมดา


ในขณะที่จาวาสคริปต์ใช้ในเว็บฟอร์มไม่ใช่วิธีหลักในการอัปเดต ui
Tom Squires

จริง อย่างไรก็ตามทางเลือกคือ ... ดังนั้นแม้ว่าจะไม่ได้มีวัตถุประสงค์เพื่อวัตถุประสงค์จัสมินทำงานได้ดีมาก นอกจากนี้ไวยากรณ์ยังเหมือนกับ RSpec ซึ่งโปรแกรมเมอร์ของ Ruby ชอบ
Michael Durrant

-2

ASP.NET

เมื่อพัฒนาเว็บไซต์ ASP.NET เราสามารถทำการทดสอบหน่วยใน:

  • โดเมน
  • BL ตัวควบคุม / ผู้นำเสนอ
  • รหัสที่อยู่ด้านหลังของหน้าเว็บฟอร์ม

เป็นไปได้ที่จะ TDD ทั้งหมดนี้ขึ้นอยู่กับสถาปัตยกรรมของคุณ สิ่งเดียวที่คุณไม่สามารถทดสอบหน่วยได้คือเลย์เอาต์ของไฟล์มาร์กอัป


3
คำตอบนี้บอกว่า "ใช่มันเป็นไปได้" สำหรับคำถามที่ว่า "อย่างไร" ไม่เป็นประโยชน์
RubberDuck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.