2015-07-20 56 views
6

Tôi có một thử nghiệm duy nhất nhận dữ liệu từ nhà cung cấp dữ liệu. Tôi muốn thử nghiệm này chạy song song với các giá trị khác nhau từ nhà cung cấp dữ liệu.Thực hiện song song TestNG với DataProvider

tôi đã cố gắng một cách tiếp cận như:

public class IndependentTest 
{ 
@Test(dataProvider = "dp1" ,threadPoolSize=3,invocationCount=1) 

public void testMethod(int number) 
{ 
    Long id = Thread.currentThread().getId(); 
    System.out.println("HELLO : " + id); 
} 


@DataProvider(name = "dp1",parallel=true) 
public Object[][] dp1() { 
    return new Object[][] { 
     new Object[] { 1 }, 
     new Object[] { 2 }, 
     new Object[] { 3 }, 
     new Object[] { 4 }, 
     new Object[] { 5 }, 
     new Object[] { 6 }, 
     new Object[] { 7 }, 
     new Object[] { 8 } 

    }; 
} 

}

Kết quả tôi nhận được là:

Xin chào: 10

Xin chào: 12

Xin chào: 17

Xin chào: 11

Xin chào: 16

Xin chào: 14

Xin chào: 13

Xin chào: 15

Sinh ra 10 chủ đề trong khi tôi định 5 trong kích thước hồ bơi thread. Bạn có thể vui lòng cho biết những gì phải được thêm vào đoạn mã trên để kiểm soát kích thước nhóm của nhà cung cấp dữ liệu hay không.

+0

Bạn sẽ muốn chạy thử nghiệm song song, không phải là nhà cung cấp. Trong xây dựng của bạn cấu hình các chế độ song song cho 'methods' và 'threadCount' đến 5. –

+0

hi Ben, Tôi có một bài kiểm tra duy nhất mà là nghĩa vụ phải chạy hơn 10k lần dựa trên số lượng các giá trị được cung cấp bởi các nhà cung cấp dữ liệu. Tôi muốn kiểm soát số lượng các chủ đề sinh ra khi song song = true được đặt trong dataprovider. Tôi đã tìm thấy đối số dòng lệnh -dataproviderthreadcount này để kiểm soát số đếm luồng dataprovider. Tuy nhiên tôi muốn biết làm thế nào điều này có thể được thực hiện bằng chú thích – sujith

+0

Trong dự án của tôi [xây dựng] (https://github.com/ben-manes/caffeine/blob/master/caffeine/testing.gradle) Tôi cấu hình các xét nghiệm để chạy song song và tổng cộng, thực thi 1.8M do các nhà cung cấp dữ liệu trên 827 phương pháp thử nghiệm. Tôi không nghĩ rằng bạn có thể cấu hình điều này bằng các chú thích và thay vào đó một cấu hình của nó được chuyển vào nhân vật. –

Trả lời

6

Bạn cần phải sử dụng dataproviderthreadcount. threadpoolsize và invocationcount là không bắt buộc.

+0

hi Niharika, Sử dụng dataproviderthreadcount giải quyết vấn đề của tôi. Tuy nhiên tôi có thể thiết lập này chỉ là đối số dòng cmd. Có cách nào để vượt qua cùng ở mức chú thích không? – sujith

+1

Không. Không có cách nào từ cấp độ chú thích. –

+0

cảm ơn bạn đã xóa rằng không có cách nào để cung cấp điều này ở cấp chú thích. Điều này có nghĩa là tất cả các thử nghiệm sử dụng bất kỳ dataprovider nào sẽ sử dụng số lượng kiểm tra được chỉ định bằng cách sử dụng dataproviderthreadcount? Có thể kiểm soát số lượng luồng dựa trên thử nghiệm thay vì cho phép tất cả các thử nghiệm sử dụng nhiều luồng không? – sujith

-1

Hiện tại chỉ có một chuỗi được sử dụng khi bạn đã xác định invocationCount làm 1, nếu bạn thay đổi thành 3 thì ba chuỗi công nhân sẽ được sử dụng.

invocationCount: - Số lần phương pháp này nên được gọi.

threadPoolSize: - Kích thước của nhóm chủ đề cho phương pháp này. Phương thức này sẽ được gọi từ nhiều luồng được chỉ định bởi invocationCount. Lưu ý: thuộc tính này bị bỏ qua nếu invocationCount không được chỉ định.

Ngoài ra,

Bạn cũng có thể xác định rằng một phương pháp @Test nên được gọi từ chủ đề khác nhau. Bạn có thể sử dụng thuộc tính threadPoolSize để đạt được kết quả này:

@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000) 
public void testServer() { 

Trong ví dụ này, hàm Tuyên chiến sẽ được gọi gấp mười lần từ ba chủ đề khác nhau. Ngoài ra, thời gian chờ trong mười giây đảm bảo rằng không có chủ đề nào sẽ chặn trên chuỗi này mãi mãi.

Thông tin thêm có thể được tìm thấy here

+0

Hi, tôi đã cố gắng tiếp cận đó, nhưng câu hỏi của tôi là liên quan đến đặc biệt thực hiện song song với nhà cung cấp dữ liệu. Tôi đang cố gắng chạy thử nghiệm parallelly bằng cách sử dụng dataprovider. Việc chỉ định số lần gọi là 3 trong trường hợp này sẽ dẫn đến phương thức được gọi 10 lần cho mỗi đầu vào từ nhà cung cấp dữ liệu chiếm 8 * 3 = 24 lần chạy. – sujith

+0

nhà cung cấp dữ liệu sẽ không giúp đỡ trong việc điều hành nó song song .. đó là một cách để mô tả đầu vào của bạn mà gọi kiểm tra you'er 1 của 1 sử dụng những nguyên liệu đầu vào - IMHO – TheCodingFrog

+0

Hi, dataproviderthreadcount thể được sử dụng để mô phỏng thực hiện song song của phương pháp thử nghiệm duy nhất với các cá thể dữ liệu đến từ dataprovider. Nhóm chủ đề của nhà cung cấp dữ liệu khác với nhóm chủ đề thử nghiệm trong testng. Tuy nhiên dataproviderthreadcount được chỉ định như là một đối số dòng cmd. Tôi muốn biết liệu có thể chỉ định điều này ở cấp chú thích hay không. – sujith

1

Trong testng.xml bạn có thể thiết lập số lượng thread cho dataprovider qua data-provider-thread-count="3"

<suite name="Manage" data-provider-thread-count="3" > 
    <test name="Manage data tests"> 
     <classes> 
      <class name="uk.example.ExampleTest"></class> 
     </classes> 
    </test> 
</suite> 
0

Cố gắng thiết lập các hồ bơi thread theo cách sau:

@BeforeClass 
public void setupClassName(ITestContext context) { 
    context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5); 
    context.getCurrentXmlTest().getSuite().setPreserveOrder(false); 
} 
Các vấn đề liên quan