2017-07-31 99 views
14

Ben Android'de Test Kırma işleminde deneme ve ben oldukça garip sonuçlar alıyorum:Android garip test Kırma işlemi

+ adb -s emulator-5580 shell am instrument -e numShards 2 -e shardIndex 0 -e class com.package.etc.automation.Tests.SanityTest.SanityTest -w com.package.etc.test/android.support.test.runner.AndroidJUnitRunner 

com.package.etc.automation.Tests.SanityTest.SanityTest:.......... 

Time: 306.578 

OK (10 tests) 


+ adb -s emulator-5582 shell am instrument -e numShards 2 -e shardIndex 1 -e class com.package.etc.automation.Tests.SanityTest.SanityTest -w com.package.etc.test/android.support.test.runner.AndroidJUnitRunner 

com.package.etc.automation.Tests.SanityTest.SanityTest:...................... 

Time: 645.723 

OK (22 tests) 

Gördüğünüz gibi, adb iki dengesiz gruba testleri ayrıldı. İkincisi, ilk olanın iki katı kadar test yapar ve iki kat daha uzun sürer. Bana sorarsan en iyi paralellik değil.

Testlerin dağılımını kontrol etmek veya testleri eşit olarak bölmek için en azından zorlamak için bir olasılık var mıdır?

cevap

5

Bunu izleyelim.

Test paketi started olduğunda, TestRequestBuilder, JUnit Filters üzerine kurulmuştur. ShardingFilter bunlardan biri ve is added. Ekleme, daha önce Filter eklenen "intersected" yeni tek yöntemle public boolean shouldRun(Description description) çağrılır anlamına gelir. Bu parçaya o daha muhtemel, bakarsan:

if (description.isTest()) { 
    return (Math.abs(description.hashCode()) % mNumShards) == mShardIndex; 
} 

Ve numaralar (numShards=2) ile ikame, bu sadece bir parite testi olduğunu fark edeceksiniz. İstatistiksel olarak, HashCode parite dağılımının% 50 olmadığı ortaya çıkabilir. Ayrıca, test sınıfınızdaki bazı testler dikkate alınmadığında, devre dışı bırakılmış ve etkinleştirilmiş testlerle iç içe geçtiğinde, özel yöntem hashcode (Junit Description yöntem ve sınıf adından üretilir) daha da rahatsız edebilirsiniz. Bu, yalnızca istatistik meselesidir. Eğer this answer görebileceğiniz gibi: gruplar ayrılır Nasıl

+0

Güzel açılan efendim keyfidir. – azizbekian