กลับสู่โรงเรียน: วิธีฝึกผู้ทดสอบด้วยตนเองให้รับมือกับการทดสอบอัตโนมัติ

ผู้สมัคร QA สี่ในห้าคนต้องการเรียนรู้วิธีทำงานกับการทดสอบอัตโนมัติ ไม่ใช่ทุกบริษัทที่จะสามารถตอบสนองความต้องการของผู้ทดสอบด้วยตนเองในช่วงเวลาทำงานได้ Wrike ได้จัดโรงเรียนระบบอัตโนมัติสำหรับพนักงานและตระหนักถึงความปรารถนาของหลายๆ คน ฉันเข้าร่วมในโรงเรียนนี้ในฐานะนักเรียน QA

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

ประสบการณ์ของไรท์ในการจัดโรงเรียน

เมื่อความต้องการโรงเรียนระบบอัตโนมัติมีความชัดเจน องค์กรของโรงเรียนก็ตกเป็นของ Stas Davydov ซึ่งเป็นผู้นำด้านเทคนิคของระบบอัตโนมัติ มีใครอีกนอกจากเขาที่สามารถอธิบายได้ว่าทำไมพวกเขาถึงคิดริเริ่มนี้ ไม่ว่าพวกเขาจะประสบความสำเร็จหรือไม่ และเสียใจกับเวลาที่ใช้ไปหรือไม่? มอบพื้นให้เขา:

— ในปี 2016 เราได้เขียนเฟรมเวิร์กใหม่สำหรับการทดสอบอัตโนมัติและทำให้ง่ายต่อการเขียนการทดสอบ: มีขั้นตอนปกติปรากฏ โครงสร้างก็เข้าใจได้ง่ายขึ้นมาก เรามีแนวคิด: เราต้องให้ทุกคนที่ต้องการเขียนแบบทดสอบใหม่มีส่วนร่วม และเพื่อให้เข้าใจง่ายขึ้น เราจึงสร้างชุดการบรรยายขึ้นมา เราร่วมกันจัดทำแผนหัวข้อต่างๆ อาจารย์ในอนาคตแต่ละคนได้จัดทำแผนสำหรับตนเองและจัดทำรายงานเกี่ยวกับหัวข้อนั้น

— นักเรียนมีปัญหาอะไรบ้าง?

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

– โรงเรียนได้ผลตอบแทนหรือไม่?

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

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

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

เคล็ดลับการจัด

โรงเรียนมีประโยชน์ แต่ตามที่ Stas ยอมรับ มีปัญหาบางประการด้วยเหตุนี้จึงจำเป็นต้องจัดให้มีการบรรยายเพิ่มเติม และในฐานะนักเรียนเมื่อเร็ว ๆ นี้เปรียบเทียบตัวเองกับความไม่รู้กับตัวฉันเองในตอนนี้ ฉันได้กำหนดขั้นตอนต่อไปนี้เพื่อสร้างวิธีที่เหมาะในการสอนผู้ทดสอบให้เข้าใจการทดสอบอัตโนมัติ

ขั้นตอนที่ 0 สร้างพจนานุกรม

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

กลับสู่โรงเรียน: วิธีฝึกผู้ทดสอบด้วยตนเองให้รับมือกับการทดสอบอัตโนมัติ

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

กลับสู่โรงเรียน: วิธีฝึกผู้ทดสอบด้วยตนเองให้รับมือกับการทดสอบอัตโนมัติ

(สปอยเลอร์ - งานจะถูกลบผ่านการพักในนามของผู้ดูแลระบบ จากนั้นเราจะเห็นว่ามีบันทึกเรื่องนี้ในสตรีม)

ขั้นตอนนี้เพียงอย่างเดียวจะทำให้ภาษา QAA และ QA มีความใกล้ชิดกันมากขึ้น ทีมระบบอัตโนมัติจะอธิบายผลลัพธ์ของการดำเนินการได้ง่ายกว่า ผู้ทดสอบด้วยตนเองต้องใช้ความพยายามน้อยลงในการสร้างเคส เนื่องจากอาจทำให้มีรายละเอียดน้อยลง แต่ทุกคนก็เข้าใจกัน เราได้รับชัยชนะก่อนการฝึกซ้อมจริงจะเริ่มขึ้นด้วยซ้ำ

ขั้นตอนที่ 1 ทำซ้ำวลี

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

ในบทเรียนแรก ควรให้พื้นฐานเกี่ยวกับวิธีการเขียนการทดสอบอัตโนมัติโดยตรง เราช่วยตั้งค่าสภาพแวดล้อมการพัฒนา (ในกรณีของฉัน Intellij IDEA) อธิบายกฎภาษาขั้นต่ำที่จำเป็นในการเขียนวิธีอื่นในชั้นเรียนที่มีอยู่โดยใช้ขั้นตอนที่มีอยู่ เราเขียนการทดสอบหนึ่งหรือสองครั้งกับพวกเขาและให้พวกเขาทำการบ้าน ซึ่งฉันจะจัดรูปแบบดังนี้: สาขาที่แยกออกจากต้นแบบ แต่มีการทดสอบหลายรายการถูกลบออกไป เหลือเพียงคำอธิบายเท่านั้น เราขอให้ผู้ทดสอบกู้คืนการทดสอบเหล่านี้ (ไม่ใช่ผ่าน show diff แน่นอน)

ผลก็คือผู้ที่ฟังและทำทุกอย่างจะสามารถ:

  1. เรียนรู้การทำงานกับอินเทอร์เฟซสภาพแวดล้อมการพัฒนา: การสร้างสาขา ปุ่มลัด คอมมิตและพุช
  2. เชี่ยวชาญพื้นฐานของโครงสร้างของภาษาและคลาส: ตำแหน่งที่จะแทรกการฉีดและตำแหน่งที่จะนำเข้า เหตุใดจึงต้องมีคำอธิบายประกอบ และพบสัญลักษณ์ประเภทใดที่นั่น นอกเหนือจากขั้นตอนต่างๆ
  3. เข้าใจความแตกต่างระหว่างการกระทำ รอและตรวจสอบ จะใช้อะไรที่ไหน
  4. สังเกตเห็นความแตกต่างระหว่างการทดสอบอัตโนมัติและการตรวจสอบด้วยตนเอง: ในการทดสอบอัตโนมัติ คุณสามารถดึงตัวจัดการอย่างน้อยหนึ่งตัวแทนการดำเนินการผ่านอินเทอร์เฟซ ตัวอย่างเช่น ส่งความคิดเห็นโดยตรงไปยังแบ็กเอนด์แทนที่จะเปิดมุมมองงาน เลือกอินพุต พิมพ์ข้อความ และคลิกปุ่มส่ง
  5. กำหนดคำถามที่จะตอบในขั้นตอนต่อไป

จุดสุดท้ายมีความสำคัญมาก สามารถให้คำตอบเหล่านี้ล่วงหน้าได้ง่าย แต่หลักธรรมการสอนที่สำคัญคือคำตอบที่ไม่มีคำถามที่เรียบเรียงไว้จะไม่จดจำและจะไม่นำไปใช้เมื่อจำเป็นในที่สุด

คงจะดีมากถ้าในเวลานี้วิศวกรระบบอัตโนมัติจากทีม QA มอบหมายงานให้เขาเขียนการทดสอบสองสามรายการในการรบ และอนุญาตให้เขาส่งคำสั่งย่อยไปที่สาขาของเขา

สิ่งที่ไม่ควรให้:

  1. ความรู้เชิงลึกเพิ่มเติมเกี่ยวกับการทำงานของสภาพแวดล้อมการพัฒนาและภาษาการเขียนโปรแกรมซึ่งจำเป็นเฉพาะเมื่อทำงานกับสาขาอย่างอิสระเท่านั้น มันจะไม่ถูกจดจำ คุณจะต้องอธิบายสองหรือสามครั้ง แต่เราให้ความสำคัญกับเวลาของวิศวกรระบบอัตโนมัติใช่ไหม? ตัวอย่าง: การแก้ไขข้อขัดแย้ง การเพิ่มไฟล์ลงใน git การสร้างคลาสตั้งแต่ต้น การทำงานกับการอ้างอิง
  2. ทุกอย่างที่เกี่ยวข้องกับ xpath อย่างจริงจัง. คุณต้องพูดถึงมันแยกกัน ครั้งเดียว และเข้มข้นมาก

ขั้นตอนที่ 2 พิจารณาไวยากรณ์ให้ละเอียดยิ่งขึ้น

จำภาพหน้าจอมุมมองงานจากขั้นตอนที่ #0 กัน เรามีขั้นตอนที่เรียกว่า checkCommentWithTextExists ผู้ทดสอบของเราเข้าใจแล้วว่าขั้นตอนนี้ทำอะไรได้บ้าง และเราสามารถดูภายในขั้นตอนและแยกย่อยได้เล็กน้อย

และภายในเรามีดังต่อไปนี้:

onCommentBlock(userName).comment(expectedText).should(displayed());

onCommentBlock อยู่ที่ไหน

onCommonStreamPanel().commentBlock(userName);

ตอนนี้เราเรียนรู้ที่จะไม่ "ซื้อของเล่น" แต่ "ซื้อของเล่นจากร้าน Detsky Mir ซึ่งอยู่ในตู้สีน้ำเงินบนชั้นสามจากด้านบน" มีความจำเป็นต้องอธิบายว่าเราชี้ไปที่องค์ประกอบตามลำดับ จากองค์ประกอบที่มีขนาดใหญ่กว่า (สตรีม -> บล็อกที่มีความคิดเห็นจากบุคคลใดบุคคลหนึ่ง -> ส่วนหนึ่งของบล็อกนี้ซึ่งมีข้อความที่ระบุอยู่)

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

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

นอกจากนี้ หากทีมทดสอบไม่เพียงแต่มีฟีเจอร์ใหม่ๆ ในการทำงาน แต่ยังมีการแก้ไขข้อบกพร่องบางประการ คุณสามารถขอให้เขาเขียนการทดสอบสำหรับข้อบกพร่องเหล่านี้และเผยแพร่ได้ทันที เป็นไปได้มากว่าองค์ประกอบทั้งหมดได้รับการอธิบายแล้ว อาจขาดหายไปเพียง 2-3 ขั้นตอน นี่จะเป็นการออกกำลังกายที่สมบูรณ์แบบ

ขั้นตอนที่ 3 แช่เต็มรูปแบบ

ให้สมบูรณ์ที่สุดเท่าที่จะเป็นไปได้สำหรับผู้ทดสอบที่จะปฏิบัติหน้าที่โดยตรงต่อไป สุดท้ายนี้ เราต้องพูดถึง xpath

ขั้นแรก ให้เราอธิบายให้ชัดเจนว่า onCommentBlock และความคิดเห็นทั้งหมดเหล่านี้อธิบายโดยพวกเขา

กลับสู่โรงเรียน: วิธีฝึกผู้ทดสอบด้วยตนเองให้รับมือกับการทดสอบอัตโนมัติ

รวม:

"//div[contains(@class, ‘stream-panel’)]//a[contains(@class,'author') and text()='{{ userName }}’]//div[contains(@class,'change-wrapper') and contains(.,'{{ text }}’)]"

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

จะต้องระบุอย่างชัดเจนว่าองค์ประกอบเดียวคือมุมมองงานทั้งหมด โดยมีองค์ประกอบลูก - สตรีมทั้งหมด ซึ่งมีองค์ประกอบลูก - ความคิดเห็นแยกต่างหาก ฯลฯ องค์ประกอบลูกอยู่ภายในองค์ประกอบหลักทั้งบนหน้าและในโครงสร้างของกรอบการทดสอบอัตโนมัติ

ณ จุดนี้ ผู้ชมควรเข้าใจอย่างถ่องแท้ว่าพวกเขาได้รับการสืบทอดมาอย่างไร และสิ่งที่สามารถป้อนหลังจุดที่ onCommentBlock ได้ ณ จุดนี้ เราจะอธิบายตัวดำเนินการทั้งหมด: /, //, ., [] และอื่นๆ เราเพิ่มความรู้เกี่ยวกับการใช้งานลงในการโหลด @class และสิ่งจำเป็นอื่น ๆ

กลับสู่โรงเรียน: วิธีฝึกผู้ทดสอบด้วยตนเองให้รับมือกับการทดสอบอัตโนมัติ

นักเรียนควรเข้าใจวิธีการแปล xpath ด้วยวิธีนี้ เพื่อรวม - ถูกต้องทำการบ้าน เราลบคำอธิบายขององค์ประกอบ ปล่อยให้พวกเขาคืนค่าการทำงานของการทดสอบ

ทำไมเส้นทางนี้โดยเฉพาะ?

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

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

ที่มา: will.com

เพิ่มความคิดเห็น