หนึ่งในโปรเจ็กต์อดิเรก (โอเพ่นซอร์ส) ของฉันคือเครื่องมือสำรองซึ่งทำให้การสำรองข้อมูลออฟไลน์ของที่เก็บจาก GitHub, Bitbucket เป็นต้น
มันเรียก API ของ hosters เพื่อรับรายการที่เก็บข้อมูล ดึงที่เก็บไปยังเครื่องคอมพิวเตอร์
ดังนั้นฉันจึงมีการทดสอบการรวมที่ฉันเรียก GitHub API ด้วยการตรวจสอบ
(และเมื่อคุณสมบัติการโคลน / ดึงเสร็จอาจมีการทดสอบว่าที่เก็บโคลนจาก GitHub และต้องรับรองความถูกต้องด้วย)
ฉันสร้างผู้ใช้และองค์กรโดยเฉพาะสำหรับใช้ในการทดสอบการรวมกลุ่มเหล่านี้
ปัญหา: ฉันไม่สามารถเข้ารหัสรหัสผ่านที่ยากที่ไหนสักแห่งในซอร์สโค้ดได้เนื่องจากเป็นโอเพ่นซอร์สและรหัสนั้นเป็นสาธารณะใน GitHub
สิ่งที่ฉันทำตอนนี้
ในการทดสอบฉันได้รับชื่อผู้ใช้รหัสผ่านและชื่อที่เก็บจากตัวแปรสภาพแวดล้อมทั้งหมด
นี่คือตัวอย่าง :
config.Name = TestHelper.EnvVar("GithubApiTests_Name");
config.Password = TestHelper.EnvVar("GithubApiTests_PW");
( TestHelper.EnvVar
เป็นวิธีตัวช่วยซึ่งรับค่าของตัวแปรสภาพแวดล้อมและส่งข้อยกเว้นเมื่อไม่มีอยู่)
จากนั้นฉันมีไฟล์แบตช์ซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเหล่านั้น
ตัวจริง ( environment-variables.bat
) เรียกในสคริปต์สร้างของฉันและก่อนที่จะดำเนินการทดสอบ แต่ละเว้นในการควบคุมแหล่งที่มาดังนั้นจึงไม่ได้อยู่ในที่เก็บจริงของฉัน
สิ่งที่อยู่ในการควบคุมแหล่งที่มาenvironment-variables.bat.sample
ซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเดียวกัน แต่ใช้รหัสผ่านปลอม:
rem copy/rename this file to environment-variables.bat
echo Setting environment variables for integration tests...
set GithubApiTests_Name=scm-backup-testuser
set GithubApiTests_OrgName=scm-backup-testorg
set GithubApiTests_PW=not-the-real-password
set GithubApiTests_Repo=scm-backup
ดังนั้นฉันสามารถโคลนที่เก็บไปยังเครื่องของฉันเปลี่ยนชื่อไฟล์นี้เพื่อenvironment-variables.bat
แทนที่รหัสผ่านปลอมด้วยรหัสจริงและการทดสอบการรวมทั้งหมดจะทำงาน
สิ่งนี้ใช้ได้กับการรวมอย่างต่อเนื่องเช่นกัน - ฉันใช้ AppVeyor และฉันสามารถตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ในเว็บ UIได้
สิ่งที่ฉันไม่ชอบเกี่ยวกับมัน
ฉันคิดว่ามันไม่ใช่ทางออกที่ดีสำหรับโครงการ OSS และโดยเฉพาะอย่างยิ่งไม่ใช่สำหรับโครงการนี้ :
ในทางทฤษฎีผู้มีส่วนร่วมในโครงการของฉันจะสามารถทำการทดสอบการรวมได้ในขณะนี้โดย:
- สร้างผู้ใช้ทดสอบและองค์กรทดสอบของเขาเองบน GitHub
- สร้างที่เก็บข้อมูลทดสอบ
- การสร้างเวอร์ชันของเขาเอง
environment-variables.bat
ด้วยค่าที่ต่างกัน
ปัญหาคือแอปพลิเคชันของฉันจะสามารถสำรองข้อมูล hosters หลายรหัส
ตอนนี้รองรับ GitHub เท่านั้น แต่มันจะง่ายต่อการเพิ่มการสนับสนุนสำหรับ hosters มากขึ้นโดยการเพิ่มคลาสไม่กี่คลาสที่ใช้อินเตอร์เฟสที่เหมาะสม
ดังนั้นเมื่อฉันใช้การสนับสนุน hosters เพิ่มเติมในภายหลังจำนวนของตัวแปรสภาพแวดล้อมจะเพิ่มขึ้น
เพื่อให้สามารถดำเนินการทุกการทดสอบบูรณาการการมีส่วนร่วมที่มีศักยภาพที่จะสร้างผู้ใช้เององค์กรและเก็บการทดสอบของเขาที่ GitHub, Bitbucket, GitLab, .... และผู้ที่รู้มากขึ้นหลายวิธีและเพิ่มทั้งหมดของพวกเขาเพื่อเขาenvironment-variables.bat
รุ่น
มีวิธีแก้ปัญหาที่ดีกว่าในโครงการที่เป็นรหัสสาธารณะหรือไม่?
ฉันรู้ว่าโครงการอื่นทำสิ่งที่คล้ายกับที่ฉันกำลังทำอยู่ ตัวอย่างเช่น
Octokit.netมีสคริปต์สำหรับตั้งค่าตัวแปรสภาพแวดล้อมสำหรับการทดสอบการรวมระบบที่เรียก GitHub API
แต่พวกเขาต้องการเพียงหนึ่งผู้ใช้และหนึ่งองค์กรและฉันจะต้องการมากขึ้น
บางทีฉันอาจไม่ต้องการโซลูชันที่ช่วยให้ผู้มีส่วนร่วมทำการทดสอบการรวมระบบทั้งหมดได้
ตัวอย่างเช่นหากมีคนต้องการมีส่วนร่วมในการสนับสนุน GitHub ของโครงการของฉันเขาจะต้องสามารถทำการทดสอบการรวม GitHub เท่านั้น
ดังนั้นบางทีฉันอาจต้องใช้วิธีที่มีสติเพื่อแบ่งการทดสอบการรวมกลุ่มของฉันออกเป็นจำนวนอนันต์ของ "กลุ่ม" (?) แล้วพูดว่า "และตอนนี้ทำการทดสอบทั้งหมดซึ่งเป็นของกลุ่ม 'Github'"