2017-07-31 98 views
14

我與Android設備上測試分片試驗和我得到很奇怪的結果:Android的怪異測試分片

+ 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) 

正如你可以看到,亞洲開發銀行拆分測試分爲兩個不平組。第二個測試的測試次數是第一次測試的兩倍,並執行兩次。如果你問我,不是最好的平行。

是否有可能控制測試的分佈,或者至少強制adb均勻分割測試?

回答

5

讓我們來追溯它。

當測試套件是started時,TestRequestBuilder建立在JUnit Filters上。 ShardingFilter就是其中之一,is added。添加它意味着之前添加的Filter"intersected",新的一個 - 調用方法public boolean shouldRun(Description description)。如果你看它,更可能在這個片段:

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

並與你的號碼(numShards=2)代替,你會發現,這僅僅是一個奇偶校驗測試。統計上可能會發生,生成的HashCode奇偶分佈不是50%。此外,當您的測試課程中的某些測試被忽略,禁用並且與啓用的測試交織在一起時,您甚至可能更多地干擾特定方法hashcodeJunit DescriptionuniqueId從方法和類名生成)。

這只是統計問題。正如你可能在this answer看到:

怎樣的羣體劃分爲任意

+0

尼斯下拉菜單,先生。 – azizbekian