(Açık kaynaklı) hobi projelerimden biri, GitHub, Bitbucket vb. Kaynaklardan çevrimdışı yedeklemeler yapan bir yedekleme aracıdır. Depoların
bir listesini almak için ana bilgisayar API'sını çağırır ve sonra Git / Mercurial / klonlamak için her şeyi kullanır / depoları yerel bilgisayara çekin.
Bu yüzden GitHub API'sını aradığım kimlik doğrulama ile entegrasyon testlerim var.
(ve klonlama / çekme özelliği bittiğinde, muhtemelen GitHub'daki depoları klonlayan ve aynı zamanda kimlik doğrulaması gereken testler olacaktır)
Özellikle bu entegrasyon testlerinde kullanılmak üzere bir kullanıcı ve kuruluş oluşturdum .
Sorun: Açık kod olduğu ve kod GitHub'da herkese açık olduğu için kaynak kodun herhangi bir yerinde şifreleri kodlayamıyorum.
Şimdi ne yapıyorum
Testlerde, ortam değişkenlerinden tüm kullanıcı adlarını, şifreleri ve depo adlarını alıyorum.
İşte bir örnek :
config.Name = TestHelper.EnvVar("GithubApiTests_Name");
config.Password = TestHelper.EnvVar("GithubApiTests_PW");
( TestHelper.EnvVar
ortam değişkeninin değerini alan ve mevcut olmadığında istisna atan bir yardımcı yöntemdir)
Sonra, bu ortam değişkenlerini ayarlar bir toplu iş dosyası var. Yapı komut dosyamda ve testleri yürütmeden önce
gerçek olan ( environment-variables.bat
) çağrılır, ancak kaynak kontrolünde yok sayılır, bu yüzden aslında depomda değildir.
Ne olduğunu kaynak denetimi olduğunu içinde environment-variables.bat.sample
ama sahte şifreleri ile aynı ortam değişkenlerini ayarlar:
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
Bu yüzden havuzu makineme kopyalayabilir, bu dosyayı yeniden adlandırabilir environment-variables.bat
, sahte şifreyi gerçek olanla değiştirebilirim ve tüm entegrasyon testleri işe yarayacaktır.
Bu, Sürekli Entegrasyon ile de çalışır - AppVeyor kullanıyorum ve bu ortam değişkenlerini web arayüzünde ayarlayabilirim .
Bu konuda sevmediğim şey
Bence bu bir OSS projesi için iyi bir çözüm değil, özellikle bu proje için değil :
Teorik olarak, projeme katkıda bulunan bir kişi şu anda entegrasyon testlerini şu şekilde yapabilir:
- GitHub'da kendi test kullanıcısını ve test organizasyonunu oluşturma
- bazı test havuzları oluşturma
environment-variables.bat
farklı değerlerle kendi versiyonunu yaratmak
Sorun, uygulamamın birden çok kaynak kodu barındırıcısını yedekleyebilmesidir.
Şu anda, yalnızca GitHub'ı destekliyor, ancak doğru arabirimleri uygulayan birkaç sınıf ekleyerek daha fazla sunucu için destek eklemek kolay olacak.
Daha sonra daha fazla ana bilgisayar için destek uyguladığımda, ortam değişkenlerinin sayısı artacaktır. Tüm entegrasyon testlerini
yürütebilmek için , potansiyel bir katılımcı GitHub, Bitbucket, GitLab, .... 'da kendi kullanıcılarını, kuruluşlarını ve test havuzlarını oluşturacak ve daha fazlasını kimin bileceğini ve hepsini sürümüne ekleyecektir . environment-variables.bat
Kodun halka açık olduğu bir projede bunu nasıl yapacağınız daha iyi bir çözüm var mı?
Diğer projelerin şu an yaptığım gibi bir şey yaptığını biliyorum.
Octokit.net , örneğin, sahip bir komut dosyası için kurulum ortam değişkenleri GitHub API aradığınız entegrasyon testleri için.
Ama sadece bir kullanıcıya ve bir organizasyona ihtiyaçları var ve daha fazlasına ihtiyacım olacak.
Belki bir katılımcının tüm entegrasyon testlerini gerçekten çalıştırabilmesini sağlayan bir çözüme ihtiyacım yok .
Örneğin, birisi projemin GitHub desteğine katkıda bulunmak isterse, yalnızca GitHub entegrasyon testlerini yapabilmesi gerekir.
Belki de entegrasyon testlerimi sonsuz sayıda "gruba" (?) Bölebilmem ve daha sonra "ve şimdi 'Github' grubuna ait olan tüm testleri gerçekleştirebilmem" için aklı başında bir yola ihtiyacım var.