Tôi đang viết một bộ thử nghiệm cho một webapp bằng TestNG và Selenium WebDriver.TestNG Chạy tất cả các phương thức lớp nhiều lần sơ bộ làm @BeforeClass với dữ liệu được cung cấp
Điều tôi cần là chạy tất cả các phương thức của lớp thử nghiệm nhiều lần cho những người dùng được xác thực khác nhau (dữ liệu được rút ra khi chạy: từ một DB). Vì vậy, tôi cần chuyển dữ liệu đến lớp với nhà cung cấp dữ liệu, cung cấp thông tin đăng nhập của tất cả người dùng, sau đó cho mỗi người dùng tôi cần tạo trình điều khiển web (cho độ tinh khiết của thử nghiệm) và xác thực bằng thông tin được cung cấp theo phương thức @BeforeClass
tất cả các phương thức của @Test
của lớp và tạo trình điều khiển web đóng xuống @AfterClass
.
Tôi có thể làm điều đó bằng cách nào?
nỗ lực của tôi để làm điều này đang ở đây: https://gist.github.com/4246674
Attempt1 là để đặt một @Test(dataProvider="getUsersIdAndName")
trên lớp. Nó không hoạt động vì vì nó bật ra @Test(dataProvider=)
trên lớp không có nghĩa là tất cả các phương thức của lớp nên được gọi với dữ liệu được cung cấp. Kết quả là phương thức đó không được viện dẫn chút nào bởi vì không có dữ liệu để truyền cho đối số. Và tôi nhận được báo cáo thử nghiệm lạ, nơi phương pháp này được đánh dấu là thông qua với thời gian thực hiện là 0 giây. (Đây là một dự án Maven được mở trong NetBeans, nếu điều này có ý nghĩa.)
Có @Test(dataProvider=)
trên lớp nghĩa là gì không?
Attempt2 đã thêm dataProvider trên chú thích @Test
của phương thức. Nó không hoạt động vì điều này có nghĩa là phương thức thử nghiệm được gọi hai lần trong khi chạy lớp đơn. Kết quả là ở lần thứ hai nó không thành công vì nó cố gắng lặp lại thử nghiệm trong khi trình điều khiển web không được khởi động lại: trình duyệt đã hiển thị một trang khác. Ngoài ra còn có những bất lợi của nỗ lực đầu tiên và thứ hai đăng nhập chính nó được thực hiện trong phương pháp thử nghiệm hơn là trong phương pháp @BeforeClass
bởi vì tôi không biết cách cung cấp dữ liệu từ nhà cung cấp dữ liệu.
Cố gắng3 là một nỗ lực tuyệt vọng để kết hợp @BeforeClass
và @Test
trên phương thức duy nhất. Nó không hoạt động vì @BeforeClass
cũng yêu cầu @Parameters
nếu một phương thức chú thích có danh sách tham số. Kết quả là phương thức này được gọi ba lần: lần đầu tiên khi thiết lập lớp khi nó không thành công vì lý do trên và hai lần vì nhà cung cấp dữ liệu khi nó thành công.
Sau đó, tôi phát hiện ra rằng TestNG không cung cấp một cách để gọi tất cả các phương thức lớp nhiều lần với các dữ liệu khác nhau: http://comments.gmane.org/gmane.comp.java.testng.user/864
Tôi có hai ý tưởng khác làm thế nào tôi có thể lưu trữ các tác dụng tương tự.
Idea4 là đặt @Test(dataProvider=)
trên mỗi phương pháp thử nghiệm, mỗi phương pháp sẽ tự thực hiện xác thực và thử nghiệm isAuthenticated()
và sau đó thực hiện kiểm tra riêng của nó. Không hiệu quả và xấu xí. Idea2 trông giống như giá cả phải chăng nhất là đánh dấu bằng @Test
chỉ một phương pháp sẽ tổng hợp tất cả các phương pháp thử khác: nó nhận dữ liệu từ nhà cung cấp dữ liệu, thực hiện xác thực bởi người dùng đã cho, sau đó chạy thử nghiệm isAuthenticated và tất cả những thứ cần thiết khác kiểm tra.Trong trường hợp này, @BeforeClass
và @AfterClass
chỉ thiết lập và xé trình điều khiển web. Cách tiếp cận này có bất lợi mà tôi mất khả năng sử dụng @BeforeMethod
và @AfterMethod
nhưng điều này là giá cả phải chăng với tôi: có vẻ như tôi sẽ không cần chúng.
Có cách nào tốt hơn để lưu trữ cùng một hiệu ứng không?
Xin lỗi vì có tin nhắn dài.
Xin cảm ơn trước.
Cảm ơn. Được quản lý để thực hiện chính xác những gì tôi muốn. Đặt chú thích '@ Factory' trên hàm tạo và làm cho nó nhận dữ liệu từ nhà cung cấp dữ liệu. Mỗi thể hiện của lớp kiểm tra bây giờ đại diện cho một trình điều khiển web đăng nhập như một số người dùng đang thực hiện một loạt các thử nghiệm. Constructor tải các thuộc tính và lưu trữ các thông tin xác thực người dùng được chỉ định trong các trường lớp. Phương thức '@ BeforeClass' khởi tạo trình điều khiển web và đăng nhập bằng thông tin đăng nhập được lưu trữ. '@ AfterClass' đóng trình điều khiển web. Nếu bất cứ ai quan tâm, mã đầy đủ là ở đây. – yaromir